diff --git a/RELEASE_NOTES.txt b/RELEASE_NOTES.txt
index 52214a5..18f7d0e 100644
--- a/RELEASE_NOTES.txt
+++ b/RELEASE_NOTES.txt
@@ -1,3 +1,13 @@
+==== 1.9.4.0 ====
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+] NOTE: Current Release Notes are maintained at:                                                                              [
+]                                                                                                                             [
+] http://devdocs.magento.com/guides/m1x/ce19-ee114/ce1.9_release-notes.html                                                   [
+]                                                                                                                             [
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
 ==== 1.9.3.10 ====
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
diff --git a/app/Mage.php b/app/Mage.php
index 75506fb..99bd4e5 100644
--- a/app/Mage.php
+++ b/app/Mage.php
@@ -53,6 +53,9 @@ if (defined('COMPILER_INCLUDE_PATH')) {
 
 Varien_Autoload::register();
 
+include_once "phpseclib/bootstrap.php";
+include_once "mcryptcompat/mcrypt.php";
+
 /**
  * Main Mage hub class
  *
@@ -170,8 +173,8 @@ final class Mage
         return array(
             'major'     => '1',
             'minor'     => '9',
-            'revision'  => '3',
-            'patch'     => '10',
+            'revision'  => '4',
+            'patch'     => '0',
             'stability' => '',
             'number'    => '',
         );
diff --git a/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Attribute/Edit/Tab/Main.php b/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Attribute/Edit/Tab/Main.php
index 019c995..1e3a8f0 100644
--- a/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Attribute/Edit/Tab/Main.php
+++ b/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Attribute/Edit/Tab/Main.php
@@ -32,7 +32,8 @@
  * @package    Mage_Adminhtml
  * @author     Magento Core Team <core@magentocommerce.com>
  */
-class Mage_Adminhtml_Block_Catalog_Product_Attribute_Edit_Tab_Main extends Mage_Eav_Block_Adminhtml_Attribute_Edit_Main_Abstract
+class Mage_Adminhtml_Block_Catalog_Product_Attribute_Edit_Tab_Main
+    extends Mage_Eav_Block_Adminhtml_Attribute_Edit_Main_Abstract
 {
     /**
      * Adding product form elements for editing attribute
@@ -48,6 +49,17 @@ class Mage_Adminhtml_Block_Catalog_Product_Attribute_Edit_Tab_Main extends Mage_
         /* @var $fieldset Varien_Data_Form_Element_Fieldset */
         $fieldset = $form->getElement('base_fieldset');
 
+        $fieldset->getElements()
+            ->searchById('attribute_code')
+            ->setData(
+                'class',
+                'validate-code-event ' . $fieldset->getElements()->searchById('attribute_code')->getData('class')
+            )->setData(
+                'note',
+                $fieldset->getElements()->searchById('attribute_code')->getData('note')
+                . Mage::helper('eav')->__('. Do not use "event" for an attribute code, it is a reserved keyword.')
+            );
+
         $frontendInputElm = $form->getElement('frontend_input');
         $additionalTypes = array(
             array(
@@ -94,7 +106,10 @@ class Mage_Adminhtml_Block_Catalog_Product_Attribute_Edit_Tab_Main extends Mage_
             Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL =>Mage::helper('catalog')->__('Global'),
         );
 
-        if ($attributeObject->getAttributeCode() == 'status' || $attributeObject->getAttributeCode() == 'tax_class_id') {
+        if (
+            $attributeObject->getAttributeCode() == 'status'
+            || $attributeObject->getAttributeCode() == 'tax_class_id'
+        ) {
             unset($scopes[Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE]);
         }
 
diff --git a/app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php b/app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
index ddef716..8d3c526 100644
--- a/app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
+++ b/app/code/core/Mage/Adminhtml/Block/Customer/Group/Edit.php
@@ -49,6 +49,18 @@ class Mage_Adminhtml_Block_Customer_Group_Edit extends Mage_Adminhtml_Block_Widg
         }
     }
 
+    public function getDeleteUrl()
+    {
+        if (!Mage::getSingleton('adminhtml/url')->useSecretKey()) {
+            return $this->getUrl('*/*/delete', array(
+                $this->_objectId => $this->getRequest()->getParam($this->_objectId),
+                'form_key' => Mage::getSingleton('core/session')->getFormKey()
+            ));
+        } else {
+            parent::getDeleteUrl();
+        }
+    }
+
     public function getHeaderText()
     {
         if(!is_null(Mage::registry('current_group')->getId())) {
diff --git a/app/code/core/Mage/Adminhtml/Block/Newsletter/Template/Edit.php b/app/code/core/Mage/Adminhtml/Block/Newsletter/Template/Edit.php
index 86e5ceb..8283ade 100644
--- a/app/code/core/Mage/Adminhtml/Block/Newsletter/Template/Edit.php
+++ b/app/code/core/Mage/Adminhtml/Block/Newsletter/Template/Edit.php
@@ -275,7 +275,7 @@ class Mage_Adminhtml_Block_Newsletter_Template_Edit extends Mage_Adminhtml_Block
      */
     public function getJsTemplateName()
     {
-        return addcslashes($this->getModel()->getTemplateCode(), "\"\r\n\\");
+        return addcslashes($this->escapeHtml($this->getModel()->getTemplateCode()), "\"\r\n\\");
     }
 
     /**
diff --git a/app/code/core/Mage/Adminhtml/controllers/Catalog/Product/AttributeController.php b/app/code/core/Mage/Adminhtml/controllers/Catalog/Product/AttributeController.php
index 3add466..0510fd9 100644
--- a/app/code/core/Mage/Adminhtml/controllers/Catalog/Product/AttributeController.php
+++ b/app/code/core/Mage/Adminhtml/controllers/Catalog/Product/AttributeController.php
@@ -208,10 +208,10 @@ class Mage_Adminhtml_Catalog_Product_AttributeController extends Mage_Adminhtml_
 
             //validate attribute_code
             if (isset($data['attribute_code'])) {
-                $validatorAttrCode = new Zend_Validate_Regex(array('pattern' => '/^[a-z][a-z_0-9]{1,254}$/'));
+                $validatorAttrCode = new Zend_Validate_Regex(array('pattern' => '/[a-z][a-z_0-9]{1,254}[^event]/'));
                 if (!$validatorAttrCode->isValid($data['attribute_code'])) {
                     $session->addError(
-                        Mage::helper('catalog')->__('Attribute code is invalid. Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.')
+                        Mage::helper('catalog')->__('Attribute code is invalid. Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter. Do not use "event" for an attribute code.')
                     );
                     $this->_redirect('*/*/edit', array('attribute_id' => $id, '_current' => true));
                     return;
diff --git a/app/code/core/Mage/Adminhtml/controllers/Cms/BlockController.php b/app/code/core/Mage/Adminhtml/controllers/Cms/BlockController.php
index f10c2c1..fe56e01 100644
--- a/app/code/core/Mage/Adminhtml/controllers/Cms/BlockController.php
+++ b/app/code/core/Mage/Adminhtml/controllers/Cms/BlockController.php
@@ -35,6 +35,17 @@
 class Mage_Adminhtml_Cms_BlockController extends Mage_Adminhtml_Controller_Action
 {
     /**
+     * Controller predispatch method
+     *
+     * @return Mage_Adminhtml_Controller_Action
+     */
+    public function preDispatch()
+    {
+        $this->_setForcedFormKeyActions('delete');
+        return parent::preDispatch();
+    }
+
+    /**
      * Init actions
      *
      * @return Mage_Adminhtml_Cms_BlockController
diff --git a/app/code/core/Mage/Adminhtml/controllers/Customer/GroupController.php b/app/code/core/Mage/Adminhtml/controllers/Customer/GroupController.php
index f94fd36..7d9177e 100644
--- a/app/code/core/Mage/Adminhtml/controllers/Customer/GroupController.php
+++ b/app/code/core/Mage/Adminhtml/controllers/Customer/GroupController.php
@@ -33,6 +33,17 @@
  */
 class Mage_Adminhtml_Customer_GroupController extends Mage_Adminhtml_Controller_Action
 {
+    /**
+     * Controller predispatch method
+     *
+     * @return Mage_Adminhtml_Controller_Action
+     */
+    public function preDispatch()
+    {
+        $this->_setForcedFormKeyActions('delete');
+        return parent::preDispatch();
+    }
+
     protected function _initGroup()
     {
         $this->_title($this->__('Customers'))->_title($this->__('Customer Groups'));
diff --git a/app/code/core/Mage/Adminhtml/controllers/SitemapController.php b/app/code/core/Mage/Adminhtml/controllers/SitemapController.php
index 8b817fc..4bb55c8 100644
--- a/app/code/core/Mage/Adminhtml/controllers/SitemapController.php
+++ b/app/code/core/Mage/Adminhtml/controllers/SitemapController.php
@@ -34,6 +34,17 @@
 class Mage_Adminhtml_SitemapController extends  Mage_Adminhtml_Controller_Action
 {
     /**
+     * Controller predispatch method
+     *
+     * @return Mage_Adminhtml_Controller_Action
+     */
+    public function preDispatch()
+    {
+        $this->_setForcedFormKeyActions('delete');
+        return parent::preDispatch();
+    }
+
+    /**
      * Init actions
      *
      * @return Mage_Adminhtml_SitemapController
diff --git a/app/code/core/Mage/Adminhtml/controllers/System/BackupController.php b/app/code/core/Mage/Adminhtml/controllers/System/BackupController.php
index 5e05f40..0f2dad0 100644
--- a/app/code/core/Mage/Adminhtml/controllers/System/BackupController.php
+++ b/app/code/core/Mage/Adminhtml/controllers/System/BackupController.php
@@ -369,7 +369,9 @@ class Mage_Adminhtml_System_BackupController extends Mage_Adminhtml_Controller_A
      */
     protected function _isAllowed()
     {
-        return Mage::getSingleton('admin/session')->isAllowed('system/tools/backup' );
+        return Mage::getSingleton('admin/session')->isAllowed('system/tools/backup')
+            && Mage::helper('core')->isModuleEnabled('Mage_Backup')
+            && !Mage::getStoreConfigFlag('advanced/modules_disable_output/Mage_Backup');
     }
 
     /**
diff --git a/app/code/core/Mage/Captcha/Model/Observer.php b/app/code/core/Mage/Captcha/Model/Observer.php
index 4b3e041..a42db5c 100644
--- a/app/code/core/Mage/Captcha/Model/Observer.php
+++ b/app/code/core/Mage/Captcha/Model/Observer.php
@@ -289,4 +289,57 @@ class Mage_Captcha_Model_Observer
         $captchaParams = $request->getPost(Mage_Captcha_Helper_Data::INPUT_NAME_FIELD_VALUE);
         return $captchaParams[$formId];
     }
+
+    /**
+     * Check Captcha On Share Wishlist Page
+     *
+     * @param Varien_Event_Observer $observer
+     * @return Mage_Captcha_Model_Observer
+     */
+    public function checkWishlistSharing($observer)
+    {
+        $formId = 'wishlist_sharing';
+        $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
+        if ($captchaModel->isRequired()) {
+            $controller = $observer->getControllerAction();
+            $request = $controller->getRequest();
+            if (!$captchaModel->isCorrect($this->_getCaptchaString($request, $formId))) {
+                Mage::getSingleton('wishlist/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
+                $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
+                Mage::getSingleton('wishlist/session')->setSharingForm($request->getPost());
+                $wishlistId = (int)$request->getParam('wishlist_id');
+                $controller->getResponse()
+                    ->setRedirect(Mage::getUrl('wishlist/index/share/wishlist_id/' . $wishlistId));
+            }
+        }
+        return $this;
+    }
+
+    /**
+     * Check Captcha On Email Product To A Friend Page
+     *
+     * @param Varien_Event_Observer $observer
+     * @return Mage_Captcha_Model_Observer
+     */
+    public function checkSendfriendSend($observer)
+    {
+        $formId = 'sendfriend_send';
+        $captchaModel = Mage::helper('captcha')->getCaptcha($formId);
+        if ($captchaModel->isRequired()) {
+            $controller = $observer->getControllerAction();
+            $request = $controller->getRequest();
+            if (!$captchaModel->isCorrect($this->_getCaptchaString($request, $formId))) {
+                Mage::getSingleton('catalog/session')->addError(Mage::helper('captcha')->__('Incorrect CAPTCHA.'));
+                $controller->setFlag('', Mage_Core_Controller_Varien_Action::FLAG_NO_DISPATCH, true);
+                Mage::getSingleton('catalog/session')->setFormData($request->getPost());
+                $id = (int)$request->getParam('id');
+                $catId = $request->getParam('cat_id');
+                if (null !== $catId) {
+                    $id .= '/cat_id/' . (int)$catId;
+                }
+                $controller->getResponse()->setRedirect(Mage::getUrl('*/*/send/id/' . $id));
+            }
+        }
+        return $this;
+    }
 }
diff --git a/app/code/core/Mage/Captcha/Model/Zend.php b/app/code/core/Mage/Captcha/Model/Zend.php
index 84a0849..02dedfc 100644
--- a/app/code/core/Mage/Captcha/Model/Zend.php
+++ b/app/code/core/Mage/Captcha/Model/Zend.php
@@ -116,7 +116,11 @@ class Mage_Captcha_Model_Zend extends Zend_Captcha_Image implements Mage_Captcha
      */
     public function isRequired($login = null)
     {
-        if ($this->_isUserAuth() || !$this->_isEnabled() || !in_array($this->_formId, $this->_getTargetForms())) {
+        $nonAuthForms = array('wishlist_sharing', 'sendfriend_send');
+
+        if ((!in_array($this->_formId, $nonAuthForms) && $this->_isUserAuth())
+            || !$this->_isEnabled() || !in_array($this->_formId, $this->_getTargetForms())
+        ) {
             return false;
         }
 
diff --git a/app/code/core/Mage/Captcha/etc/config.xml b/app/code/core/Mage/Captcha/etc/config.xml
index 33392b4..8c2ed50 100644
--- a/app/code/core/Mage/Captcha/etc/config.xml
+++ b/app/code/core/Mage/Captcha/etc/config.xml
@@ -78,6 +78,14 @@
                     </captcha>
                 </observers>
             </controller_action_predispatch_customer_account_createpost>
+            <controller_action_predispatch_wishlist_index_send>
+                <observers>
+                    <captcha>
+                        <class>captcha/observer</class>
+                        <method>checkWishlistSharing</method>
+                    </captcha>
+                </observers>
+            </controller_action_predispatch_wishlist_index_send>
             <controller_action_predispatch_adminhtml_index_forgotpassword>
                 <observers>
                     <captcha>
@@ -122,6 +130,14 @@
                     </captcha_reset_attempt>
                 </observers>
             </admin_session_user_login_success>
+            <controller_action_predispatch_sendfriend_product_sendmail>
+                <observers>
+                    <captcha>
+                        <class>captcha/observer</class>
+                        <method>checkSendfriendSend</method>
+                    </captcha>
+                </observers>
+            </controller_action_predispatch_sendfriend_product_sendmail>
         </events>
     </global>
     <frontend>
@@ -206,6 +222,8 @@
                     <user_forgotpassword>1</user_forgotpassword>
                     <guest_checkout>1</guest_checkout>
                     <register_during_checkout>1</register_during_checkout>
+                    <wishlist_sharing>1</wishlist_sharing>
+                    <sendfriend_send>1</sendfriend_send>
                 </always_for>
             </captcha>
         </customer>
@@ -233,6 +251,12 @@
                     <register_during_checkout>
                         <label>Register during Checkout</label>
                     </register_during_checkout>
+                    <wishlist_sharing>
+                        <label>Share Wishlist</label>
+                    </wishlist_sharing>
+                    <sendfriend_send>
+                        <label>Email Product to a Friend</label>
+                    </sendfriend_send>
                 </areas>
             </frontend>
             <backend>
diff --git a/app/code/core/Mage/Catalog/Helper/Product/Flat.php b/app/code/core/Mage/Catalog/Helper/Product/Flat.php
index c8e78ea..d461b56 100644
--- a/app/code/core/Mage/Catalog/Helper/Product/Flat.php
+++ b/app/code/core/Mage/Catalog/Helper/Product/Flat.php
@@ -81,6 +81,22 @@ class Mage_Catalog_Helper_Product_Flat extends Mage_Catalog_Helper_Flat_Abstract
     protected $_flagObject;
 
     /**
+     * Catalog Product Flat force status enable/disable
+     * to force EAV for products in quote
+     * store settings will be used by default
+     *
+     * @var boolean
+     */
+    protected $_forceFlatStatus = false;
+
+    /**
+     * Old Catalog Product Flat forced status
+     *
+     * @var boolean
+     */
+    protected $_forceFlatStatusOld;
+
+    /**
      * Retrieve Catalog Product Flat Flag object
      *
      * @return Mage_Catalog_Model_Product_Flat_Flag
@@ -155,4 +171,40 @@ class Mage_Catalog_Helper_Product_Flat extends Mage_Catalog_Helper_Flat_Abstract
     {
         return intval(Mage::getConfig()->getNode(self::XML_NODE_ADD_CHILD_DATA));
     }
+
+    /**
+     * Disable Catalog Product Flat
+     *
+     * @param $save bool
+     */
+    public function disableFlatCollection($save = false)
+    {
+        $this->_forceFlatStatus = true;
+
+        if ($save) {
+            $this->_forceFlatStatusOld = $this->_forceFlatStatus;
+        }
+    }
+
+    /**
+     * Reset Catalog Product Flat
+     */
+    public function resetFlatCollection()
+    {
+        if (isset($this->_forceFlatStatusOld)) {
+            $this->_forceFlatStatus = $this->_forceFlatStatusOld;
+        } else {
+            $this->_forceFlatStatus = false;
+        }
+    }
+
+    /**
+     * Checks if Catalog Product Flat was forced disabled
+     *
+     * @return bool
+     */
+    public function isFlatCollectionDisabled()
+    {
+        return $this->_forceFlatStatus;
+    }
 }
diff --git a/app/code/core/Mage/Catalog/Model/Api2/Product/Image/Rest/Admin/V1.php b/app/code/core/Mage/Catalog/Model/Api2/Product/Image/Rest/Admin/V1.php
index deb20d3..465b6ab 100644
--- a/app/code/core/Mage/Catalog/Model/Api2/Product/Image/Rest/Admin/V1.php
+++ b/app/code/core/Mage/Catalog/Model/Api2/Product/Image/Rest/Admin/V1.php
@@ -69,7 +69,9 @@ class Mage_Catalog_Model_Api2_Product_Image_Rest_Admin_V1 extends Mage_Catalog_M
 
             // try to create Image object to check if image data is valid
             try {
-                new Varien_Image($apiTempDir . DS . $imageFileName);
+                $filePath = $apiTempDir . DS . $imageFileName;
+                new Varien_Image($filePath);
+                Mage::getModel('core/file_validator_image')->validate($filePath);
             } catch (Exception $e) {
                 $ioAdapter->rmdir($apiTempDir, true);
                 $this->_critical($e->getMessage(), Mage_Api2_Model_Server::HTTP_INTERNAL_ERROR);
diff --git a/app/code/core/Mage/Catalog/Model/Product.php b/app/code/core/Mage/Catalog/Model/Product.php
index f6fe5d5..294323c 100644
--- a/app/code/core/Mage/Catalog/Model/Product.php
+++ b/app/code/core/Mage/Catalog/Model/Product.php
@@ -2096,4 +2096,19 @@ class Mage_Catalog_Model_Product extends Mage_Catalog_Model_Abstract
 
         return $this;
     }
+
+    /**
+     *  Checks event attribute for initialization as an event object
+     *
+     * @return bool | Enterprise_CatalogEvent_Model_Event
+     */
+    public function getEvent()
+    {
+        $event = parent::getEvent();
+        if (is_string($event)) {
+            $event = false;
+        }
+
+        return $event;
+    }
 }
diff --git a/app/code/core/Mage/Catalog/Model/Product/Attribute/Media/Api.php b/app/code/core/Mage/Catalog/Model/Product/Attribute/Media/Api.php
index f5c8f90..c40cf54 100644
--- a/app/code/core/Mage/Catalog/Model/Product/Attribute/Media/Api.php
+++ b/app/code/core/Mage/Catalog/Model/Product/Attribute/Media/Api.php
@@ -155,7 +155,9 @@ class Mage_Catalog_Model_Product_Attribute_Media_Api extends Mage_Catalog_Model_
 
             // try to create Image object - it fails with Exception if image is not supported
             try {
-                new Varien_Image($tmpDirectory . DS . $fileName);
+                $filePath = $tmpDirectory . DS . $fileName;
+                new Varien_Image($filePath);
+                Mage::getModel('core/file_validator_image')->validate($filePath);
             } catch (Exception $e) {
                 // Remove temporary directory
                 $ioAdapter->rmdir($tmpDirectory, true);
diff --git a/app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php b/app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php
index 45e0b26..d995707 100644
--- a/app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php
+++ b/app/code/core/Mage/Catalog/Model/Resource/Product/Collection.php
@@ -330,7 +330,7 @@ class Mage_Catalog_Model_Resource_Product_Collection extends Mage_Catalog_Model_
     public function isEnabledFlat()
     {
         // Flat Data can be used only on frontend
-        if (Mage::app()->getStore()->isAdmin()) {
+        if (Mage::app()->getStore()->isAdmin() || $this->getFlatHelper()->isFlatCollectionDisabled()) {
             return false;
         }
         $storeId = $this->getStoreId();
diff --git a/app/code/core/Mage/Checkout/controllers/CartController.php b/app/code/core/Mage/Checkout/controllers/CartController.php
index 1b52698..28a2647 100644
--- a/app/code/core/Mage/Checkout/controllers/CartController.php
+++ b/app/code/core/Mage/Checkout/controllers/CartController.php
@@ -127,6 +127,7 @@ class Mage_Checkout_CartController extends Mage_Core_Controller_Front_Action
     public function preDispatch()
     {
         parent::preDispatch();
+        Mage::helper('catalog/product_flat')->disableFlatCollection(true);
 
         $cart = $this->_getCart();
         if ($cart->getQuote()->getIsMultiShipping()) {
diff --git a/app/code/core/Mage/Checkout/controllers/MultishippingController.php b/app/code/core/Mage/Checkout/controllers/MultishippingController.php
index ab3e033..3095782 100644
--- a/app/code/core/Mage/Checkout/controllers/MultishippingController.php
+++ b/app/code/core/Mage/Checkout/controllers/MultishippingController.php
@@ -86,6 +86,9 @@ class Mage_Checkout_MultishippingController extends Mage_Checkout_Controller_Act
             return $this;
         }
 
+        // Disable flat for product collection
+        Mage::helper('catalog/product_flat')->disableFlatCollection(true);
+
         $action = strtolower($this->getRequest()->getActionName());
 
         $checkoutSessionQuote = $this->_getCheckoutSession()->getQuote();
diff --git a/app/code/core/Mage/Checkout/controllers/OnepageController.php b/app/code/core/Mage/Checkout/controllers/OnepageController.php
index 0a7744d..97f6252 100644
--- a/app/code/core/Mage/Checkout/controllers/OnepageController.php
+++ b/app/code/core/Mage/Checkout/controllers/OnepageController.php
@@ -59,6 +59,9 @@ class Mage_Checkout_OnepageController extends Mage_Checkout_Controller_Action
         parent::preDispatch();
         $this->_preDispatchValidateCustomer();
 
+        // Disable flat for product collection
+        Mage::helper('catalog/product_flat')->disableFlatCollection(true);
+
         $checkoutSessionQuote = Mage::getSingleton('checkout/session')->getQuote();
         if ($checkoutSessionQuote->getIsMultiShipping()) {
             $checkoutSessionQuote->setIsMultiShipping(false);
diff --git a/app/code/core/Mage/Cms/Model/Wysiwyg/Images/Storage.php b/app/code/core/Mage/Cms/Model/Wysiwyg/Images/Storage.php
index 1407a28..8e0ad13 100644
--- a/app/code/core/Mage/Cms/Model/Wysiwyg/Images/Storage.php
+++ b/app/code/core/Mage/Cms/Model/Wysiwyg/Images/Storage.php
@@ -137,7 +137,9 @@ class Mage_Cms_Model_Wysiwyg_Images_Storage extends Varien_Object
             $item->setUrl($helper->getCurrentUrl() . $item->getBasename());
 
             if ($this->isImage($item->getBasename())) {
-                $thumbUrl = $this->getThumbnailUrl($item->getFilename(), true);
+                $thumbUrl = $this->getThumbnailUrl(
+                    Mage_Core_Model_File_Uploader::getCorrectFileName($item->getFilename()),
+                    true);
                 // generate thumbnail "on the fly" if it does not exists
                 if(! $thumbUrl) {
                     $thumbUrl = Mage::getSingleton('adminhtml/url')->getUrl('*/*/thumbnail', array('file' => $item->getId()));
@@ -386,7 +388,9 @@ class Mage_Cms_Model_Wysiwyg_Images_Storage extends Varien_Object
         $height = $this->getConfigData('resize_height');
         $image->keepAspectRatio($keepRation);
         $image->resize($width, $height);
-        $dest = $targetDir . DS . pathinfo($source, PATHINFO_BASENAME);
+        $dest = $targetDir
+            . DS
+            . Mage_Core_Model_File_Uploader::getCorrectFileName(pathinfo($source, PATHINFO_BASENAME));
         $image->save($dest);
         if (is_file($dest)) {
             return $dest;
diff --git a/app/code/core/Mage/ConfigurableSwatches/Helper/Productimg.php b/app/code/core/Mage/ConfigurableSwatches/Helper/Productimg.php
index fd71520..4db2c44 100644
--- a/app/code/core/Mage/ConfigurableSwatches/Helper/Productimg.php
+++ b/app/code/core/Mage/ConfigurableSwatches/Helper/Productimg.php
@@ -141,12 +141,12 @@ class Mage_ConfigurableSwatches_Helper_Productimg extends Mage_Core_Helper_Abstr
                 $swatchLabel = $label . self::SWATCH_LABEL_SUFFIX;
 
                 $imageKeys[$label] = array_search($label, $imageHaystack);
-                if ($imageKeys[$label] === false) {
+                if ($imageKeys[$label] === false && isset($mapping[$label]['default_label'])) {
                     $imageKeys[$label] = array_search($mapping[$label]['default_label'], $imageHaystack);
                 }
 
                 $imageKeys[$swatchLabel] = array_search($swatchLabel, $imageHaystack);
-                if ($imageKeys[$swatchLabel] === false) {
+                if ($imageKeys[$swatchLabel] === false && isset($mapping[$label]['default_label'])) {
                     $imageKeys[$swatchLabel] = array_search(
                         $mapping[$label]['default_label'] . self::SWATCH_LABEL_SUFFIX, $imageHaystack
                     );
diff --git a/app/code/core/Mage/Core/Helper/Data.php b/app/code/core/Mage/Core/Helper/Data.php
index 021120d..f55957a 100644
--- a/app/code/core/Mage/Core/Helper/Data.php
+++ b/app/code/core/Mage/Core/Helper/Data.php
@@ -651,11 +651,30 @@ XML;
      * Decodes the given $encodedValue string which is
      * encoded in the JSON format
      *
+     * switch added to prevent exceptions in json_decode
+     *
      * @param string $encodedValue
      * @return mixed
      */
     public function jsonDecode($encodedValue, $objectDecodeType = Zend_Json::TYPE_ARRAY)
     {
+        switch (true) {
+            case (null === $encodedValue):
+                $encodedValue = 'null';
+                break;
+            case (true === $encodedValue):
+                $encodedValue = 'true';
+                break;
+            case (false === $encodedValue):
+                $encodedValue = 'false';
+                break;
+            case ('' === $encodedValue):
+                $encodedValue = '""';
+                break;
+            default:
+                // do nothing
+        }
+
         return Zend_Json::decode($encodedValue, $objectDecodeType);
     }
 
diff --git a/app/code/core/Mage/Core/Model/Resource/Session.php b/app/code/core/Mage/Core/Model/Resource/Session.php
index d5d0ad4..520fcef 100644
--- a/app/code/core/Mage/Core/Model/Resource/Session.php
+++ b/app/code/core/Mage/Core/Model/Resource/Session.php
@@ -215,7 +215,7 @@ class Mage_Core_Model_Resource_Session implements Zend_Session_SaveHandler_Inter
 
         $data = $this->_read->fetchOne($select, $bind);
 
-        return $data;
+        return (string)$data;
     }
 
     /**
diff --git a/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php b/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php
index 490fcda..33e5a48 100644
--- a/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php
+++ b/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php
@@ -62,7 +62,6 @@ class Mage_Core_Model_Session_Abstract_Varien extends Varien_Object
              * backward compatibility with db argument (option is @deprecated after 1.12.0.2)
              */
             case 'db':
-                $moduleName = 'user';
                 /* @var $sessionResource Mage_Core_Model_Resource_Session */
                 $sessionResource = Mage::getResourceSingleton('core/session');
                 $sessionResource->setSaveHandler();
@@ -78,9 +77,9 @@ class Mage_Core_Model_Session_Abstract_Varien extends Varien_Object
                 }
             default:
                 session_save_path($this->getSessionSavePath());
+                session_module_name($moduleName);
                 break;
         }
-        session_module_name($moduleName);
 
         $cookie = $this->getCookie();
         if (Mage::app()->getStore()->isAdmin()) {
diff --git a/app/code/core/Mage/Core/etc/config.xml b/app/code/core/Mage/Core/etc/config.xml
index ff8a147..2e5da43 100644
--- a/app/code/core/Mage/Core/etc/config.xml
+++ b/app/code/core/Mage/Core/etc/config.xml
@@ -28,7 +28,7 @@
 <config>
     <modules>
         <Mage_Core>
-            <version>1.6.0.7</version>
+            <version>1.6.0.8</version>
         </Mage_Core>
     </modules>
     <global>
@@ -428,8 +428,13 @@
             </locale>
             <file>
                 <protected_extensions>
-                    <!-- PHP script file extension -->
+                    <!-- BOF PHP script file extensions -->
                     <php>php</php>
+                    <php3>php3</php3>
+                    <php4>php4</php4>
+                    <php5>php5</php5>
+                    <php7>php7</php7>
+                    <!-- EOF PHP script file extensions -->
                     <!-- File extension of configuration of an Apache Web server -->
                     <htaccess>htaccess</htaccess>
                     <!-- Java script file extension -->
@@ -447,6 +452,7 @@
                     <!-- BOF HTML file extensions -->
                     <htm>htm</htm>
                     <html>html</html>
+                    <pht>pht</pht>
                     <phtml>phtml</phtml>
                     <shtml>shtml</shtml>
                     <!-- EOF HTML file extensions -->
diff --git a/app/code/core/Mage/Core/etc/jstranslator.xml b/app/code/core/Mage/Core/etc/jstranslator.xml
index f6c43d3..dd04c22 100644
--- a/app/code/core/Mage/Core/etc/jstranslator.xml
+++ b/app/code/core/Mage/Core/etc/jstranslator.xml
@@ -54,6 +54,9 @@
     <validate-code translate="message" module="core">
         <message>Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.</message>
     </validate-code>
+    <validate-code-event translate="message" module="core">
+        <message>Please do not use "event" for an attribute code.</message>
+    </validate-code-event>
     <validate-alphanum translate="message" module="core">
         <message>Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.</message>
     </validate-alphanum>
diff --git a/app/code/core/Mage/Core/functions.php b/app/code/core/Mage/Core/functions.php
index f2daa92..1bdb70d 100644
--- a/app/code/core/Mage/Core/functions.php
+++ b/app/code/core/Mage/Core/functions.php
@@ -51,24 +51,6 @@ if (get_magic_quotes_gpc()) {
 }
 
 /**
- * Class autoload
- *
- * @todo change to spl_autoload_register
- * @deprecated
- * @param string $class
- */
-function __autoload($class)
-{
-    if (defined('COMPILER_INCLUDE_PATH')) {
-        $classFile = $class.'.php';
-    } else {
-        $classFile = uc_words($class, DIRECTORY_SEPARATOR).'.php';
-    }
-
-    include($classFile);
-}
-
-/**
  * Object destructor
  *
  * @param mixed $object
@@ -178,6 +160,11 @@ function mageCoreErrorHandler($errno, $errstr, $errfile, $errline){
         define('E_DEPRECATED', 8192);
     }
 
+    // Suppress deprecation warnings on PHP 7.x
+    if ($errno == E_DEPRECATED && version_compare(PHP_VERSION, '7.0.0', '>=')) {
+        return true;
+    }
+
     // PEAR specific message handling
     if (stripos($errfile.$errstr, 'pear') !== false) {
          // ignore strict and deprecated notices
diff --git a/app/code/core/Mage/Core/sql/core_setup/upgrade-1.6.0.7-1.6.0.8.php b/app/code/core/Mage/Core/sql/core_setup/upgrade-1.6.0.7-1.6.0.8.php
new file mode 100644
index 0000000..f9da012
--- /dev/null
+++ b/app/code/core/Mage/Core/sql/core_setup/upgrade-1.6.0.7-1.6.0.8.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magento.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magento.com for more information.
+ *
+ * @category    Mage
+ * @package     Mage_Core
+ * @copyright  Copyright (c) 2006-2018 Magento, Inc. (http://www.magento.com)
+ * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+/* @var $installer Mage_Core_Model_Resource_Setup */
+$installer = $this;
+
+$installer->startSetup();
+$connection = $installer->getConnection();
+
+$connection->delete(
+    $this->getTable('core_config_data'),
+    $connection->prepareSqlCondition('path', array(
+        'like' => 'system/backup/enabled'
+    ))
+);
+$installer->setConfigData('advanced/modules_disable_output/Mage_Backup', 1);
+
+$installer->endSetup();
diff --git a/app/code/core/Mage/Customer/Model/Customer/Attribute/Source/Group.php b/app/code/core/Mage/Customer/Model/Customer/Attribute/Source/Group.php
index 6bc1ac5..722a69d 100644
--- a/app/code/core/Mage/Customer/Model/Customer/Attribute/Source/Group.php
+++ b/app/code/core/Mage/Customer/Model/Customer/Attribute/Source/Group.php
@@ -33,7 +33,7 @@
  */
 class Mage_Customer_Model_Customer_Attribute_Source_Group extends Mage_Eav_Model_Entity_Attribute_Source_Table
 {
-    public function getAllOptions()
+    public function getAllOptions($withEmpty = true, $defaultValues = false)
     {
         if (!$this->_options) {
             $this->_options = Mage::getResourceModel('customer/group_collection')
diff --git a/app/code/core/Mage/Customer/Model/Customer/Attribute/Source/Store.php b/app/code/core/Mage/Customer/Model/Customer/Attribute/Source/Store.php
index 8f22d32..e13b6a8 100644
--- a/app/code/core/Mage/Customer/Model/Customer/Attribute/Source/Store.php
+++ b/app/code/core/Mage/Customer/Model/Customer/Attribute/Source/Store.php
@@ -33,7 +33,7 @@
  */
 class Mage_Customer_Model_Customer_Attribute_Source_Store extends Mage_Eav_Model_Entity_Attribute_Source_Table
 {
-    public function getAllOptions()
+    public function getAllOptions($withEmpty = true, $defaultValues = false)
     {
         if (!$this->_options) {
             $collection = Mage::getResourceModel('core/store_collection');
diff --git a/app/code/core/Mage/Customer/Model/Customer/Attribute/Source/Website.php b/app/code/core/Mage/Customer/Model/Customer/Attribute/Source/Website.php
index 4bf3be0..eba5d25 100644
--- a/app/code/core/Mage/Customer/Model/Customer/Attribute/Source/Website.php
+++ b/app/code/core/Mage/Customer/Model/Customer/Attribute/Source/Website.php
@@ -33,7 +33,7 @@
  */
 class Mage_Customer_Model_Customer_Attribute_Source_Website extends Mage_Eav_Model_Entity_Attribute_Source_Table
 {
-    public function getAllOptions()
+    public function getAllOptions($withEmpty = true, $defaultValues = false)
     {
         if (!$this->_options) {
             $this->_options = Mage::getSingleton('adminhtml/system_store')->getWebsiteValuesForForm(true, true);
diff --git a/app/code/core/Mage/Customer/Model/Entity/Address/Attribute/Source/Country.php b/app/code/core/Mage/Customer/Model/Entity/Address/Attribute/Source/Country.php
index 974092d..ea6e831 100644
--- a/app/code/core/Mage/Customer/Model/Entity/Address/Attribute/Source/Country.php
+++ b/app/code/core/Mage/Customer/Model/Entity/Address/Attribute/Source/Country.php
@@ -56,7 +56,7 @@ class Mage_Customer_Model_Entity_Address_Attribute_Source_Country
      *
      * @return array
      */
-    public function getAllOptions()
+    public function getAllOptions($withEmpty = true, $defaultValues = false)
     {
         if (!$this->_options) {
             $this->_options = $this->_factory->getResourceModel('directory/country_collection')
diff --git a/app/code/core/Mage/Customer/Model/Resource/Address/Attribute/Source/Country.php b/app/code/core/Mage/Customer/Model/Resource/Address/Attribute/Source/Country.php
index cb72472..8632c8b 100644
--- a/app/code/core/Mage/Customer/Model/Resource/Address/Attribute/Source/Country.php
+++ b/app/code/core/Mage/Customer/Model/Resource/Address/Attribute/Source/Country.php
@@ -39,7 +39,7 @@ class Mage_Customer_Model_Resource_Address_Attribute_Source_Country extends Mage
      *
      * @return array
      */
-    public function getAllOptions()
+    public function getAllOptions($withEmpty = true, $defaultValues = false)
     {
         if (!$this->_options) {
             $this->_options = Mage::getResourceModel('directory/country_collection')
diff --git a/app/code/core/Mage/Customer/Model/Resource/Address/Attribute/Source/Region.php b/app/code/core/Mage/Customer/Model/Resource/Address/Attribute/Source/Region.php
index 0c19f02..15ad619 100644
--- a/app/code/core/Mage/Customer/Model/Resource/Address/Attribute/Source/Region.php
+++ b/app/code/core/Mage/Customer/Model/Resource/Address/Attribute/Source/Region.php
@@ -39,7 +39,7 @@ class Mage_Customer_Model_Resource_Address_Attribute_Source_Region extends Mage_
      *
      * @return array
      */
-    public function getAllOptions()
+    public function getAllOptions($withEmpty = true, $defaultValues = false)
     {
         if (!$this->_options) {
             $this->_options = Mage::getResourceModel('directory/region_collection')->load()->toOptionArray();
diff --git a/app/code/core/Mage/Dataflow/Model/Convert/Container/Abstract.php b/app/code/core/Mage/Dataflow/Model/Convert/Container/Abstract.php
index 17a98b6..eef2300 100644
--- a/app/code/core/Mage/Dataflow/Model/Convert/Container/Abstract.php
+++ b/app/code/core/Mage/Dataflow/Model/Convert/Container/Abstract.php
@@ -55,7 +55,8 @@ abstract class Mage_Dataflow_Model_Convert_Container_Abstract
      */
     protected function isSerialized($data)
     {
-        $pattern = '/^a:\d+:\{(i:\d+;|s:\d+:\".+\";|N;|O:\d+:\"\w+\":\d+:\{\w:\d+:)+|^O:\d+:\"\w+\":\d+:\{s:\d+:\"/';
+        $pattern =
+            '/^a:\d+:\{(i:\d+;|s:\d+:\".+\";|N;|O:\d+:\"\w+\":\d+:\{\w:\d+:)+|^O:\d+:\"\w+\":\d+:\{(s:\d+:\"|i:\d+;)/';
         return (is_string($data) && preg_match($pattern, $data));
     }
 
@@ -140,7 +141,7 @@ abstract class Mage_Dataflow_Model_Convert_Container_Abstract
         $result = true;
         if ($this->isSerialized($data)) {
             try {
-                $dataArray = Mage::helper('core/unserializeArray')->unserialize($data);
+                Mage::helper('core/unserializeArray')->unserialize($data);
             } catch (Exception $e) {
                 $result = false;
                 $this->addException(
diff --git a/app/code/core/Mage/Eav/Model/Entity/Attribute/Source/Store.php b/app/code/core/Mage/Eav/Model/Entity/Attribute/Source/Store.php
index 43336be..e9d1b95 100644
--- a/app/code/core/Mage/Eav/Model/Entity/Attribute/Source/Store.php
+++ b/app/code/core/Mage/Eav/Model/Entity/Attribute/Source/Store.php
@@ -38,7 +38,7 @@ class Mage_Eav_Model_Entity_Attribute_Source_Store extends Mage_Eav_Model_Entity
      *
      * @return array
      */
-    public function getAllOptions()
+    public function getAllOptions($withEmpty = true, $defaultValues = false)
     {
         if ($this->_options === null) {
             $this->_options = Mage::getResourceModel('core/store_collection')->load()->toOptionArray();
diff --git a/app/code/core/Mage/ImportExport/Model/Export/Entity/Customer.php b/app/code/core/Mage/ImportExport/Model/Export/Entity/Customer.php
index b595aaa..36f7d77 100644
--- a/app/code/core/Mage/ImportExport/Model/Export/Entity/Customer.php
+++ b/app/code/core/Mage/ImportExport/Model/Export/Entity/Customer.php
@@ -423,7 +423,9 @@ class Mage_ImportExport_Model_Export_Entity_Customer extends Mage_ImportExport_M
                 $row[$attrCode] = $attrValue;
             }
         }
-        $row[self::COL_WEBSITE] = $this->_websiteIdToCode[$customer['website_id']];
+        $row[self::COL_WEBSITE] = $this->_websiteIdToCode[
+            $customer['website_id'] === null ? 0 : $customer['website_id']
+        ];
         $row[self::COL_STORE]   = $this->_storeIdToCode[$customer['store_id']];
 
         return $row;
diff --git a/app/code/core/Mage/ImportExport/Model/Export/Entity/Product.php b/app/code/core/Mage/ImportExport/Model/Export/Entity/Product.php
index 6d504f4..ac40f15 100644
--- a/app/code/core/Mage/ImportExport/Model/Export/Entity/Product.php
+++ b/app/code/core/Mage/ImportExport/Model/Export/Entity/Product.php
@@ -594,6 +594,7 @@ class Mage_ImportExport_Model_Export_Entity_Product extends Mage_ImportExport_Mo
 
         $memoryLimit = trim(ini_get('memory_limit'));
         $lastMemoryLimitLetter = strtolower($memoryLimit[strlen($memoryLimit)-1]);
+        $memoryLimit = (int) filter_var($memoryLimit, FILTER_SANITIZE_NUMBER_INT);
         switch($lastMemoryLimitLetter) {
             case 'g':
                 $memoryLimit *= 1024;
@@ -918,22 +919,16 @@ class Mage_ImportExport_Model_Export_Entity_Product extends Mage_ImportExport_Mo
                         '_media_lable',
                         '_media_position',
                         '_media_is_disabled'
+                    ),
+                    $customOptCols,
+                    array(
+                        '_super_products_sku',
+                        '_super_attribute_code',
+                        '_super_attribute_option',
+                        '_super_attribute_price_corr'
                     )
                 );
 
-                // have we merge custom options columns
-                if ($customOptionsData) {
-                    $headerCols = array_merge($headerCols, $customOptCols);
-                }
-
-                // have we merge configurable products data
-                if ($configurableData) {
-                    $headerCols = array_merge($headerCols, array(
-                        '_super_products_sku', '_super_attribute_code',
-                        '_super_attribute_option', '_super_attribute_price_corr'
-                    ));
-                }
-
                 $writer->setHeaderCols($headerCols);
             }
 
diff --git a/app/code/core/Mage/ImportExport/Model/Import/Entity/Customer.php b/app/code/core/Mage/ImportExport/Model/Import/Entity/Customer.php
index 75fa560..2ebff1b 100644
--- a/app/code/core/Mage/ImportExport/Model/Import/Entity/Customer.php
+++ b/app/code/core/Mage/ImportExport/Model/Import/Entity/Customer.php
@@ -289,7 +289,9 @@ class Mage_ImportExport_Model_Import_Entity_Customer extends Mage_ImportExport_M
                 'id'          => $attribute->getId(),
                 'is_required' => $attribute->getIsRequired(),
                 'is_static'   => $attribute->isStatic(),
-                'rules'       => $attribute->getValidateRules() ? unserialize($attribute->getValidateRules()) : null,
+                'rules'       => $attribute->getValidateRules()
+                    ? Mage::helper('core/unserializeArray')->unserialize($attribute->getValidateRules())
+                    : null,
                 'type'        => Mage_ImportExport_Model_Import::getAttributeType($attribute),
                 'options'     => $this->getAttributeOptions($attribute)
             );
diff --git a/app/code/core/Mage/ImportExport/Model/Import/Entity/Customer/Address.php b/app/code/core/Mage/ImportExport/Model/Import/Entity/Customer/Address.php
index 346e9e5..3c17249 100644
--- a/app/code/core/Mage/ImportExport/Model/Import/Entity/Customer/Address.php
+++ b/app/code/core/Mage/ImportExport/Model/Import/Entity/Customer/Address.php
@@ -303,7 +303,9 @@ class Mage_ImportExport_Model_Import_Entity_Customer_Address extends Mage_Import
                 'code'        => $attribute->getAttributeCode(),
                 'table'       => $attribute->getBackend()->getTable(),
                 'is_required' => $attribute->getIsRequired(),
-                'rules'       => $attribute->getValidateRules() ? unserialize($attribute->getValidateRules()) : null,
+                'rules'       => $attribute->getValidateRules()
+                    ? Mage::helper('core/unserializeArray')->unserialize($attribute->getValidateRules())
+                    : null,
                 'type'        => Mage_ImportExport_Model_Import::getAttributeType($attribute),
                 'options'     => $this->getAttributeOptions($attribute)
             );
diff --git a/app/code/core/Mage/Index/Model/Process.php b/app/code/core/Mage/Index/Model/Process.php
index 0c2a790..d344dcf 100644
--- a/app/code/core/Mage/Index/Model/Process.php
+++ b/app/code/core/Mage/Index/Model/Process.php
@@ -442,7 +442,7 @@ class Mage_Index_Model_Process extends Mage_Core_Model_Abstract
      */
     public function lock()
     {
-        $this->_getLockInstance()->setLock($this->getProcessLockName(), $this->getData('use_file_lock'));
+        $this->_getLockInstance()->setLock($this->getProcessLockName(), true);
         return $this;
     }
 
@@ -455,7 +455,7 @@ class Mage_Index_Model_Process extends Mage_Core_Model_Abstract
      */
     public function lockAndBlock()
     {
-        $this->_getLockInstance()->setLock($this->getProcessLockName(), $this->getData('use_file_lock'), true);
+        $this->_getLockInstance()->setLock($this->getProcessLockName(), true, true);
         return $this;
     }
 
@@ -466,7 +466,7 @@ class Mage_Index_Model_Process extends Mage_Core_Model_Abstract
      */
     public function unlock()
     {
-        $this->_getLockInstance()->releaseLock($this->getProcessLockName(), $this->getData('use_file_lock'));
+        $this->_getLockInstance()->releaseLock($this->getProcessLockName(), true);
         return $this;
     }
 
@@ -477,7 +477,7 @@ class Mage_Index_Model_Process extends Mage_Core_Model_Abstract
      */
     public function isLocked()
     {
-        return $this->_getLockInstance()->isLockExists($this->getProcessLockName(), $this->getData('use_file_lock'));
+        return $this->_getLockInstance()->isLockExists($this->getProcessLockName(), true);
     }
 
     /**
diff --git a/app/code/core/Mage/Install/etc/install.xml b/app/code/core/Mage/Install/etc/install.xml
index 1088acd..e347021 100644
--- a/app/code/core/Mage/Install/etc/install.xml
+++ b/app/code/core/Mage/Install/etc/install.xml
@@ -88,6 +88,10 @@
                 <gd/>
                 <soap/>
                 <mbstring/>
+                <mcrypt>
+                    <openssl/>
+                    <mcrypt/>
+                </mcrypt>
             </extensions>
         </php>
     </check>
diff --git a/app/code/core/Mage/Payment/etc/config.xml b/app/code/core/Mage/Payment/etc/config.xml
index 0fa1396..18eca28 100644
--- a/app/code/core/Mage/Payment/etc/config.xml
+++ b/app/code/core/Mage/Payment/etc/config.xml
@@ -28,7 +28,7 @@
 <config>
     <modules>
         <Mage_Payment>
-            <version>1.6.0.0</version>
+            <version>1.6.0.1</version>
         </Mage_Payment>
     </modules>
     <global>
@@ -36,6 +36,9 @@
             <payment>
                 <class>Mage_Payment_Model</class>
             </payment>
+            <payment_resource>
+                <class>Mage_Core_Model_Resource</class>
+            </payment_resource>
         </models>
         <resources>
             <payment_setup>
@@ -166,15 +169,6 @@
     </adminhtml>
     <default>
         <payment>
-            <ccsave>
-                <active>1</active>
-                <cctypes>AE,VI,MC,DI</cctypes>
-                <model>payment/method_ccsave</model>
-                <order_status>pending</order_status>
-                <title>Credit Card (saved)</title>
-                <allowspecific>0</allowspecific>
-                <group>offline</group>
-            </ccsave>
             <checkmo>
                 <active>1</active>
                 <model>payment/method_checkmo</model>
diff --git a/app/code/core/Mage/Payment/etc/system.xml b/app/code/core/Mage/Payment/etc/system.xml
index 7ff6f25..101bae7 100644
--- a/app/code/core/Mage/Payment/etc/system.xml
+++ b/app/code/core/Mage/Payment/etc/system.xml
@@ -36,140 +36,6 @@
             <show_in_website>1</show_in_website>
             <show_in_store>1</show_in_store>
             <groups>
-                <ccsave translate="label">
-                    <label>Saved CC</label>
-                    <frontend_type>text</frontend_type>
-                    <sort_order>27</sort_order>
-                    <show_in_default>1</show_in_default>
-                    <show_in_website>1</show_in_website>
-                    <show_in_store>1</show_in_store>
-                    <fields>
-                        <active translate="label">
-                            <label>Enabled</label>
-                            <frontend_type>select</frontend_type>
-                            <source_model>adminhtml/system_config_source_yesno</source_model>
-                            <sort_order>1</sort_order>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>0</show_in_store>
-                        </active>
-                        <cctypes translate="label">
-                            <label>Credit Card Types</label>
-                            <frontend_type>multiselect</frontend_type>
-                            <source_model>adminhtml/system_config_source_payment_cctype</source_model>
-                            <sort_order>4</sort_order>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>0</show_in_store>
-                            <can_be_empty>1</can_be_empty>
-                        </cctypes>
-                        <order_status translate="label">
-                            <label>New Order Status</label>
-                            <frontend_type>select</frontend_type>
-                            <source_model>adminhtml/system_config_source_order_status_new</source_model>
-                            <sort_order>2</sort_order>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>0</show_in_store>
-                        </order_status>
-                        <sort_order translate="label">
-                            <label>Sort Order</label>
-                            <frontend_type>text</frontend_type>
-                            <sort_order>100</sort_order>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>0</show_in_store>
-                            <frontend_class>validate-number</frontend_class>
-                        </sort_order>
-                        <title translate="label">
-                            <label>Title</label>
-                            <frontend_type>text</frontend_type>
-                            <sort_order>1</sort_order>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>1</show_in_store>
-                        </title>
-                        <useccv translate="label">
-                            <label>Request Card Security Code</label>
-                            <frontend_type>select</frontend_type>
-                            <source_model>adminhtml/system_config_source_yesno</source_model>
-                            <sort_order>5</sort_order>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>0</show_in_store>
-                        </useccv>
-
-                        <centinel translate="label">
-                            <label>3D Secure Card Validation</label>
-                            <frontend_type>select</frontend_type>
-                            <source_model>adminhtml/system_config_source_yesno</source_model>
-                            <sort_order>20</sort_order>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>0</show_in_store>
-                        </centinel>
-                        <centinel_is_mode_strict translate="label comment">
-                            <label>Severe 3D Secure Card Validation</label>
-                            <comment>Severe validation removes chargeback liability on merchant.</comment>
-                            <frontend_type>select</frontend_type>
-                            <source_model>adminhtml/system_config_source_yesno</source_model>
-                            <sort_order>25</sort_order>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>0</show_in_store>
-                            <depends><centinel>1</centinel></depends>
-                        </centinel_is_mode_strict>
-                        <centinel_api_url translate="label comment">
-                            <label>Centinel API URL</label>
-                            <comment>A value is required for live mode. Refer to your CardinalCommerce agreement.</comment>
-                            <frontend_type>text</frontend_type>
-                            <source_model>adminhtml/system_config_source_yesno</source_model>
-                            <sort_order>30</sort_order>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>0</show_in_store>
-                            <depends><centinel>1</centinel></depends>
-                        </centinel_api_url>
-
-                         <allowspecific translate="label">
-                            <label>Payment from Applicable Countries</label>
-                            <frontend_type>allowspecific</frontend_type>
-                            <sort_order>50</sort_order>
-                            <source_model>adminhtml/system_config_source_payment_allspecificcountries</source_model>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>0</show_in_store>
-                        </allowspecific>
-                        <specificcountry translate="label">
-                            <label>Payment from Specific Countries</label>
-                            <frontend_type>multiselect</frontend_type>
-                            <sort_order>51</sort_order>
-                            <source_model>adminhtml/system_config_source_country</source_model>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>0</show_in_store>
-                            <can_be_empty>1</can_be_empty>
-                        </specificcountry>
-                        <min_order_total translate="label">
-                            <label>Minimum Order Total</label>
-                            <frontend_type>text</frontend_type>
-                            <sort_order>98</sort_order>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>0</show_in_store>
-                        </min_order_total>
-                        <max_order_total translate="label">
-                            <label>Maximum Order Total</label>
-                            <frontend_type>text</frontend_type>
-                            <sort_order>99</sort_order>
-                            <show_in_default>1</show_in_default>
-                            <show_in_website>1</show_in_website>
-                            <show_in_store>0</show_in_store>
-                        </max_order_total>
-                        <model>
-                        </model>
-                    </fields>
-                </ccsave>
                 <checkmo translate="label">
                     <label>Check / Money Order</label>
                     <frontend_type>text</frontend_type>
diff --git a/app/code/core/Mage/Payment/sql/payment_setup/upgrade-1.6.0.0-1.6.0.1.php b/app/code/core/Mage/Payment/sql/payment_setup/upgrade-1.6.0.0-1.6.0.1.php
new file mode 100644
index 0000000..37eaac6
--- /dev/null
+++ b/app/code/core/Mage/Payment/sql/payment_setup/upgrade-1.6.0.0-1.6.0.1.php
@@ -0,0 +1,40 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magento.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magento.com for more information.
+ *
+ * @category    Mage
+ * @package     Mage_Payment
+ * @copyright  Copyright (c) 2006-2018 Magento, Inc. (http://www.magento.com)
+ * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+/* @var $installer Mage_Core_Model_Resource_Setup */
+$installer = $this;
+
+$installer->startSetup();
+$connection = $installer->getConnection();
+
+$connection->delete(
+    $this->getTable('core_config_data'),
+    $connection->prepareSqlCondition('path', array(
+        'like' => 'payment/ccsave/active'
+    ))
+);
+
+$installer->endSetup();
diff --git a/app/code/core/Mage/Sales/Model/Resource/Quote/Item/Collection.php b/app/code/core/Mage/Sales/Model/Resource/Quote/Item/Collection.php
index c1e5603..c85693c 100644
--- a/app/code/core/Mage/Sales/Model/Resource/Quote/Item/Collection.php
+++ b/app/code/core/Mage/Sales/Model/Resource/Quote/Item/Collection.php
@@ -169,6 +169,9 @@ class Mage_Sales_Model_Resource_Quote_Item_Collection extends Mage_Core_Model_Re
     protected function _assignProducts()
     {
         Varien_Profiler::start('QUOTE:'.__METHOD__);
+        $productFlatHelper = Mage::helper('catalog/product_flat');
+        $productFlatHelper->disableFlatCollection();
+
         $productIds = array();
         foreach ($this as $item) {
             $productIds[] = (int)$item->getProductId();
@@ -234,8 +237,9 @@ class Mage_Sales_Model_Resource_Quote_Item_Collection extends Mage_Core_Model_Re
         if ($recollectQuote && $this->_quote) {
             $this->_quote->collectTotals();
         }
-        Varien_Profiler::stop('QUOTE:'.__METHOD__);
 
+        $productFlatHelper->resetFlatCollection();
+        Varien_Profiler::stop('QUOTE:'.__METHOD__);
         return $this;
     }
 }
diff --git a/app/code/core/Mage/Sales/etc/config.xml b/app/code/core/Mage/Sales/etc/config.xml
index 6f3d023..5f86f21 100644
--- a/app/code/core/Mage/Sales/etc/config.xml
+++ b/app/code/core/Mage/Sales/etc/config.xml
@@ -1218,7 +1218,7 @@
                     </subtotal>
                     <shipping>
                         <class>sales/quote_address_total_shipping</class>
-                        <after>subtotal,freeshipping,tax_subtotal</after>
+                        <after>subtotal,freeshipping,tax_subtotal,msrp</after>
                         <before>grand_total</before>
                     </shipping>
                     <grand_total>
@@ -1227,6 +1227,7 @@
                     </grand_total>
                     <msrp>
                         <class>sales/quote_address_total_msrp</class>
+                        <before>grand_total</before>
                     </msrp>
                 </totals>
                 <nominal_totals>
diff --git a/app/code/core/Mage/Sendfriend/Block/Send.php b/app/code/core/Mage/Sendfriend/Block/Send.php
index 0850a67..a7a5456 100644
--- a/app/code/core/Mage/Sendfriend/Block/Send.php
+++ b/app/code/core/Mage/Sendfriend/Block/Send.php
@@ -97,7 +97,11 @@ class Mage_Sendfriend_Block_Send extends Mage_Core_Block_Template
     {
         $data = $this->getData('form_data');
         if (!$data instanceof Varien_Object) {
+            $formData = Mage::getSingleton('catalog/session')->getFormData(true);
             $data = new Varien_Object();
+            if ($formData) {
+                $data->addData($formData);
+            }
             $this->setData('form_data', $data);
         }
 
@@ -150,6 +154,17 @@ class Mage_Sendfriend_Block_Send extends Mage_Core_Block_Template
     }
 
     /**
+     * Retrieve count of recipients
+     *
+     * @return int
+     */
+    public function getRecipientsCount()
+    {
+        $recipientsEmail = $this->getFormData()->getData('recipients/email');
+        return (is_array($recipientsEmail)) ? count($recipientsEmail) : 0;
+    }
+
+    /**
      * Retrieve Send URL for Form Action
      *
      * @return string
diff --git a/app/code/core/Mage/Shipping/Model/Carrier/Abstract.php b/app/code/core/Mage/Shipping/Model/Carrier/Abstract.php
index 2015b0b..95e0c57 100644
--- a/app/code/core/Mage/Shipping/Model/Carrier/Abstract.php
+++ b/app/code/core/Mage/Shipping/Model/Carrier/Abstract.php
@@ -417,7 +417,7 @@ abstract class Mage_Shipping_Model_Carrier_Abstract extends Varien_Object
      */
     public function getFinalPriceWithHandlingFee($cost)
     {
-        $handlingFee = $this->getConfigData('handling_fee');
+        $handlingFee = (float)$this->getConfigData('handling_fee');
         $handlingType = $this->getConfigData('handling_type');
         if (!$handlingType) {
             $handlingType = self::HANDLING_TYPE_FIXED;
diff --git a/app/code/core/Mage/Shipping/Model/Carrier/Flatrate.php b/app/code/core/Mage/Shipping/Model/Carrier/Flatrate.php
index 9a1fae3..a9e39d8 100644
--- a/app/code/core/Mage/Shipping/Model/Carrier/Flatrate.php
+++ b/app/code/core/Mage/Shipping/Model/Carrier/Flatrate.php
@@ -74,11 +74,12 @@ class Mage_Shipping_Model_Carrier_Flatrate
         $this->setFreeBoxes($freeBoxes);
 
         $result = Mage::getModel('shipping/rate_result');
-        if ($this->getConfigData('type') == 'O') { // per order
-            $shippingPrice = $this->getConfigData('price');
-        } elseif ($this->getConfigData('type') == 'I') { // per item
-            $shippingPrice = ($request->getPackageQty() * $this->getConfigData('price')) - ($this->getFreeBoxes() * $this->getConfigData('price'));
-        } else {
+
+        $shippingType = $this->getConfigData('type');
+        $shippingPrice = (float)$this->getConfigData('price');
+        if ('I' == $shippingType) { // per item
+            $shippingPrice = ($request->getPackageQty() * $shippingPrice) - ($this->getFreeBoxes() * $shippingPrice);
+        } elseif ('O' != $shippingType) { // not per order
             $shippingPrice = false;
         }
 
diff --git a/app/code/core/Mage/Tax/Model/Resource/Calculation.php b/app/code/core/Mage/Tax/Model/Resource/Calculation.php
index fe0e89c..49294b5 100644
--- a/app/code/core/Mage/Tax/Model/Resource/Calculation.php
+++ b/app/code/core/Mage/Tax/Model/Resource/Calculation.php
@@ -164,14 +164,15 @@ class Mage_Tax_Model_Resource_Calculation extends Mage_Core_Model_Resource_Db_Ab
             }
             $row['rates'][] = $oneRate;
 
+            $ruleId = null;
             if (isset($rates[$i + 1]['tax_calculation_rule_id'])) {
-                $rule = $rate['tax_calculation_rule_id'];
+                $ruleId = $rate['tax_calculation_rule_id'];
             }
             $priority = $rate['priority'];
             $ids[] = $rate['code'];
 
             if (isset($rates[$i + 1]['tax_calculation_rule_id'])) {
-                while (isset($rates[$i + 1]) && $rates[$i + 1]['tax_calculation_rule_id'] == $rule) {
+                while (isset($rates[$i + 1]) && $rates[$i + 1]['tax_calculation_rule_id'] == $ruleId) {
                     $i++;
                 }
             }
@@ -188,7 +189,7 @@ class Mage_Tax_Model_Resource_Calculation extends Mage_Core_Model_Resource_Db_Ab
                     $row['percent'] = $this->_collectPercent($totalPercent, $currentRate);
                     $totalPercent += $row['percent'];
                 }
-                $row['id'] = implode($ids);
+                $row['id'] = implode('', $ids);
                 $result[] = $row;
                 $row = array();
                 $ids = array();
@@ -251,7 +252,7 @@ class Mage_Tax_Model_Resource_Calculation extends Mage_Core_Model_Resource_Db_Ab
         $customerClassId = $request->getCustomerClassId();
         $countryId = $request->getCountryId();
         $regionId = $request->getRegionId();
-        $postcode = $request->getPostcode();
+        $postcode = trim($request->getPostcode());
 
         // Process productClassId as it can be array or usual value. Form best key for cache.
         $productClassId = $request->getProductClassId();
@@ -311,10 +312,15 @@ class Mage_Tax_Model_Resource_Calculation extends Mage_Core_Model_Resource_Db_Ab
                 ->where('rate.tax_country_id = ?', $countryId)
                 ->where("rate.tax_region_id IN(?)", array(0, (int)$regionId));
             $postcodeIsNumeric = is_numeric($postcode);
-            $postcodeIsRange = is_string($postcode) && preg_match('/^(.+)-(.+)$/', $postcode, $matches);
-            if ($postcodeIsRange) {
-                $zipFrom = $matches[1];
-                $zipTo = $matches[2];
+            $postcodeIsRange = false;
+            if (is_string($postcode) && preg_match('/^(.+)-(.+)$/', $postcode, $matches)) {
+                if (is_numeric($matches[2]) && strlen($matches[2]) < 5) {
+                    $postcodeIsNumeric = true;
+                } else {
+                    $postcodeIsRange = true;
+                    $zipFrom = $matches[1];
+                    $zipTo = $matches[2];
+                }
             }
 
             if ($postcodeIsNumeric || $postcodeIsRange) {
diff --git a/app/code/core/Mage/Wishlist/Model/Observer.php b/app/code/core/Mage/Wishlist/Model/Observer.php
index 7aff05f..cc5759d 100644
--- a/app/code/core/Mage/Wishlist/Model/Observer.php
+++ b/app/code/core/Mage/Wishlist/Model/Observer.php
@@ -102,7 +102,7 @@ class Mage_Wishlist_Model_Observer extends Mage_Core_Model_Abstract
             $wishlistIds = array($singleWishlistId);
         }
 
-        if (count($wishlistIds) && $request->getParam('wishlist_next')){
+        if (empty($wishlistIds) && $request->getParam('wishlist_next')){
             $wishlistId = array_shift($wishlistIds);
 
             if (Mage::getSingleton('customer/session')->isLoggedIn()) {
@@ -125,7 +125,7 @@ class Mage_Wishlist_Model_Observer extends Mage_Core_Model_Abstract
             Mage::getSingleton('checkout/session')->setSingleWishlistId(null);
         }
 
-        if ($request->getParam('wishlist_next') && count($urls)) {
+        if ($request->getParam('wishlist_next') && empty($urls)) {
             $url = array_shift($urls);
             $message = array_shift($messages);
 
diff --git a/app/code/core/Mage/Wishlist/controllers/IndexController.php b/app/code/core/Mage/Wishlist/controllers/IndexController.php
index 4d95856..926adb3 100644
--- a/app/code/core/Mage/Wishlist/controllers/IndexController.php
+++ b/app/code/core/Mage/Wishlist/controllers/IndexController.php
@@ -637,6 +637,9 @@ class Mage_Wishlist_IndexController extends Mage_Wishlist_Controller_Abstract
         if (empty($emails)) {
             $error = $this->__('Email address can\'t be empty.');
         }
+        elseif (count($emails) > 5) {
+            $error = $this->__('Please enter no more than 5 email addresses.');
+        }
         else {
             foreach ($emails as $index => $email) {
                 $email = trim($email);
diff --git a/app/code/core/Zend/Controller/Request/Http.php b/app/code/core/Zend/Controller/Request/Http.php
new file mode 100644
index 0000000..ac4eae6
--- /dev/null
+++ b/app/code/core/Zend/Controller/Request/Http.php
@@ -0,0 +1,1088 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category   Zend
+ * @package    Zend_Controller
+ * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ * @version    $Id$
+ */
+
+/** @see Zend_Controller_Request_Abstract */
+#require_once 'Zend/Controller/Request/Abstract.php';
+
+/** @see Zend_Uri */
+#require_once 'Zend/Uri.php';
+
+/**
+ * Zend_Controller_Request_Http
+ *
+ * HTTP request object for use with Zend_Controller family.
+ *
+ * @uses Zend_Controller_Request_Abstract
+ * @package Zend_Controller
+ * @subpackage Request
+ */
+class Zend_Controller_Request_Http extends Zend_Controller_Request_Abstract
+{
+    /**
+     * Scheme for http
+     *
+     */
+    const SCHEME_HTTP  = 'http';
+
+    /**
+     * Scheme for https
+     *
+     */
+    const SCHEME_HTTPS = 'https';
+
+    /**
+     * Allowed parameter sources
+     * @var array
+     */
+    protected $_paramSources = array('_GET', '_POST');
+
+    /**
+     * REQUEST_URI
+     * @var string;
+     */
+    protected $_requestUri;
+
+    /**
+     * Base URL of request
+     * @var string
+     */
+    protected $_baseUrl = null;
+
+    /**
+     * Base path of request
+     * @var string
+     */
+    protected $_basePath = null;
+
+    /**
+     * PATH_INFO
+     * @var string
+     */
+    protected $_pathInfo = '';
+
+    /**
+     * Instance parameters
+     * @var array
+     */
+    protected $_params = array();
+
+    /**
+     * Raw request body
+     * @var string|false
+     */
+    protected $_rawBody;
+
+    /**
+     * Alias keys for request parameters
+     * @var array
+     */
+    protected $_aliases = array();
+
+    /**
+     * Constructor
+     *
+     * If a $uri is passed, the object will attempt to populate itself using
+     * that information.
+     *
+     * @param string|Zend_Uri $uri
+     * @return void
+     * @throws Zend_Controller_Request_Exception when invalid URI passed
+     */
+    public function __construct($uri = null)
+    {
+        if (null !== $uri) {
+            if (!$uri instanceof Zend_Uri) {
+                $uri = Zend_Uri::factory($uri);
+            }
+            if ($uri->valid()) {
+                $path  = $uri->getPath();
+                $query = $uri->getQuery();
+                if (!empty($query)) {
+                    $path .= '?' . $query;
+                }
+
+                $this->setRequestUri($path);
+            } else {
+                #require_once 'Zend/Controller/Request/Exception.php';
+                throw new Zend_Controller_Request_Exception('Invalid URI provided to constructor');
+            }
+        } else {
+            $this->setRequestUri();
+        }
+    }
+
+    /**
+     * Access values contained in the superglobals as public members
+     * Order of precedence: 1. GET, 2. POST, 3. COOKIE, 4. SERVER, 5. ENV
+     *
+     * @see http://msdn.microsoft.com/en-us/library/system.web.httprequest.item.aspx
+     * @param string $key
+     * @return mixed
+     */
+    public function __get($key)
+    {
+        switch (true) {
+            case isset($this->_params[$key]):
+                return $this->_params[$key];
+            case isset($_GET[$key]):
+                return $_GET[$key];
+            case isset($_POST[$key]):
+                return $_POST[$key];
+            case isset($_COOKIE[$key]):
+                return $_COOKIE[$key];
+            case ($key == 'REQUEST_URI'):
+                return $this->getRequestUri();
+            case ($key == 'PATH_INFO'):
+                return $this->getPathInfo();
+            case isset($_SERVER[$key]):
+                return $_SERVER[$key];
+            case isset($_ENV[$key]):
+                return $_ENV[$key];
+            default:
+                return null;
+        }
+    }
+
+    /**
+     * Alias to __get
+     *
+     * @param string $key
+     * @return mixed
+     */
+    public function get($key)
+    {
+        return $this->__get($key);
+    }
+
+    /**
+     * Set values
+     *
+     * In order to follow {@link __get()}, which operates on a number of
+     * superglobals, setting values through overloading is not allowed and will
+     * raise an exception. Use setParam() instead.
+     *
+     * @param string $key
+     * @param mixed $value
+     * @return void
+     * @throws Zend_Controller_Request_Exception
+     */
+    public function __set($key, $value)
+    {
+        #require_once 'Zend/Controller/Request/Exception.php';
+        throw new Zend_Controller_Request_Exception('Setting values in superglobals not allowed; please use setParam()');
+    }
+
+    /**
+     * Alias to __set()
+     *
+     * @param string $key
+     * @param mixed $value
+     * @return void
+     */
+    public function set($key, $value)
+    {
+        return $this->__set($key, $value);
+    }
+
+    /**
+     * Check to see if a property is set
+     *
+     * @param string $key
+     * @return boolean
+     */
+    public function __isset($key)
+    {
+        switch (true) {
+            case isset($this->_params[$key]):
+                return true;
+            case isset($_GET[$key]):
+                return true;
+            case isset($_POST[$key]):
+                return true;
+            case isset($_COOKIE[$key]):
+                return true;
+            case isset($_SERVER[$key]):
+                return true;
+            case isset($_ENV[$key]):
+                return true;
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Alias to __isset()
+     *
+     * @param string $key
+     * @return boolean
+     */
+    public function has($key)
+    {
+        return $this->__isset($key);
+    }
+
+    /**
+     * Set GET values
+     *
+     * @param  string|array $spec
+     * @param  null|mixed $value
+     * @return Zend_Controller_Request_Http
+     */
+    public function setQuery($spec, $value = null)
+    {
+        if ((null === $value) && !is_array($spec)) {
+            #require_once 'Zend/Controller/Exception.php';
+            throw new Zend_Controller_Exception('Invalid value passed to setQuery(); must be either array of values or key/value pair');
+        }
+        if ((null === $value) && is_array($spec)) {
+            foreach ($spec as $key => $value) {
+                $this->setQuery($key, $value);
+            }
+            return $this;
+        }
+        $_GET[(string) $spec] = $value;
+        return $this;
+    }
+
+    /**
+     * Retrieve a member of the $_GET superglobal
+     *
+     * If no $key is passed, returns the entire $_GET array.
+     *
+     * @todo How to retrieve from nested arrays
+     * @param string $key
+     * @param mixed $default Default value to use if key not found
+     * @return mixed Returns null if key does not exist
+     */
+    public function getQuery($key = null, $default = null)
+    {
+        if (null === $key) {
+            return $_GET;
+        }
+
+        return (isset($_GET[$key])) ? $_GET[$key] : $default;
+    }
+
+    /**
+     * Set POST values
+     *
+     * @param  string|array $spec
+     * @param  null|mixed $value
+     * @return Zend_Controller_Request_Http
+     */
+    public function setPost($spec, $value = null)
+    {
+        if ((null === $value) && !is_array($spec)) {
+            #require_once 'Zend/Controller/Exception.php';
+            throw new Zend_Controller_Exception('Invalid value passed to setPost(); must be either array of values or key/value pair');
+        }
+        if ((null === $value) && is_array($spec)) {
+            foreach ($spec as $key => $value) {
+                $this->setPost($key, $value);
+            }
+            return $this;
+        }
+        $_POST[(string) $spec] = $value;
+        return $this;
+    }
+
+    /**
+     * Retrieve a member of the $_POST superglobal
+     *
+     * If no $key is passed, returns the entire $_POST array.
+     *
+     * @todo How to retrieve from nested arrays
+     * @param string $key
+     * @param mixed $default Default value to use if key not found
+     * @return mixed Returns null if key does not exist
+     */
+    public function getPost($key = null, $default = null)
+    {
+        if (null === $key) {
+            return $_POST;
+        }
+
+        return (isset($_POST[$key])) ? $_POST[$key] : $default;
+    }
+
+    /**
+     * Retrieve a member of the $_COOKIE superglobal
+     *
+     * If no $key is passed, returns the entire $_COOKIE array.
+     *
+     * @todo How to retrieve from nested arrays
+     * @param string $key
+     * @param mixed $default Default value to use if key not found
+     * @return mixed Returns null if key does not exist
+     */
+    public function getCookie($key = null, $default = null)
+    {
+        if (null === $key) {
+            return $_COOKIE;
+        }
+
+        return (isset($_COOKIE[$key])) ? $_COOKIE[$key] : $default;
+    }
+
+    /**
+     * Retrieve a member of the $_SERVER superglobal
+     *
+     * If no $key is passed, returns the entire $_SERVER array.
+     *
+     * @param string $key
+     * @param mixed $default Default value to use if key not found
+     * @return mixed Returns null if key does not exist
+     */
+    public function getServer($key = null, $default = null)
+    {
+        if (null === $key) {
+            return $_SERVER;
+        }
+
+        return (isset($_SERVER[$key])) ? $_SERVER[$key] : $default;
+    }
+
+    /**
+     * Retrieve a member of the $_ENV superglobal
+     *
+     * If no $key is passed, returns the entire $_ENV array.
+     *
+     * @param string $key
+     * @param mixed $default Default value to use if key not found
+     * @return mixed Returns null if key does not exist
+     */
+    public function getEnv($key = null, $default = null)
+    {
+        if (null === $key) {
+            return $_ENV;
+        }
+
+        return (isset($_ENV[$key])) ? $_ENV[$key] : $default;
+    }
+
+    /**
+     * Set the REQUEST_URI on which the instance operates
+     *
+     * If no request URI is passed, uses the value in $_SERVER['REQUEST_URI'],
+     * $_SERVER['HTTP_X_REWRITE_URL'], or $_SERVER['ORIG_PATH_INFO'] + $_SERVER['QUERY_STRING'].
+     *
+     * @param string $requestUri
+     * @return Zend_Controller_Request_Http
+     */
+    public function setRequestUri($requestUri = null)
+    {
+        if ($requestUri === null) {
+            if (
+                // IIS7 with URL Rewrite: make sure we get the unencoded url (double slash problem)
+                isset($_SERVER['IIS_WasUrlRewritten'])
+                && $_SERVER['IIS_WasUrlRewritten'] == '1'
+                && isset($_SERVER['UNENCODED_URL'])
+                && $_SERVER['UNENCODED_URL'] != ''
+            ) {
+                $requestUri = $_SERVER['UNENCODED_URL'];
+            } elseif (isset($_SERVER['REQUEST_URI'])) {
+                $requestUri = $_SERVER['REQUEST_URI'];
+                // Http proxy reqs setup request uri with scheme and host [and port] + the url path, only use url path
+                $schemeAndHttpHost = $this->getScheme() . '://' . $this->getHttpHost();
+                if (strpos($requestUri, $schemeAndHttpHost) === 0) {
+                    $requestUri = substr($requestUri, strlen($schemeAndHttpHost));
+                }
+            } elseif (isset($_SERVER['ORIG_PATH_INFO'])) { // IIS 5.0, PHP as CGI
+                $requestUri = $_SERVER['ORIG_PATH_INFO'];
+                if (!empty($_SERVER['QUERY_STRING'])) {
+                    $requestUri .= '?' . $_SERVER['QUERY_STRING'];
+                }
+            } else {
+                return $this;
+            }
+        } elseif (!is_string($requestUri)) {
+            return $this;
+        } else {
+            // Set GET items, if available
+            if (false !== ($pos = strpos($requestUri, '?'))) {
+                // Get key => value pairs and set $_GET
+                $query = substr($requestUri, $pos + 1);
+                parse_str($query, $vars);
+                $this->setQuery($vars);
+            }
+        }
+
+        $this->_requestUri = $requestUri;
+        return $this;
+    }
+
+    /**
+     * Returns the REQUEST_URI taking into account
+     * platform differences between Apache and IIS
+     *
+     * @return string
+     */
+    public function getRequestUri()
+    {
+        if (empty($this->_requestUri)) {
+            $this->setRequestUri();
+        }
+
+        return $this->_requestUri;
+    }
+
+    /**
+     * Set the base URL of the request; i.e., the segment leading to the script name
+     *
+     * E.g.:
+     * - /admin
+     * - /myapp
+     * - /subdir/index.php
+     *
+     * Do not use the full URI when providing the base. The following are
+     * examples of what not to use:
+     * - http://example.com/admin (should be just /admin)
+     * - http://example.com/subdir/index.php (should be just /subdir/index.php)
+     *
+     * If no $baseUrl is provided, attempts to determine the base URL from the
+     * environment, using SCRIPT_FILENAME, SCRIPT_NAME, PHP_SELF, and
+     * ORIG_SCRIPT_NAME in its determination.
+     *
+     * @param mixed $baseUrl
+     * @return Zend_Controller_Request_Http
+     */
+    public function setBaseUrl($baseUrl = null)
+    {
+        if ((null !== $baseUrl) && !is_string($baseUrl)) {
+            return $this;
+        }
+
+        if ($baseUrl === null) {
+            $filename = (isset($_SERVER['SCRIPT_FILENAME'])) ? basename($_SERVER['SCRIPT_FILENAME']) : '';
+
+            if (isset($_SERVER['SCRIPT_NAME']) && basename($_SERVER['SCRIPT_NAME']) === $filename) {
+                $baseUrl = $_SERVER['SCRIPT_NAME'];
+            } elseif (isset($_SERVER['PHP_SELF']) && basename($_SERVER['PHP_SELF']) === $filename) {
+                $baseUrl = $_SERVER['PHP_SELF'];
+            } elseif (isset($_SERVER['ORIG_SCRIPT_NAME']) && basename($_SERVER['ORIG_SCRIPT_NAME']) === $filename) {
+                $baseUrl = $_SERVER['ORIG_SCRIPT_NAME']; // 1and1 shared hosting compatibility
+            } else {
+                // Backtrack up the script_filename to find the portion matching
+                // php_self
+                $path    = isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : '';
+                $file    = isset($_SERVER['SCRIPT_FILENAME']) ? $_SERVER['SCRIPT_FILENAME'] : '';
+                $segs    = explode('/', trim($file, '/'));
+                $segs    = array_reverse($segs);
+                $index   = 0;
+                $last    = count($segs);
+                $baseUrl = '';
+                do {
+                    $seg     = $segs[$index];
+                    $baseUrl = '/' . $seg . $baseUrl;
+                    ++$index;
+                } while (($last > $index) && (false !== ($pos = strpos($path, $baseUrl))) && (0 != $pos));
+            }
+
+            // Does the baseUrl have anything in common with the request_uri?
+            $requestUri = $this->getRequestUri();
+
+            if (0 === strpos($requestUri, $baseUrl)) {
+                // full $baseUrl matches
+                $this->_baseUrl = $baseUrl;
+                return $this;
+            }
+
+            if (0 === strpos($requestUri, dirname($baseUrl))) {
+                // directory portion of $baseUrl matches
+                $this->_baseUrl = rtrim(dirname($baseUrl), '/');
+                return $this;
+            }
+
+            $truncatedRequestUri = $requestUri;
+            if (($pos = strpos($requestUri, '?')) !== false) {
+                $truncatedRequestUri = substr($requestUri, 0, $pos);
+            }
+
+            $basename = basename($baseUrl);
+            if (empty($basename) || !strpos($truncatedRequestUri, $basename)) {
+                // no match whatsoever; set it blank
+                $this->_baseUrl = '';
+                return $this;
+            }
+
+            // If using mod_rewrite or ISAPI_Rewrite strip the script filename
+            // out of baseUrl. $pos !== 0 makes sure it is not matching a value
+            // from PATH_INFO or QUERY_STRING
+            if ((strlen($requestUri) >= strlen($baseUrl))
+                && ((false !== ($pos = strpos($requestUri, $baseUrl))) && ($pos !== 0)))
+            {
+                $baseUrl = substr($requestUri, 0, $pos + strlen($baseUrl));
+            }
+        }
+
+        $this->_baseUrl = rtrim($baseUrl, '/');
+        return $this;
+    }
+
+    /**
+     * Everything in REQUEST_URI before PATH_INFO
+     * <form action="<?=$baseUrl?>/news/submit" method="POST"/>
+     *
+     * @return string
+     */
+    public function getBaseUrl($raw = false)
+    {
+        if (null === $this->_baseUrl) {
+            $this->setBaseUrl();
+        }
+
+        return (($raw == false) ? urldecode($this->_baseUrl) : $this->_baseUrl);
+    }
+
+    /**
+     * Set the base path for the URL
+     *
+     * @param string|null $basePath
+     * @return Zend_Controller_Request_Http
+     */
+    public function setBasePath($basePath = null)
+    {
+        if ($basePath === null) {
+            $filename = (isset($_SERVER['SCRIPT_FILENAME']))
+                      ? basename($_SERVER['SCRIPT_FILENAME'])
+                      : '';
+
+            $baseUrl = $this->getBaseUrl();
+            if (empty($baseUrl)) {
+                $this->_basePath = '';
+                return $this;
+            }
+
+            if (basename($baseUrl) === $filename) {
+                $basePath = dirname($baseUrl);
+            } else {
+                $basePath = $baseUrl;
+            }
+        }
+
+        if (substr(PHP_OS, 0, 3) === 'WIN') {
+            $basePath = str_replace('\\', '/', $basePath);
+        }
+
+        $this->_basePath = rtrim($basePath, '/');
+        return $this;
+    }
+
+    /**
+     * Everything in REQUEST_URI before PATH_INFO not including the filename
+     * <img src="<?=$basePath?>/images/zend.png"/>
+     *
+     * @return string
+     */
+    public function getBasePath()
+    {
+        if (null === $this->_basePath) {
+            $this->setBasePath();
+        }
+
+        return $this->_basePath;
+    }
+
+    /**
+     * Set the PATH_INFO string
+     *
+     * @param string|null $pathInfo
+     * @return Zend_Controller_Request_Http
+     */
+    public function setPathInfo($pathInfo = null)
+    {
+        if ($pathInfo === null) {
+            $baseUrl = $this->getBaseUrl(); // this actually calls setBaseUrl() & setRequestUri()
+            $baseUrlRaw = $this->getBaseUrl(false);
+            $baseUrlEncoded = urlencode($baseUrlRaw);
+        
+            if (null === ($requestUri = $this->getRequestUri())) {
+                return $this;
+            }
+        
+            // Remove the query string from REQUEST_URI
+            if ($pos = strpos($requestUri, '?')) {
+                $requestUri = substr($requestUri, 0, $pos);
+            }
+            
+            if (!empty($baseUrl) || !empty($baseUrlRaw)) {
+                if (strpos($requestUri, $baseUrl) === 0) {
+                    $pathInfo = substr($requestUri, strlen($baseUrl));
+                } elseif (strpos($requestUri, $baseUrlRaw) === 0) {
+                    $pathInfo = substr($requestUri, strlen($baseUrlRaw));
+                } elseif (strpos($requestUri, $baseUrlEncoded) === 0) {
+                    $pathInfo = substr($requestUri, strlen($baseUrlEncoded));
+                } else {
+                    $pathInfo = $requestUri;
+                }
+            } else {
+                $pathInfo = $requestUri;
+            }
+        
+        }
+
+        $this->_pathInfo = (string) $pathInfo;
+        return $this;
+    }
+
+    /**
+     * Returns everything between the BaseUrl and QueryString.
+     * This value is calculated instead of reading PATH_INFO
+     * directly from $_SERVER due to cross-platform differences.
+     *
+     * @return string
+     */
+    public function getPathInfo()
+    {
+        if (empty($this->_pathInfo)) {
+            $this->setPathInfo();
+        }
+
+        return $this->_pathInfo;
+    }
+
+    /**
+     * Set allowed parameter sources
+     *
+     * Can be empty array, or contain one or more of '_GET' or '_POST'.
+     *
+     * @param  array $paramSoures
+     * @return Zend_Controller_Request_Http
+     */
+    public function setParamSources(array $paramSources = array())
+    {
+        $this->_paramSources = $paramSources;
+        return $this;
+    }
+
+    /**
+     * Get list of allowed parameter sources
+     *
+     * @return array
+     */
+    public function getParamSources()
+    {
+        return $this->_paramSources;
+    }
+
+    /**
+     * Set a userland parameter
+     *
+     * Uses $key to set a userland parameter. If $key is an alias, the actual
+     * key will be retrieved and used to set the parameter.
+     *
+     * @param mixed $key
+     * @param mixed $value
+     * @return Zend_Controller_Request_Http
+     */
+    public function setParam($key, $value)
+    {
+        $key = (null !== ($alias = $this->getAlias($key))) ? $alias : $key;
+        parent::setParam($key, $value);
+        return $this;
+    }
+
+    /**
+     * Retrieve a parameter
+     *
+     * Retrieves a parameter from the instance. Priority is in the order of
+     * userland parameters (see {@link setParam()}), $_GET, $_POST. If a
+     * parameter matching the $key is not found, null is returned.
+     *
+     * If the $key is an alias, the actual key aliased will be used.
+     *
+     * @param mixed $key
+     * @param mixed $default Default value to use if key not found
+     * @return mixed
+     */
+    public function getParam($key, $default = null)
+    {
+        $keyName = (null !== ($alias = $this->getAlias($key))) ? $alias : $key;
+
+        $paramSources = $this->getParamSources();
+        if (isset($this->_params[$keyName])) {
+            return $this->_params[$keyName];
+        } elseif (in_array('_GET', $paramSources) && (isset($_GET[$keyName]))) {
+            return $_GET[$keyName];
+        } elseif (in_array('_POST', $paramSources) && (isset($_POST[$keyName]))) {
+            return $_POST[$keyName];
+        }
+
+        return $default;
+    }
+
+    /**
+     * Retrieve an array of parameters
+     *
+     * Retrieves a merged array of parameters, with precedence of userland
+     * params (see {@link setParam()}), $_GET, $_POST (i.e., values in the
+     * userland params will take precedence over all others).
+     *
+     * @return array
+     */
+    public function getParams()
+    {
+        $return       = $this->_params;
+        $paramSources = $this->getParamSources();
+        if (in_array('_GET', $paramSources)
+            && isset($_GET)
+            && is_array($_GET)
+        ) {
+            $return += $_GET;
+        }
+        if (in_array('_POST', $paramSources)
+            && isset($_POST)
+            && is_array($_POST)
+        ) {
+            $return += $_POST;
+        }
+        return $return;
+    }
+
+    /**
+     * Set parameters
+     *
+     * Set one or more parameters. Parameters are set as userland parameters,
+     * using the keys specified in the array.
+     *
+     * @param array $params
+     * @return Zend_Controller_Request_Http
+     */
+    public function setParams(array $params)
+    {
+        foreach ($params as $key => $value) {
+            $this->setParam($key, $value);
+        }
+        return $this;
+    }
+
+    /**
+     * Set a key alias
+     *
+     * Set an alias used for key lookups. $name specifies the alias, $target
+     * specifies the actual key to use.
+     *
+     * @param string $name
+     * @param string $target
+     * @return Zend_Controller_Request_Http
+     */
+    public function setAlias($name, $target)
+    {
+        $this->_aliases[$name] = $target;
+        return $this;
+    }
+
+    /**
+     * Retrieve an alias
+     *
+     * Retrieve the actual key represented by the alias $name.
+     *
+     * @param string $name
+     * @return string|null Returns null when no alias exists
+     */
+    public function getAlias($name)
+    {
+        if (isset($this->_aliases[$name])) {
+            return $this->_aliases[$name];
+        }
+
+        return null;
+    }
+
+    /**
+     * Retrieve the list of all aliases
+     *
+     * @return array
+     */
+    public function getAliases()
+    {
+        return $this->_aliases;
+    }
+
+    /**
+     * Return the method by which the request was made
+     *
+     * @return string
+     */
+    public function getMethod()
+    {
+        return $this->getServer('REQUEST_METHOD');
+    }
+
+    /**
+     * Was the request made by POST?
+     *
+     * @return boolean
+     */
+    public function isPost()
+    {
+        if ('POST' == $this->getMethod()) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Was the request made by GET?
+     *
+     * @return boolean
+     */
+    public function isGet()
+    {
+        if ('GET' == $this->getMethod()) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Was the request made by PUT?
+     *
+     * @return boolean
+     */
+    public function isPut()
+    {
+        if ('PUT' == $this->getMethod()) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Was the request made by DELETE?
+     *
+     * @return boolean
+     */
+    public function isDelete()
+    {
+        if ('DELETE' == $this->getMethod()) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Was the request made by HEAD?
+     *
+     * @return boolean
+     */
+    public function isHead()
+    {
+        if ('HEAD' == $this->getMethod()) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Was the request made by OPTIONS?
+     *
+     * @return boolean
+     */
+    public function isOptions()
+    {
+        if ('OPTIONS' == $this->getMethod()) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Was the request made by PATCH?
+     *
+     * @return boolean
+     */
+    public function isPatch()
+    {
+        if ('PATCH' == $this->getMethod()) {
+            return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Is the request a Javascript XMLHttpRequest?
+     *
+     * Should work with Prototype/Script.aculo.us, possibly others.
+     *
+     * @return boolean
+     */
+    public function isXmlHttpRequest()
+    {
+        return ($this->getHeader('X_REQUESTED_WITH') == 'XMLHttpRequest');
+    }
+
+    /**
+     * Is this a Flash request?
+     *
+     * @return boolean
+     */
+    public function isFlashRequest()
+    {
+        $header = strtolower($this->getHeader('USER_AGENT'));
+        return (strstr($header, ' flash')) ? true : false;
+    }
+
+    /**
+     * Is https secure request
+     *
+     * @return boolean
+     */
+    public function isSecure()
+    {
+        return ($this->getScheme() === self::SCHEME_HTTPS);
+    }
+
+    /**
+     * Return the raw body of the request, if present
+     *
+     * @return string|false Raw body, or false if not present
+     */
+    public function getRawBody()
+    {
+        if (null === $this->_rawBody) {
+            $body = file_get_contents('php://input');
+
+            if (strlen(trim($body)) > 0) {
+                $this->_rawBody = $body;
+            } else {
+                $this->_rawBody = false;
+            }
+        }
+        return $this->_rawBody;
+    }
+
+    /**
+     * Return the value of the given HTTP header. Pass the header name as the
+     * plain, HTTP-specified header name. Ex.: Ask for 'Accept' to get the
+     * Accept header, 'Accept-Encoding' to get the Accept-Encoding header.
+     *
+     * @param string $header HTTP header name
+     * @return string|false HTTP header value, or false if not found
+     * @throws Zend_Controller_Request_Exception
+     */
+    public function getHeader($header)
+    {
+        if (empty($header)) {
+            #require_once 'Zend/Controller/Request/Exception.php';
+            throw new Zend_Controller_Request_Exception('An HTTP header name is required');
+        }
+
+        // Try to get it from the $_SERVER array first
+        $temp = strtoupper(str_replace('-', '_', $header));
+        if (isset($_SERVER['HTTP_' . $temp])) {
+            return $_SERVER['HTTP_' . $temp];
+        }
+
+        /*
+         * Try to get it from the $_SERVER array on POST request or CGI environment
+         * @see https://www.ietf.org/rfc/rfc3875 (4.1.2. and 4.1.3.)
+         */
+        if (isset($_SERVER[$temp])
+            && in_array($temp, array('CONTENT_TYPE', 'CONTENT_LENGTH'))
+        ) {
+            return $_SERVER[$temp];
+        }
+
+        // This seems to be the only way to get the Authorization header on
+        // Apache
+        if (function_exists('apache_request_headers')) {
+            $headers = apache_request_headers();
+            if (isset($headers[$header])) {
+                return $headers[$header];
+            }
+            $header = strtolower($header);
+            foreach ($headers as $key => $value) {
+                if (strtolower($key) == $header) {
+                    return $value;
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Get the request URI scheme
+     *
+     * @return string
+     */
+    public function getScheme()
+    {
+        return ($this->getServer('HTTPS') == 'on') ? self::SCHEME_HTTPS : self::SCHEME_HTTP;
+    }
+
+    /**
+     * Get the HTTP host.
+     *
+     * "Host" ":" host [ ":" port ] ; Section 3.2.2
+     * Note the HTTP Host header is not the same as the URI host.
+     * It includes the port while the URI host doesn't.
+     *
+     * @return string
+     */
+    public function getHttpHost()
+    {
+        $host = $this->getServer('HTTP_HOST');
+        if (!empty($host)) {
+            return $host;
+        }
+
+        $scheme = $this->getScheme();
+        $name   = $this->getServer('SERVER_NAME');
+        $port   = $this->getServer('SERVER_PORT');
+
+        if(null === $name) {
+            return '';
+        }
+        elseif (($scheme == self::SCHEME_HTTP && $port == 80) || ($scheme == self::SCHEME_HTTPS && $port == 443)) {
+            return $name;
+        } else {
+            return $name . ':' . $port;
+        }
+    }
+
+    /**
+     * Get the client's IP addres
+     *
+     * @param  boolean $checkProxy
+     * @return string
+     */
+    public function getClientIp($checkProxy = true)
+    {
+        if ($checkProxy && $this->getServer('HTTP_CLIENT_IP') != null) {
+            $ip = $this->getServer('HTTP_CLIENT_IP');
+        } else if ($checkProxy && $this->getServer('HTTP_X_FORWARDED_FOR') != null) {
+            $ip = $this->getServer('HTTP_X_FORWARDED_FOR');
+        } else {
+            $ip = $this->getServer('REMOTE_ADDR');
+        }
+
+        return $ip;
+    }
+}
diff --git a/app/code/core/Zend/Locale/Math/PhpMath.php b/app/code/core/Zend/Locale/Math/PhpMath.php
new file mode 100644
index 0000000..850940a
--- /dev/null
+++ b/app/code/core/Zend/Locale/Math/PhpMath.php
@@ -0,0 +1,254 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category   Zend
+ * @package    Zend_Locale
+ * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ * @version    $Id$
+ */
+
+
+/**
+ * This class replaces default Zend_Locale_Math_PhpMath because of issues described in MPERF-10261 and MPERF-10262
+ * The only difference between current class and original one is overwritten implementation of Sub method
+ *
+ * Utility class for proxying math function to bcmath functions, if present,
+ * otherwise to PHP builtin math operators, with limited detection of overflow conditions.
+ * Sampling of PHP environments and platforms suggests that at least 80% to 90% support bcmath.
+ * This file should only be loaded for the 10% to 20% lacking access to the bcmath extension.
+ *
+ * @category   Zend
+ * @package    Zend_Locale
+ * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license    http://framework.zend.com/license/new-bsd     New BSD License
+ */
+class Zend_Locale_Math_PhpMath extends Zend_Locale_Math
+{
+    public static function disable()
+    {
+        self::$_bcmathDisabled = true;
+        self::$add   = array('Zend_Locale_Math_PhpMath', 'Add');
+        self::$sub   = array('Zend_Locale_Math_PhpMath', 'Sub');
+        self::$pow   = array('Zend_Locale_Math_PhpMath', 'Pow');
+        self::$mul   = array('Zend_Locale_Math_PhpMath', 'Mul');
+        self::$div   = array('Zend_Locale_Math_PhpMath', 'Div');
+        self::$comp  = array('Zend_Locale_Math_PhpMath', 'Comp');
+        self::$sqrt  = array('Zend_Locale_Math_PhpMath', 'Sqrt');
+        self::$mod   = array('Zend_Locale_Math_PhpMath', 'Mod');
+        self::$scale = array('Zend_Locale_Math_PhpMath', 'Scale');
+
+        self::$defaultScale     = 0;
+        self::$defaultPrecision = 1;
+    }
+
+    public static $defaultScale;
+    public static $defaultPrecision;
+
+
+    public static function Add($op1, $op2, $scale = null)
+    {
+        if ($scale === null) {
+            $scale     = Zend_Locale_Math_PhpMath::$defaultScale;
+            $precision = Zend_Locale_Math_PhpMath::$defaultPrecision;
+        } else {
+            $precision = pow(10, -$scale);
+        }
+
+        if (empty($op1)) {
+            $op1 = 0;
+        }
+        $op1 = self::normalize($op1);
+        $op2 = self::normalize($op2);
+        $result = $op1 + $op2;
+        if (is_infinite($result)  or  (abs($result - $op2 - $op1) > $precision)) {
+            #require_once 'Zend/Locale/Math/Exception.php';
+            throw new Zend_Locale_Math_Exception("addition overflow: $op1 + $op2 != $result", $op1, $op2, $result);
+        }
+
+        return self::round(self::normalize($result), $scale);
+    }
+
+    public static function Sub($op1, $op2, $scale = null)
+    {
+        if ($scale === null) {
+            $scale     = Zend_Locale_Math_PhpMath::$defaultScale;
+            $precision = Zend_Locale_Math_PhpMath::$defaultPrecision;
+        } else {
+            $precision = pow(10, -$scale);
+        }
+
+        if (empty($op1)) {
+            $op1 = 0;
+        }
+        if (empty($op2)) {
+            $op2 = 0;
+        }
+        $op1  = self::normalize($op1);
+        $op2  = self::normalize($op2);
+        $result = $op1 - $op2;
+        if (is_infinite($result)  or  (abs($result + $op2 - $op1) > $precision)) {
+            #require_once 'Zend/Locale/Math/Exception.php';
+            throw new Zend_Locale_Math_Exception("subtraction overflow: $op1 - $op2 != $result", $op1, $op2, $result);
+        }
+
+        return self::round(self::normalize($result), $scale);
+    }
+
+    public static function Pow($op1, $op2, $scale = null)
+    {
+        if ($scale === null) {
+            $scale = Zend_Locale_Math_PhpMath::$defaultScale;
+        }
+
+        $op1 = self::normalize($op1);
+        $op2 = self::normalize($op2);
+
+        // BCMath extension doesn't use decimal part of the power
+        // Provide the same behavior
+        $op2 = ($op2 > 0) ? floor($op2) : ceil($op2);
+
+        $result = pow($op1, $op2);
+        if (is_infinite($result)  or  is_nan($result)) {
+            #require_once 'Zend/Locale/Math/Exception.php';
+            throw new Zend_Locale_Math_Exception("power overflow: $op1 ^ $op2", $op1, $op2, $result);
+        }
+
+        return self::round(self::normalize($result), $scale);
+    }
+
+    public static function Mul($op1, $op2, $scale = null)
+    {
+        if ($scale === null) {
+            $scale = Zend_Locale_Math_PhpMath::$defaultScale;
+        }
+
+        if (empty($op1)) {
+            $op1 = 0;
+        }
+        $op1 = self::normalize($op1);
+        $op2 = self::normalize($op2);
+        $result = $op1 * $op2;
+        if (is_infinite($result)  or  is_nan($result)) {
+            #require_once 'Zend/Locale/Math/Exception.php';
+            throw new Zend_Locale_Math_Exception("multiplication overflow: $op1 * $op2 != $result", $op1, $op2, $result);
+        }
+
+        return self::round(self::normalize($result), $scale);
+    }
+
+    public static function Div($op1, $op2, $scale = null)
+    {
+        if ($scale === null) {
+            $scale = Zend_Locale_Math_PhpMath::$defaultScale;
+        }
+
+        if (empty($op2)) {
+            #require_once 'Zend/Locale/Math/Exception.php';
+            throw new Zend_Locale_Math_Exception("can not divide by zero", $op1, $op2, null);
+        }
+        if (empty($op1)) {
+            $op1 = 0;
+        }
+        $op1 = self::normalize($op1);
+        $op2 = self::normalize($op2);
+        $result = $op1 / $op2;
+        if (is_infinite($result)  or  is_nan($result)) {
+            #require_once 'Zend/Locale/Math/Exception.php';
+            throw new Zend_Locale_Math_Exception("division overflow: $op1 / $op2 != $result", $op1, $op2, $result);
+        }
+
+        return self::round(self::normalize($result), $scale);
+    }
+
+    public static function Sqrt($op1, $scale = null)
+    {
+        if ($scale === null) {
+            $scale = Zend_Locale_Math_PhpMath::$defaultScale;
+        }
+
+        if (empty($op1)) {
+            $op1 = 0;
+        }
+        $op1 = self::normalize($op1);
+        $result = sqrt($op1);
+        if (is_nan($result)) {
+            return NULL;
+        }
+
+        return self::round(self::normalize($result), $scale);
+    }
+
+    public static function Mod($op1, $op2)
+    {
+        if (empty($op1)) {
+            $op1 = 0;
+        }
+        if (empty($op2)) {
+            return NULL;
+        }
+        $op1 = self::normalize($op1);
+        $op2 = self::normalize($op2);
+        if ((int)$op2 == 0) {
+            return NULL;
+        }
+        $result = $op1 % $op2;
+        if (is_nan($result)  or  (($op1 - $result) % $op2 != 0)) {
+            #require_once 'Zend/Locale/Math/Exception.php';
+            throw new Zend_Locale_Math_Exception(
+                "modulus calculation error: $op1 % $op2 != $result", $op1, $op2, $result);
+        }
+
+        return self::normalize($result);
+    }
+
+    public static function Comp($op1, $op2, $scale = null)
+    {
+        if ($scale === null) {
+            $scale     = Zend_Locale_Math_PhpMath::$defaultScale;
+        }
+
+        if (empty($op1)) {
+            $op1 = 0;
+        }
+        $op1 = self::normalize($op1);
+        $op2 = self::normalize($op2);
+        if ($scale <> 0) {
+            $op1 = self::round($op1, $scale);
+            $op2 = self::round($op2, $scale);
+        } else {
+            $op1 = ($op1 > 0) ? floor($op1) : ceil($op1);
+            $op2 = ($op2 > 0) ? floor($op2) : ceil($op2);
+        }
+        if ($op1 > $op2) {
+            return 1;
+        } else if ($op1 < $op2) {
+            return -1;
+        }
+        return 0;
+    }
+
+    public static function Scale($scale)
+    {
+        if ($scale > 9) {
+            #require_once 'Zend/Locale/Math/Exception.php';
+            throw new Zend_Locale_Math_Exception("can not scale to precision $scale", $scale, null, null);
+        }
+        self::$defaultScale     = $scale;
+        self::$defaultPrecision = pow(10, -$scale);
+        return true;
+    }
+}
+
+Zend_Locale_Math_PhpMath::disable(); // disable use of bcmath functions
diff --git a/app/code/core/Zend/Validate/File/Upload.php b/app/code/core/Zend/Validate/File/Upload.php
new file mode 100644
index 0000000..ccca1c3
--- /dev/null
+++ b/app/code/core/Zend/Validate/File/Upload.php
@@ -0,0 +1,254 @@
+<?php
+/**
+ * Zend Framework
+ *
+ * LICENSE
+ *
+ * This source file is subject to the new BSD license that is bundled
+ * with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://framework.zend.com/license/new-bsd
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@zend.com so we can send you a copy immediately.
+ *
+ * @category  Zend
+ * @package   Zend_Validate
+ * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd     New BSD License
+ * @version   $Id$
+ */
+
+/**
+ * @see Zend_Validate_Abstract
+ */
+#require_once 'Zend/Validate/Abstract.php';
+
+/**
+ * Validator for the maximum size of a file up to a max of 2GB
+ *
+ * @category  Zend
+ * @package   Zend_Validate
+ * @copyright  Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
+ * @license   http://framework.zend.com/license/new-bsd     New BSD License
+ */
+class Zend_Validate_File_Upload extends Zend_Validate_Abstract
+{
+    /**@#+
+     * @const string Error constants
+     */
+    const INI_SIZE       = 'fileUploadErrorIniSize';
+    const FORM_SIZE      = 'fileUploadErrorFormSize';
+    const PARTIAL        = 'fileUploadErrorPartial';
+    const NO_FILE        = 'fileUploadErrorNoFile';
+    const NO_TMP_DIR     = 'fileUploadErrorNoTmpDir';
+    const CANT_WRITE     = 'fileUploadErrorCantWrite';
+    const EXTENSION      = 'fileUploadErrorExtension';
+    const ATTACK         = 'fileUploadErrorAttack';
+    const FILE_NOT_FOUND = 'fileUploadErrorFileNotFound';
+    const UNKNOWN        = 'fileUploadErrorUnknown';
+    /**@#-*/
+
+    /**
+     * @var array Error message templates
+     */
+    protected $_messageTemplates = array(
+        self::INI_SIZE       => "File '%value%' exceeds the defined ini size",
+        self::FORM_SIZE      => "File '%value%' exceeds the defined form size",
+        self::PARTIAL        => "File '%value%' was only partially uploaded",
+        self::NO_FILE        => "File '%value%' was not uploaded",
+        self::NO_TMP_DIR     => "No temporary directory was found for file '%value%'",
+        self::CANT_WRITE     => "File '%value%' can't be written",
+        self::EXTENSION      => "A PHP extension returned an error while uploading the file '%value%'",
+        self::ATTACK         => "File '%value%' was illegally uploaded. This could be a possible attack",
+        self::FILE_NOT_FOUND => "File '%value%' was not found",
+        self::UNKNOWN        => "Unknown error while uploading file '%value%'"
+    );
+
+    /**
+     * Internal array of files
+     * @var array
+     */
+    protected $_files = array();
+
+    /**
+     * Sets validator options
+     *
+     * The array $files must be given in syntax of Zend_File_Transfer to be checked
+     * If no files are given the $_FILES array will be used automatically.
+     * NOTE: This validator will only work with HTTP POST uploads!
+     *
+     * @param array|Zend_Config $files Array of files in syntax of Zend_File_Transfer
+     */
+    public function __construct($files = array())
+    {
+        if ($files instanceof Zend_Config) {
+            $files = $files->toArray();
+        }
+
+        $this->setFiles($files);
+    }
+
+    /**
+     * Returns the array of set files
+     *
+     * @param  string $file (Optional) The file to return in detail
+     * @return array
+     * @throws Zend_Validate_Exception If file is not found
+     */
+    public function getFiles($file = null)
+    {
+        if ($file !== null) {
+            $return = array();
+            foreach ($this->_files as $name => $content) {
+                if ($name === $file) {
+                    $return[$file] = $this->_files[$name];
+                }
+
+                if ($content['name'] === $file) {
+                    $return[$name] = $this->_files[$name];
+                }
+            }
+
+            if (count($return) === 0) {
+                #require_once 'Zend/Validate/Exception.php';
+                throw new Zend_Validate_Exception("The file '$file' was not found");
+            }
+
+            return $return;
+        }
+
+        return $this->_files;
+    }
+
+    /**
+     * Sets the files to be checked
+     *
+     * @param  array $files The files to check in syntax of Zend_File_Transfer
+     * @return Zend_Validate_File_Upload Provides a fluent interface
+     */
+    public function setFiles($files = array())
+    {
+        if (count($files) === 0) {
+            $this->_files = $_FILES;
+        } else {
+            $this->_files = $files;
+        }
+
+        // see ZF-10738
+        if (is_null($this->_files)) {
+            $this->_files = array();
+        }
+
+        foreach($this->_files as $file => $content) {
+            if (!isset($content['error'])) {
+                unset($this->_files[$file]);
+            }
+        }
+
+        return $this;
+    }
+
+    /**
+     * Defined by Zend_Validate_Interface
+     *
+     * Returns true if and only if the file was uploaded without errors
+     *
+     * @param  string $value Single file to check for upload errors, when giving null the $_FILES array
+     *                       from initialization will be used
+     * @param  string|null   $file
+     * @return boolean
+     */
+    public function isValid($value, $file = null)
+    {
+        $this->_messages = null;
+        if (array_key_exists($value, $this->_files)) {
+            $files[$value] = $this->_files[$value];
+        } else {
+            foreach ($this->_files as $file => $content) {
+                if (isset($content['name']) && ($content['name'] === $value)) {
+                    $files[$file] = $this->_files[$file];
+                }
+
+                if (isset($content['tmp_name']) && ($content['tmp_name'] === $value)) {
+                    $files[$file] = $this->_files[$file];
+                }
+            }
+        }
+
+        if (empty($files)) {
+            return $this->_throw($file, self::FILE_NOT_FOUND);
+        }
+
+        foreach ($files as $file => $content) {
+            $this->_value = $file;
+            switch($content['error']) {
+                case 0:
+                    if (!is_uploaded_file($content['tmp_name'])) {
+                        $this->_throw($content, self::ATTACK);
+                    }
+                    break;
+
+                case 1:
+                    $this->_throw($content, self::INI_SIZE);
+                    break;
+
+                case 2:
+                    $this->_throw($content, self::FORM_SIZE);
+                    break;
+
+                case 3:
+                    $this->_throw($content, self::PARTIAL);
+                    break;
+
+                case 4:
+                    $this->_throw($content, self::NO_FILE);
+                    break;
+
+                case 6:
+                    $this->_throw($content, self::NO_TMP_DIR);
+                    break;
+
+                case 7:
+                    $this->_throw($content, self::CANT_WRITE);
+                    break;
+
+                case 8:
+                    $this->_throw($content, self::EXTENSION);
+                    break;
+
+                default:
+                    $this->_throw($content, self::UNKNOWN);
+                    break;
+            }
+        }
+        /**
+         * PHP7.2 compatibility fix.
+         * More info https://wiki.php.net/rfc/counting_non_countables
+         */
+        if (isset($this->_messages) && count($this->_messages) > 0) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+
+    /**
+     * Throws an error of the given type
+     *
+     * @param  string $file
+     * @param  string $errorType
+     * @return false
+     */
+    protected function _throw($file, $errorType)
+    {
+        if ($file !== null) {
+            if (is_array($file) and !empty($file['name'])) {
+                $this->_value = $file['name'];
+            }
+        }
+
+        $this->_error($errorType);
+        return false;
+    }
+}
diff --git a/app/design/adminhtml/default/default/template/cms/browser/content/files.phtml b/app/design/adminhtml/default/default/template/cms/browser/content/files.phtml
index d4429d9..edff349 100644
--- a/app/design/adminhtml/default/default/template/cms/browser/content/files.phtml
+++ b/app/design/adminhtml/default/default/template/cms/browser/content/files.phtml
@@ -40,7 +40,7 @@ $_height = $this->getImagesHeight();
     <div class="filecnt" id="<?php echo $this->getFileId($file) ?>">
         <p class="nm" style="height:<?php echo $_height ?>px;width:<?php echo $_width ?>px;">
         <?php if($this->getFileThumbUrl($file)):?>
-            <img src="<?php echo $this->getFileThumbUrl($file) ?>" alt="<?php echo $this->getFileName($file) ?>"/>
+            <img src="<?php echo $this->getFileThumbUrl($file) ?>" alt="<?php echo $this->escapeHtml($this->getFileName($file)) ?>"/>
         <?php endif; ?>
         </p>
         <?php if($this->getFileWidth($file)): ?>
diff --git a/app/design/frontend/base/default/layout/captcha.xml b/app/design/frontend/base/default/layout/captcha.xml
index 8ad68ec..7c09b29 100644
--- a/app/design/frontend/base/default/layout/captcha.xml
+++ b/app/design/frontend/base/default/layout/captcha.xml
@@ -103,4 +103,32 @@
             </block>
         </reference>
     </checkout_onepage_index>
+    <wishlist_index_share>
+        <reference name="wishlist.sharing">
+            <block type="core/text_list" name="wishlist.sharing.form.additional.info">
+                <block type="captcha/captcha" name="captcha">
+                    <reference name="head">
+                        <action method="addJs"><file>mage/captcha.js</file></action>
+                    </reference>
+                    <action method="setFormId"><formId>wishlist_sharing</formId></action>
+                    <action method="setImgWidth"><width>230</width></action>
+                    <action method="setImgHeight"><width>50</width></action>
+                </block>
+            </block>
+        </reference>
+    </wishlist_index_share>
+    <sendfriend_product_send>
+            <reference name="sendfriend.send">
+            <block type="core/text_list" name="sendfriend.send.form.additional.info">
+                <block type="captcha/captcha" name="captcha">
+                    <reference name="head">
+                        <action method="addJs"><file>mage/captcha.js</file></action>
+                    </reference>
+                    <action method="setFormId"><formId>sendfriend_send</formId></action>
+                    <action method="setImgWidth"><width>230</width></action>
+                    <action method="setImgHeight"><width>50</width></action>
+                </block>
+            </block>
+        </reference>
+    </sendfriend_product_send>
 </layout>
diff --git a/app/design/frontend/base/default/template/wishlist/sharing.phtml b/app/design/frontend/base/default/template/wishlist/sharing.phtml
index b464ba1..cb06ff0 100644
--- a/app/design/frontend/base/default/template/wishlist/sharing.phtml
+++ b/app/design/frontend/base/default/template/wishlist/sharing.phtml
@@ -34,7 +34,7 @@
         <h2 class="legend"><?php echo $this->__('Sharing Information') ?></h2>
         <ul class="form-list">
             <li class="wide">
-                <label for="email_address" class="required"><em>*</em><?php echo $this->__('Email addresses, separated by commas') ?></label>
+                <label for="email_address" class="required"><em>*</em><?php echo $this->__('Up to 5 email addresses, separated by commas') ?></label>
                 <div class="input-box">
                     <textarea name="emails" cols="60" rows="5" id="email_address" class="validate-emails required-entry"><?php echo $this->getEnteredData('emails') ?></textarea>
                 </div>
@@ -42,7 +42,7 @@
             <li class="wide">
                 <label for="message"><?php echo $this->__('Message') ?></label>
                 <div class="input-box">
-                    <textarea id="message" name="message" cols="60" rows="5"><?php echo $this->getEnteredData('message') ?></textarea>
+                    <textarea id="message" name="message" cols="60" rows="3"><?php echo $this->getEnteredData('message') ?></textarea>
                 </div>
             </li>
             <?php if($this->helper('wishlist')->isRssAllow()): ?>
@@ -53,6 +53,7 @@
                 <label for="rss_url"><?php echo $this->__('Check this checkbox if you want to add a link to an rss feed to your wishlist.') ?></label>
             </li>
             <?php endif; ?>
+            <?php echo $this->getChildHtml('wishlist.sharing.form.additional.info'); ?>
         </ul>
     </div>
     <div class="buttons-set form-buttons">
diff --git a/app/design/frontend/rwd/default/layout/page.xml b/app/design/frontend/rwd/default/layout/page.xml
index e9f38bd..de124bd 100644
--- a/app/design/frontend/rwd/default/layout/page.xml
+++ b/app/design/frontend/rwd/default/layout/page.xml
@@ -36,7 +36,7 @@
 
             <block type="page/html_head" name="head" as="head">
                 <action method="addJs"><script>prototype/prototype.js</script></action>
-                <action method="addJs"><script>lib/jquery/jquery-1.12.0.min.js</script></action>
+                <action method="addJs"><script>lib/jquery/jquery-1.12.1.min.js</script></action>
                 <action method="addJs"><script>lib/jquery/noconflict.js</script></action>
                 <action method="addJs"><script>lib/ccard.js</script></action>
                 <action method="addJs"><script>prototype/validation.js</script></action>
diff --git a/app/design/frontend/rwd/default/template/sendfriend/send.phtml b/app/design/frontend/rwd/default/template/sendfriend/send.phtml
index 4dd63a7..235a58b 100644
--- a/app/design/frontend/rwd/default/template/sendfriend/send.phtml
+++ b/app/design/frontend/rwd/default/template/sendfriend/send.phtml
@@ -30,11 +30,20 @@
  * @see Mage_Sendfriend_Block_Send
  */
 ?>
+<?php $recipientsCount = $this->getRecipientsCount(); ?>
 <script type="text/javascript">
 //<![CDATA[
-    i=0;
-    var recipCount  = 1;
-    var maxRecip    = <?php echo $this->getMaxRecipients() ?>;
+    var recipCount = <?php echo $recipientsCount ? $recipientsCount : 1; ?>;
+    var maxRecip   = <?php echo $this->getMaxRecipients(); ?>;
+    i = recipCount - 1;
+
+    function process_recipients_list_increase() {
+        if (recipCount >= maxRecip && maxRecip != 0) {
+            $('add_recipient_button').hide();
+            $('max_recipient_message').show();
+        }
+    }
+
     function remove_recipient(i){
         $('recipients_name'+i).up(2).remove();
         recipCount--;
@@ -54,13 +63,14 @@
         li_mail.innerHTML += '<div class="field"><label for="recipients_email'+i+'" class="required"><em>*<\/em><?php echo $this->jsQuoteEscape($this->__('Email Address:')) ?><\/label><div class="input-box"><input name="recipients[email][]" value="" title="<?php echo $this->jsQuoteEscape($this->__('Email Address')) ?>" id="recipients_email'+i+'" type="text" class="input-text required-entry validate-email" /><\/div><\/div>';
         i++;
         recipCount++;
-        if(recipCount>=maxRecip && maxRecip != 0) {
-            $('add_recipient_button').hide();
-            $('max_recipient_message').show();
-        }
+        process_recipients_list_increase();
 
-        ul.appendChild(li_mail);
+        ul.getElementsBySelector('.fields:last')[0].insert({
+            after: li_mail
+        });
     }
+
+    window.addEventListener("load", process_recipients_list_increase);
 //]]>
 </script>
 
@@ -103,16 +113,72 @@
                     <div class="field">
                         <label for="recipients_name" class="required"><em>*</em><?php echo $this->__('Name:') ?></label>
                         <div class="input-box">
-                            <input name="recipients[name][]" type="text" class="input-text required-entry" id="recipients_name" />
+                            <input name="recipients[name][]"
+                                   value="<?php echo $this->quoteEscape($this->getFormData()->getData('recipients/name/0')); ?>"
+                                   type="text"
+                                   class="input-text required-entry"
+                                   id="recipients_name" />
                         </div>
                     </div>
                     <div class="field">
                         <label for="recipients_email" class="required"><em>*</em><?php echo $this->__('Email Address:') ?></label>
                         <div class="input-box">
-                            <input name="recipients[email][]" value="" title="<?php echo $this->quoteEscape($this->__('Email Address')) ?>" id="recipients_email" type="email" autocapitalize="off" autocorrect="off" spellcheck="false" class="input-text required-entry validate-email" />
+                            <input name="recipients[email][]"
+                                   value="<?php echo $this->quoteEscape($this->getFormData()->getData('recipients/email/0')); ?>"
+                                   title="<?php echo $this->quoteEscape($this->__('Email Address')); ?>"
+                                   id="recipients_email"
+                                   type="email"
+                                   class="input-text required-entry validate-email"
+                                   autocapitalize="off"
+                                   autocorrect="off"
+                                   spellcheck="false" />
                         </div>
                     </div>
                 </li>
+                <?php if ($recipientsCount): ?>
+                    <?php for ($i = 0; $i < $recipientsCount - 1; $i++): ?>
+                        <?php $recepientId = $i + 1; ?>
+                        <li class="fields additional-row">
+                            <p>
+                                <a href="delete_email"
+                                   title="<?php echo $this->__('Remove Email'); ?>"
+                                   onclick="remove_recipient(<?php echo $i; ?>); return false;"
+                                   class="btn-remove">
+                                    <?php echo $this->__('Remove Email'); ?>
+                                </a>
+                            </p>
+                            <div class="field">
+                                <label for="recipients_name<?php echo $i; ?>" class="required">
+                                    <em>*</em><?php echo $this->__('Name:'); ?>
+                                </label>
+                                <div class="input-box">
+                                    <input name="recipients[name][]"
+                                           value="<?php echo $this->quoteEscape($this->getFormData()->getData('recipients/name/' . $recepientId)); ?>"
+                                           type="text"
+                                           class="input-text required-entry"
+                                           id="recipients_name<?php echo $i; ?>" />
+                                </div>
+                            </div>
+                            <div class="field">
+                                <label for="recipients_email<?php echo $i; ?>" class="required">
+                                    <em>*</em><?php echo $this->__('Email Address:'); ?>
+                                </label>
+                                <div class="input-box">
+                                    <input name="recipients[email][]"
+                                           value="<?php echo $this->quoteEscape($this->getFormData()->getData('recipients/email/' . $recepientId)); ?>"
+                                           title="<?php echo $this->__('Email Address'); ?>"
+                                           id="recipients_email<?php echo $i; ?>"
+                                           type="email"
+                                           class="input-text required-entry validate-email"
+                                           autocapitalize="off"
+                                           autocorrect="off"
+                                           spellcheck="false" />
+                                </div>
+                            </div>
+                        </li>
+                    <?php endfor; ?>
+                <?php endif; ?>
+                <?php echo $this->getChildHtml('sendfriend.send.form.additional.info'); ?>
             </ul>
         </div>
         <div class="buttons-set">
diff --git a/app/etc/modules/Mage_All.xml b/app/etc/modules/Mage_All.xml
index e04b320..25c3f3a 100644
--- a/app/etc/modules/Mage_All.xml
+++ b/app/etc/modules/Mage_All.xml
@@ -234,7 +234,7 @@
             </depends>
         </Mage_Log>
         <Mage_Backup>
-            <active>true</active>
+            <active>false</active>
             <codePool>core</codePool>
             <depends>
                 <Mage_Core/>
diff --git a/app/etc/modules/Mage_Captcha.xml b/app/etc/modules/Mage_Captcha.xml
index ae30113..2fe3f70 100644
--- a/app/etc/modules/Mage_Captcha.xml
+++ b/app/etc/modules/Mage_Captcha.xml
@@ -33,6 +33,8 @@
             <depends>
                 <Mage_Customer />
                 <Mage_Adminhtml />
+                <Mage_Wishlist />
+                <Mage_Sendfriend />
             </depends>
         </Mage_Captcha>
     </modules>
diff --git a/app/locale/en_US/Mage_Catalog.csv b/app/locale/en_US/Mage_Catalog.csv
index 35f80dc..eb6c7d1 100644
--- a/app/locale/en_US/Mage_Catalog.csv
+++ b/app/locale/en_US/Mage_Catalog.csv
@@ -101,7 +101,8 @@
 "Attribute Set","Attribute Set"
 "Attribute Sets","Attribute Sets"
 "Attribute add","Attribute add"
-"Attribute code is invalid. Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.","Attribute code is invalid. Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter."
+"Attribute code is invalid. Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter. Do not use ""event"" for an attribute code.","Attribute code is invalid. Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter. Do not use ""event"" for an attribute code."
+"Attribute code is invalid. Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter. Do not use event"" for an attribute code.""","Attribute code is invalid. Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter. Do not use event"" for an attribute code."""
 "Attribute group with the \"/name/\" name already exists","Attribute group with the \"/name/\" name already exists"
 "Attribute remove","Attribute remove"
 "Attribute with the same code already exists","Attribute with the same code already exists"
diff --git a/app/locale/en_US/Mage_Core.csv b/app/locale/en_US/Mage_Core.csv
index c0d7e8e..4f11005 100644
--- a/app/locale/en_US/Mage_Core.csv
+++ b/app/locale/en_US/Mage_Core.csv
@@ -223,6 +223,8 @@
 "Path ""%value%"" is protected and cannot be used.","Path ""%value%"" is protected and cannot be used."
 "Path ""%value%"" may not include parent directory traversal (""../"", ""..\\).""","Path ""%value%"" may not include parent directory traversal (""../"", ""..\\)."""
 "Please define flag code.","Please define flag code."
+"Please do not use ""event"" for an attribute code.","Please do not use ""event"" for an attribute code."
+"Please do not use event"" for an attribute code.""","Please do not use event"" for an attribute code."""
 "Please enter 6 or more characters without leading or trailing spaces.","Please enter 6 or more characters without leading or trailing spaces."
 "Please enter 7 or more characters. Password should contain both numeric and alphabetic characters.","Please enter 7 or more characters. Password should contain both numeric and alphabetic characters."
 "Please enter a number 0 or greater in this field.","Please enter a number 0 or greater in this field."
diff --git a/app/locale/en_US/Mage_Eav.csv b/app/locale/en_US/Mage_Eav.csv
index 2b490b2..906aa84 100644
--- a/app/locale/en_US/Mage_Eav.csv
+++ b/app/locale/en_US/Mage_Eav.csv
@@ -29,6 +29,8 @@
 "'%value%' does not appear to be a valid URI hostname","'%value%' does not appear to be a valid URI hostname"
 "'%value%' does not appear to be a valid local network name","'%value%' does not appear to be a valid local network name"
 "'%value%' does not match the expected structure for a DNS hostname","'%value%' does not match the expected structure for a DNS hostname"
+". Do not use ""event"" for an attribute code, it is a reserved keyword.",". Do not use ""event"" for an attribute code, it is a reserved keyword."
+". Do not use event"" for an attribute code"," it is a reserved keyword."""
 "A joint field with this alias (%s) is already declared","A joint field with this alias (%s) is already declared"
 "Add Option","Add Option"
 "An error occurred while loading a record, aborting. Error: %s","An error occurred while loading a record, aborting. Error: %s"
diff --git a/app/locale/en_US/Mage_Wishlist.csv b/app/locale/en_US/Mage_Wishlist.csv
index 9f987d0..1182a51 100644
--- a/app/locale/en_US/Mage_Wishlist.csv
+++ b/app/locale/en_US/Mage_Wishlist.csv
@@ -66,6 +66,7 @@
 "Options Details","Options Details"
 "Out of stock","Out of stock"
 "Please enter a valid email addresses, separated by commas. For example johndoe@domain.com, johnsmith@domain.com.","Please enter a valid email addresses, separated by commas. For example johndoe@domain.com, johnsmith@domain.com."
+"Please enter no more than 5 email addresses.","Please enter no more than 5 email addresses."
 "Please input a valid email address.","Please input a valid email address."
 "Please, enter your comments...","Please, enter your comments..."
 "Price","Price"
@@ -89,6 +90,7 @@
 "This Wishlist has no Items","This Wishlist has no Items"
 "This product(s) is currently out of stock","This product(s) is currently out of stock"
 "Unable to add the following product(s) to shopping cart: %s.","Unable to add the following product(s) to shopping cart: %s."
+"Up to 5 email addresses, separated by commas","Up to 5 email addresses, separated by commas"
 "Update Wishlist","Update Wishlist"
 "User Description","User Description"
 "View Details","View Details"
diff --git a/dev/tests/functional/lib/Magento/Mtf/Client/Driver/Selenium/Driver.php b/dev/tests/functional/lib/Magento/Mtf/Client/Driver/Selenium/Driver.php
new file mode 100644
index 0000000..f83e6a7
--- /dev/null
+++ b/dev/tests/functional/lib/Magento/Mtf/Client/Driver/Selenium/Driver.php
@@ -0,0 +1,891 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magento.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magento.com for more information.
+ *
+ * @category    Tests
+ * @package     Tests_Functional
+ * @copyright  Copyright (c) 2006-2018 Magento, Inc. (http://www.magento.com)
+ * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+/**
+ * This class replaces vendor Magento\Mtf\Client\Driver\Selenium\Driver because of problem described in MPERF-10217
+ * The only difference between current class and original one is added new method isPresent
+ *
+ * @see Magento\Mtf\Client\Driver\Selenium\Driver
+ */
+namespace Magento\Mtf\Client\Driver\Selenium;
+
+use Magento\Mtf\Config\DataInterface;
+use Magento\Mtf\ObjectManager;
+use Magento\Mtf\Client\Locator;
+use Magento\Mtf\Client\DriverInterface;
+use Magento\Mtf\Client\ElementInterface;
+use Magento\Mtf\System\Event\EventManagerInterface;
+use Magento\Mtf\Client\Driver\Selenium\Driver\PageLoaderInterface;
+
+/**
+ * Selenium Driver.
+ */
+class Driver implements DriverInterface
+{
+    /**
+     * Driver configuration.
+     *
+     * @var DataInterface
+     */
+    protected $configuration;
+
+    /**
+     * Selenium test case factory
+     *
+     * @var RemoteDriverFactory
+     */
+    protected $remoteDriverFactory;
+
+    /**
+     * Remote driver instance.
+     *
+     * @var RemoteDriver
+     */
+    protected $driver;
+
+    /**
+     * Object manager instance.
+     *
+     * @var ObjectManager
+     */
+    protected $objectManager;
+
+    /**
+     * Page loader instance.
+     *
+     * @var PageLoaderInterface
+     */
+    protected $pageLoader;
+
+    /**
+     * @constructor
+     * @param DataInterface $configuration
+     * @param RemoteDriverFactory $remoteDriverFactory
+     * @param EventManagerInterface $eventManager
+     * @param ObjectManager $objectManager
+     * @param PageLoaderInterface $pageLoader
+     */
+    public function __construct(
+        DataInterface $configuration,
+        RemoteDriverFactory $remoteDriverFactory,
+        EventManagerInterface $eventManager,
+        ObjectManager $objectManager,
+        PageLoaderInterface $pageLoader
+    ) {
+        $this->configuration = $configuration;
+        $this->remoteDriverFactory = $remoteDriverFactory;
+        $this->eventManager = $eventManager;
+        $this->objectManager = $objectManager;
+        $this->pageLoader = $pageLoader;
+
+        $this->init();
+    }
+
+    /**
+     * Destructor.
+     *
+     * @return void
+     */
+    public function __destruct()
+    {
+        if ($this->driver->getSessionId()) {
+            $this->driver->stop();
+        }
+    }
+
+    /**
+     * Initial web driver.
+     *
+     * @return void
+     */
+    protected function init()
+    {
+        $this->driver = $this->remoteDriverFactory->create();
+
+        $this->driver->setBrowserUrl('about:blank');
+        $params = $this->configuration->get('server/0/item/selenium');
+        $this->driver->setupSpecificBrowser($params);
+        $this->driver->prepareSession();
+        $this->driver->currentWindow()->maximize();
+        $this->driver->cookie()->clear();
+        $this->driver->refresh();
+    }
+
+    /**
+     * Get native element by locator.
+     *
+     * @param Locator $locator
+     * @param \PHPUnit_Extensions_Selenium2TestCase_Element $context
+     * @param bool $wait
+     * @return \PHPUnit_Extensions_Selenium2TestCase_Element
+     * @throws \Exception
+     */
+    protected function findElement(
+        Locator $locator,
+        \PHPUnit_Extensions_Selenium2TestCase_Element $context = null,
+        $wait = true
+    ) {
+        $context = $context === null
+            ? $this->driver
+            : $context;
+
+        $criteria = $this->getSearchCriteria($locator);
+        $this->pageLoader->setDriver($this->driver)->wait();
+        if ($wait) {
+            return $this->waitUntil(
+                function () use ($context, $criteria) {
+                    $element = $context->element($criteria);
+                    return $element->displayed() ? $element : null;
+                }
+            );
+        }
+
+        $this->pageLoader->wait();
+
+        return $context->element($criteria);
+    }
+
+    /**
+     * Get native element by Mtf Element.
+     *
+     * @param ElementInterface $element
+     * @param bool $wait
+     * @return null|\PHPUnit_Extensions_Selenium2TestCase_Element
+     * @throws \PHPUnit_Extensions_Selenium2TestCase_WebDriverException
+     */
+    protected function getNativeElement(ElementInterface $element, $wait = true)
+    {
+        $chainElements = [$element];
+        while ($element = $element->getContext()) {
+            $chainElements[] = $element;
+        }
+
+        $contextElement = null;
+        /** @var ElementInterface $context */
+        foreach (array_reverse($chainElements) as $chainElement) {
+            /** @var ElementInterface $chainElement */
+            try {
+                // First call "getElement" with $resultElement equal "null" value
+                $contextElement = $this->findElement($chainElement->getLocator(), $contextElement, $wait);
+            } catch (\PHPUnit_Extensions_Selenium2TestCase_WebDriverException $e) {
+                throw new \PHPUnit_Extensions_Selenium2TestCase_WebDriverException(
+                    sprintf(
+                        'Error occurred on attempt to get element. Message: "%s". Locator: "%s" . Wait: "%s"',
+                        $e->getMessage(),
+                        $chainElement->getAbsoluteSelector(),
+                        $wait
+                    )
+                );
+            }
+        }
+
+        return $contextElement;
+    }
+
+    /**
+     * Get search criteria.
+     *
+     * @param Locator $locator
+     * @return \PHPUnit_Extensions_Selenium2TestCase_ElementCriteria
+     */
+    public function getSearchCriteria(Locator $locator)
+    {
+        $criteria = new \PHPUnit_Extensions_Selenium2TestCase_ElementCriteria($locator['using']);
+        $criteria->value($locator['value']);
+
+        return $criteria;
+    }
+
+    /**
+     * Inject Js Error collector.
+     *
+     * @return void
+     */
+    public function injectJsErrorCollector()
+    {
+        $this->driver->execute(
+            [
+                'script' => 'window.onerror = function(msg, url, line) {
+                var errors = {};
+                if (localStorage.getItem("errorsHistory")) {
+                    errors = JSON.parse(localStorage.getItem("errorsHistory"));
+                }
+                if (!(window.location.href in errors)) {
+                    errors[window.location.href] = [];
+                }
+                errors[window.location.href].push("error: \'" + msg + "\' " + "file: " + url + " " + "line: " + line);
+                localStorage.setItem("errorsHistory", JSON.stringify(errors));
+                }',
+                'args' => []
+            ]
+        );
+    }
+
+    /**
+     * Get js errors.
+     *
+     * @return string[]
+     */
+    public function getJsErrors()
+    {
+        return $this->driver->execute(
+            [
+                'script' => 'errors = JSON.parse(localStorage.getItem("errorsHistory"));
+                localStorage.removeItem("errorsHistory");
+                return errors;',
+                'args' => []
+            ]
+        );
+    }
+
+    /**
+     * Click.
+     *
+     * @param ElementInterface $element
+     * @return void
+     */
+    public function click(ElementInterface $element)
+    {
+        $absoluteSelector = $element->getAbsoluteSelector();
+        $this->eventManager->dispatchEvent(['click_before'], [__METHOD__, $absoluteSelector]);
+
+        $wrapperElement = $this->getNativeElement($element);
+        $this->driver->moveto($wrapperElement);
+        $wrapperElement->click();
+
+        $this->eventManager->dispatchEvent(['click_after'], [__METHOD__, $absoluteSelector]);
+    }
+
+    /**
+     * Double click.
+     *
+     * @param ElementInterface $element
+     * @return void
+     */
+    public function doubleClick(ElementInterface $element)
+    {
+        $this->eventManager->dispatchEvent(['double_click_before'], [__METHOD__, $element->getAbsoluteSelector()]);
+
+        $this->driver->moveto($this->getNativeElement($element));
+        $this->driver->doubleclick();
+    }
+
+    /**
+     * Right click.
+     *
+     * @param ElementInterface $element
+     * @return void
+     */
+    public function rightClick(ElementInterface $element)
+    {
+        $this->eventManager->dispatchEvent(['right_click_before'], [__METHOD__, $element->getAbsoluteSelector()]);
+
+        $this->driver->moveto($this->getNativeElement($element));
+        $this->driver->click(\PHPUnit_Extensions_Selenium2TestCase_SessionCommand_Click::RIGHT);
+    }
+
+    /**
+     * Check whether element is present in the DOM.
+     *
+     * @param ElementInterface $element
+     * @return bool
+     */
+    public function isPresent(ElementInterface $element)
+    {
+        $isPresent = true;
+        $nativeElement = null;
+        try {
+            $this->eventManager->dispatchEvent(['is_present'], [__METHOD__, $element->getAbsoluteSelector()]);
+            $nativeElement = $this->getNativeElement($element, false);
+        } catch (\PHPUnit_Extensions_Selenium2TestCase_WebDriverException $e) {
+            $isPresent = false;
+        }
+        return $nativeElement !== null && $isPresent;
+    }
+
+    /**
+     * Check whether element is visible.
+     *
+     * @param ElementInterface $element
+     * @return bool
+     */
+    public function isVisible(ElementInterface $element)
+    {
+        try {
+            $this->eventManager->dispatchEvent(['is_visible'], [__METHOD__, $element->getAbsoluteSelector()]);
+            $visible = $this->getNativeElement($element, false)->displayed();
+        } catch (\PHPUnit_Extensions_Selenium2TestCase_WebDriverException $e) {
+            $visible = false;
+        }
+
+        return $visible;
+    }
+
+    /**
+     * Check whether element is enabled.
+     *
+     * @param ElementInterface $element
+     * @return bool
+     */
+    public function isDisabled(ElementInterface $element)
+    {
+        return !$this->getNativeElement($element)->enabled();
+    }
+
+    /**
+     * Check whether element is selected.
+     *
+     * @param ElementInterface $element
+     * @return bool
+     */
+    public function isSelected(ElementInterface $element)
+    {
+        return $this->getNativeElement($element)->selected();
+    }
+
+    /**
+     * Set the value.
+     *
+     * @param ElementInterface $element
+     * @param string|array $value
+     * @return void
+     */
+    public function setValue(ElementInterface $element, $value)
+    {
+        $this->eventManager->dispatchEvent(['set_value'], [__METHOD__, $element->getAbsoluteSelector()]);
+
+        $wrappedElement = $this->getNativeElement($element);
+        $this->driver->moveto($wrappedElement);
+        $wrappedElement->clear();
+        $this->focus($element);
+
+        $wrappedElement->value($value);
+        $this->triggerChangeEvent($element);
+    }
+
+    /**
+     * Get the value.
+     *
+     * @param ElementInterface $element
+     * @return null|string
+     */
+    public function getValue(ElementInterface $element)
+    {
+        $this->eventManager->dispatchEvent(['get_value'], [__METHOD__, $element->getAbsoluteSelector()]);
+        return $this->getNativeElement($element)->value();
+    }
+
+    /**
+     * Get content.
+     *
+     * @param ElementInterface $element
+     * @return string
+     */
+    public function getText(ElementInterface $element)
+    {
+        return $this->getNativeElement($element)->text();
+    }
+
+    /**
+     * Find element on the page.
+     *
+     * @param string $selector
+     * @param string $strategy
+     * @param string $type = select|multiselect|checkbox|null OR custom class with full namespace
+     * @param ElementInterface $context
+     * @return ElementInterface
+     * @throws \Exception
+     */
+    public function find(
+        $selector,
+        $strategy = Locator::SELECTOR_CSS,
+        $type = null,
+        ElementInterface $context = null
+    ) {
+        $locator = new Locator($selector, $strategy);
+
+        $this->eventManager->dispatchEvent(['find'], [__METHOD__, $locator]);
+
+        $className = 'Magento\Mtf\Client\ElementInterface';
+        if (null !== $type) {
+            if (strpos($type, '\\') === false) {
+                $type = ucfirst(strtolower($type));
+                if (class_exists('Magento\Mtf\Client\Element\\' . $type . 'Element')) {
+                    $className = 'Magento\Mtf\Client\Element\\' . $type . 'Element';
+                }
+            } else {
+                if (!class_exists($type) && !interface_exists($type)) {
+                    throw new \Exception(
+                        sprintf('Requested interface or class "%s" does not exists!', $type)
+                    );
+                }
+                $className = $type;
+            }
+        }
+
+        return $this->objectManager->create(
+            $className,
+            [
+                'driver' => $this,
+                'locator' => $locator,
+                'context' => $context
+            ]
+        );
+    }
+
+    /**
+     * Drag and drop element to(between) another element(s).
+     *
+     * @param ElementInterface $element
+     * @param ElementInterface $target
+     * @return void
+     */
+    public function dragAndDrop(ElementInterface $element, ElementInterface $target)
+    {
+        $this->driver->moveto($this->getNativeElement($element));
+        $this->driver->buttondown();
+
+        $this->driver->moveto($this->getNativeElement($target));
+        $this->driver->buttonup();
+    }
+
+    /**
+     * Hover mouse over an element.
+     *
+     * @param ElementInterface $element
+     * @return void
+     */
+    public function hover(ElementInterface $element)
+    {
+        $this->driver->moveto($this->getNativeElement($element));
+    }
+
+    /**
+     * Send a sequence of key strokes to the active element.
+     *
+     * @param ElementInterface $element
+     * @param array $keys
+     * @return void
+     */
+    public function keys(ElementInterface $element, array $keys)
+    {
+        $wrappedElement = $this->getNativeElement($element);
+        $wrappedElement->clear();
+        $this->focus($element);
+        foreach ($keys as $key) {
+            $this->driver->keys($key);
+        }
+    }
+
+    /**
+     * Wait until callback isn't null or timeout occurs.
+     *
+     * @param callable $callback
+     * @return mixed
+     * @throws \Exception
+     */
+    public function waitUntil($callback)
+    {
+        return $this->driver->waitUntil($callback);
+    }
+
+    /**
+     * Get all elements by locator.
+     *
+     * @param ElementInterface $context
+     * @param string $selector
+     * @param string $strategy
+     * @param null|string $type
+     * @param bool $wait
+     * @return ElementInterface[]
+     * @throws \Exception
+     */
+    public function getElements(
+        ElementInterface $context,
+        $selector,
+        $strategy = Locator::SELECTOR_CSS,
+        $type = null,
+        $wait = true
+    ) {
+        $locator = new Locator($selector, $strategy);
+        $criteria = $this->getSearchCriteria($locator);
+        $nativeContext = $this->getNativeElement($context);
+        $resultElements = [];
+        if ($wait) {
+            try {
+                $nativeElements = $this->waitUntil(
+                    function () use ($nativeContext, $criteria) {
+                        return $nativeContext->elements($criteria);
+                    }
+                );
+            } catch (\Exception $e) {
+                throw new \Exception(
+                    sprintf(
+                        'Error occurred during waiting for an elements. Message: "%s". Locator: "%s"',
+                        $e->getMessage(),
+                        $context->getAbsoluteSelector() . ' -> ' . $locator
+                    )
+                );
+            }
+        } else {
+            $nativeElements = $nativeContext->elements($criteria);
+        }
+
+        foreach ($nativeElements as $key => $element) {
+            $resultElements[] = $this->find(
+                $this->getRelativeXpath($element, $nativeContext),
+                Locator::SELECTOR_XPATH,
+                $type,
+                $context
+            );
+        }
+
+        return $resultElements;
+    }
+
+    /**
+     * Retrieve relative xpath from context to element.
+     *
+     * @param \PHPUnit_Extensions_Selenium2TestCase_Element $element
+     * @param \PHPUnit_Extensions_Selenium2TestCase_Element $context
+     * @param string $path
+     * @param bool $includeLastIndex
+     * @return null
+     */
+    protected function getRelativeXpath(
+        \PHPUnit_Extensions_Selenium2TestCase_Element $element,
+        \PHPUnit_Extensions_Selenium2TestCase_Element $context,
+        $path = '',
+        $includeLastIndex = true
+    ) {
+        if ($element->equals($context)) {
+            return '.' . $path;
+        }
+
+        $parentLocator = new Locator('..', Locator::SELECTOR_XPATH);
+        $parentElement = $element->element($this->getSearchCriteria($parentLocator));
+
+        $childrenLocator = new Locator('*', Locator::SELECTOR_XPATH);
+
+        $index = 1;
+        $tag = $element->name();
+        if (!$includeLastIndex) {
+            return $this->getRelativeXpath($parentElement, $context, '/' . $tag);
+        }
+        foreach ($parentElement->elements($this->getSearchCriteria($childrenLocator)) as $child) {
+            if ($child->equals($element)) {
+                return $this->getRelativeXpath($parentElement, $context, '/' . $tag . '[' . $index . ']' . $path);
+            }
+            if ($child->name() == $tag) {
+                ++$index;
+            }
+        }
+        return null;
+    }
+
+    /**
+     * Get the value of a the given attribute of the element.
+     *
+     * @param ElementInterface $element
+     * @param string $name
+     * @return string
+     */
+    public function getAttribute(ElementInterface $element, $name)
+    {
+        return $this->getNativeElement($element)->attribute($name);
+    }
+
+    /**
+     * Open page.
+     *
+     * @param string $url
+     * @return void
+     */
+    public function open($url)
+    {
+        $this->eventManager->dispatchEvent(['open_before'], [__METHOD__, $url]);
+        $this->driver->url($url);
+        $this->eventManager->dispatchEvent(['open_after'], [__METHOD__, $url]);
+    }
+
+    /**
+     * Back to previous page.
+     *
+     * @return void
+     */
+    public function back()
+    {
+        $this->driver->back();
+        $this->eventManager->dispatchEvent(['back'], [__METHOD__]);
+    }
+
+    /**
+     * Forward page.
+     *
+     * @return void
+     */
+    public function forward()
+    {
+        $this->driver->forward();
+        $this->eventManager->dispatchEvent(['forward'], [__METHOD__]);
+    }
+
+    /**
+     * Refresh page.
+     *
+     * @return void
+     */
+    public function refresh()
+    {
+        $this->driver->refresh();
+    }
+
+    /**
+     * Reopen browser.
+     *
+     * @return void
+     */
+    public function reopen()
+    {
+        $this->eventManager->dispatchEvent(['reopen'], [__METHOD__]);
+        if ($this->driver->getSessionId()) {
+            $this->driver->stop();
+        }
+        if ($sessionStrategy = $this->configuration->get('server/0/item/selenium/sessionStrategy')) {
+            $this->driver->setSessionStrategy($sessionStrategy);
+        } else {
+            $this->driver->setSessionStrategy('isolated');
+        }
+        $this->init();
+    }
+
+    /**
+     * Change the focus to a frame in the page by locator.
+     *
+     * @param Locator|null $locator
+     * @return void
+     * @throws \Exception
+     */
+    public function switchToFrame(Locator $locator = null)
+    {
+        if ($locator) {
+            $this->eventManager->dispatchEvent(['switch_to_frame'], [(string)$locator]);
+            try {
+                $element = $this->findElement($locator);
+            } catch (\Exception $e) {
+                throw new \Exception(
+                    sprintf(
+                        'Error occurred during switch to frame! Message: "%s". Locator: "%s".',
+                        $e->getMessage(),
+                        $locator
+                    )
+                );
+            }
+        } else {
+            $this->eventManager->dispatchEvent(['switch_to_frame'], ['Switch to main window']);
+            $element = null;
+        }
+
+        $this->driver->frame($element);
+    }
+
+    /**
+     * Close the current window.
+     *
+     * @return void
+     */
+    public function closeWindow()
+    {
+        $windowHandles = $this->driver->windowHandles();
+        if (count($windowHandles) > 1) {
+            $this->driver->window(end($windowHandles));
+            $this->driver->closeWindow();
+            $this->driver->window(reset($windowHandles));
+        } else {
+            $this->driver->closeWindow();
+        }
+    }
+
+    /**
+     * Select window by its name.
+     *
+     * @return void
+     */
+    public function selectWindow()
+    {
+        $windowHandles = $this->driver->windowHandles();
+        $this->driver->window(end($windowHandles));
+    }
+
+    /**
+     * Get page title text.
+     *
+     * @return string
+     */
+    public function getTitle()
+    {
+        return $this->driver->title();
+    }
+
+    /**
+     * Press OK on an alert or confirm a dialog.
+     *
+     * @return void
+     */
+    public function acceptAlert()
+    {
+        //$this->_driver->acceptAlert(); Temporary fix for selenium issue 3544
+        $this->waitForOperationSuccess('acceptAlert');
+        $this->eventManager->dispatchEvent(['accept_alert_after'], [__METHOD__]);
+    }
+
+    /**
+     * Press Cancel on alert or does not confirm a dialog.
+     *
+     * @return void
+     */
+    public function dismissAlert()
+    {
+        //$this->_driver->dismissAlert(); Temporary fix for selenium issue 3544
+        $this->waitForOperationSuccess('dismissAlert');
+        $this->eventManager->dispatchEvent(['dismiss_alert_after'], [__METHOD__]);
+    }
+
+    /**
+     * @todo Temporary fix for selenium issue 3544
+     * https://code.google.com/p/selenium/issues/detail?id=3544
+     *
+     * @param string $operation
+     */
+    protected function waitForOperationSuccess($operation)
+    {
+        $driver = $this->driver;
+        $this->waitUntil(
+            function () use ($driver, $operation) {
+                try {
+                    $driver->$operation();
+                } catch (\PHPUnit_Extensions_Selenium2TestCase_WebDriverException $exception) {
+                    return null;
+                }
+                return true;
+            }
+        );
+    }
+
+    /**
+     * Get the alert dialog text.
+     *
+     * @return string
+     */
+    public function getAlertText()
+    {
+        return $this->driver->alertText();
+    }
+
+    /**
+     * Set the text to a prompt popup.
+     *
+     * @param string $text
+     * @return void
+     */
+    public function setAlertText($text)
+    {
+        $this->driver->alertText($text);
+    }
+
+    /**
+     * Get current page url.
+     *
+     * @return string
+     */
+    public function getUrl()
+    {
+        try {
+            if ($this->driver->alertText()) {
+                return null;
+            }
+        } catch (\PHPUnit_Extensions_Selenium2TestCase_WebDriverException $exception) {
+            return $this->driver->url();
+        }
+
+        return $this->driver->url();
+    }
+
+    /**
+     * Get Html page source.
+     *
+     * @return string
+     */
+    public function getHtmlSource()
+    {
+        return $this->driver->source();
+    }
+
+    /**
+     * Get binary string of image.
+     *
+     * @return string
+     */
+    public function getScreenshotData()
+    {
+        return $this->driver->currentScreenshot();
+    }
+
+    /**
+     * Set focus on element.
+     *
+     * @param ElementInterface $element
+     * @return void
+     */
+    public function focus(ElementInterface $element)
+    {
+        $elementId = $element->getAttribute('id');
+        if ($elementId) {
+            $js = "if (window.jQuery != undefined) jQuery('[id=\"$elementId\"]').focus(); ";
+            $js .= "var element = document.getElementById('$elementId'); if (element != undefined) element.focus();";
+            $this->driver->execute(['script' => $js, 'args' => []]);
+        } else {
+            $element->click();
+        }
+    }
+
+    /**
+     * Trigger change on event.
+     *
+     * @param ElementInterface $element
+     * @return void
+     */
+    protected function triggerChangeEvent(ElementInterface $element)
+    {
+        $elementId = $element->getAttribute('id');
+        if ($elementId) {
+            $js = "if (window.jQuery != undefined)";
+            $js .= "{jQuery('[id=\"$elementId\"]').change(); jQuery('[id=\"$elementId\"]').keyup();}";
+            $js .= "var element = document.getElementById('$elementId'); if (element != undefined) element.focus();";
+            $this->driver->execute(['script' => $js, 'args' => []]);
+        }
+    }
+}
diff --git a/dev/tests/functional/lib/Magento/Mtf/Client/Element/SimpleElement.php b/dev/tests/functional/lib/Magento/Mtf/Client/Element/SimpleElement.php
new file mode 100644
index 0000000..5829965
--- /dev/null
+++ b/dev/tests/functional/lib/Magento/Mtf/Client/Element/SimpleElement.php
@@ -0,0 +1,308 @@
+<?php
+/**
+ * Magento
+ *
+ * NOTICE OF LICENSE
+ *
+ * This source file is subject to the Open Software License (OSL 3.0)
+ * that is bundled with this package in the file LICENSE.txt.
+ * It is also available through the world-wide-web at this URL:
+ * http://opensource.org/licenses/osl-3.0.php
+ * If you did not receive a copy of the license and are unable to
+ * obtain it through the world-wide-web, please send an email
+ * to license@magento.com so we can send you a copy immediately.
+ *
+ * DISCLAIMER
+ *
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
+ * versions in the future. If you wish to customize Magento for your
+ * needs please refer to http://www.magento.com for more information.
+ *
+ * @category    Tests
+ * @package     Tests_Functional
+ * @copyright  Copyright (c) 2006-2018 Magento, Inc. (http://www.magento.com)
+ * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
+ */
+
+/**
+ * This class replaces vendor Magento\Mtf\Client\Element\SimpleElement because of problem described in MPERF-10217
+ * The only difference between current class and original one is added new method isPresent
+ *
+ * @see Magento\Mtf\Client\Element\SimpleElement
+ */
+namespace Magento\Mtf\Client\Element;
+
+use Magento\Mtf\Client\Locator;
+use Magento\Mtf\Client\DriverInterface;
+use Magento\Mtf\Client\ElementInterface;
+use Magento\Mtf\System\Event\EventManagerInterface;
+
+/**
+ * Class SimpleElement
+ */
+class SimpleElement implements ElementInterface
+{
+    /**
+     * @var EventManagerInterface
+     */
+    protected $eventManager;
+
+    /**
+     * Wrapped element
+     *
+     * @var DriverInterface
+     */
+    protected $driver;
+
+    /**
+     * Element locator
+     *
+     * @var Locator
+     */
+    protected $locator;
+
+    /**
+     * Element context
+     *
+     * @var ElementInterface
+     */
+    protected $context;
+
+    /**
+     * Constructor
+     *
+     * @param DriverInterface $driver
+     * @param EventManagerInterface $eventManager
+     * @param Locator $locator
+     * @param ElementInterface $context
+     */
+    public function __construct(
+        DriverInterface $driver,
+        EventManagerInterface $eventManager,
+        Locator $locator,
+        ElementInterface $context = null
+    ) {
+        $this->driver = $driver;
+        $this->eventManager = $eventManager;
+        $this->locator = $locator;
+        $this->context = $context;
+    }
+
+    /**
+     * Drag and drop element to(between) another element(s)
+     *
+     * @param ElementInterface $target
+     * @return void
+     */
+    public function dragAndDrop(ElementInterface $target)
+    {
+        $this->driver->dragAndDrop($this, $target);
+    }
+
+    /**
+     * Check whether element is visible
+     *
+     * @return bool
+     */
+    public function isVisible()
+    {
+        return $this->driver->isVisible($this);
+    }
+
+    /**
+     * Get content
+     *
+     * @return string
+     */
+    public function getText()
+    {
+        return $this->driver->getText($this);
+    }
+
+    /**
+     * Find element by locator in context of current element
+     *
+     * @param string $selector
+     * @param string $strategy [optional]
+     * @param null|string $type [optional]
+     * @return ElementInterface
+     */
+    public function find($selector, $strategy = Locator::SELECTOR_CSS, $type = null)
+    {
+        return $this->driver->find($selector, $strategy, $type, $this);
+    }
+
+    /**
+     * Get all elements by locator
+     *
+     * @param string $selector
+     * @param string $strategy
+     * @param null|string $type
+     * @return ElementInterface[]
+     */
+    public function getElements($selector, $strategy = Locator::SELECTOR_CSS, $type = null)
+    {
+        return $this->driver->getElements($this, $selector, $strategy, $type);
+    }
+
+    /**
+     * Wait until callback isn't null or timeout occurs
+     *
+     * @param callable $callback
+     * @return mixed
+     */
+    public function waitUntil($callback)
+    {
+        return $this->driver->waitUntil($callback);
+    }
+
+    /**
+     * Click
+     *
+     * @return void
+     */
+    public function click()
+    {
+        $this->driver->click($this);
+    }
+
+    /**
+     * Send keys
+     *
+     * @param array $keys
+     * @return void
+     */
+    public function keys(array $keys)
+    {
+        $this->driver->keys($this, $keys);
+    }
+
+    /**
+     * Check whether element is enabled
+     *
+     * @return bool
+     */
+    public function isDisabled()
+    {
+        return $this->driver->isDisabled($this);
+    }
+
+    /**
+     * Check whether element is present in the DOM.
+     *
+     * @return bool
+     */
+    public function isPresent()
+    {
+        return $this->driver->isPresent($this);
+    }
+
+    /**
+     * Check whether element is selected
+     *
+     * @return bool
+     */
+    public function isSelected()
+    {
+        return $this->driver->isSelected($this);
+    }
+
+    /**
+     * Set the value
+     *
+     * @param string|array $value
+     * @return void
+     */
+    public function setValue($value)
+    {
+        $this->driver->setValue($this, $value);
+    }
+
+    /**
+     * Get the value
+     *
+     * @return string|array
+     */
+    public function getValue()
+    {
+        return $this->driver->getValue($this);
+    }
+
+    /**
+     * Get the value of a the given attribute of the element
+     *
+     * @param string $name
+     * @return string
+     */
+    public function getAttribute($name)
+    {
+        return $this->driver->getAttribute($this, $name);
+    }
+
+    /**
+     * Double click
+     *
+     * @return void
+     */
+    public function doubleClick()
+    {
+        $this->driver->doubleClick($this);
+    }
+
+    /**
+     * Right click
+     *
+     * @return void
+     */
+    public function rightClick()
+    {
+        $this->driver->rightClick($this);
+    }
+
+    /**
+     * Get absolute selector (for DBG)
+     *
+     * @return string
+     */
+    public function getAbsoluteSelector()
+    {
+        $selectors = [];
+        $selectors[] = $this->getLocator();
+        $element = $this;
+        while($element = $element->getContext()) {
+            $selectors[] = $element->getLocator();
+        }
+
+        return implode(' -> ', array_reverse($selectors));
+    }
+
+    /**
+     * Get element locator
+     *
+     * @return Locator
+     */
+    public function getLocator()
+    {
+        return $this->locator;
+    }
+
+    /**
+     * Get context element
+     *
+     * @return ElementInterface|null
+     */
+    public function getContext()
+    {
+        return $this->context;
+    }
+
+    /**
+     * Hover mouse over an element.
+     *
+     * @return void
+     */
+    public function hover()
+    {
+        $this->driver->hover($this);
+    }
+}
diff --git a/dev/tests/functional/tests/app/Mage/Adminhtml/Test/Block/Sales/Order/Create/Payment.php b/dev/tests/functional/tests/app/Mage/Adminhtml/Test/Block/Sales/Order/Create/Payment.php
index 30eb174..f452881 100644
--- a/dev/tests/functional/tests/app/Mage/Adminhtml/Test/Block/Sales/Order/Create/Payment.php
+++ b/dev/tests/functional/tests/app/Mage/Adminhtml/Test/Block/Sales/Order/Create/Payment.php
@@ -58,8 +58,10 @@ class Payment extends Block
     public function selectPaymentMethod(array $paymentCode)
     {
         $paymentInput = $this->_rootElement->find(sprintf($this->paymentMethod, $paymentCode['method']));
-        if ($paymentInput->isVisible()) {
-            $paymentInput->click();
+        if ($paymentInput->isPresent()) {
+            if ($paymentInput->isVisible()) {
+                $paymentInput->click();
+            }
             $this->getTemplateBlock()->waitLoader();
         } else {
             throw new \Exception("{$paymentCode['method']} method is not visible.");
diff --git a/dev/tests/functional/tests/app/Mage/Paypal/Test/Block/NewLogin.php b/dev/tests/functional/tests/app/Mage/Paypal/Test/Block/NewLogin.php
index 02d8494..608bcfc 100644
--- a/dev/tests/functional/tests/app/Mage/Paypal/Test/Block/NewLogin.php
+++ b/dev/tests/functional/tests/app/Mage/Paypal/Test/Block/NewLogin.php
@@ -67,10 +67,12 @@ class NewLogin extends Login
         $this->clickToElement($this->startLoginButton);
         $this->_rootElement = $this->browser->find('.main');
         parent::fill($customer, $this->switchOnPayPalFrame($element));
-        $this->clickToElement($this->nextButton);
 
         $path = glob(MTF_TESTS_PATH . preg_replace('/^\w+\/\w+/', '*/*', str_replace('\\', '/', get_class($this))) . 'Password.xml');
         $this->mapping = $this->mapper->read(reset($path))['fields'];
+        if (!$this->browser->find($this->mapping['password']['selector'])->isVisible()) {
+            $this->clickToElement($this->nextButton);
+        }
         parent::fill($customer, $this->switchOnPayPalFrame($element));
 
         return $this;
diff --git a/downloader/Maged/Controller.php b/downloader/Maged/Controller.php
index 6387008..bcfb008 100644
--- a/downloader/Maged/Controller.php
+++ b/downloader/Maged/Controller.php
@@ -813,15 +813,17 @@ final class Maged_Controller
      */
     public function dispatch()
     {
-        $baseUrl = Mage::getBaseUrl(
-            Mage_Core_Model_Store::URL_TYPE_LINK, Mage::getSingleton('adminhtml/url')->getSecure()
-        );
-        if (strpos($baseUrl, 'https') === 0) {
-            $request = Mage::app()->getRequest();
-            if (!$request->isSecure()) {
-                Mage::app()->getFrontController()->getResponse()
-                    ->setRedirect(rtrim($baseUrl, '/') . $request->getRequestUri(), 301)->sendResponse();
-                exit;
+        if (class_exists('Mage')) {
+            $baseUrl = Mage::getBaseUrl(
+                Mage_Core_Model_Store::URL_TYPE_LINK, Mage::getSingleton('adminhtml/url')->getSecure()
+            );
+            if (strpos($baseUrl, 'https') === 0) {
+                $request = Mage::app()->getRequest();
+                if (!$request->isSecure()) {
+                    Mage::app()->getFrontController()->getResponse()
+                        ->setRedirect(rtrim($baseUrl, '/') . $request->getRequestUri(), 301)->sendResponse();
+                    exit;
+                }
             }
         }
 
@@ -1071,8 +1073,8 @@ final class Maged_Controller
         return array(
             'major'     => '1',
             'minor'     => '9',
-            'revision'  => '3',
-            'patch'     => '10',
+            'revision'  => '4',
+            'patch'     => '0',
             'stability' => '',
             'number'    => '',
         );
diff --git a/js/lib/jquery/jquery-1.12.0.js b/js/lib/jquery/jquery-1.12.0.js
deleted file mode 100644
index 4855adc..0000000
--- a/js/lib/jquery/jquery-1.12.0.js
+++ /dev/null
@@ -1,11027 +0,0 @@
-/*!
- * jQuery JavaScript Library v1.12.0
- * http://jquery.com/
- *
- * Includes Sizzle.js
- * http://sizzlejs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2016-01-08T19:56Z
- */
-
-(function( global, factory ) {
-
-	if ( typeof module === "object" && typeof module.exports === "object" ) {
-		// For CommonJS and CommonJS-like environments where a proper `window`
-		// is present, execute the factory and get jQuery.
-		// For environments that do not have a `window` with a `document`
-		// (such as Node.js), expose a factory as module.exports.
-		// This accentuates the need for the creation of a real `window`.
-		// e.g. var jQuery = require("jquery")(window);
-		// See ticket #14549 for more info.
-		module.exports = global.document ?
-			factory( global, true ) :
-			function( w ) {
-				if ( !w.document ) {
-					throw new Error( "jQuery requires a window with a document" );
-				}
-				return factory( w );
-			};
-	} else {
-		factory( global );
-	}
-
-// Pass this if window is not defined yet
-}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
-
-// Support: Firefox 18+
-// Can't be in strict mode, several libs including ASP.NET trace
-// the stack via arguments.caller.callee and Firefox dies if
-// you try to trace through "use strict" call chains. (#13335)
-//"use strict";
-var deletedIds = [];
-
-var document = window.document;
-
-var slice = deletedIds.slice;
-
-var concat = deletedIds.concat;
-
-var push = deletedIds.push;
-
-var indexOf = deletedIds.indexOf;
-
-var class2type = {};
-
-var toString = class2type.toString;
-
-var hasOwn = class2type.hasOwnProperty;
-
-var support = {};
-
-
-
-var
-	version = "1.12.0",
-
-	// Define a local copy of jQuery
-	jQuery = function( selector, context ) {
-
-		// The jQuery object is actually just the init constructor 'enhanced'
-		// Need init if jQuery is called (just allow error to be thrown if not included)
-		return new jQuery.fn.init( selector, context );
-	},
-
-	// Support: Android<4.1, IE<9
-	// Make sure we trim BOM and NBSP
-	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
-
-	// Matches dashed string for camelizing
-	rmsPrefix = /^-ms-/,
-	rdashAlpha = /-([\da-z])/gi,
-
-	// Used by jQuery.camelCase as callback to replace()
-	fcamelCase = function( all, letter ) {
-		return letter.toUpperCase();
-	};
-
-jQuery.fn = jQuery.prototype = {
-
-	// The current version of jQuery being used
-	jquery: version,
-
-	constructor: jQuery,
-
-	// Start with an empty selector
-	selector: "",
-
-	// The default length of a jQuery object is 0
-	length: 0,
-
-	toArray: function() {
-		return slice.call( this );
-	},
-
-	// Get the Nth element in the matched element set OR
-	// Get the whole matched element set as a clean array
-	get: function( num ) {
-		return num != null ?
-
-			// Return just the one element from the set
-			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
-
-			// Return all the elements in a clean array
-			slice.call( this );
-	},
-
-	// Take an array of elements and push it onto the stack
-	// (returning the new matched element set)
-	pushStack: function( elems ) {
-
-		// Build a new jQuery matched element set
-		var ret = jQuery.merge( this.constructor(), elems );
-
-		// Add the old object onto the stack (as a reference)
-		ret.prevObject = this;
-		ret.context = this.context;
-
-		// Return the newly-formed element set
-		return ret;
-	},
-
-	// Execute a callback for every element in the matched set.
-	each: function( callback ) {
-		return jQuery.each( this, callback );
-	},
-
-	map: function( callback ) {
-		return this.pushStack( jQuery.map( this, function( elem, i ) {
-			return callback.call( elem, i, elem );
-		} ) );
-	},
-
-	slice: function() {
-		return this.pushStack( slice.apply( this, arguments ) );
-	},
-
-	first: function() {
-		return this.eq( 0 );
-	},
-
-	last: function() {
-		return this.eq( -1 );
-	},
-
-	eq: function( i ) {
-		var len = this.length,
-			j = +i + ( i < 0 ? len : 0 );
-		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
-	},
-
-	end: function() {
-		return this.prevObject || this.constructor();
-	},
-
-	// For internal use only.
-	// Behaves like an Array's method, not like a jQuery method.
-	push: push,
-	sort: deletedIds.sort,
-	splice: deletedIds.splice
-};
-
-jQuery.extend = jQuery.fn.extend = function() {
-	var src, copyIsArray, copy, name, options, clone,
-		target = arguments[ 0 ] || {},
-		i = 1,
-		length = arguments.length,
-		deep = false;
-
-	// Handle a deep copy situation
-	if ( typeof target === "boolean" ) {
-		deep = target;
-
-		// skip the boolean and the target
-		target = arguments[ i ] || {};
-		i++;
-	}
-
-	// Handle case when target is a string or something (possible in deep copy)
-	if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
-		target = {};
-	}
-
-	// extend jQuery itself if only one argument is passed
-	if ( i === length ) {
-		target = this;
-		i--;
-	}
-
-	for ( ; i < length; i++ ) {
-
-		// Only deal with non-null/undefined values
-		if ( ( options = arguments[ i ] ) != null ) {
-
-			// Extend the base object
-			for ( name in options ) {
-				src = target[ name ];
-				copy = options[ name ];
-
-				// Prevent never-ending loop
-				if ( target === copy ) {
-					continue;
-				}
-
-				// Recurse if we're merging plain objects or arrays
-				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
-					( copyIsArray = jQuery.isArray( copy ) ) ) ) {
-
-					if ( copyIsArray ) {
-						copyIsArray = false;
-						clone = src && jQuery.isArray( src ) ? src : [];
-
-					} else {
-						clone = src && jQuery.isPlainObject( src ) ? src : {};
-					}
-
-					// Never move original objects, clone them
-					target[ name ] = jQuery.extend( deep, clone, copy );
-
-				// Don't bring in undefined values
-				} else if ( copy !== undefined ) {
-					target[ name ] = copy;
-				}
-			}
-		}
-	}
-
-	// Return the modified object
-	return target;
-};
-
-jQuery.extend( {
-
-	// Unique for each copy of jQuery on the page
-	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
-
-	// Assume jQuery is ready without the ready module
-	isReady: true,
-
-	error: function( msg ) {
-		throw new Error( msg );
-	},
-
-	noop: function() {},
-
-	// See test/unit/core.js for details concerning isFunction.
-	// Since version 1.3, DOM methods and functions like alert
-	// aren't supported. They return false on IE (#2968).
-	isFunction: function( obj ) {
-		return jQuery.type( obj ) === "function";
-	},
-
-	isArray: Array.isArray || function( obj ) {
-		return jQuery.type( obj ) === "array";
-	},
-
-	isWindow: function( obj ) {
-		/* jshint eqeqeq: false */
-		return obj != null && obj == obj.window;
-	},
-
-	isNumeric: function( obj ) {
-
-		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
-		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
-		// subtraction forces infinities to NaN
-		// adding 1 corrects loss of precision from parseFloat (#15100)
-		var realStringObj = obj && obj.toString();
-		return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;
-	},
-
-	isEmptyObject: function( obj ) {
-		var name;
-		for ( name in obj ) {
-			return false;
-		}
-		return true;
-	},
-
-	isPlainObject: function( obj ) {
-		var key;
-
-		// Must be an Object.
-		// Because of IE, we also have to check the presence of the constructor property.
-		// Make sure that DOM nodes and window objects don't pass through, as well
-		if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
-			return false;
-		}
-
-		try {
-
-			// Not own constructor property must be Object
-			if ( obj.constructor &&
-				!hasOwn.call( obj, "constructor" ) &&
-				!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
-				return false;
-			}
-		} catch ( e ) {
-
-			// IE8,9 Will throw exceptions on certain host objects #9897
-			return false;
-		}
-
-		// Support: IE<9
-		// Handle iteration over inherited properties before own properties.
-		if ( !support.ownFirst ) {
-			for ( key in obj ) {
-				return hasOwn.call( obj, key );
-			}
-		}
-
-		// Own properties are enumerated firstly, so to speed up,
-		// if last one is own, then all properties are own.
-		for ( key in obj ) {}
-
-		return key === undefined || hasOwn.call( obj, key );
-	},
-
-	type: function( obj ) {
-		if ( obj == null ) {
-			return obj + "";
-		}
-		return typeof obj === "object" || typeof obj === "function" ?
-			class2type[ toString.call( obj ) ] || "object" :
-			typeof obj;
-	},
-
-	// Workarounds based on findings by Jim Driscoll
-	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
-	globalEval: function( data ) {
-		if ( data && jQuery.trim( data ) ) {
-
-			// We use execScript on Internet Explorer
-			// We use an anonymous function so that context is window
-			// rather than jQuery in Firefox
-			( window.execScript || function( data ) {
-				window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation
-			} )( data );
-		}
-	},
-
-	// Convert dashed to camelCase; used by the css and data modules
-	// Microsoft forgot to hump their vendor prefix (#9572)
-	camelCase: function( string ) {
-		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
-	},
-
-	nodeName: function( elem, name ) {
-		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
-	},
-
-	each: function( obj, callback ) {
-		var length, i = 0;
-
-		if ( isArrayLike( obj ) ) {
-			length = obj.length;
-			for ( ; i < length; i++ ) {
-				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
-					break;
-				}
-			}
-		} else {
-			for ( i in obj ) {
-				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
-					break;
-				}
-			}
-		}
-
-		return obj;
-	},
-
-	// Support: Android<4.1, IE<9
-	trim: function( text ) {
-		return text == null ?
-			"" :
-			( text + "" ).replace( rtrim, "" );
-	},
-
-	// results is for internal usage only
-	makeArray: function( arr, results ) {
-		var ret = results || [];
-
-		if ( arr != null ) {
-			if ( isArrayLike( Object( arr ) ) ) {
-				jQuery.merge( ret,
-					typeof arr === "string" ?
-					[ arr ] : arr
-				);
-			} else {
-				push.call( ret, arr );
-			}
-		}
-
-		return ret;
-	},
-
-	inArray: function( elem, arr, i ) {
-		var len;
-
-		if ( arr ) {
-			if ( indexOf ) {
-				return indexOf.call( arr, elem, i );
-			}
-
-			len = arr.length;
-			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
-
-			for ( ; i < len; i++ ) {
-
-				// Skip accessing in sparse arrays
-				if ( i in arr && arr[ i ] === elem ) {
-					return i;
-				}
-			}
-		}
-
-		return -1;
-	},
-
-	merge: function( first, second ) {
-		var len = +second.length,
-			j = 0,
-			i = first.length;
-
-		while ( j < len ) {
-			first[ i++ ] = second[ j++ ];
-		}
-
-		// Support: IE<9
-		// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
-		if ( len !== len ) {
-			while ( second[ j ] !== undefined ) {
-				first[ i++ ] = second[ j++ ];
-			}
-		}
-
-		first.length = i;
-
-		return first;
-	},
-
-	grep: function( elems, callback, invert ) {
-		var callbackInverse,
-			matches = [],
-			i = 0,
-			length = elems.length,
-			callbackExpect = !invert;
-
-		// Go through the array, only saving the items
-		// that pass the validator function
-		for ( ; i < length; i++ ) {
-			callbackInverse = !callback( elems[ i ], i );
-			if ( callbackInverse !== callbackExpect ) {
-				matches.push( elems[ i ] );
-			}
-		}
-
-		return matches;
-	},
-
-	// arg is for internal usage only
-	map: function( elems, callback, arg ) {
-		var length, value,
-			i = 0,
-			ret = [];
-
-		// Go through the array, translating each of the items to their new values
-		if ( isArrayLike( elems ) ) {
-			length = elems.length;
-			for ( ; i < length; i++ ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret.push( value );
-				}
-			}
-
-		// Go through every key on the object,
-		} else {
-			for ( i in elems ) {
-				value = callback( elems[ i ], i, arg );
-
-				if ( value != null ) {
-					ret.push( value );
-				}
-			}
-		}
-
-		// Flatten any nested arrays
-		return concat.apply( [], ret );
-	},
-
-	// A global GUID counter for objects
-	guid: 1,
-
-	// Bind a function to a context, optionally partially applying any
-	// arguments.
-	proxy: function( fn, context ) {
-		var args, proxy, tmp;
-
-		if ( typeof context === "string" ) {
-			tmp = fn[ context ];
-			context = fn;
-			fn = tmp;
-		}
-
-		// Quick check to determine if target is callable, in the spec
-		// this throws a TypeError, but we will just return undefined.
-		if ( !jQuery.isFunction( fn ) ) {
-			return undefined;
-		}
-
-		// Simulated bind
-		args = slice.call( arguments, 2 );
-		proxy = function() {
-			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
-		};
-
-		// Set the guid of unique handler to the same of original handler, so it can be removed
-		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
-
-		return proxy;
-	},
-
-	now: function() {
-		return +( new Date() );
-	},
-
-	// jQuery.support is not used in Core but other projects attach their
-	// properties to it so it needs to exist.
-	support: support
-} );
-
-// JSHint would error on this code due to the Symbol not being defined in ES5.
-// Defining this global in .jshintrc would create a danger of using the global
-// unguarded in another place, it seems safer to just disable JSHint for these
-// three lines.
-/* jshint ignore: start */
-if ( typeof Symbol === "function" ) {
-	jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];
-}
-/* jshint ignore: end */
-
-// Populate the class2type map
-jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
-function( i, name ) {
-	class2type[ "[object " + name + "]" ] = name.toLowerCase();
-} );
-
-function isArrayLike( obj ) {
-
-	// Support: iOS 8.2 (not reproducible in simulator)
-	// `in` check used to prevent JIT error (gh-2145)
-	// hasOwn isn't used here due to false negatives
-	// regarding Nodelist length in IE
-	var length = !!obj && "length" in obj && obj.length,
-		type = jQuery.type( obj );
-
-	if ( type === "function" || jQuery.isWindow( obj ) ) {
-		return false;
-	}
-
-	return type === "array" || length === 0 ||
-		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
-}
-var Sizzle =
-/*!
- * Sizzle CSS Selector Engine v2.2.1
- * http://sizzlejs.com/
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2015-10-17
- */
-(function( window ) {
-
-var i,
-	support,
-	Expr,
-	getText,
-	isXML,
-	tokenize,
-	compile,
-	select,
-	outermostContext,
-	sortInput,
-	hasDuplicate,
-
-	// Local document vars
-	setDocument,
-	document,
-	docElem,
-	documentIsHTML,
-	rbuggyQSA,
-	rbuggyMatches,
-	matches,
-	contains,
-
-	// Instance-specific data
-	expando = "sizzle" + 1 * new Date(),
-	preferredDoc = window.document,
-	dirruns = 0,
-	done = 0,
-	classCache = createCache(),
-	tokenCache = createCache(),
-	compilerCache = createCache(),
-	sortOrder = function( a, b ) {
-		if ( a === b ) {
-			hasDuplicate = true;
-		}
-		return 0;
-	},
-
-	// General-purpose constants
-	MAX_NEGATIVE = 1 << 31,
-
-	// Instance methods
-	hasOwn = ({}).hasOwnProperty,
-	arr = [],
-	pop = arr.pop,
-	push_native = arr.push,
-	push = arr.push,
-	slice = arr.slice,
-	// Use a stripped-down indexOf as it's faster than native
-	// http://jsperf.com/thor-indexof-vs-for/5
-	indexOf = function( list, elem ) {
-		var i = 0,
-			len = list.length;
-		for ( ; i < len; i++ ) {
-			if ( list[i] === elem ) {
-				return i;
-			}
-		}
-		return -1;
-	},
-
-	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
-
-	// Regular expressions
-
-	// http://www.w3.org/TR/css3-selectors/#whitespace
-	whitespace = "[\\x20\\t\\r\\n\\f]",
-
-	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
-	identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
-
-	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
-	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
-		// Operator (capture 2)
-		"*([*^$|!~]?=)" + whitespace +
-		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
-		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
-		"*\\]",
-
-	pseudos = ":(" + identifier + ")(?:\\((" +
-		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
-		// 1. quoted (capture 3; capture 4 or capture 5)
-		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
-		// 2. simple (capture 6)
-		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
-		// 3. anything else (capture 2)
-		".*" +
-		")\\)|)",
-
-	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
-	rwhitespace = new RegExp( whitespace + "+", "g" ),
-	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
-
-	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
-	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
-
-	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
-
-	rpseudo = new RegExp( pseudos ),
-	ridentifier = new RegExp( "^" + identifier + "$" ),
-
-	matchExpr = {
-		"ID": new RegExp( "^#(" + identifier + ")" ),
-		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
-		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
-		"ATTR": new RegExp( "^" + attributes ),
-		"PSEUDO": new RegExp( "^" + pseudos ),
-		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
-			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
-			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
-		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
-		// For use in libraries implementing .is()
-		// We use this for POS matching in `select`
-		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
-			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
-	},
-
-	rinputs = /^(?:input|select|textarea|button)$/i,
-	rheader = /^h\d$/i,
-
-	rnative = /^[^{]+\{\s*\[native \w/,
-
-	// Easily-parseable/retrievable ID or TAG or CLASS selectors
-	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
-
-	rsibling = /[+~]/,
-	rescape = /'|\\/g,
-
-	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
-	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
-	funescape = function( _, escaped, escapedWhitespace ) {
-		var high = "0x" + escaped - 0x10000;
-		// NaN means non-codepoint
-		// Support: Firefox<24
-		// Workaround erroneous numeric interpretation of +"0x"
-		return high !== high || escapedWhitespace ?
-			escaped :
-			high < 0 ?
-				// BMP codepoint
-				String.fromCharCode( high + 0x10000 ) :
-				// Supplemental Plane codepoint (surrogate pair)
-				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
-	},
-
-	// Used for iframes
-	// See setDocument()
-	// Removing the function wrapper causes a "Permission Denied"
-	// error in IE
-	unloadHandler = function() {
-		setDocument();
-	};
-
-// Optimize for push.apply( _, NodeList )
-try {
-	push.apply(
-		(arr = slice.call( preferredDoc.childNodes )),
-		preferredDoc.childNodes
-	);
-	// Support: Android<4.0
-	// Detect silently failing push.apply
-	arr[ preferredDoc.childNodes.length ].nodeType;
-} catch ( e ) {
-	push = { apply: arr.length ?
-
-		// Leverage slice if possible
-		function( target, els ) {
-			push_native.apply( target, slice.call(els) );
-		} :
-
-		// Support: IE<9
-		// Otherwise append directly
-		function( target, els ) {
-			var j = target.length,
-				i = 0;
-			// Can't trust NodeList.length
-			while ( (target[j++] = els[i++]) ) {}
-			target.length = j - 1;
-		}
-	};
-}
-
-function Sizzle( selector, context, results, seed ) {
-	var m, i, elem, nid, nidselect, match, groups, newSelector,
-		newContext = context && context.ownerDocument,
-
-		// nodeType defaults to 9, since context defaults to document
-		nodeType = context ? context.nodeType : 9;
-
-	results = results || [];
-
-	// Return early from calls with invalid selector or context
-	if ( typeof selector !== "string" || !selector ||
-		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
-
-		return results;
-	}
-
-	// Try to shortcut find operations (as opposed to filters) in HTML documents
-	if ( !seed ) {
-
-		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
-			setDocument( context );
-		}
-		context = context || document;
-
-		if ( documentIsHTML ) {
-
-			// If the selector is sufficiently simple, try using a "get*By*" DOM method
-			// (excepting DocumentFragment context, where the methods don't exist)
-			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
-
-				// ID selector
-				if ( (m = match[1]) ) {
-
-					// Document context
-					if ( nodeType === 9 ) {
-						if ( (elem = context.getElementById( m )) ) {
-
-							// Support: IE, Opera, Webkit
-							// TODO: identify versions
-							// getElementById can match elements by name instead of ID
-							if ( elem.id === m ) {
-								results.push( elem );
-								return results;
-							}
-						} else {
-							return results;
-						}
-
-					// Element context
-					} else {
-
-						// Support: IE, Opera, Webkit
-						// TODO: identify versions
-						// getElementById can match elements by name instead of ID
-						if ( newContext && (elem = newContext.getElementById( m )) &&
-							contains( context, elem ) &&
-							elem.id === m ) {
-
-							results.push( elem );
-							return results;
-						}
-					}
-
-				// Type selector
-				} else if ( match[2] ) {
-					push.apply( results, context.getElementsByTagName( selector ) );
-					return results;
-
-				// Class selector
-				} else if ( (m = match[3]) && support.getElementsByClassName &&
-					context.getElementsByClassName ) {
-
-					push.apply( results, context.getElementsByClassName( m ) );
-					return results;
-				}
-			}
-
-			// Take advantage of querySelectorAll
-			if ( support.qsa &&
-				!compilerCache[ selector + " " ] &&
-				(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
-
-				if ( nodeType !== 1 ) {
-					newContext = context;
-					newSelector = selector;
-
-				// qSA looks outside Element context, which is not what we want
-				// Thanks to Andrew Dupont for this workaround technique
-				// Support: IE <=8
-				// Exclude object elements
-				} else if ( context.nodeName.toLowerCase() !== "object" ) {
-
-					// Capture the context ID, setting it first if necessary
-					if ( (nid = context.getAttribute( "id" )) ) {
-						nid = nid.replace( rescape, "\\$&" );
-					} else {
-						context.setAttribute( "id", (nid = expando) );
-					}
-
-					// Prefix every selector in the list
-					groups = tokenize( selector );
-					i = groups.length;
-					nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']";
-					while ( i-- ) {
-						groups[i] = nidselect + " " + toSelector( groups[i] );
-					}
-					newSelector = groups.join( "," );
-
-					// Expand context for sibling selectors
-					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
-						context;
-				}
-
-				if ( newSelector ) {
-					try {
-						push.apply( results,
-							newContext.querySelectorAll( newSelector )
-						);
-						return results;
-					} catch ( qsaError ) {
-					} finally {
-						if ( nid === expando ) {
-							context.removeAttribute( "id" );
-						}
-					}
-				}
-			}
-		}
-	}
-
-	// All others
-	return select( selector.replace( rtrim, "$1" ), context, results, seed );
-}
-
-/**
- * Create key-value caches of limited size
- * @returns {function(string, object)} Returns the Object data after storing it on itself with
- *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
- *	deleting the oldest entry
- */
-function createCache() {
-	var keys = [];
-
-	function cache( key, value ) {
-		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
-		if ( keys.push( key + " " ) > Expr.cacheLength ) {
-			// Only keep the most recent entries
-			delete cache[ keys.shift() ];
-		}
-		return (cache[ key + " " ] = value);
-	}
-	return cache;
-}
-
-/**
- * Mark a function for special use by Sizzle
- * @param {Function} fn The function to mark
- */
-function markFunction( fn ) {
-	fn[ expando ] = true;
-	return fn;
-}
-
-/**
- * Support testing using an element
- * @param {Function} fn Passed the created div and expects a boolean result
- */
-function assert( fn ) {
-	var div = document.createElement("div");
-
-	try {
-		return !!fn( div );
-	} catch (e) {
-		return false;
-	} finally {
-		// Remove from its parent by default
-		if ( div.parentNode ) {
-			div.parentNode.removeChild( div );
-		}
-		// release memory in IE
-		div = null;
-	}
-}
-
-/**
- * Adds the same handler for all of the specified attrs
- * @param {String} attrs Pipe-separated list of attributes
- * @param {Function} handler The method that will be applied
- */
-function addHandle( attrs, handler ) {
-	var arr = attrs.split("|"),
-		i = arr.length;
-
-	while ( i-- ) {
-		Expr.attrHandle[ arr[i] ] = handler;
-	}
-}
-
-/**
- * Checks document order of two siblings
- * @param {Element} a
- * @param {Element} b
- * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
- */
-function siblingCheck( a, b ) {
-	var cur = b && a,
-		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
-			( ~b.sourceIndex || MAX_NEGATIVE ) -
-			( ~a.sourceIndex || MAX_NEGATIVE );
-
-	// Use IE sourceIndex if available on both nodes
-	if ( diff ) {
-		return diff;
-	}
-
-	// Check if b follows a
-	if ( cur ) {
-		while ( (cur = cur.nextSibling) ) {
-			if ( cur === b ) {
-				return -1;
-			}
-		}
-	}
-
-	return a ? 1 : -1;
-}
-
-/**
- * Returns a function to use in pseudos for input types
- * @param {String} type
- */
-function createInputPseudo( type ) {
-	return function( elem ) {
-		var name = elem.nodeName.toLowerCase();
-		return name === "input" && elem.type === type;
-	};
-}
-
-/**
- * Returns a function to use in pseudos for buttons
- * @param {String} type
- */
-function createButtonPseudo( type ) {
-	return function( elem ) {
-		var name = elem.nodeName.toLowerCase();
-		return (name === "input" || name === "button") && elem.type === type;
-	};
-}
-
-/**
- * Returns a function to use in pseudos for positionals
- * @param {Function} fn
- */
-function createPositionalPseudo( fn ) {
-	return markFunction(function( argument ) {
-		argument = +argument;
-		return markFunction(function( seed, matches ) {
-			var j,
-				matchIndexes = fn( [], seed.length, argument ),
-				i = matchIndexes.length;
-
-			// Match elements found at the specified indexes
-			while ( i-- ) {
-				if ( seed[ (j = matchIndexes[i]) ] ) {
-					seed[j] = !(matches[j] = seed[j]);
-				}
-			}
-		});
-	});
-}
-
-/**
- * Checks a node for validity as a Sizzle context
- * @param {Element|Object=} context
- * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
- */
-function testContext( context ) {
-	return context && typeof context.getElementsByTagName !== "undefined" && context;
-}
-
-// Expose support vars for convenience
-support = Sizzle.support = {};
-
-/**
- * Detects XML nodes
- * @param {Element|Object} elem An element or a document
- * @returns {Boolean} True iff elem is a non-HTML XML node
- */
-isXML = Sizzle.isXML = function( elem ) {
-	// documentElement is verified for cases where it doesn't yet exist
-	// (such as loading iframes in IE - #4833)
-	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
-	return documentElement ? documentElement.nodeName !== "HTML" : false;
-};
-
-/**
- * Sets document-related variables once based on the current document
- * @param {Element|Object} [doc] An element or document object to use to set the document
- * @returns {Object} Returns the current document
- */
-setDocument = Sizzle.setDocument = function( node ) {
-	var hasCompare, parent,
-		doc = node ? node.ownerDocument || node : preferredDoc;
-
-	// Return early if doc is invalid or already selected
-	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
-		return document;
-	}
-
-	// Update global variables
-	document = doc;
-	docElem = document.documentElement;
-	documentIsHTML = !isXML( document );
-
-	// Support: IE 9-11, Edge
-	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
-	if ( (parent = document.defaultView) && parent.top !== parent ) {
-		// Support: IE 11
-		if ( parent.addEventListener ) {
-			parent.addEventListener( "unload", unloadHandler, false );
-
-		// Support: IE 9 - 10 only
-		} else if ( parent.attachEvent ) {
-			parent.attachEvent( "onunload", unloadHandler );
-		}
-	}
-
-	/* Attributes
-	---------------------------------------------------------------------- */
-
-	// Support: IE<8
-	// Verify that getAttribute really returns attributes and not properties
-	// (excepting IE8 booleans)
-	support.attributes = assert(function( div ) {
-		div.className = "i";
-		return !div.getAttribute("className");
-	});
-
-	/* getElement(s)By*
-	---------------------------------------------------------------------- */
-
-	// Check if getElementsByTagName("*") returns only elements
-	support.getElementsByTagName = assert(function( div ) {
-		div.appendChild( document.createComment("") );
-		return !div.getElementsByTagName("*").length;
-	});
-
-	// Support: IE<9
-	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
-
-	// Support: IE<10
-	// Check if getElementById returns elements by name
-	// The broken getElementById methods don't pick up programatically-set names,
-	// so use a roundabout getElementsByName test
-	support.getById = assert(function( div ) {
-		docElem.appendChild( div ).id = expando;
-		return !document.getElementsByName || !document.getElementsByName( expando ).length;
-	});
-
-	// ID find and filter
-	if ( support.getById ) {
-		Expr.find["ID"] = function( id, context ) {
-			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
-				var m = context.getElementById( id );
-				return m ? [ m ] : [];
-			}
-		};
-		Expr.filter["ID"] = function( id ) {
-			var attrId = id.replace( runescape, funescape );
-			return function( elem ) {
-				return elem.getAttribute("id") === attrId;
-			};
-		};
-	} else {
-		// Support: IE6/7
-		// getElementById is not reliable as a find shortcut
-		delete Expr.find["ID"];
-
-		Expr.filter["ID"] =  function( id ) {
-			var attrId = id.replace( runescape, funescape );
-			return function( elem ) {
-				var node = typeof elem.getAttributeNode !== "undefined" &&
-					elem.getAttributeNode("id");
-				return node && node.value === attrId;
-			};
-		};
-	}
-
-	// Tag
-	Expr.find["TAG"] = support.getElementsByTagName ?
-		function( tag, context ) {
-			if ( typeof context.getElementsByTagName !== "undefined" ) {
-				return context.getElementsByTagName( tag );
-
-			// DocumentFragment nodes don't have gEBTN
-			} else if ( support.qsa ) {
-				return context.querySelectorAll( tag );
-			}
-		} :
-
-		function( tag, context ) {
-			var elem,
-				tmp = [],
-				i = 0,
-				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
-				results = context.getElementsByTagName( tag );
-
-			// Filter out possible comments
-			if ( tag === "*" ) {
-				while ( (elem = results[i++]) ) {
-					if ( elem.nodeType === 1 ) {
-						tmp.push( elem );
-					}
-				}
-
-				return tmp;
-			}
-			return results;
-		};
-
-	// Class
-	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
-		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
-			return context.getElementsByClassName( className );
-		}
-	};
-
-	/* QSA/matchesSelector
-	---------------------------------------------------------------------- */
-
-	// QSA and matchesSelector support
-
-	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
-	rbuggyMatches = [];
-
-	// qSa(:focus) reports false when true (Chrome 21)
-	// We allow this because of a bug in IE8/9 that throws an error
-	// whenever `document.activeElement` is accessed on an iframe
-	// So, we allow :focus to pass through QSA all the time to avoid the IE error
-	// See http://bugs.jquery.com/ticket/13378
-	rbuggyQSA = [];
-
-	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
-		// Build QSA regex
-		// Regex strategy adopted from Diego Perini
-		assert(function( div ) {
-			// Select is set to empty string on purpose
-			// This is to test IE's treatment of not explicitly
-			// setting a boolean content attribute,
-			// since its presence should be enough
-			// http://bugs.jquery.com/ticket/12359
-			docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
-				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
-				"<option selected=''></option></select>";
-
-			// Support: IE8, Opera 11-12.16
-			// Nothing should be selected when empty strings follow ^= or $= or *=
-			// The test attribute must be unknown in Opera but "safe" for WinRT
-			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
-			if ( div.querySelectorAll("[msallowcapture^='']").length ) {
-				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
-			}
-
-			// Support: IE8
-			// Boolean attributes and "value" are not treated correctly
-			if ( !div.querySelectorAll("[selected]").length ) {
-				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
-			}
-
-			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
-			if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
-				rbuggyQSA.push("~=");
-			}
-
-			// Webkit/Opera - :checked should return selected option elements
-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-			// IE8 throws error here and will not see later tests
-			if ( !div.querySelectorAll(":checked").length ) {
-				rbuggyQSA.push(":checked");
-			}
-
-			// Support: Safari 8+, iOS 8+
-			// https://bugs.webkit.org/show_bug.cgi?id=136851
-			// In-page `selector#id sibing-combinator selector` fails
-			if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
-				rbuggyQSA.push(".#.+[+~]");
-			}
-		});
-
-		assert(function( div ) {
-			// Support: Windows 8 Native Apps
-			// The type and name attributes are restricted during .innerHTML assignment
-			var input = document.createElement("input");
-			input.setAttribute( "type", "hidden" );
-			div.appendChild( input ).setAttribute( "name", "D" );
-
-			// Support: IE8
-			// Enforce case-sensitivity of name attribute
-			if ( div.querySelectorAll("[name=d]").length ) {
-				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
-			}
-
-			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
-			// IE8 throws error here and will not see later tests
-			if ( !div.querySelectorAll(":enabled").length ) {
-				rbuggyQSA.push( ":enabled", ":disabled" );
-			}
-
-			// Opera 10-11 does not throw on post-comma invalid pseudos
-			div.querySelectorAll("*,:x");
-			rbuggyQSA.push(",.*:");
-		});
-	}
-
-	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
-		docElem.webkitMatchesSelector ||
-		docElem.mozMatchesSelector ||
-		docElem.oMatchesSelector ||
-		docElem.msMatchesSelector) )) ) {
-
-		assert(function( div ) {
-			// Check to see if it's possible to do matchesSelector
-			// on a disconnected node (IE 9)
-			support.disconnectedMatch = matches.call( div, "div" );
-
-			// This should fail with an exception
-			// Gecko does not error, returns false instead
-			matches.call( div, "[s!='']:x" );
-			rbuggyMatches.push( "!=", pseudos );
-		});
-	}
-
-	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
-	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
-
-	/* Contains
-	---------------------------------------------------------------------- */
-	hasCompare = rnative.test( docElem.compareDocumentPosition );
-
-	// Element contains another
-	// Purposefully self-exclusive
-	// As in, an element does not contain itself
-	contains = hasCompare || rnative.test( docElem.contains ) ?
-		function( a, b ) {
-			var adown = a.nodeType === 9 ? a.documentElement : a,
-				bup = b && b.parentNode;
-			return a === bup || !!( bup && bup.nodeType === 1 && (
-				adown.contains ?
-					adown.contains( bup ) :
-					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
-			));
-		} :
-		function( a, b ) {
-			if ( b ) {
-				while ( (b = b.parentNode) ) {
-					if ( b === a ) {
-						return true;
-					}
-				}
-			}
-			return false;
-		};
-
-	/* Sorting
-	---------------------------------------------------------------------- */
-
-	// Document order sorting
-	sortOrder = hasCompare ?
-	function( a, b ) {
-
-		// Flag for duplicate removal
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		// Sort on method existence if only one input has compareDocumentPosition
-		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
-		if ( compare ) {
-			return compare;
-		}
-
-		// Calculate position if both inputs belong to the same document
-		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
-			a.compareDocumentPosition( b ) :
-
-			// Otherwise we know they are disconnected
-			1;
-
-		// Disconnected nodes
-		if ( compare & 1 ||
-			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
-
-			// Choose the first element that is related to our preferred document
-			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
-				return -1;
-			}
-			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
-				return 1;
-			}
-
-			// Maintain original order
-			return sortInput ?
-				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
-				0;
-		}
-
-		return compare & 4 ? -1 : 1;
-	} :
-	function( a, b ) {
-		// Exit early if the nodes are identical
-		if ( a === b ) {
-			hasDuplicate = true;
-			return 0;
-		}
-
-		var cur,
-			i = 0,
-			aup = a.parentNode,
-			bup = b.parentNode,
-			ap = [ a ],
-			bp = [ b ];
-
-		// Parentless nodes are either documents or disconnected
-		if ( !aup || !bup ) {
-			return a === document ? -1 :
-				b === document ? 1 :
-				aup ? -1 :
-				bup ? 1 :
-				sortInput ?
-				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
-				0;
-
-		// If the nodes are siblings, we can do a quick check
-		} else if ( aup === bup ) {
-			return siblingCheck( a, b );
-		}
-
-		// Otherwise we need full lists of their ancestors for comparison
-		cur = a;
-		while ( (cur = cur.parentNode) ) {
-			ap.unshift( cur );
-		}
-		cur = b;
-		while ( (cur = cur.parentNode) ) {
-			bp.unshift( cur );
-		}
-
-		// Walk down the tree looking for a discrepancy
-		while ( ap[i] === bp[i] ) {
-			i++;
-		}
-
-		return i ?
-			// Do a sibling check if the nodes have a common ancestor
-			siblingCheck( ap[i], bp[i] ) :
-
-			// Otherwise nodes in our document sort first
-			ap[i] === preferredDoc ? -1 :
-			bp[i] === preferredDoc ? 1 :
-			0;
-	};
-
-	return document;
-};
-
-Sizzle.matches = function( expr, elements ) {
-	return Sizzle( expr, null, null, elements );
-};
-
-Sizzle.matchesSelector = function( elem, expr ) {
-	// Set document vars if needed
-	if ( ( elem.ownerDocument || elem ) !== document ) {
-		setDocument( elem );
-	}
-
-	// Make sure that attribute selectors are quoted
-	expr = expr.replace( rattributeQuotes, "='$1']" );
-
-	if ( support.matchesSelector && documentIsHTML &&
-		!compilerCache[ expr + " " ] &&
-		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
-		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
-
-		try {
-			var ret = matches.call( elem, expr );
-
-			// IE 9's matchesSelector returns false on disconnected nodes
-			if ( ret || support.disconnectedMatch ||
-					// As well, disconnected nodes are said to be in a document
-					// fragment in IE 9
-					elem.document && elem.document.nodeType !== 11 ) {
-				return ret;
-			}
-		} catch (e) {}
-	}
-
-	return Sizzle( expr, document, null, [ elem ] ).length > 0;
-};
-
-Sizzle.contains = function( context, elem ) {
-	// Set document vars if needed
-	if ( ( context.ownerDocument || context ) !== document ) {
-		setDocument( context );
-	}
-	return contains( context, elem );
-};
-
-Sizzle.attr = function( elem, name ) {
-	// Set document vars if needed
-	if ( ( elem.ownerDocument || elem ) !== document ) {
-		setDocument( elem );
-	}
-
-	var fn = Expr.attrHandle[ name.toLowerCase() ],
-		// Don't get fooled by Object.prototype properties (jQuery #13807)
-		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
-			fn( elem, name, !documentIsHTML ) :
-			undefined;
-
-	return val !== undefined ?
-		val :
-		support.attributes || !documentIsHTML ?
-			elem.getAttribute( name ) :
-			(val = elem.getAttributeNode(name)) && val.specified ?
-				val.value :
-				null;
-};
-
-Sizzle.error = function( msg ) {
-	throw new Error( "Syntax error, unrecognized expression: " + msg );
-};
-
-/**
- * Document sorting and removing duplicates
- * @param {ArrayLike} results
- */
-Sizzle.uniqueSort = function( results ) {
-	var elem,
-		duplicates = [],
-		j = 0,
-		i = 0;
-
-	// Unless we *know* we can detect duplicates, assume their presence
-	hasDuplicate = !support.detectDuplicates;
-	sortInput = !support.sortStable && results.slice( 0 );
-	results.sort( sortOrder );
-
-	if ( hasDuplicate ) {
-		while ( (elem = results[i++]) ) {
-			if ( elem === results[ i ] ) {
-				j = duplicates.push( i );
-			}
-		}
-		while ( j-- ) {
-			results.splice( duplicates[ j ], 1 );
-		}
-	}
-
-	// Clear input after sorting to release objects
-	// See https://github.com/jquery/sizzle/pull/225
-	sortInput = null;
-
-	return results;
-};
-
-/**
- * Utility function for retrieving the text value of an array of DOM nodes
- * @param {Array|Element} elem
- */
-getText = Sizzle.getText = function( elem ) {
-	var node,
-		ret = "",
-		i = 0,
-		nodeType = elem.nodeType;
-
-	if ( !nodeType ) {
-		// If no nodeType, this is expected to be an array
-		while ( (node = elem[i++]) ) {
-			// Do not traverse comment nodes
-			ret += getText( node );
-		}
-	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
-		// Use textContent for elements
-		// innerText usage removed for consistency of new lines (jQuery #11153)
-		if ( typeof elem.textContent === "string" ) {
-			return elem.textContent;
-		} else {
-			// Traverse its children
-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-				ret += getText( elem );
-			}
-		}
-	} else if ( nodeType === 3 || nodeType === 4 ) {
-		return elem.nodeValue;
-	}
-	// Do not include comment or processing instruction nodes
-
-	return ret;
-};
-
-Expr = Sizzle.selectors = {
-
-	// Can be adjusted by the user
-	cacheLength: 50,
-
-	createPseudo: markFunction,
-
-	match: matchExpr,
-
-	attrHandle: {},
-
-	find: {},
-
-	relative: {
-		">": { dir: "parentNode", first: true },
-		" ": { dir: "parentNode" },
-		"+": { dir: "previousSibling", first: true },
-		"~": { dir: "previousSibling" }
-	},
-
-	preFilter: {
-		"ATTR": function( match ) {
-			match[1] = match[1].replace( runescape, funescape );
-
-			// Move the given value to match[3] whether quoted or unquoted
-			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
-
-			if ( match[2] === "~=" ) {
-				match[3] = " " + match[3] + " ";
-			}
-
-			return match.slice( 0, 4 );
-		},
-
-		"CHILD": function( match ) {
-			/* matches from matchExpr["CHILD"]
-				1 type (only|nth|...)
-				2 what (child|of-type)
-				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
-				4 xn-component of xn+y argument ([+-]?\d*n|)
-				5 sign of xn-component
-				6 x of xn-component
-				7 sign of y-component
-				8 y of y-component
-			*/
-			match[1] = match[1].toLowerCase();
-
-			if ( match[1].slice( 0, 3 ) === "nth" ) {
-				// nth-* requires argument
-				if ( !match[3] ) {
-					Sizzle.error( match[0] );
-				}
-
-				// numeric x and y parameters for Expr.filter.CHILD
-				// remember that false/true cast respectively to 0/1
-				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
-				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
-
-			// other types prohibit arguments
-			} else if ( match[3] ) {
-				Sizzle.error( match[0] );
-			}
-
-			return match;
-		},
-
-		"PSEUDO": function( match ) {
-			var excess,
-				unquoted = !match[6] && match[2];
-
-			if ( matchExpr["CHILD"].test( match[0] ) ) {
-				return null;
-			}
-
-			// Accept quoted arguments as-is
-			if ( match[3] ) {
-				match[2] = match[4] || match[5] || "";
-
-			// Strip excess characters from unquoted arguments
-			} else if ( unquoted && rpseudo.test( unquoted ) &&
-				// Get excess from tokenize (recursively)
-				(excess = tokenize( unquoted, true )) &&
-				// advance to the next closing parenthesis
-				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
-
-				// excess is a negative index
-				match[0] = match[0].slice( 0, excess );
-				match[2] = unquoted.slice( 0, excess );
-			}
-
-			// Return only captures needed by the pseudo filter method (type and argument)
-			return match.slice( 0, 3 );
-		}
-	},
-
-	filter: {
-
-		"TAG": function( nodeNameSelector ) {
-			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
-			return nodeNameSelector === "*" ?
-				function() { return true; } :
-				function( elem ) {
-					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
-				};
-		},
-
-		"CLASS": function( className ) {
-			var pattern = classCache[ className + " " ];
-
-			return pattern ||
-				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
-				classCache( className, function( elem ) {
-					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
-				});
-		},
-
-		"ATTR": function( name, operator, check ) {
-			return function( elem ) {
-				var result = Sizzle.attr( elem, name );
-
-				if ( result == null ) {
-					return operator === "!=";
-				}
-				if ( !operator ) {
-					return true;
-				}
-
-				result += "";
-
-				return operator === "=" ? result === check :
-					operator === "!=" ? result !== check :
-					operator === "^=" ? check && result.indexOf( check ) === 0 :
-					operator === "*=" ? check && result.indexOf( check ) > -1 :
-					operator === "$=" ? check && result.slice( -check.length ) === check :
-					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
-					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
-					false;
-			};
-		},
-
-		"CHILD": function( type, what, argument, first, last ) {
-			var simple = type.slice( 0, 3 ) !== "nth",
-				forward = type.slice( -4 ) !== "last",
-				ofType = what === "of-type";
-
-			return first === 1 && last === 0 ?
-
-				// Shortcut for :nth-*(n)
-				function( elem ) {
-					return !!elem.parentNode;
-				} :
-
-				function( elem, context, xml ) {
-					var cache, uniqueCache, outerCache, node, nodeIndex, start,
-						dir = simple !== forward ? "nextSibling" : "previousSibling",
-						parent = elem.parentNode,
-						name = ofType && elem.nodeName.toLowerCase(),
-						useCache = !xml && !ofType,
-						diff = false;
-
-					if ( parent ) {
-
-						// :(first|last|only)-(child|of-type)
-						if ( simple ) {
-							while ( dir ) {
-								node = elem;
-								while ( (node = node[ dir ]) ) {
-									if ( ofType ?
-										node.nodeName.toLowerCase() === name :
-										node.nodeType === 1 ) {
-
-										return false;
-									}
-								}
-								// Reverse direction for :only-* (if we haven't yet done so)
-								start = dir = type === "only" && !start && "nextSibling";
-							}
-							return true;
-						}
-
-						start = [ forward ? parent.firstChild : parent.lastChild ];
-
-						// non-xml :nth-child(...) stores cache data on `parent`
-						if ( forward && useCache ) {
-
-							// Seek `elem` from a previously-cached index
-
-							// ...in a gzip-friendly way
-							node = parent;
-							outerCache = node[ expando ] || (node[ expando ] = {});
-
-							// Support: IE <9 only
-							// Defend against cloned attroperties (jQuery gh-1709)
-							uniqueCache = outerCache[ node.uniqueID ] ||
-								(outerCache[ node.uniqueID ] = {});
-
-							cache = uniqueCache[ type ] || [];
-							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
-							diff = nodeIndex && cache[ 2 ];
-							node = nodeIndex && parent.childNodes[ nodeIndex ];
-
-							while ( (node = ++nodeIndex && node && node[ dir ] ||
-
-								// Fallback to seeking `elem` from the start
-								(diff = nodeIndex = 0) || start.pop()) ) {
-
-								// When found, cache indexes on `parent` and break
-								if ( node.nodeType === 1 && ++diff && node === elem ) {
-									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
-									break;
-								}
-							}
-
-						} else {
-							// Use previously-cached element index if available
-							if ( useCache ) {
-								// ...in a gzip-friendly way
-								node = elem;
-								outerCache = node[ expando ] || (node[ expando ] = {});
-
-								// Support: IE <9 only
-								// Defend against cloned attroperties (jQuery gh-1709)
-								uniqueCache = outerCache[ node.uniqueID ] ||
-									(outerCache[ node.uniqueID ] = {});
-
-								cache = uniqueCache[ type ] || [];
-								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
-								diff = nodeIndex;
-							}
-
-							// xml :nth-child(...)
-							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
-							if ( diff === false ) {
-								// Use the same loop as above to seek `elem` from the start
-								while ( (node = ++nodeIndex && node && node[ dir ] ||
-									(diff = nodeIndex = 0) || start.pop()) ) {
-
-									if ( ( ofType ?
-										node.nodeName.toLowerCase() === name :
-										node.nodeType === 1 ) &&
-										++diff ) {
-
-										// Cache the index of each encountered element
-										if ( useCache ) {
-											outerCache = node[ expando ] || (node[ expando ] = {});
-
-											// Support: IE <9 only
-											// Defend against cloned attroperties (jQuery gh-1709)
-											uniqueCache = outerCache[ node.uniqueID ] ||
-												(outerCache[ node.uniqueID ] = {});
-
-											uniqueCache[ type ] = [ dirruns, diff ];
-										}
-
-										if ( node === elem ) {
-											break;
-										}
-									}
-								}
-							}
-						}
-
-						// Incorporate the offset, then check against cycle size
-						diff -= last;
-						return diff === first || ( diff % first === 0 && diff / first >= 0 );
-					}
-				};
-		},
-
-		"PSEUDO": function( pseudo, argument ) {
-			// pseudo-class names are case-insensitive
-			// http://www.w3.org/TR/selectors/#pseudo-classes
-			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
-			// Remember that setFilters inherits from pseudos
-			var args,
-				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
-					Sizzle.error( "unsupported pseudo: " + pseudo );
-
-			// The user may use createPseudo to indicate that
-			// arguments are needed to create the filter function
-			// just as Sizzle does
-			if ( fn[ expando ] ) {
-				return fn( argument );
-			}
-
-			// But maintain support for old signatures
-			if ( fn.length > 1 ) {
-				args = [ pseudo, pseudo, "", argument ];
-				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
-					markFunction(function( seed, matches ) {
-						var idx,
-							matched = fn( seed, argument ),
-							i = matched.length;
-						while ( i-- ) {
-							idx = indexOf( seed, matched[i] );
-							seed[ idx ] = !( matches[ idx ] = matched[i] );
-						}
-					}) :
-					function( elem ) {
-						return fn( elem, 0, args );
-					};
-			}
-
-			return fn;
-		}
-	},
-
-	pseudos: {
-		// Potentially complex pseudos
-		"not": markFunction(function( selector ) {
-			// Trim the selector passed to compile
-			// to avoid treating leading and trailing
-			// spaces as combinators
-			var input = [],
-				results = [],
-				matcher = compile( selector.replace( rtrim, "$1" ) );
-
-			return matcher[ expando ] ?
-				markFunction(function( seed, matches, context, xml ) {
-					var elem,
-						unmatched = matcher( seed, null, xml, [] ),
-						i = seed.length;
-
-					// Match elements unmatched by `matcher`
-					while ( i-- ) {
-						if ( (elem = unmatched[i]) ) {
-							seed[i] = !(matches[i] = elem);
-						}
-					}
-				}) :
-				function( elem, context, xml ) {
-					input[0] = elem;
-					matcher( input, null, xml, results );
-					// Don't keep the element (issue #299)
-					input[0] = null;
-					return !results.pop();
-				};
-		}),
-
-		"has": markFunction(function( selector ) {
-			return function( elem ) {
-				return Sizzle( selector, elem ).length > 0;
-			};
-		}),
-
-		"contains": markFunction(function( text ) {
-			text = text.replace( runescape, funescape );
-			return function( elem ) {
-				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
-			};
-		}),
-
-		// "Whether an element is represented by a :lang() selector
-		// is based solely on the element's language value
-		// being equal to the identifier C,
-		// or beginning with the identifier C immediately followed by "-".
-		// The matching of C against the element's language value is performed case-insensitively.
-		// The identifier C does not have to be a valid language name."
-		// http://www.w3.org/TR/selectors/#lang-pseudo
-		"lang": markFunction( function( lang ) {
-			// lang value must be a valid identifier
-			if ( !ridentifier.test(lang || "") ) {
-				Sizzle.error( "unsupported lang: " + lang );
-			}
-			lang = lang.replace( runescape, funescape ).toLowerCase();
-			return function( elem ) {
-				var elemLang;
-				do {
-					if ( (elemLang = documentIsHTML ?
-						elem.lang :
-						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
-
-						elemLang = elemLang.toLowerCase();
-						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
-					}
-				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
-				return false;
-			};
-		}),
-
-		// Miscellaneous
-		"target": function( elem ) {
-			var hash = window.location && window.location.hash;
-			return hash && hash.slice( 1 ) === elem.id;
-		},
-
-		"root": function( elem ) {
-			return elem === docElem;
-		},
-
-		"focus": function( elem ) {
-			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
-		},
-
-		// Boolean properties
-		"enabled": function( elem ) {
-			return elem.disabled === false;
-		},
-
-		"disabled": function( elem ) {
-			return elem.disabled === true;
-		},
-
-		"checked": function( elem ) {
-			// In CSS3, :checked should return both checked and selected elements
-			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
-			var nodeName = elem.nodeName.toLowerCase();
-			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
-		},
-
-		"selected": function( elem ) {
-			// Accessing this property makes selected-by-default
-			// options in Safari work properly
-			if ( elem.parentNode ) {
-				elem.parentNode.selectedIndex;
-			}
-
-			return elem.selected === true;
-		},
-
-		// Contents
-		"empty": function( elem ) {
-			// http://www.w3.org/TR/selectors/#empty-pseudo
-			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
-			//   but not by others (comment: 8; processing instruction: 7; etc.)
-			// nodeType < 6 works because attributes (2) do not appear as children
-			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
-				if ( elem.nodeType < 6 ) {
-					return false;
-				}
-			}
-			return true;
-		},
-
-		"parent": function( elem ) {
-			return !Expr.pseudos["empty"]( elem );
-		},
-
-		// Element/input types
-		"header": function( elem ) {
-			return rheader.test( elem.nodeName );
-		},
-
-		"input": function( elem ) {
-			return rinputs.test( elem.nodeName );
-		},
-
-		"button": function( elem ) {
-			var name = elem.nodeName.toLowerCase();
-			return name === "input" && elem.type === "button" || name === "button";
-		},
-
-		"text": function( elem ) {
-			var attr;
-			return elem.nodeName.toLowerCase() === "input" &&
-				elem.type === "text" &&
-
-				// Support: IE<8
-				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
-				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
-		},
-
-		// Position-in-collection
-		"first": createPositionalPseudo(function() {
-			return [ 0 ];
-		}),
-
-		"last": createPositionalPseudo(function( matchIndexes, length ) {
-			return [ length - 1 ];
-		}),
-
-		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
-			return [ argument < 0 ? argument + length : argument ];
-		}),
-
-		"even": createPositionalPseudo(function( matchIndexes, length ) {
-			var i = 0;
-			for ( ; i < length; i += 2 ) {
-				matchIndexes.push( i );
-			}
-			return matchIndexes;
-		}),
-
-		"odd": createPositionalPseudo(function( matchIndexes, length ) {
-			var i = 1;
-			for ( ; i < length; i += 2 ) {
-				matchIndexes.push( i );
-			}
-			return matchIndexes;
-		}),
-
-		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
-			var i = argument < 0 ? argument + length : argument;
-			for ( ; --i >= 0; ) {
-				matchIndexes.push( i );
-			}
-			return matchIndexes;
-		}),
-
-		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
-			var i = argument < 0 ? argument + length : argument;
-			for ( ; ++i < length; ) {
-				matchIndexes.push( i );
-			}
-			return matchIndexes;
-		})
-	}
-};
-
-Expr.pseudos["nth"] = Expr.pseudos["eq"];
-
-// Add button/input type pseudos
-for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
-	Expr.pseudos[ i ] = createInputPseudo( i );
-}
-for ( i in { submit: true, reset: true } ) {
-	Expr.pseudos[ i ] = createButtonPseudo( i );
-}
-
-// Easy API for creating new setFilters
-function setFilters() {}
-setFilters.prototype = Expr.filters = Expr.pseudos;
-Expr.setFilters = new setFilters();
-
-tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
-	var matched, match, tokens, type,
-		soFar, groups, preFilters,
-		cached = tokenCache[ selector + " " ];
-
-	if ( cached ) {
-		return parseOnly ? 0 : cached.slice( 0 );
-	}
-
-	soFar = selector;
-	groups = [];
-	preFilters = Expr.preFilter;
-
-	while ( soFar ) {
-
-		// Comma and first run
-		if ( !matched || (match = rcomma.exec( soFar )) ) {
-			if ( match ) {
-				// Don't consume trailing commas as valid
-				soFar = soFar.slice( match[0].length ) || soFar;
-			}
-			groups.push( (tokens = []) );
-		}
-
-		matched = false;
-
-		// Combinators
-		if ( (match = rcombinators.exec( soFar )) ) {
-			matched = match.shift();
-			tokens.push({
-				value: matched,
-				// Cast descendant combinators to space
-				type: match[0].replace( rtrim, " " )
-			});
-			soFar = soFar.slice( matched.length );
-		}
-
-		// Filters
-		for ( type in Expr.filter ) {
-			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
-				(match = preFilters[ type ]( match ))) ) {
-				matched = match.shift();
-				tokens.push({
-					value: matched,
-					type: type,
-					matches: match
-				});
-				soFar = soFar.slice( matched.length );
-			}
-		}
-
-		if ( !matched ) {
-			break;
-		}
-	}
-
-	// Return the length of the invalid excess
-	// if we're just parsing
-	// Otherwise, throw an error or return tokens
-	return parseOnly ?
-		soFar.length :
-		soFar ?
-			Sizzle.error( selector ) :
-			// Cache the tokens
-			tokenCache( selector, groups ).slice( 0 );
-};
-
-function toSelector( tokens ) {
-	var i = 0,
-		len = tokens.length,
-		selector = "";
-	for ( ; i < len; i++ ) {
-		selector += tokens[i].value;
-	}
-	return selector;
-}
-
-function addCombinator( matcher, combinator, base ) {
-	var dir = combinator.dir,
-		checkNonElements = base && dir === "parentNode",
-		doneName = done++;
-
-	return combinator.first ?
-		// Check against closest ancestor/preceding element
-		function( elem, context, xml ) {
-			while ( (elem = elem[ dir ]) ) {
-				if ( elem.nodeType === 1 || checkNonElements ) {
-					return matcher( elem, context, xml );
-				}
-			}
-		} :
-
-		// Check against all ancestor/preceding elements
-		function( elem, context, xml ) {
-			var oldCache, uniqueCache, outerCache,
-				newCache = [ dirruns, doneName ];
-
-			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
-			if ( xml ) {
-				while ( (elem = elem[ dir ]) ) {
-					if ( elem.nodeType === 1 || checkNonElements ) {
-						if ( matcher( elem, context, xml ) ) {
-							return true;
-						}
-					}
-				}
-			} else {
-				while ( (elem = elem[ dir ]) ) {
-					if ( elem.nodeType === 1 || checkNonElements ) {
-						outerCache = elem[ expando ] || (elem[ expando ] = {});
-
-						// Support: IE <9 only
-						// Defend against cloned attroperties (jQuery gh-1709)
-						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
-
-						if ( (oldCache = uniqueCache[ dir ]) &&
-							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
-
-							// Assign to newCache so results back-propagate to previous elements
-							return (newCache[ 2 ] = oldCache[ 2 ]);
-						} else {
-							// Reuse newcache so results back-propagate to previous elements
-							uniqueCache[ dir ] = newCache;
-
-							// A match means we're done; a fail means we have to keep checking
-							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
-								return true;
-							}
-						}
-					}
-				}
-			}
-		};
-}
-
-function elementMatcher( matchers ) {
-	return matchers.length > 1 ?
-		function( elem, context, xml ) {
-			var i = matchers.length;
-			while ( i-- ) {
-				if ( !matchers[i]( elem, context, xml ) ) {
-					return false;
-				}
-			}
-			return true;
-		} :
-		matchers[0];
-}
-
-function multipleContexts( selector, contexts, results ) {
-	var i = 0,
-		len = contexts.length;
-	for ( ; i < len; i++ ) {
-		Sizzle( selector, contexts[i], results );
-	}
-	return results;
-}
-
-function condense( unmatched, map, filter, context, xml ) {
-	var elem,
-		newUnmatched = [],
-		i = 0,
-		len = unmatched.length,
-		mapped = map != null;
-
-	for ( ; i < len; i++ ) {
-		if ( (elem = unmatched[i]) ) {
-			if ( !filter || filter( elem, context, xml ) ) {
-				newUnmatched.push( elem );
-				if ( mapped ) {
-					map.push( i );
-				}
-			}
-		}
-	}
-
-	return newUnmatched;
-}
-
-function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
-	if ( postFilter && !postFilter[ expando ] ) {
-		postFilter = setMatcher( postFilter );
-	}
-	if ( postFinder && !postFinder[ expando ] ) {
-		postFinder = setMatcher( postFinder, postSelector );
-	}
-	return markFunction(function( seed, results, context, xml ) {
-		var temp, i, elem,
-			preMap = [],
-			postMap = [],
-			preexisting = results.length,
-
-			// Get initial elements from seed or context
-			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
-
-			// Prefilter to get matcher input, preserving a map for seed-results synchronization
-			matcherIn = preFilter && ( seed || !selector ) ?
-				condense( elems, preMap, preFilter, context, xml ) :
-				elems,
-
-			matcherOut = matcher ?
-				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
-				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
-
-					// ...intermediate processing is necessary
-					[] :
-
-					// ...otherwise use results directly
-					results :
-				matcherIn;
-
-		// Find primary matches
-		if ( matcher ) {
-			matcher( matcherIn, matcherOut, context, xml );
-		}
-
-		// Apply postFilter
-		if ( postFilter ) {
-			temp = condense( matcherOut, postMap );
-			postFilter( temp, [], context, xml );
-
-			// Un-match failing elements by moving them back to matcherIn
-			i = temp.length;
-			while ( i-- ) {
-				if ( (elem = temp[i]) ) {
-					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
-				}
-			}
-		}
-
-		if ( seed ) {
-			if ( postFinder || preFilter ) {
-				if ( postFinder ) {
-					// Get the final matcherOut by condensing this intermediate into postFinder contexts
-					temp = [];
-					i = matcherOut.length;
-					while ( i-- ) {
-						if ( (elem = matcherOut[i]) ) {
-							// Restore matcherIn since elem is not yet a final match
-							temp.push( (matcherIn[i] = elem) );
-						}
-					}
-					postFinder( null, (matcherOut = []), temp, xml );
-				}
-
-				// Move matched elements from seed to results to keep them synchronized
-				i = matcherOut.length;
-				while ( i-- ) {
-					if ( (elem = matcherOut[i]) &&
-						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
-
-						seed[temp] = !(results[temp] = elem);
-					}
-				}
-			}
-
-		// Add elements to results, through postFinder if defined
-		} else {
-			matcherOut = condense(
-				matcherOut === results ?
-					matcherOut.splice( preexisting, matcherOut.length ) :
-					matcherOut
-			);
-			if ( postFinder ) {
-				postFinder( null, results, matcherOut, xml );
-			} else {
-				push.apply( results, matcherOut );
-			}
-		}
-	});
-}
-
-function matcherFromTokens( tokens ) {
-	var checkContext, matcher, j,
-		len = tokens.length,
-		leadingRelative = Expr.relative[ tokens[0].type ],
-		implicitRelative = leadingRelative || Expr.relative[" "],
-		i = leadingRelative ? 1 : 0,
-
-		// The foundational matcher ensures that elements are reachable from top-level context(s)
-		matchContext = addCombinator( function( elem ) {
-			return elem === checkContext;
-		}, implicitRelative, true ),
-		matchAnyContext = addCombinator( function( elem ) {
-			return indexOf( checkContext, elem ) > -1;
-		}, implicitRelative, true ),
-		matchers = [ function( elem, context, xml ) {
-			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
-				(checkContext = context).nodeType ?
-					matchContext( elem, context, xml ) :
-					matchAnyContext( elem, context, xml ) );
-			// Avoid hanging onto element (issue #299)
-			checkContext = null;
-			return ret;
-		} ];
-
-	for ( ; i < len; i++ ) {
-		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
-			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
-		} else {
-			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
-
-			// Return special upon seeing a positional matcher
-			if ( matcher[ expando ] ) {
-				// Find the next relative operator (if any) for proper handling
-				j = ++i;
-				for ( ; j < len; j++ ) {
-					if ( Expr.relative[ tokens[j].type ] ) {
-						break;
-					}
-				}
-				return setMatcher(
-					i > 1 && elementMatcher( matchers ),
-					i > 1 && toSelector(
-						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
-						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
-					).replace( rtrim, "$1" ),
-					matcher,
-					i < j && matcherFromTokens( tokens.slice( i, j ) ),
-					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
-					j < len && toSelector( tokens )
-				);
-			}
-			matchers.push( matcher );
-		}
-	}
-
-	return elementMatcher( matchers );
-}
-
-function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
-	var bySet = setMatchers.length > 0,
-		byElement = elementMatchers.length > 0,
-		superMatcher = function( seed, context, xml, results, outermost ) {
-			var elem, j, matcher,
-				matchedCount = 0,
-				i = "0",
-				unmatched = seed && [],
-				setMatched = [],
-				contextBackup = outermostContext,
-				// We must always have either seed elements or outermost context
-				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
-				// Use integer dirruns iff this is the outermost matcher
-				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
-				len = elems.length;
-
-			if ( outermost ) {
-				outermostContext = context === document || context || outermost;
-			}
-
-			// Add elements passing elementMatchers directly to results
-			// Support: IE<9, Safari
-			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
-			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
-				if ( byElement && elem ) {
-					j = 0;
-					if ( !context && elem.ownerDocument !== document ) {
-						setDocument( elem );
-						xml = !documentIsHTML;
-					}
-					while ( (matcher = elementMatchers[j++]) ) {
-						if ( matcher( elem, context || document, xml) ) {
-							results.push( elem );
-							break;
-						}
-					}
-					if ( outermost ) {
-						dirruns = dirrunsUnique;
-					}
-				}
-
-				// Track unmatched elements for set filters
-				if ( bySet ) {
-					// They will have gone through all possible matchers
-					if ( (elem = !matcher && elem) ) {
-						matchedCount--;
-					}
-
-					// Lengthen the array for every element, matched or not
-					if ( seed ) {
-						unmatched.push( elem );
-					}
-				}
-			}
-
-			// `i` is now the count of elements visited above, and adding it to `matchedCount`
-			// makes the latter nonnegative.
-			matchedCount += i;
-
-			// Apply set filters to unmatched elements
-			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
-			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
-			// no element matchers and no seed.
-			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
-			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
-			// numerically zero.
-			if ( bySet && i !== matchedCount ) {
-				j = 0;
-				while ( (matcher = setMatchers[j++]) ) {
-					matcher( unmatched, setMatched, context, xml );
-				}
-
-				if ( seed ) {
-					// Reintegrate element matches to eliminate the need for sorting
-					if ( matchedCount > 0 ) {
-						while ( i-- ) {
-							if ( !(unmatched[i] || setMatched[i]) ) {
-								setMatched[i] = pop.call( results );
-							}
-						}
-					}
-
-					// Discard index placeholder values to get only actual matches
-					setMatched = condense( setMatched );
-				}
-
-				// Add matches to results
-				push.apply( results, setMatched );
-
-				// Seedless set matches succeeding multiple successful matchers stipulate sorting
-				if ( outermost && !seed && setMatched.length > 0 &&
-					( matchedCount + setMatchers.length ) > 1 ) {
-
-					Sizzle.uniqueSort( results );
-				}
-			}
-
-			// Override manipulation of globals by nested matchers
-			if ( outermost ) {
-				dirruns = dirrunsUnique;
-				outermostContext = contextBackup;
-			}
-
-			return unmatched;
-		};
-
-	return bySet ?
-		markFunction( superMatcher ) :
-		superMatcher;
-}
-
-compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
-	var i,
-		setMatchers = [],
-		elementMatchers = [],
-		cached = compilerCache[ selector + " " ];
-
-	if ( !cached ) {
-		// Generate a function of recursive functions that can be used to check each element
-		if ( !match ) {
-			match = tokenize( selector );
-		}
-		i = match.length;
-		while ( i-- ) {
-			cached = matcherFromTokens( match[i] );
-			if ( cached[ expando ] ) {
-				setMatchers.push( cached );
-			} else {
-				elementMatchers.push( cached );
-			}
-		}
-
-		// Cache the compiled function
-		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
-
-		// Save selector and tokenization
-		cached.selector = selector;
-	}
-	return cached;
-};
-
-/**
- * A low-level selection function that works with Sizzle's compiled
- *  selector functions
- * @param {String|Function} selector A selector or a pre-compiled
- *  selector function built with Sizzle.compile
- * @param {Element} context
- * @param {Array} [results]
- * @param {Array} [seed] A set of elements to match against
- */
-select = Sizzle.select = function( selector, context, results, seed ) {
-	var i, tokens, token, type, find,
-		compiled = typeof selector === "function" && selector,
-		match = !seed && tokenize( (selector = compiled.selector || selector) );
-
-	results = results || [];
-
-	// Try to minimize operations if there is only one selector in the list and no seed
-	// (the latter of which guarantees us context)
-	if ( match.length === 1 ) {
-
-		// Reduce context if the leading compound selector is an ID
-		tokens = match[0] = match[0].slice( 0 );
-		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
-				support.getById && context.nodeType === 9 && documentIsHTML &&
-				Expr.relative[ tokens[1].type ] ) {
-
-			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
-			if ( !context ) {
-				return results;
-
-			// Precompiled matchers will still verify ancestry, so step up a level
-			} else if ( compiled ) {
-				context = context.parentNode;
-			}
-
-			selector = selector.slice( tokens.shift().value.length );
-		}
-
-		// Fetch a seed set for right-to-left matching
-		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
-		while ( i-- ) {
-			token = tokens[i];
-
-			// Abort if we hit a combinator
-			if ( Expr.relative[ (type = token.type) ] ) {
-				break;
-			}
-			if ( (find = Expr.find[ type ]) ) {
-				// Search, expanding context for leading sibling combinators
-				if ( (seed = find(
-					token.matches[0].replace( runescape, funescape ),
-					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
-				)) ) {
-
-					// If seed is empty or no tokens remain, we can return early
-					tokens.splice( i, 1 );
-					selector = seed.length && toSelector( tokens );
-					if ( !selector ) {
-						push.apply( results, seed );
-						return results;
-					}
-
-					break;
-				}
-			}
-		}
-	}
-
-	// Compile and execute a filtering function if one is not provided
-	// Provide `match` to avoid retokenization if we modified the selector above
-	( compiled || compile( selector, match ) )(
-		seed,
-		context,
-		!documentIsHTML,
-		results,
-		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
-	);
-	return results;
-};
-
-// One-time assignments
-
-// Sort stability
-support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
-
-// Support: Chrome 14-35+
-// Always assume duplicates if they aren't passed to the comparison function
-support.detectDuplicates = !!hasDuplicate;
-
-// Initialize against the default document
-setDocument();
-
-// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
-// Detached nodes confoundingly follow *each other*
-support.sortDetached = assert(function( div1 ) {
-	// Should return 1, but returns 4 (following)
-	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
-});
-
-// Support: IE<8
-// Prevent attribute/property "interpolation"
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !assert(function( div ) {
-	div.innerHTML = "<a href='#'></a>";
-	return div.firstChild.getAttribute("href") === "#" ;
-}) ) {
-	addHandle( "type|href|height|width", function( elem, name, isXML ) {
-		if ( !isXML ) {
-			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
-		}
-	});
-}
-
-// Support: IE<9
-// Use defaultValue in place of getAttribute("value")
-if ( !support.attributes || !assert(function( div ) {
-	div.innerHTML = "<input/>";
-	div.firstChild.setAttribute( "value", "" );
-	return div.firstChild.getAttribute( "value" ) === "";
-}) ) {
-	addHandle( "value", function( elem, name, isXML ) {
-		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
-			return elem.defaultValue;
-		}
-	});
-}
-
-// Support: IE<9
-// Use getAttributeNode to fetch booleans when getAttribute lies
-if ( !assert(function( div ) {
-	return div.getAttribute("disabled") == null;
-}) ) {
-	addHandle( booleans, function( elem, name, isXML ) {
-		var val;
-		if ( !isXML ) {
-			return elem[ name ] === true ? name.toLowerCase() :
-					(val = elem.getAttributeNode( name )) && val.specified ?
-					val.value :
-				null;
-		}
-	});
-}
-
-return Sizzle;
-
-})( window );
-
-
-
-jQuery.find = Sizzle;
-jQuery.expr = Sizzle.selectors;
-jQuery.expr[ ":" ] = jQuery.expr.pseudos;
-jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
-jQuery.text = Sizzle.getText;
-jQuery.isXMLDoc = Sizzle.isXML;
-jQuery.contains = Sizzle.contains;
-
-
-
-var dir = function( elem, dir, until ) {
-	var matched = [],
-		truncate = until !== undefined;
-
-	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
-		if ( elem.nodeType === 1 ) {
-			if ( truncate && jQuery( elem ).is( until ) ) {
-				break;
-			}
-			matched.push( elem );
-		}
-	}
-	return matched;
-};
-
-
-var siblings = function( n, elem ) {
-	var matched = [];
-
-	for ( ; n; n = n.nextSibling ) {
-		if ( n.nodeType === 1 && n !== elem ) {
-			matched.push( n );
-		}
-	}
-
-	return matched;
-};
-
-
-var rneedsContext = jQuery.expr.match.needsContext;
-
-var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ );
-
-
-
-var risSimple = /^.[^:#\[\.,]*$/;
-
-// Implement the identical functionality for filter and not
-function winnow( elements, qualifier, not ) {
-	if ( jQuery.isFunction( qualifier ) ) {
-		return jQuery.grep( elements, function( elem, i ) {
-			/* jshint -W018 */
-			return !!qualifier.call( elem, i, elem ) !== not;
-		} );
-
-	}
-
-	if ( qualifier.nodeType ) {
-		return jQuery.grep( elements, function( elem ) {
-			return ( elem === qualifier ) !== not;
-		} );
-
-	}
-
-	if ( typeof qualifier === "string" ) {
-		if ( risSimple.test( qualifier ) ) {
-			return jQuery.filter( qualifier, elements, not );
-		}
-
-		qualifier = jQuery.filter( qualifier, elements );
-	}
-
-	return jQuery.grep( elements, function( elem ) {
-		return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;
-	} );
-}
-
-jQuery.filter = function( expr, elems, not ) {
-	var elem = elems[ 0 ];
-
-	if ( not ) {
-		expr = ":not(" + expr + ")";
-	}
-
-	return elems.length === 1 && elem.nodeType === 1 ?
-		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
-		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
-			return elem.nodeType === 1;
-		} ) );
-};
-
-jQuery.fn.extend( {
-	find: function( selector ) {
-		var i,
-			ret = [],
-			self = this,
-			len = self.length;
-
-		if ( typeof selector !== "string" ) {
-			return this.pushStack( jQuery( selector ).filter( function() {
-				for ( i = 0; i < len; i++ ) {
-					if ( jQuery.contains( self[ i ], this ) ) {
-						return true;
-					}
-				}
-			} ) );
-		}
-
-		for ( i = 0; i < len; i++ ) {
-			jQuery.find( selector, self[ i ], ret );
-		}
-
-		// Needed because $( selector, context ) becomes $( context ).find( selector )
-		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
-		ret.selector = this.selector ? this.selector + " " + selector : selector;
-		return ret;
-	},
-	filter: function( selector ) {
-		return this.pushStack( winnow( this, selector || [], false ) );
-	},
-	not: function( selector ) {
-		return this.pushStack( winnow( this, selector || [], true ) );
-	},
-	is: function( selector ) {
-		return !!winnow(
-			this,
-
-			// If this is a positional/relative selector, check membership in the returned set
-			// so $("p:first").is("p:last") won't return true for a doc with two "p".
-			typeof selector === "string" && rneedsContext.test( selector ) ?
-				jQuery( selector ) :
-				selector || [],
-			false
-		).length;
-	}
-} );
-
-
-// Initialize a jQuery object
-
-
-// A central reference to the root jQuery(document)
-var rootjQuery,
-
-	// A simple way to check for HTML strings
-	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
-	// Strict HTML recognition (#11290: must start with <)
-	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
-
-	init = jQuery.fn.init = function( selector, context, root ) {
-		var match, elem;
-
-		// HANDLE: $(""), $(null), $(undefined), $(false)
-		if ( !selector ) {
-			return this;
-		}
-
-		// init accepts an alternate rootjQuery
-		// so migrate can support jQuery.sub (gh-2101)
-		root = root || rootjQuery;
-
-		// Handle HTML strings
-		if ( typeof selector === "string" ) {
-			if ( selector.charAt( 0 ) === "<" &&
-				selector.charAt( selector.length - 1 ) === ">" &&
-				selector.length >= 3 ) {
-
-				// Assume that strings that start and end with <> are HTML and skip the regex check
-				match = [ null, selector, null ];
-
-			} else {
-				match = rquickExpr.exec( selector );
-			}
-
-			// Match html or make sure no context is specified for #id
-			if ( match && ( match[ 1 ] || !context ) ) {
-
-				// HANDLE: $(html) -> $(array)
-				if ( match[ 1 ] ) {
-					context = context instanceof jQuery ? context[ 0 ] : context;
-
-					// scripts is true for back-compat
-					// Intentionally let the error be thrown if parseHTML is not present
-					jQuery.merge( this, jQuery.parseHTML(
-						match[ 1 ],
-						context && context.nodeType ? context.ownerDocument || context : document,
-						true
-					) );
-
-					// HANDLE: $(html, props)
-					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
-						for ( match in context ) {
-
-							// Properties of context are called as methods if possible
-							if ( jQuery.isFunction( this[ match ] ) ) {
-								this[ match ]( context[ match ] );
-
-							// ...and otherwise set as attributes
-							} else {
-								this.attr( match, context[ match ] );
-							}
-						}
-					}
-
-					return this;
-
-				// HANDLE: $(#id)
-				} else {
-					elem = document.getElementById( match[ 2 ] );
-
-					// Check parentNode to catch when Blackberry 4.6 returns
-					// nodes that are no longer in the document #6963
-					if ( elem && elem.parentNode ) {
-
-						// Handle the case where IE and Opera return items
-						// by name instead of ID
-						if ( elem.id !== match[ 2 ] ) {
-							return rootjQuery.find( selector );
-						}
-
-						// Otherwise, we inject the element directly into the jQuery object
-						this.length = 1;
-						this[ 0 ] = elem;
-					}
-
-					this.context = document;
-					this.selector = selector;
-					return this;
-				}
-
-			// HANDLE: $(expr, $(...))
-			} else if ( !context || context.jquery ) {
-				return ( context || root ).find( selector );
-
-			// HANDLE: $(expr, context)
-			// (which is just equivalent to: $(context).find(expr)
-			} else {
-				return this.constructor( context ).find( selector );
-			}
-
-		// HANDLE: $(DOMElement)
-		} else if ( selector.nodeType ) {
-			this.context = this[ 0 ] = selector;
-			this.length = 1;
-			return this;
-
-		// HANDLE: $(function)
-		// Shortcut for document ready
-		} else if ( jQuery.isFunction( selector ) ) {
-			return typeof root.ready !== "undefined" ?
-				root.ready( selector ) :
-
-				// Execute immediately if ready is not present
-				selector( jQuery );
-		}
-
-		if ( selector.selector !== undefined ) {
-			this.selector = selector.selector;
-			this.context = selector.context;
-		}
-
-		return jQuery.makeArray( selector, this );
-	};
-
-// Give the init function the jQuery prototype for later instantiation
-init.prototype = jQuery.fn;
-
-// Initialize central reference
-rootjQuery = jQuery( document );
-
-
-var rparentsprev = /^(?:parents|prev(?:Until|All))/,
-
-	// methods guaranteed to produce a unique set when starting from a unique set
-	guaranteedUnique = {
-		children: true,
-		contents: true,
-		next: true,
-		prev: true
-	};
-
-jQuery.fn.extend( {
-	has: function( target ) {
-		var i,
-			targets = jQuery( target, this ),
-			len = targets.length;
-
-		return this.filter( function() {
-			for ( i = 0; i < len; i++ ) {
-				if ( jQuery.contains( this, targets[ i ] ) ) {
-					return true;
-				}
-			}
-		} );
-	},
-
-	closest: function( selectors, context ) {
-		var cur,
-			i = 0,
-			l = this.length,
-			matched = [],
-			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
-				jQuery( selectors, context || this.context ) :
-				0;
-
-		for ( ; i < l; i++ ) {
-			for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
-
-				// Always skip document fragments
-				if ( cur.nodeType < 11 && ( pos ?
-					pos.index( cur ) > -1 :
-
-					// Don't pass non-elements to Sizzle
-					cur.nodeType === 1 &&
-						jQuery.find.matchesSelector( cur, selectors ) ) ) {
-
-					matched.push( cur );
-					break;
-				}
-			}
-		}
-
-		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
-	},
-
-	// Determine the position of an element within
-	// the matched set of elements
-	index: function( elem ) {
-
-		// No argument, return index in parent
-		if ( !elem ) {
-			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
-		}
-
-		// index in selector
-		if ( typeof elem === "string" ) {
-			return jQuery.inArray( this[ 0 ], jQuery( elem ) );
-		}
-
-		// Locate the position of the desired element
-		return jQuery.inArray(
-
-			// If it receives a jQuery object, the first element is used
-			elem.jquery ? elem[ 0 ] : elem, this );
-	},
-
-	add: function( selector, context ) {
-		return this.pushStack(
-			jQuery.uniqueSort(
-				jQuery.merge( this.get(), jQuery( selector, context ) )
-			)
-		);
-	},
-
-	addBack: function( selector ) {
-		return this.add( selector == null ?
-			this.prevObject : this.prevObject.filter( selector )
-		);
-	}
-} );
-
-function sibling( cur, dir ) {
-	do {
-		cur = cur[ dir ];
-	} while ( cur && cur.nodeType !== 1 );
-
-	return cur;
-}
-
-jQuery.each( {
-	parent: function( elem ) {
-		var parent = elem.parentNode;
-		return parent && parent.nodeType !== 11 ? parent : null;
-	},
-	parents: function( elem ) {
-		return dir( elem, "parentNode" );
-	},
-	parentsUntil: function( elem, i, until ) {
-		return dir( elem, "parentNode", until );
-	},
-	next: function( elem ) {
-		return sibling( elem, "nextSibling" );
-	},
-	prev: function( elem ) {
-		return sibling( elem, "previousSibling" );
-	},
-	nextAll: function( elem ) {
-		return dir( elem, "nextSibling" );
-	},
-	prevAll: function( elem ) {
-		return dir( elem, "previousSibling" );
-	},
-	nextUntil: function( elem, i, until ) {
-		return dir( elem, "nextSibling", until );
-	},
-	prevUntil: function( elem, i, until ) {
-		return dir( elem, "previousSibling", until );
-	},
-	siblings: function( elem ) {
-		return siblings( ( elem.parentNode || {} ).firstChild, elem );
-	},
-	children: function( elem ) {
-		return siblings( elem.firstChild );
-	},
-	contents: function( elem ) {
-		return jQuery.nodeName( elem, "iframe" ) ?
-			elem.contentDocument || elem.contentWindow.document :
-			jQuery.merge( [], elem.childNodes );
-	}
-}, function( name, fn ) {
-	jQuery.fn[ name ] = function( until, selector ) {
-		var ret = jQuery.map( this, fn, until );
-
-		if ( name.slice( -5 ) !== "Until" ) {
-			selector = until;
-		}
-
-		if ( selector && typeof selector === "string" ) {
-			ret = jQuery.filter( selector, ret );
-		}
-
-		if ( this.length > 1 ) {
-
-			// Remove duplicates
-			if ( !guaranteedUnique[ name ] ) {
-				ret = jQuery.uniqueSort( ret );
-			}
-
-			// Reverse order for parents* and prev-derivatives
-			if ( rparentsprev.test( name ) ) {
-				ret = ret.reverse();
-			}
-		}
-
-		return this.pushStack( ret );
-	};
-} );
-var rnotwhite = ( /\S+/g );
-
-
-
-// Convert String-formatted options into Object-formatted ones
-function createOptions( options ) {
-	var object = {};
-	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
-		object[ flag ] = true;
-	} );
-	return object;
-}
-
-/*
- * Create a callback list using the following parameters:
- *
- *	options: an optional list of space-separated options that will change how
- *			the callback list behaves or a more traditional option object
- *
- * By default a callback list will act like an event callback list and can be
- * "fired" multiple times.
- *
- * Possible options:
- *
- *	once:			will ensure the callback list can only be fired once (like a Deferred)
- *
- *	memory:			will keep track of previous values and will call any callback added
- *					after the list has been fired right away with the latest "memorized"
- *					values (like a Deferred)
- *
- *	unique:			will ensure a callback can only be added once (no duplicate in the list)
- *
- *	stopOnFalse:	interrupt callings when a callback returns false
- *
- */
-jQuery.Callbacks = function( options ) {
-
-	// Convert options from String-formatted to Object-formatted if needed
-	// (we check in cache first)
-	options = typeof options === "string" ?
-		createOptions( options ) :
-		jQuery.extend( {}, options );
-
-	var // Flag to know if list is currently firing
-		firing,
-
-		// Last fire value for non-forgettable lists
-		memory,
-
-		// Flag to know if list was already fired
-		fired,
-
-		// Flag to prevent firing
-		locked,
-
-		// Actual callback list
-		list = [],
-
-		// Queue of execution data for repeatable lists
-		queue = [],
-
-		// Index of currently firing callback (modified by add/remove as needed)
-		firingIndex = -1,
-
-		// Fire callbacks
-		fire = function() {
-
-			// Enforce single-firing
-			locked = options.once;
-
-			// Execute callbacks for all pending executions,
-			// respecting firingIndex overrides and runtime changes
-			fired = firing = true;
-			for ( ; queue.length; firingIndex = -1 ) {
-				memory = queue.shift();
-				while ( ++firingIndex < list.length ) {
-
-					// Run callback and check for early termination
-					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
-						options.stopOnFalse ) {
-
-						// Jump to end and forget the data so .add doesn't re-fire
-						firingIndex = list.length;
-						memory = false;
-					}
-				}
-			}
-
-			// Forget the data if we're done with it
-			if ( !options.memory ) {
-				memory = false;
-			}
-
-			firing = false;
-
-			// Clean up if we're done firing for good
-			if ( locked ) {
-
-				// Keep an empty list if we have data for future add calls
-				if ( memory ) {
-					list = [];
-
-				// Otherwise, this object is spent
-				} else {
-					list = "";
-				}
-			}
-		},
-
-		// Actual Callbacks object
-		self = {
-
-			// Add a callback or a collection of callbacks to the list
-			add: function() {
-				if ( list ) {
-
-					// If we have memory from a past run, we should fire after adding
-					if ( memory && !firing ) {
-						firingIndex = list.length - 1;
-						queue.push( memory );
-					}
-
-					( function add( args ) {
-						jQuery.each( args, function( _, arg ) {
-							if ( jQuery.isFunction( arg ) ) {
-								if ( !options.unique || !self.has( arg ) ) {
-									list.push( arg );
-								}
-							} else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
-
-								// Inspect recursively
-								add( arg );
-							}
-						} );
-					} )( arguments );
-
-					if ( memory && !firing ) {
-						fire();
-					}
-				}
-				return this;
-			},
-
-			// Remove a callback from the list
-			remove: function() {
-				jQuery.each( arguments, function( _, arg ) {
-					var index;
-					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
-						list.splice( index, 1 );
-
-						// Handle firing indexes
-						if ( index <= firingIndex ) {
-							firingIndex--;
-						}
-					}
-				} );
-				return this;
-			},
-
-			// Check if a given callback is in the list.
-			// If no argument is given, return whether or not list has callbacks attached.
-			has: function( fn ) {
-				return fn ?
-					jQuery.inArray( fn, list ) > -1 :
-					list.length > 0;
-			},
-
-			// Remove all callbacks from the list
-			empty: function() {
-				if ( list ) {
-					list = [];
-				}
-				return this;
-			},
-
-			// Disable .fire and .add
-			// Abort any current/pending executions
-			// Clear all callbacks and values
-			disable: function() {
-				locked = queue = [];
-				list = memory = "";
-				return this;
-			},
-			disabled: function() {
-				return !list;
-			},
-
-			// Disable .fire
-			// Also disable .add unless we have memory (since it would have no effect)
-			// Abort any pending executions
-			lock: function() {
-				locked = true;
-				if ( !memory ) {
-					self.disable();
-				}
-				return this;
-			},
-			locked: function() {
-				return !!locked;
-			},
-
-			// Call all callbacks with the given context and arguments
-			fireWith: function( context, args ) {
-				if ( !locked ) {
-					args = args || [];
-					args = [ context, args.slice ? args.slice() : args ];
-					queue.push( args );
-					if ( !firing ) {
-						fire();
-					}
-				}
-				return this;
-			},
-
-			// Call all the callbacks with the given arguments
-			fire: function() {
-				self.fireWith( this, arguments );
-				return this;
-			},
-
-			// To know if the callbacks have already been called at least once
-			fired: function() {
-				return !!fired;
-			}
-		};
-
-	return self;
-};
-
-
-jQuery.extend( {
-
-	Deferred: function( func ) {
-		var tuples = [
-
-				// action, add listener, listener list, final state
-				[ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ],
-				[ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ],
-				[ "notify", "progress", jQuery.Callbacks( "memory" ) ]
-			],
-			state = "pending",
-			promise = {
-				state: function() {
-					return state;
-				},
-				always: function() {
-					deferred.done( arguments ).fail( arguments );
-					return this;
-				},
-				then: function( /* fnDone, fnFail, fnProgress */ ) {
-					var fns = arguments;
-					return jQuery.Deferred( function( newDefer ) {
-						jQuery.each( tuples, function( i, tuple ) {
-							var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
-
-							// deferred[ done | fail | progress ] for forwarding actions to newDefer
-							deferred[ tuple[ 1 ] ]( function() {
-								var returned = fn && fn.apply( this, arguments );
-								if ( returned && jQuery.isFunction( returned.promise ) ) {
-									returned.promise()
-										.progress( newDefer.notify )
-										.done( newDefer.resolve )
-										.fail( newDefer.reject );
-								} else {
-									newDefer[ tuple[ 0 ] + "With" ](
-										this === promise ? newDefer.promise() : this,
-										fn ? [ returned ] : arguments
-									);
-								}
-							} );
-						} );
-						fns = null;
-					} ).promise();
-				},
-
-				// Get a promise for this deferred
-				// If obj is provided, the promise aspect is added to the object
-				promise: function( obj ) {
-					return obj != null ? jQuery.extend( obj, promise ) : promise;
-				}
-			},
-			deferred = {};
-
-		// Keep pipe for back-compat
-		promise.pipe = promise.then;
-
-		// Add list-specific methods
-		jQuery.each( tuples, function( i, tuple ) {
-			var list = tuple[ 2 ],
-				stateString = tuple[ 3 ];
-
-			// promise[ done | fail | progress ] = list.add
-			promise[ tuple[ 1 ] ] = list.add;
-
-			// Handle state
-			if ( stateString ) {
-				list.add( function() {
-
-					// state = [ resolved | rejected ]
-					state = stateString;
-
-				// [ reject_list | resolve_list ].disable; progress_list.lock
-				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
-			}
-
-			// deferred[ resolve | reject | notify ]
-			deferred[ tuple[ 0 ] ] = function() {
-				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments );
-				return this;
-			};
-			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
-		} );
-
-		// Make the deferred a promise
-		promise.promise( deferred );
-
-		// Call given func if any
-		if ( func ) {
-			func.call( deferred, deferred );
-		}
-
-		// All done!
-		return deferred;
-	},
-
-	// Deferred helper
-	when: function( subordinate /* , ..., subordinateN */ ) {
-		var i = 0,
-			resolveValues = slice.call( arguments ),
-			length = resolveValues.length,
-
-			// the count of uncompleted subordinates
-			remaining = length !== 1 ||
-				( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
-
-			// the master Deferred.
-			// If resolveValues consist of only a single Deferred, just use that.
-			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
-
-			// Update function for both resolve and progress values
-			updateFunc = function( i, contexts, values ) {
-				return function( value ) {
-					contexts[ i ] = this;
-					values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
-					if ( values === progressValues ) {
-						deferred.notifyWith( contexts, values );
-
-					} else if ( !( --remaining ) ) {
-						deferred.resolveWith( contexts, values );
-					}
-				};
-			},
-
-			progressValues, progressContexts, resolveContexts;
-
-		// add listeners to Deferred subordinates; treat others as resolved
-		if ( length > 1 ) {
-			progressValues = new Array( length );
-			progressContexts = new Array( length );
-			resolveContexts = new Array( length );
-			for ( ; i < length; i++ ) {
-				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
-					resolveValues[ i ].promise()
-						.progress( updateFunc( i, progressContexts, progressValues ) )
-						.done( updateFunc( i, resolveContexts, resolveValues ) )
-						.fail( deferred.reject );
-				} else {
-					--remaining;
-				}
-			}
-		}
-
-		// if we're not waiting on anything, resolve the master
-		if ( !remaining ) {
-			deferred.resolveWith( resolveContexts, resolveValues );
-		}
-
-		return deferred.promise();
-	}
-} );
-
-
-// The deferred used on DOM ready
-var readyList;
-
-jQuery.fn.ready = function( fn ) {
-
-	// Add the callback
-	jQuery.ready.promise().done( fn );
-
-	return this;
-};
-
-jQuery.extend( {
-
-	// Is the DOM ready to be used? Set to true once it occurs.
-	isReady: false,
-
-	// A counter to track how many items to wait for before
-	// the ready event fires. See #6781
-	readyWait: 1,
-
-	// Hold (or release) the ready event
-	holdReady: function( hold ) {
-		if ( hold ) {
-			jQuery.readyWait++;
-		} else {
-			jQuery.ready( true );
-		}
-	},
-
-	// Handle when the DOM is ready
-	ready: function( wait ) {
-
-		// Abort if there are pending holds or we're already ready
-		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
-			return;
-		}
-
-		// Remember that the DOM is ready
-		jQuery.isReady = true;
-
-		// If a normal DOM Ready event fired, decrement, and wait if need be
-		if ( wait !== true && --jQuery.readyWait > 0 ) {
-			return;
-		}
-
-		// If there are functions bound, to execute
-		readyList.resolveWith( document, [ jQuery ] );
-
-		// Trigger any bound ready events
-		if ( jQuery.fn.triggerHandler ) {
-			jQuery( document ).triggerHandler( "ready" );
-			jQuery( document ).off( "ready" );
-		}
-	}
-} );
-
-/**
- * Clean-up method for dom ready events
- */
-function detach() {
-	if ( document.addEventListener ) {
-		document.removeEventListener( "DOMContentLoaded", completed );
-		window.removeEventListener( "load", completed );
-
-	} else {
-		document.detachEvent( "onreadystatechange", completed );
-		window.detachEvent( "onload", completed );
-	}
-}
-
-/**
- * The ready event handler and self cleanup method
- */
-function completed() {
-
-	// readyState === "complete" is good enough for us to call the dom ready in oldIE
-	if ( document.addEventListener ||
-		window.event.type === "load" ||
-		document.readyState === "complete" ) {
-
-		detach();
-		jQuery.ready();
-	}
-}
-
-jQuery.ready.promise = function( obj ) {
-	if ( !readyList ) {
-
-		readyList = jQuery.Deferred();
-
-		// Catch cases where $(document).ready() is called
-		// after the browser event has already occurred.
-		// we once tried to use readyState "interactive" here,
-		// but it caused issues like the one
-		// discovered by ChrisS here:
-		// http://bugs.jquery.com/ticket/12282#comment:15
-		if ( document.readyState === "complete" ) {
-
-			// Handle it asynchronously to allow scripts the opportunity to delay ready
-			window.setTimeout( jQuery.ready );
-
-		// Standards-based browsers support DOMContentLoaded
-		} else if ( document.addEventListener ) {
-
-			// Use the handy event callback
-			document.addEventListener( "DOMContentLoaded", completed );
-
-			// A fallback to window.onload, that will always work
-			window.addEventListener( "load", completed );
-
-		// If IE event model is used
-		} else {
-
-			// Ensure firing before onload, maybe late but safe also for iframes
-			document.attachEvent( "onreadystatechange", completed );
-
-			// A fallback to window.onload, that will always work
-			window.attachEvent( "onload", completed );
-
-			// If IE and not a frame
-			// continually check to see if the document is ready
-			var top = false;
-
-			try {
-				top = window.frameElement == null && document.documentElement;
-			} catch ( e ) {}
-
-			if ( top && top.doScroll ) {
-				( function doScrollCheck() {
-					if ( !jQuery.isReady ) {
-
-						try {
-
-							// Use the trick by Diego Perini
-							// http://javascript.nwbox.com/IEContentLoaded/
-							top.doScroll( "left" );
-						} catch ( e ) {
-							return window.setTimeout( doScrollCheck, 50 );
-						}
-
-						// detach all dom ready events
-						detach();
-
-						// and execute any waiting functions
-						jQuery.ready();
-					}
-				} )();
-			}
-		}
-	}
-	return readyList.promise( obj );
-};
-
-// Kick off the DOM ready check even if the user does not
-jQuery.ready.promise();
-
-
-
-
-// Support: IE<9
-// Iteration over object's inherited properties before its own
-var i;
-for ( i in jQuery( support ) ) {
-	break;
-}
-support.ownFirst = i === "0";
-
-// Note: most support tests are defined in their respective modules.
-// false until the test is run
-support.inlineBlockNeedsLayout = false;
-
-// Execute ASAP in case we need to set body.style.zoom
-jQuery( function() {
-
-	// Minified: var a,b,c,d
-	var val, div, body, container;
-
-	body = document.getElementsByTagName( "body" )[ 0 ];
-	if ( !body || !body.style ) {
-
-		// Return for frameset docs that don't have a body
-		return;
-	}
-
-	// Setup
-	div = document.createElement( "div" );
-	container = document.createElement( "div" );
-	container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
-	body.appendChild( container ).appendChild( div );
-
-	if ( typeof div.style.zoom !== "undefined" ) {
-
-		// Support: IE<8
-		// Check if natively block-level elements act like inline-block
-		// elements when setting their display to 'inline' and giving
-		// them layout
-		div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
-
-		support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
-		if ( val ) {
-
-			// Prevent IE 6 from affecting layout for positioned elements #11048
-			// Prevent IE from shrinking the body in IE 7 mode #12869
-			// Support: IE<8
-			body.style.zoom = 1;
-		}
-	}
-
-	body.removeChild( container );
-} );
-
-
-( function() {
-	var div = document.createElement( "div" );
-
-	// Support: IE<9
-	support.deleteExpando = true;
-	try {
-		delete div.test;
-	} catch ( e ) {
-		support.deleteExpando = false;
-	}
-
-	// Null elements to avoid leaks in IE.
-	div = null;
-} )();
-var acceptData = function( elem ) {
-	var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ],
-		nodeType = +elem.nodeType || 1;
-
-	// Do not set data on non-element DOM nodes because it will not be cleared (#8335).
-	return nodeType !== 1 && nodeType !== 9 ?
-		false :
-
-		// Nodes accept data unless otherwise specified; rejection can be conditional
-		!noData || noData !== true && elem.getAttribute( "classid" ) === noData;
-};
-
-
-
-
-var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
-	rmultiDash = /([A-Z])/g;
-
-function dataAttr( elem, key, data ) {
-
-	// If nothing was found internally, try to fetch any
-	// data from the HTML5 data-* attribute
-	if ( data === undefined && elem.nodeType === 1 ) {
-
-		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
-
-		data = elem.getAttribute( name );
-
-		if ( typeof data === "string" ) {
-			try {
-				data = data === "true" ? true :
-					data === "false" ? false :
-					data === "null" ? null :
-
-					// Only convert to a number if it doesn't change the string
-					+data + "" === data ? +data :
-					rbrace.test( data ) ? jQuery.parseJSON( data ) :
-					data;
-			} catch ( e ) {}
-
-			// Make sure we set the data so it isn't changed later
-			jQuery.data( elem, key, data );
-
-		} else {
-			data = undefined;
-		}
-	}
-
-	return data;
-}
-
-// checks a cache object for emptiness
-function isEmptyDataObject( obj ) {
-	var name;
-	for ( name in obj ) {
-
-		// if the public data object is empty, the private is still empty
-		if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) {
-			continue;
-		}
-		if ( name !== "toJSON" ) {
-			return false;
-		}
-	}
-
-	return true;
-}
-
-function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
-	if ( !acceptData( elem ) ) {
-		return;
-	}
-
-	var ret, thisCache,
-		internalKey = jQuery.expando,
-
-		// We have to handle DOM nodes and JS objects differently because IE6-7
-		// can't GC object references properly across the DOM-JS boundary
-		isNode = elem.nodeType,
-
-		// Only DOM nodes need the global jQuery cache; JS object data is
-		// attached directly to the object so GC can occur automatically
-		cache = isNode ? jQuery.cache : elem,
-
-		// Only defining an ID for JS objects if its cache already exists allows
-		// the code to shortcut on the same path as a DOM node with no cache
-		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
-
-	// Avoid doing any more work than we need to when trying to get data on an
-	// object that has no data at all
-	if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&
-		data === undefined && typeof name === "string" ) {
-		return;
-	}
-
-	if ( !id ) {
-
-		// Only DOM nodes need a new unique ID for each element since their data
-		// ends up in the global cache
-		if ( isNode ) {
-			id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
-		} else {
-			id = internalKey;
-		}
-	}
-
-	if ( !cache[ id ] ) {
-
-		// Avoid exposing jQuery metadata on plain JS objects when the object
-		// is serialized using JSON.stringify
-		cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
-	}
-
-	// An object can be passed to jQuery.data instead of a key/value pair; this gets
-	// shallow copied over onto the existing cache
-	if ( typeof name === "object" || typeof name === "function" ) {
-		if ( pvt ) {
-			cache[ id ] = jQuery.extend( cache[ id ], name );
-		} else {
-			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
-		}
-	}
-
-	thisCache = cache[ id ];
-
-	// jQuery data() is stored in a separate object inside the object's internal data
-	// cache in order to avoid key collisions between internal data and user-defined
-	// data.
-	if ( !pvt ) {
-		if ( !thisCache.data ) {
-			thisCache.data = {};
-		}
-
-		thisCache = thisCache.data;
-	}
-
-	if ( data !== undefined ) {
-		thisCache[ jQuery.camelCase( name ) ] = data;
-	}
-
-	// Check for both converted-to-camel and non-converted data property names
-	// If a data property was specified
-	if ( typeof name === "string" ) {
-
-		// First Try to find as-is property data
-		ret = thisCache[ name ];
-
-		// Test for null|undefined property data
-		if ( ret == null ) {
-
-			// Try to find the camelCased property
-			ret = thisCache[ jQuery.camelCase( name ) ];
-		}
-	} else {
-		ret = thisCache;
-	}
-
-	return ret;
-}
-
-function internalRemoveData( elem, name, pvt ) {
-	if ( !acceptData( elem ) ) {
-		return;
-	}
-
-	var thisCache, i,
-		isNode = elem.nodeType,
-
-		// See jQuery.data for more information
-		cache = isNode ? jQuery.cache : elem,
-		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
-
-	// If there is already no cache entry for this object, there is no
-	// purpose in continuing
-	if ( !cache[ id ] ) {
-		return;
-	}
-
-	if ( name ) {
-
-		thisCache = pvt ? cache[ id ] : cache[ id ].data;
-
-		if ( thisCache ) {
-
-			// Support array or space separated string names for data keys
-			if ( !jQuery.isArray( name ) ) {
-
-				// try the string as a key before any manipulation
-				if ( name in thisCache ) {
-					name = [ name ];
-				} else {
-
-					// split the camel cased version by spaces unless a key with the spaces exists
-					name = jQuery.camelCase( name );
-					if ( name in thisCache ) {
-						name = [ name ];
-					} else {
-						name = name.split( " " );
-					}
-				}
-			} else {
-
-				// If "name" is an array of keys...
-				// When data is initially created, via ("key", "val") signature,
-				// keys will be converted to camelCase.
-				// Since there is no way to tell _how_ a key was added, remove
-				// both plain key and camelCase key. #12786
-				// This will only penalize the array argument path.
-				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
-			}
-
-			i = name.length;
-			while ( i-- ) {
-				delete thisCache[ name[ i ] ];
-			}
-
-			// If there is no data left in the cache, we want to continue
-			// and let the cache object itself get destroyed
-			if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {
-				return;
-			}
-		}
-	}
-
-	// See jQuery.data for more information
-	if ( !pvt ) {
-		delete cache[ id ].data;
-
-		// Don't destroy the parent cache unless the internal data object
-		// had been the only thing left in it
-		if ( !isEmptyDataObject( cache[ id ] ) ) {
-			return;
-		}
-	}
-
-	// Destroy the cache
-	if ( isNode ) {
-		jQuery.cleanData( [ elem ], true );
-
-	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
-	/* jshint eqeqeq: false */
-	} else if ( support.deleteExpando || cache != cache.window ) {
-		/* jshint eqeqeq: true */
-		delete cache[ id ];
-
-	// When all else fails, undefined
-	} else {
-		cache[ id ] = undefined;
-	}
-}
-
-jQuery.extend( {
-	cache: {},
-
-	// The following elements (space-suffixed to avoid Object.prototype collisions)
-	// throw uncatchable exceptions if you attempt to set expando properties
-	noData: {
-		"applet ": true,
-		"embed ": true,
-
-		// ...but Flash objects (which have this classid) *can* handle expandos
-		"object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
-	},
-
-	hasData: function( elem ) {
-		elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];
-		return !!elem && !isEmptyDataObject( elem );
-	},
-
-	data: function( elem, name, data ) {
-		return internalData( elem, name, data );
-	},
-
-	removeData: function( elem, name ) {
-		return internalRemoveData( elem, name );
-	},
-
-	// For internal use only.
-	_data: function( elem, name, data ) {
-		return internalData( elem, name, data, true );
-	},
-
-	_removeData: function( elem, name ) {
-		return internalRemoveData( elem, name, true );
-	}
-} );
-
-jQuery.fn.extend( {
-	data: function( key, value ) {
-		var i, name, data,
-			elem = this[ 0 ],
-			attrs = elem && elem.attributes;
-
-		// Special expections of .data basically thwart jQuery.access,
-		// so implement the relevant behavior ourselves
-
-		// Gets all values
-		if ( key === undefined ) {
-			if ( this.length ) {
-				data = jQuery.data( elem );
-
-				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
-					i = attrs.length;
-					while ( i-- ) {
-
-						// Support: IE11+
-						// The attrs elements can be null (#14894)
-						if ( attrs[ i ] ) {
-							name = attrs[ i ].name;
-							if ( name.indexOf( "data-" ) === 0 ) {
-								name = jQuery.camelCase( name.slice( 5 ) );
-								dataAttr( elem, name, data[ name ] );
-							}
-						}
-					}
-					jQuery._data( elem, "parsedAttrs", true );
-				}
-			}
-
-			return data;
-		}
-
-		// Sets multiple values
-		if ( typeof key === "object" ) {
-			return this.each( function() {
-				jQuery.data( this, key );
-			} );
-		}
-
-		return arguments.length > 1 ?
-
-			// Sets one value
-			this.each( function() {
-				jQuery.data( this, key, value );
-			} ) :
-
-			// Gets one value
-			// Try to fetch any internally stored data first
-			elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
-	},
-
-	removeData: function( key ) {
-		return this.each( function() {
-			jQuery.removeData( this, key );
-		} );
-	}
-} );
-
-
-jQuery.extend( {
-	queue: function( elem, type, data ) {
-		var queue;
-
-		if ( elem ) {
-			type = ( type || "fx" ) + "queue";
-			queue = jQuery._data( elem, type );
-
-			// Speed up dequeue by getting out quickly if this is just a lookup
-			if ( data ) {
-				if ( !queue || jQuery.isArray( data ) ) {
-					queue = jQuery._data( elem, type, jQuery.makeArray( data ) );
-				} else {
-					queue.push( data );
-				}
-			}
-			return queue || [];
-		}
-	},
-
-	dequeue: function( elem, type ) {
-		type = type || "fx";
-
-		var queue = jQuery.queue( elem, type ),
-			startLength = queue.length,
-			fn = queue.shift(),
-			hooks = jQuery._queueHooks( elem, type ),
-			next = function() {
-				jQuery.dequeue( elem, type );
-			};
-
-		// If the fx queue is dequeued, always remove the progress sentinel
-		if ( fn === "inprogress" ) {
-			fn = queue.shift();
-			startLength--;
-		}
-
-		if ( fn ) {
-
-			// Add a progress sentinel to prevent the fx queue from being
-			// automatically dequeued
-			if ( type === "fx" ) {
-				queue.unshift( "inprogress" );
-			}
-
-			// clear up the last queue stop function
-			delete hooks.stop;
-			fn.call( elem, next, hooks );
-		}
-
-		if ( !startLength && hooks ) {
-			hooks.empty.fire();
-		}
-	},
-
-	// not intended for public consumption - generates a queueHooks object,
-	// or returns the current one
-	_queueHooks: function( elem, type ) {
-		var key = type + "queueHooks";
-		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
-			empty: jQuery.Callbacks( "once memory" ).add( function() {
-				jQuery._removeData( elem, type + "queue" );
-				jQuery._removeData( elem, key );
-			} )
-		} );
-	}
-} );
-
-jQuery.fn.extend( {
-	queue: function( type, data ) {
-		var setter = 2;
-
-		if ( typeof type !== "string" ) {
-			data = type;
-			type = "fx";
-			setter--;
-		}
-
-		if ( arguments.length < setter ) {
-			return jQuery.queue( this[ 0 ], type );
-		}
-
-		return data === undefined ?
-			this :
-			this.each( function() {
-				var queue = jQuery.queue( this, type, data );
-
-				// ensure a hooks for this queue
-				jQuery._queueHooks( this, type );
-
-				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
-					jQuery.dequeue( this, type );
-				}
-			} );
-	},
-	dequeue: function( type ) {
-		return this.each( function() {
-			jQuery.dequeue( this, type );
-		} );
-	},
-	clearQueue: function( type ) {
-		return this.queue( type || "fx", [] );
-	},
-
-	// Get a promise resolved when queues of a certain type
-	// are emptied (fx is the type by default)
-	promise: function( type, obj ) {
-		var tmp,
-			count = 1,
-			defer = jQuery.Deferred(),
-			elements = this,
-			i = this.length,
-			resolve = function() {
-				if ( !( --count ) ) {
-					defer.resolveWith( elements, [ elements ] );
-				}
-			};
-
-		if ( typeof type !== "string" ) {
-			obj = type;
-			type = undefined;
-		}
-		type = type || "fx";
-
-		while ( i-- ) {
-			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
-			if ( tmp && tmp.empty ) {
-				count++;
-				tmp.empty.add( resolve );
-			}
-		}
-		resolve();
-		return defer.promise( obj );
-	}
-} );
-
-
-( function() {
-	var shrinkWrapBlocksVal;
-
-	support.shrinkWrapBlocks = function() {
-		if ( shrinkWrapBlocksVal != null ) {
-			return shrinkWrapBlocksVal;
-		}
-
-		// Will be changed later if needed.
-		shrinkWrapBlocksVal = false;
-
-		// Minified: var b,c,d
-		var div, body, container;
-
-		body = document.getElementsByTagName( "body" )[ 0 ];
-		if ( !body || !body.style ) {
-
-			// Test fired too early or in an unsupported environment, exit.
-			return;
-		}
-
-		// Setup
-		div = document.createElement( "div" );
-		container = document.createElement( "div" );
-		container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
-		body.appendChild( container ).appendChild( div );
-
-		// Support: IE6
-		// Check if elements with layout shrink-wrap their children
-		if ( typeof div.style.zoom !== "undefined" ) {
-
-			// Reset CSS: box-sizing; display; margin; border
-			div.style.cssText =
-
-				// Support: Firefox<29, Android 2.3
-				// Vendor-prefix box-sizing
-				"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
-				"box-sizing:content-box;display:block;margin:0;border:0;" +
-				"padding:1px;width:1px;zoom:1";
-			div.appendChild( document.createElement( "div" ) ).style.width = "5px";
-			shrinkWrapBlocksVal = div.offsetWidth !== 3;
-		}
-
-		body.removeChild( container );
-
-		return shrinkWrapBlocksVal;
-	};
-
-} )();
-var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
-
-var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
-
-
-var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
-
-var isHidden = function( elem, el ) {
-
-		// isHidden might be called from jQuery#filter function;
-		// in that case, element will be second argument
-		elem = el || elem;
-		return jQuery.css( elem, "display" ) === "none" ||
-			!jQuery.contains( elem.ownerDocument, elem );
-	};
-
-
-
-function adjustCSS( elem, prop, valueParts, tween ) {
-	var adjusted,
-		scale = 1,
-		maxIterations = 20,
-		currentValue = tween ?
-			function() { return tween.cur(); } :
-			function() { return jQuery.css( elem, prop, "" ); },
-		initial = currentValue(),
-		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
-
-		// Starting value computation is required for potential unit mismatches
-		initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
-			rcssNum.exec( jQuery.css( elem, prop ) );
-
-	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
-
-		// Trust units reported by jQuery.css
-		unit = unit || initialInUnit[ 3 ];
-
-		// Make sure we update the tween properties later on
-		valueParts = valueParts || [];
-
-		// Iteratively approximate from a nonzero starting point
-		initialInUnit = +initial || 1;
-
-		do {
-
-			// If previous iteration zeroed out, double until we get *something*.
-			// Use string for doubling so we don't accidentally see scale as unchanged below
-			scale = scale || ".5";
-
-			// Adjust and apply
-			initialInUnit = initialInUnit / scale;
-			jQuery.style( elem, prop, initialInUnit + unit );
-
-		// Update scale, tolerating zero or NaN from tween.cur()
-		// Break the loop if scale is unchanged or perfect, or if we've just had enough.
-		} while (
-			scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
-		);
-	}
-
-	if ( valueParts ) {
-		initialInUnit = +initialInUnit || +initial || 0;
-
-		// Apply relative offset (+=/-=) if specified
-		adjusted = valueParts[ 1 ] ?
-			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
-			+valueParts[ 2 ];
-		if ( tween ) {
-			tween.unit = unit;
-			tween.start = initialInUnit;
-			tween.end = adjusted;
-		}
-	}
-	return adjusted;
-}
-
-
-// Multifunctional method to get and set values of a collection
-// The value/s can optionally be executed if it's a function
-var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
-	var i = 0,
-		length = elems.length,
-		bulk = key == null;
-
-	// Sets many values
-	if ( jQuery.type( key ) === "object" ) {
-		chainable = true;
-		for ( i in key ) {
-			access( elems, fn, i, key[ i ], true, emptyGet, raw );
-		}
-
-	// Sets one value
-	} else if ( value !== undefined ) {
-		chainable = true;
-
-		if ( !jQuery.isFunction( value ) ) {
-			raw = true;
-		}
-
-		if ( bulk ) {
-
-			// Bulk operations run against the entire set
-			if ( raw ) {
-				fn.call( elems, value );
-				fn = null;
-
-			// ...except when executing function values
-			} else {
-				bulk = fn;
-				fn = function( elem, key, value ) {
-					return bulk.call( jQuery( elem ), value );
-				};
-			}
-		}
-
-		if ( fn ) {
-			for ( ; i < length; i++ ) {
-				fn(
-					elems[ i ],
-					key,
-					raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )
-				);
-			}
-		}
-	}
-
-	return chainable ?
-		elems :
-
-		// Gets
-		bulk ?
-			fn.call( elems ) :
-			length ? fn( elems[ 0 ], key ) : emptyGet;
-};
-var rcheckableType = ( /^(?:checkbox|radio)$/i );
-
-var rtagName = ( /<([\w:-]+)/ );
-
-var rscriptType = ( /^$|\/(?:java|ecma)script/i );
-
-var rleadingWhitespace = ( /^\s+/ );
-
-var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" +
-		"details|dialog|figcaption|figure|footer|header|hgroup|main|" +
-		"mark|meter|nav|output|picture|progress|section|summary|template|time|video";
-
-
-
-function createSafeFragment( document ) {
-	var list = nodeNames.split( "|" ),
-		safeFrag = document.createDocumentFragment();
-
-	if ( safeFrag.createElement ) {
-		while ( list.length ) {
-			safeFrag.createElement(
-				list.pop()
-			);
-		}
-	}
-	return safeFrag;
-}
-
-
-( function() {
-	var div = document.createElement( "div" ),
-		fragment = document.createDocumentFragment(),
-		input = document.createElement( "input" );
-
-	// Setup
-	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-
-	// IE strips leading whitespace when .innerHTML is used
-	support.leadingWhitespace = div.firstChild.nodeType === 3;
-
-	// Make sure that tbody elements aren't automatically inserted
-	// IE will insert them into empty tables
-	support.tbody = !div.getElementsByTagName( "tbody" ).length;
-
-	// Make sure that link elements get serialized correctly by innerHTML
-	// This requires a wrapper element in IE
-	support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
-
-	// Makes sure cloning an html5 element does not cause problems
-	// Where outerHTML is undefined, this still works
-	support.html5Clone =
-		document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
-
-	// Check if a disconnected checkbox will retain its checked
-	// value of true after appended to the DOM (IE6/7)
-	input.type = "checkbox";
-	input.checked = true;
-	fragment.appendChild( input );
-	support.appendChecked = input.checked;
-
-	// Make sure textarea (and checkbox) defaultValue is properly cloned
-	// Support: IE6-IE11+
-	div.innerHTML = "<textarea>x</textarea>";
-	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
-
-	// #11217 - WebKit loses check when the name is after the checked attribute
-	fragment.appendChild( div );
-
-	// Support: Windows Web Apps (WWA)
-	// `name` and `type` must use .setAttribute for WWA (#14901)
-	input = document.createElement( "input" );
-	input.setAttribute( "type", "radio" );
-	input.setAttribute( "checked", "checked" );
-	input.setAttribute( "name", "t" );
-
-	div.appendChild( input );
-
-	// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
-	// old WebKit doesn't clone checked state correctly in fragments
-	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
-
-	// Support: IE<9
-	// Cloned elements keep attachEvent handlers, we use addEventListener on IE9+
-	support.noCloneEvent = !!div.addEventListener;
-
-	// Support: IE<9
-	// Since attributes and properties are the same in IE,
-	// cleanData must set properties to undefined rather than use removeAttribute
-	div[ jQuery.expando ] = 1;
-	support.attributes = !div.getAttribute( jQuery.expando );
-} )();
-
-
-// We have to close these tags to support XHTML (#13200)
-var wrapMap = {
-	option: [ 1, "<select multiple='multiple'>", "</select>" ],
-	legend: [ 1, "<fieldset>", "</fieldset>" ],
-	area: [ 1, "<map>", "</map>" ],
-
-	// Support: IE8
-	param: [ 1, "<object>", "</object>" ],
-	thead: [ 1, "<table>", "</table>" ],
-	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
-	col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
-	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
-
-	// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
-	// unless wrapped in a div with non-breaking characters in front of it.
-	_default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
-};
-
-// Support: IE8-IE9
-wrapMap.optgroup = wrapMap.option;
-
-wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
-wrapMap.th = wrapMap.td;
-
-
-function getAll( context, tag ) {
-	var elems, elem,
-		i = 0,
-		found = typeof context.getElementsByTagName !== "undefined" ?
-			context.getElementsByTagName( tag || "*" ) :
-			typeof context.querySelectorAll !== "undefined" ?
-				context.querySelectorAll( tag || "*" ) :
-				undefined;
-
-	if ( !found ) {
-		for ( found = [], elems = context.childNodes || context;
-			( elem = elems[ i ] ) != null;
-			i++
-		) {
-			if ( !tag || jQuery.nodeName( elem, tag ) ) {
-				found.push( elem );
-			} else {
-				jQuery.merge( found, getAll( elem, tag ) );
-			}
-		}
-	}
-
-	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
-		jQuery.merge( [ context ], found ) :
-		found;
-}
-
-
-// Mark scripts as having already been evaluated
-function setGlobalEval( elems, refElements ) {
-	var elem,
-		i = 0;
-	for ( ; ( elem = elems[ i ] ) != null; i++ ) {
-		jQuery._data(
-			elem,
-			"globalEval",
-			!refElements || jQuery._data( refElements[ i ], "globalEval" )
-		);
-	}
-}
-
-
-var rhtml = /<|&#?\w+;/,
-	rtbody = /<tbody/i;
-
-function fixDefaultChecked( elem ) {
-	if ( rcheckableType.test( elem.type ) ) {
-		elem.defaultChecked = elem.checked;
-	}
-}
-
-function buildFragment( elems, context, scripts, selection, ignored ) {
-	var j, elem, contains,
-		tmp, tag, tbody, wrap,
-		l = elems.length,
-
-		// Ensure a safe fragment
-		safe = createSafeFragment( context ),
-
-		nodes = [],
-		i = 0;
-
-	for ( ; i < l; i++ ) {
-		elem = elems[ i ];
-
-		if ( elem || elem === 0 ) {
-
-			// Add nodes directly
-			if ( jQuery.type( elem ) === "object" ) {
-				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
-
-			// Convert non-html into a text node
-			} else if ( !rhtml.test( elem ) ) {
-				nodes.push( context.createTextNode( elem ) );
-
-			// Convert html into DOM nodes
-			} else {
-				tmp = tmp || safe.appendChild( context.createElement( "div" ) );
-
-				// Deserialize a standard representation
-				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
-				wrap = wrapMap[ tag ] || wrapMap._default;
-
-				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
-
-				// Descend through wrappers to the right content
-				j = wrap[ 0 ];
-				while ( j-- ) {
-					tmp = tmp.lastChild;
-				}
-
-				// Manually add leading whitespace removed by IE
-				if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
-					nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[ 0 ] ) );
-				}
-
-				// Remove IE's autoinserted <tbody> from table fragments
-				if ( !support.tbody ) {
-
-					// String was a <table>, *may* have spurious <tbody>
-					elem = tag === "table" && !rtbody.test( elem ) ?
-						tmp.firstChild :
-
-						// String was a bare <thead> or <tfoot>
-						wrap[ 1 ] === "<table>" && !rtbody.test( elem ) ?
-							tmp :
-							0;
-
-					j = elem && elem.childNodes.length;
-					while ( j-- ) {
-						if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) &&
-							!tbody.childNodes.length ) {
-
-							elem.removeChild( tbody );
-						}
-					}
-				}
-
-				jQuery.merge( nodes, tmp.childNodes );
-
-				// Fix #12392 for WebKit and IE > 9
-				tmp.textContent = "";
-
-				// Fix #12392 for oldIE
-				while ( tmp.firstChild ) {
-					tmp.removeChild( tmp.firstChild );
-				}
-
-				// Remember the top-level container for proper cleanup
-				tmp = safe.lastChild;
-			}
-		}
-	}
-
-	// Fix #11356: Clear elements from fragment
-	if ( tmp ) {
-		safe.removeChild( tmp );
-	}
-
-	// Reset defaultChecked for any radios and checkboxes
-	// about to be appended to the DOM in IE 6/7 (#8060)
-	if ( !support.appendChecked ) {
-		jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
-	}
-
-	i = 0;
-	while ( ( elem = nodes[ i++ ] ) ) {
-
-		// Skip elements already in the context collection (trac-4087)
-		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
-			if ( ignored ) {
-				ignored.push( elem );
-			}
-
-			continue;
-		}
-
-		contains = jQuery.contains( elem.ownerDocument, elem );
-
-		// Append to fragment
-		tmp = getAll( safe.appendChild( elem ), "script" );
-
-		// Preserve script evaluation history
-		if ( contains ) {
-			setGlobalEval( tmp );
-		}
-
-		// Capture executables
-		if ( scripts ) {
-			j = 0;
-			while ( ( elem = tmp[ j++ ] ) ) {
-				if ( rscriptType.test( elem.type || "" ) ) {
-					scripts.push( elem );
-				}
-			}
-		}
-	}
-
-	tmp = null;
-
-	return safe;
-}
-
-
-( function() {
-	var i, eventName,
-		div = document.createElement( "div" );
-
-	// Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)
-	for ( i in { submit: true, change: true, focusin: true } ) {
-		eventName = "on" + i;
-
-		if ( !( support[ i ] = eventName in window ) ) {
-
-			// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
-			div.setAttribute( eventName, "t" );
-			support[ i ] = div.attributes[ eventName ].expando === false;
-		}
-	}
-
-	// Null elements to avoid leaks in IE.
-	div = null;
-} )();
-
-
-var rformElems = /^(?:input|select|textarea)$/i,
-	rkeyEvent = /^key/,
-	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
-	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
-	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
-
-function returnTrue() {
-	return true;
-}
-
-function returnFalse() {
-	return false;
-}
-
-// Support: IE9
-// See #13393 for more info
-function safeActiveElement() {
-	try {
-		return document.activeElement;
-	} catch ( err ) { }
-}
-
-function on( elem, types, selector, data, fn, one ) {
-	var origFn, type;
-
-	// Types can be a map of types/handlers
-	if ( typeof types === "object" ) {
-
-		// ( types-Object, selector, data )
-		if ( typeof selector !== "string" ) {
-
-			// ( types-Object, data )
-			data = data || selector;
-			selector = undefined;
-		}
-		for ( type in types ) {
-			on( elem, type, selector, data, types[ type ], one );
-		}
-		return elem;
-	}
-
-	if ( data == null && fn == null ) {
-
-		// ( types, fn )
-		fn = selector;
-		data = selector = undefined;
-	} else if ( fn == null ) {
-		if ( typeof selector === "string" ) {
-
-			// ( types, selector, fn )
-			fn = data;
-			data = undefined;
-		} else {
-
-			// ( types, data, fn )
-			fn = data;
-			data = selector;
-			selector = undefined;
-		}
-	}
-	if ( fn === false ) {
-		fn = returnFalse;
-	} else if ( !fn ) {
-		return elem;
-	}
-
-	if ( one === 1 ) {
-		origFn = fn;
-		fn = function( event ) {
-
-			// Can use an empty set, since event contains the info
-			jQuery().off( event );
-			return origFn.apply( this, arguments );
-		};
-
-		// Use same guid so caller can remove using origFn
-		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
-	}
-	return elem.each( function() {
-		jQuery.event.add( this, types, fn, data, selector );
-	} );
-}
-
-/*
- * Helper functions for managing events -- not part of the public interface.
- * Props to Dean Edwards' addEvent library for many of the ideas.
- */
-jQuery.event = {
-
-	global: {},
-
-	add: function( elem, types, handler, data, selector ) {
-		var tmp, events, t, handleObjIn,
-			special, eventHandle, handleObj,
-			handlers, type, namespaces, origType,
-			elemData = jQuery._data( elem );
-
-		// Don't attach events to noData or text/comment nodes (but allow plain objects)
-		if ( !elemData ) {
-			return;
-		}
-
-		// Caller can pass in an object of custom data in lieu of the handler
-		if ( handler.handler ) {
-			handleObjIn = handler;
-			handler = handleObjIn.handler;
-			selector = handleObjIn.selector;
-		}
-
-		// Make sure that the handler has a unique ID, used to find/remove it later
-		if ( !handler.guid ) {
-			handler.guid = jQuery.guid++;
-		}
-
-		// Init the element's event structure and main handler, if this is the first
-		if ( !( events = elemData.events ) ) {
-			events = elemData.events = {};
-		}
-		if ( !( eventHandle = elemData.handle ) ) {
-			eventHandle = elemData.handle = function( e ) {
-
-				// Discard the second event of a jQuery.event.trigger() and
-				// when an event is called after a page has unloaded
-				return typeof jQuery !== "undefined" &&
-					( !e || jQuery.event.triggered !== e.type ) ?
-					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
-					undefined;
-			};
-
-			// Add elem as a property of the handle fn to prevent a memory leak
-			// with IE non-native events
-			eventHandle.elem = elem;
-		}
-
-		// Handle multiple events separated by a space
-		types = ( types || "" ).match( rnotwhite ) || [ "" ];
-		t = types.length;
-		while ( t-- ) {
-			tmp = rtypenamespace.exec( types[ t ] ) || [];
-			type = origType = tmp[ 1 ];
-			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
-			// There *must* be a type, no attaching namespace-only handlers
-			if ( !type ) {
-				continue;
-			}
-
-			// If event changes its type, use the special event handlers for the changed type
-			special = jQuery.event.special[ type ] || {};
-
-			// If selector defined, determine special event api type, otherwise given type
-			type = ( selector ? special.delegateType : special.bindType ) || type;
-
-			// Update special based on newly reset type
-			special = jQuery.event.special[ type ] || {};
-
-			// handleObj is passed to all event handlers
-			handleObj = jQuery.extend( {
-				type: type,
-				origType: origType,
-				data: data,
-				handler: handler,
-				guid: handler.guid,
-				selector: selector,
-				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
-				namespace: namespaces.join( "." )
-			}, handleObjIn );
-
-			// Init the event handler queue if we're the first
-			if ( !( handlers = events[ type ] ) ) {
-				handlers = events[ type ] = [];
-				handlers.delegateCount = 0;
-
-				// Only use addEventListener/attachEvent if the special events handler returns false
-				if ( !special.setup ||
-					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
-
-					// Bind the global event handler to the element
-					if ( elem.addEventListener ) {
-						elem.addEventListener( type, eventHandle, false );
-
-					} else if ( elem.attachEvent ) {
-						elem.attachEvent( "on" + type, eventHandle );
-					}
-				}
-			}
-
-			if ( special.add ) {
-				special.add.call( elem, handleObj );
-
-				if ( !handleObj.handler.guid ) {
-					handleObj.handler.guid = handler.guid;
-				}
-			}
-
-			// Add to the element's handler list, delegates in front
-			if ( selector ) {
-				handlers.splice( handlers.delegateCount++, 0, handleObj );
-			} else {
-				handlers.push( handleObj );
-			}
-
-			// Keep track of which events have ever been used, for event optimization
-			jQuery.event.global[ type ] = true;
-		}
-
-		// Nullify elem to prevent memory leaks in IE
-		elem = null;
-	},
-
-	// Detach an event or set of events from an element
-	remove: function( elem, types, handler, selector, mappedTypes ) {
-		var j, handleObj, tmp,
-			origCount, t, events,
-			special, handlers, type,
-			namespaces, origType,
-			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
-
-		if ( !elemData || !( events = elemData.events ) ) {
-			return;
-		}
-
-		// Once for each type.namespace in types; type may be omitted
-		types = ( types || "" ).match( rnotwhite ) || [ "" ];
-		t = types.length;
-		while ( t-- ) {
-			tmp = rtypenamespace.exec( types[ t ] ) || [];
-			type = origType = tmp[ 1 ];
-			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
-
-			// Unbind all events (on this namespace, if provided) for the element
-			if ( !type ) {
-				for ( type in events ) {
-					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
-				}
-				continue;
-			}
-
-			special = jQuery.event.special[ type ] || {};
-			type = ( selector ? special.delegateType : special.bindType ) || type;
-			handlers = events[ type ] || [];
-			tmp = tmp[ 2 ] &&
-				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
-
-			// Remove matching events
-			origCount = j = handlers.length;
-			while ( j-- ) {
-				handleObj = handlers[ j ];
-
-				if ( ( mappedTypes || origType === handleObj.origType ) &&
-					( !handler || handler.guid === handleObj.guid ) &&
-					( !tmp || tmp.test( handleObj.namespace ) ) &&
-					( !selector || selector === handleObj.selector ||
-						selector === "**" && handleObj.selector ) ) {
-					handlers.splice( j, 1 );
-
-					if ( handleObj.selector ) {
-						handlers.delegateCount--;
-					}
-					if ( special.remove ) {
-						special.remove.call( elem, handleObj );
-					}
-				}
-			}
-
-			// Remove generic event handler if we removed something and no more handlers exist
-			// (avoids potential for endless recursion during removal of special event handlers)
-			if ( origCount && !handlers.length ) {
-				if ( !special.teardown ||
-					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
-
-					jQuery.removeEvent( elem, type, elemData.handle );
-				}
-
-				delete events[ type ];
-			}
-		}
-
-		// Remove the expando if it's no longer used
-		if ( jQuery.isEmptyObject( events ) ) {
-			delete elemData.handle;
-
-			// removeData also checks for emptiness and clears the expando if empty
-			// so use it instead of delete
-			jQuery._removeData( elem, "events" );
-		}
-	},
-
-	trigger: function( event, data, elem, onlyHandlers ) {
-		var handle, ontype, cur,
-			bubbleType, special, tmp, i,
-			eventPath = [ elem || document ],
-			type = hasOwn.call( event, "type" ) ? event.type : event,
-			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
-
-		cur = tmp = elem = elem || document;
-
-		// Don't do events on text and comment nodes
-		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
-			return;
-		}
-
-		// focus/blur morphs to focusin/out; ensure we're not firing them right now
-		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
-			return;
-		}
-
-		if ( type.indexOf( "." ) > -1 ) {
-
-			// Namespaced trigger; create a regexp to match event type in handle()
-			namespaces = type.split( "." );
-			type = namespaces.shift();
-			namespaces.sort();
-		}
-		ontype = type.indexOf( ":" ) < 0 && "on" + type;
-
-		// Caller can pass in a jQuery.Event object, Object, or just an event type string
-		event = event[ jQuery.expando ] ?
-			event :
-			new jQuery.Event( type, typeof event === "object" && event );
-
-		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
-		event.isTrigger = onlyHandlers ? 2 : 3;
-		event.namespace = namespaces.join( "." );
-		event.rnamespace = event.namespace ?
-			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
-			null;
-
-		// Clean up the event in case it is being reused
-		event.result = undefined;
-		if ( !event.target ) {
-			event.target = elem;
-		}
-
-		// Clone any incoming data and prepend the event, creating the handler arg list
-		data = data == null ?
-			[ event ] :
-			jQuery.makeArray( data, [ event ] );
-
-		// Allow special events to draw outside the lines
-		special = jQuery.event.special[ type ] || {};
-		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
-			return;
-		}
-
-		// Determine event propagation path in advance, per W3C events spec (#9951)
-		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
-		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
-
-			bubbleType = special.delegateType || type;
-			if ( !rfocusMorph.test( bubbleType + type ) ) {
-				cur = cur.parentNode;
-			}
-			for ( ; cur; cur = cur.parentNode ) {
-				eventPath.push( cur );
-				tmp = cur;
-			}
-
-			// Only add window if we got to document (e.g., not plain obj or detached DOM)
-			if ( tmp === ( elem.ownerDocument || document ) ) {
-				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
-			}
-		}
-
-		// Fire handlers on the event path
-		i = 0;
-		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
-
-			event.type = i > 1 ?
-				bubbleType :
-				special.bindType || type;
-
-			// jQuery handler
-			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] &&
-				jQuery._data( cur, "handle" );
-
-			if ( handle ) {
-				handle.apply( cur, data );
-			}
-
-			// Native handler
-			handle = ontype && cur[ ontype ];
-			if ( handle && handle.apply && acceptData( cur ) ) {
-				event.result = handle.apply( cur, data );
-				if ( event.result === false ) {
-					event.preventDefault();
-				}
-			}
-		}
-		event.type = type;
-
-		// If nobody prevented the default action, do it now
-		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
-
-			if (
-				( !special._default ||
-				 special._default.apply( eventPath.pop(), data ) === false
-				) && acceptData( elem )
-			) {
-
-				// Call a native DOM method on the target with the same name name as the event.
-				// Can't use an .isFunction() check here because IE6/7 fails that test.
-				// Don't do default actions on window, that's where global variables be (#6170)
-				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
-
-					// Don't re-trigger an onFOO event when we call its FOO() method
-					tmp = elem[ ontype ];
-
-					if ( tmp ) {
-						elem[ ontype ] = null;
-					}
-
-					// Prevent re-triggering of the same event, since we already bubbled it above
-					jQuery.event.triggered = type;
-					try {
-						elem[ type ]();
-					} catch ( e ) {
-
-						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
-						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
-					}
-					jQuery.event.triggered = undefined;
-
-					if ( tmp ) {
-						elem[ ontype ] = tmp;
-					}
-				}
-			}
-		}
-
-		return event.result;
-	},
-
-	dispatch: function( event ) {
-
-		// Make a writable jQuery.Event from the native event object
-		event = jQuery.event.fix( event );
-
-		var i, j, ret, matched, handleObj,
-			handlerQueue = [],
-			args = slice.call( arguments ),
-			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
-			special = jQuery.event.special[ event.type ] || {};
-
-		// Use the fix-ed jQuery.Event rather than the (read-only) native event
-		args[ 0 ] = event;
-		event.delegateTarget = this;
-
-		// Call the preDispatch hook for the mapped type, and let it bail if desired
-		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
-			return;
-		}
-
-		// Determine handlers
-		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
-
-		// Run delegates first; they may want to stop propagation beneath us
-		i = 0;
-		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
-			event.currentTarget = matched.elem;
-
-			j = 0;
-			while ( ( handleObj = matched.handlers[ j++ ] ) &&
-				!event.isImmediatePropagationStopped() ) {
-
-				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
-				// a subset or equal to those in the bound event (both can have no namespace).
-				if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
-
-					event.handleObj = handleObj;
-					event.data = handleObj.data;
-
-					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
-						handleObj.handler ).apply( matched.elem, args );
-
-					if ( ret !== undefined ) {
-						if ( ( event.result = ret ) === false ) {
-							event.preventDefault();
-							event.stopPropagation();
-						}
-					}
-				}
-			}
-		}
-
-		// Call the postDispatch hook for the mapped type
-		if ( special.postDispatch ) {
-			special.postDispatch.call( this, event );
-		}
-
-		return event.result;
-	},
-
-	handlers: function( event, handlers ) {
-		var i, matches, sel, handleObj,
-			handlerQueue = [],
-			delegateCount = handlers.delegateCount,
-			cur = event.target;
-
-		// Support (at least): Chrome, IE9
-		// Find delegate handlers
-		// Black-hole SVG <use> instance trees (#13180)
-		//
-		// Support: Firefox<=42+
-		// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
-		if ( delegateCount && cur.nodeType &&
-			( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
-
-			/* jshint eqeqeq: false */
-			for ( ; cur != this; cur = cur.parentNode || this ) {
-				/* jshint eqeqeq: true */
-
-				// Don't check non-elements (#13208)
-				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
-				if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
-					matches = [];
-					for ( i = 0; i < delegateCount; i++ ) {
-						handleObj = handlers[ i ];
-
-						// Don't conflict with Object.prototype properties (#13203)
-						sel = handleObj.selector + " ";
-
-						if ( matches[ sel ] === undefined ) {
-							matches[ sel ] = handleObj.needsContext ?
-								jQuery( sel, this ).index( cur ) > -1 :
-								jQuery.find( sel, this, null, [ cur ] ).length;
-						}
-						if ( matches[ sel ] ) {
-							matches.push( handleObj );
-						}
-					}
-					if ( matches.length ) {
-						handlerQueue.push( { elem: cur, handlers: matches } );
-					}
-				}
-			}
-		}
-
-		// Add the remaining (directly-bound) handlers
-		if ( delegateCount < handlers.length ) {
-			handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
-		}
-
-		return handlerQueue;
-	},
-
-	fix: function( event ) {
-		if ( event[ jQuery.expando ] ) {
-			return event;
-		}
-
-		// Create a writable copy of the event object and normalize some properties
-		var i, prop, copy,
-			type = event.type,
-			originalEvent = event,
-			fixHook = this.fixHooks[ type ];
-
-		if ( !fixHook ) {
-			this.fixHooks[ type ] = fixHook =
-				rmouseEvent.test( type ) ? this.mouseHooks :
-				rkeyEvent.test( type ) ? this.keyHooks :
-				{};
-		}
-		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
-
-		event = new jQuery.Event( originalEvent );
-
-		i = copy.length;
-		while ( i-- ) {
-			prop = copy[ i ];
-			event[ prop ] = originalEvent[ prop ];
-		}
-
-		// Support: IE<9
-		// Fix target property (#1925)
-		if ( !event.target ) {
-			event.target = originalEvent.srcElement || document;
-		}
-
-		// Support: Safari 6-8+
-		// Target should not be a text node (#504, #13143)
-		if ( event.target.nodeType === 3 ) {
-			event.target = event.target.parentNode;
-		}
-
-		// Support: IE<9
-		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
-		event.metaKey = !!event.metaKey;
-
-		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
-	},
-
-	// Includes some event props shared by KeyEvent and MouseEvent
-	props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " +
-		"metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ),
-
-	fixHooks: {},
-
-	keyHooks: {
-		props: "char charCode key keyCode".split( " " ),
-		filter: function( event, original ) {
-
-			// Add which for key events
-			if ( event.which == null ) {
-				event.which = original.charCode != null ? original.charCode : original.keyCode;
-			}
-
-			return event;
-		}
-	},
-
-	mouseHooks: {
-		props: ( "button buttons clientX clientY fromElement offsetX offsetY " +
-			"pageX pageY screenX screenY toElement" ).split( " " ),
-		filter: function( event, original ) {
-			var body, eventDoc, doc,
-				button = original.button,
-				fromElement = original.fromElement;
-
-			// Calculate pageX/Y if missing and clientX/Y available
-			if ( event.pageX == null && original.clientX != null ) {
-				eventDoc = event.target.ownerDocument || document;
-				doc = eventDoc.documentElement;
-				body = eventDoc.body;
-
-				event.pageX = original.clientX +
-					( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -
-					( doc && doc.clientLeft || body && body.clientLeft || 0 );
-				event.pageY = original.clientY +
-					( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -
-					( doc && doc.clientTop  || body && body.clientTop  || 0 );
-			}
-
-			// Add relatedTarget, if necessary
-			if ( !event.relatedTarget && fromElement ) {
-				event.relatedTarget = fromElement === event.target ?
-					original.toElement :
-					fromElement;
-			}
-
-			// Add which for click: 1 === left; 2 === middle; 3 === right
-			// Note: button is not normalized, so don't use it
-			if ( !event.which && button !== undefined ) {
-				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
-			}
-
-			return event;
-		}
-	},
-
-	special: {
-		load: {
-
-			// Prevent triggered image.load events from bubbling to window.load
-			noBubble: true
-		},
-		focus: {
-
-			// Fire native event if possible so blur/focus sequence is correct
-			trigger: function() {
-				if ( this !== safeActiveElement() && this.focus ) {
-					try {
-						this.focus();
-						return false;
-					} catch ( e ) {
-
-						// Support: IE<9
-						// If we error on focus to hidden element (#1486, #12518),
-						// let .trigger() run the handlers
-					}
-				}
-			},
-			delegateType: "focusin"
-		},
-		blur: {
-			trigger: function() {
-				if ( this === safeActiveElement() && this.blur ) {
-					this.blur();
-					return false;
-				}
-			},
-			delegateType: "focusout"
-		},
-		click: {
-
-			// For checkbox, fire native event so checked state will be right
-			trigger: function() {
-				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
-					this.click();
-					return false;
-				}
-			},
-
-			// For cross-browser consistency, don't fire native .click() on links
-			_default: function( event ) {
-				return jQuery.nodeName( event.target, "a" );
-			}
-		},
-
-		beforeunload: {
-			postDispatch: function( event ) {
-
-				// Support: Firefox 20+
-				// Firefox doesn't alert if the returnValue field is not set.
-				if ( event.result !== undefined && event.originalEvent ) {
-					event.originalEvent.returnValue = event.result;
-				}
-			}
-		}
-	},
-
-	// Piggyback on a donor event to simulate a different one
-	simulate: function( type, elem, event ) {
-		var e = jQuery.extend(
-			new jQuery.Event(),
-			event,
-			{
-				type: type,
-				isSimulated: true
-
-				// Previously, `originalEvent: {}` was set here, so stopPropagation call
-				// would not be triggered on donor event, since in our own
-				// jQuery.event.stopPropagation function we had a check for existence of
-				// originalEvent.stopPropagation method, so, consequently it would be a noop.
-				//
-				// Guard for simulated events was moved to jQuery.event.stopPropagation function
-				// since `originalEvent` should point to the original event for the
-				// constancy with other events and for more focused logic
-			}
-		);
-
-		jQuery.event.trigger( e, null, elem );
-
-		if ( e.isDefaultPrevented() ) {
-			event.preventDefault();
-		}
-	}
-};
-
-jQuery.removeEvent = document.removeEventListener ?
-	function( elem, type, handle ) {
-
-		// This "if" is needed for plain objects
-		if ( elem.removeEventListener ) {
-			elem.removeEventListener( type, handle );
-		}
-	} :
-	function( elem, type, handle ) {
-		var name = "on" + type;
-
-		if ( elem.detachEvent ) {
-
-			// #8545, #7054, preventing memory leaks for custom events in IE6-8
-			// detachEvent needed property on element, by name of that event,
-			// to properly expose it to GC
-			if ( typeof elem[ name ] === "undefined" ) {
-				elem[ name ] = null;
-			}
-
-			elem.detachEvent( name, handle );
-		}
-	};
-
-jQuery.Event = function( src, props ) {
-
-	// Allow instantiation without the 'new' keyword
-	if ( !( this instanceof jQuery.Event ) ) {
-		return new jQuery.Event( src, props );
-	}
-
-	// Event object
-	if ( src && src.type ) {
-		this.originalEvent = src;
-		this.type = src.type;
-
-		// Events bubbling up the document may have been marked as prevented
-		// by a handler lower down the tree; reflect the correct value.
-		this.isDefaultPrevented = src.defaultPrevented ||
-				src.defaultPrevented === undefined &&
-
-				// Support: IE < 9, Android < 4.0
-				src.returnValue === false ?
-			returnTrue :
-			returnFalse;
-
-	// Event type
-	} else {
-		this.type = src;
-	}
-
-	// Put explicitly provided properties onto the event object
-	if ( props ) {
-		jQuery.extend( this, props );
-	}
-
-	// Create a timestamp if incoming event doesn't have one
-	this.timeStamp = src && src.timeStamp || jQuery.now();
-
-	// Mark it as fixed
-	this[ jQuery.expando ] = true;
-};
-
-// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
-// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
-jQuery.Event.prototype = {
-	constructor: jQuery.Event,
-	isDefaultPrevented: returnFalse,
-	isPropagationStopped: returnFalse,
-	isImmediatePropagationStopped: returnFalse,
-
-	preventDefault: function() {
-		var e = this.originalEvent;
-
-		this.isDefaultPrevented = returnTrue;
-		if ( !e ) {
-			return;
-		}
-
-		// If preventDefault exists, run it on the original event
-		if ( e.preventDefault ) {
-			e.preventDefault();
-
-		// Support: IE
-		// Otherwise set the returnValue property of the original event to false
-		} else {
-			e.returnValue = false;
-		}
-	},
-	stopPropagation: function() {
-		var e = this.originalEvent;
-
-		this.isPropagationStopped = returnTrue;
-
-		if ( !e || this.isSimulated ) {
-			return;
-		}
-
-		// If stopPropagation exists, run it on the original event
-		if ( e.stopPropagation ) {
-			e.stopPropagation();
-		}
-
-		// Support: IE
-		// Set the cancelBubble property of the original event to true
-		e.cancelBubble = true;
-	},
-	stopImmediatePropagation: function() {
-		var e = this.originalEvent;
-
-		this.isImmediatePropagationStopped = returnTrue;
-
-		if ( e && e.stopImmediatePropagation ) {
-			e.stopImmediatePropagation();
-		}
-
-		this.stopPropagation();
-	}
-};
-
-// Create mouseenter/leave events using mouseover/out and event-time checks
-// so that event delegation works in jQuery.
-// Do the same for pointerenter/pointerleave and pointerover/pointerout
-//
-// Support: Safari 7 only
-// Safari sends mouseenter too often; see:
-// https://code.google.com/p/chromium/issues/detail?id=470258
-// for the description of the bug (it existed in older Chrome versions as well).
-jQuery.each( {
-	mouseenter: "mouseover",
-	mouseleave: "mouseout",
-	pointerenter: "pointerover",
-	pointerleave: "pointerout"
-}, function( orig, fix ) {
-	jQuery.event.special[ orig ] = {
-		delegateType: fix,
-		bindType: fix,
-
-		handle: function( event ) {
-			var ret,
-				target = this,
-				related = event.relatedTarget,
-				handleObj = event.handleObj;
-
-			// For mouseenter/leave call the handler if related is outside the target.
-			// NB: No relatedTarget if the mouse left/entered the browser window
-			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
-				event.type = handleObj.origType;
-				ret = handleObj.handler.apply( this, arguments );
-				event.type = fix;
-			}
-			return ret;
-		}
-	};
-} );
-
-// IE submit delegation
-if ( !support.submit ) {
-
-	jQuery.event.special.submit = {
-		setup: function() {
-
-			// Only need this for delegated form submit events
-			if ( jQuery.nodeName( this, "form" ) ) {
-				return false;
-			}
-
-			// Lazy-add a submit handler when a descendant form may potentially be submitted
-			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
-
-				// Node name check avoids a VML-related crash in IE (#9807)
-				var elem = e.target,
-					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ?
-
-						// Support: IE <=8
-						// We use jQuery.prop instead of elem.form
-						// to allow fixing the IE8 delegated submit issue (gh-2332)
-						// by 3rd party polyfills/workarounds.
-						jQuery.prop( elem, "form" ) :
-						undefined;
-
-				if ( form && !jQuery._data( form, "submit" ) ) {
-					jQuery.event.add( form, "submit._submit", function( event ) {
-						event._submitBubble = true;
-					} );
-					jQuery._data( form, "submit", true );
-				}
-			} );
-
-			// return undefined since we don't need an event listener
-		},
-
-		postDispatch: function( event ) {
-
-			// If form was submitted by the user, bubble the event up the tree
-			if ( event._submitBubble ) {
-				delete event._submitBubble;
-				if ( this.parentNode && !event.isTrigger ) {
-					jQuery.event.simulate( "submit", this.parentNode, event );
-				}
-			}
-		},
-
-		teardown: function() {
-
-			// Only need this for delegated form submit events
-			if ( jQuery.nodeName( this, "form" ) ) {
-				return false;
-			}
-
-			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
-			jQuery.event.remove( this, "._submit" );
-		}
-	};
-}
-
-// IE change delegation and checkbox/radio fix
-if ( !support.change ) {
-
-	jQuery.event.special.change = {
-
-		setup: function() {
-
-			if ( rformElems.test( this.nodeName ) ) {
-
-				// IE doesn't fire change on a check/radio until blur; trigger it on click
-				// after a propertychange. Eat the blur-change in special.change.handle.
-				// This still fires onchange a second time for check/radio after blur.
-				if ( this.type === "checkbox" || this.type === "radio" ) {
-					jQuery.event.add( this, "propertychange._change", function( event ) {
-						if ( event.originalEvent.propertyName === "checked" ) {
-							this._justChanged = true;
-						}
-					} );
-					jQuery.event.add( this, "click._change", function( event ) {
-						if ( this._justChanged && !event.isTrigger ) {
-							this._justChanged = false;
-						}
-
-						// Allow triggered, simulated change events (#11500)
-						jQuery.event.simulate( "change", this, event );
-					} );
-				}
-				return false;
-			}
-
-			// Delegated event; lazy-add a change handler on descendant inputs
-			jQuery.event.add( this, "beforeactivate._change", function( e ) {
-				var elem = e.target;
-
-				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) {
-					jQuery.event.add( elem, "change._change", function( event ) {
-						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
-							jQuery.event.simulate( "change", this.parentNode, event );
-						}
-					} );
-					jQuery._data( elem, "change", true );
-				}
-			} );
-		},
-
-		handle: function( event ) {
-			var elem = event.target;
-
-			// Swallow native change events from checkbox/radio, we already triggered them above
-			if ( this !== elem || event.isSimulated || event.isTrigger ||
-				( elem.type !== "radio" && elem.type !== "checkbox" ) ) {
-
-				return event.handleObj.handler.apply( this, arguments );
-			}
-		},
-
-		teardown: function() {
-			jQuery.event.remove( this, "._change" );
-
-			return !rformElems.test( this.nodeName );
-		}
-	};
-}
-
-// Support: Firefox
-// Firefox doesn't have focus(in | out) events
-// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
-//
-// Support: Chrome, Safari
-// focus(in | out) events fire after focus & blur events,
-// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
-// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857
-if ( !support.focusin ) {
-	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
-
-		// Attach a single capturing handler on the document while someone wants focusin/focusout
-		var handler = function( event ) {
-			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
-		};
-
-		jQuery.event.special[ fix ] = {
-			setup: function() {
-				var doc = this.ownerDocument || this,
-					attaches = jQuery._data( doc, fix );
-
-				if ( !attaches ) {
-					doc.addEventListener( orig, handler, true );
-				}
-				jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
-			},
-			teardown: function() {
-				var doc = this.ownerDocument || this,
-					attaches = jQuery._data( doc, fix ) - 1;
-
-				if ( !attaches ) {
-					doc.removeEventListener( orig, handler, true );
-					jQuery._removeData( doc, fix );
-				} else {
-					jQuery._data( doc, fix, attaches );
-				}
-			}
-		};
-	} );
-}
-
-jQuery.fn.extend( {
-
-	on: function( types, selector, data, fn ) {
-		return on( this, types, selector, data, fn );
-	},
-	one: function( types, selector, data, fn ) {
-		return on( this, types, selector, data, fn, 1 );
-	},
-	off: function( types, selector, fn ) {
-		var handleObj, type;
-		if ( types && types.preventDefault && types.handleObj ) {
-
-			// ( event )  dispatched jQuery.Event
-			handleObj = types.handleObj;
-			jQuery( types.delegateTarget ).off(
-				handleObj.namespace ?
-					handleObj.origType + "." + handleObj.namespace :
-					handleObj.origType,
-				handleObj.selector,
-				handleObj.handler
-			);
-			return this;
-		}
-		if ( typeof types === "object" ) {
-
-			// ( types-object [, selector] )
-			for ( type in types ) {
-				this.off( type, selector, types[ type ] );
-			}
-			return this;
-		}
-		if ( selector === false || typeof selector === "function" ) {
-
-			// ( types [, fn] )
-			fn = selector;
-			selector = undefined;
-		}
-		if ( fn === false ) {
-			fn = returnFalse;
-		}
-		return this.each( function() {
-			jQuery.event.remove( this, types, fn, selector );
-		} );
-	},
-
-	trigger: function( type, data ) {
-		return this.each( function() {
-			jQuery.event.trigger( type, data, this );
-		} );
-	},
-	triggerHandler: function( type, data ) {
-		var elem = this[ 0 ];
-		if ( elem ) {
-			return jQuery.event.trigger( type, data, elem, true );
-		}
-	}
-} );
-
-
-var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
-	rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ),
-	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
-
-	// Support: IE 10-11, Edge 10240+
-	// In IE/Edge using regex groups here causes severe slowdowns.
-	// See https://connect.microsoft.com/IE/feedback/details/1736512/
-	rnoInnerhtml = /<script|<style|<link/i,
-
-	// checked="checked" or checked
-	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
-	rscriptTypeMasked = /^true\/(.*)/,
-	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
-	safeFragment = createSafeFragment( document ),
-	fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) );
-
-// Support: IE<8
-// Manipulating tables requires a tbody
-function manipulationTarget( elem, content ) {
-	return jQuery.nodeName( elem, "table" ) &&
-		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
-
-		elem.getElementsByTagName( "tbody" )[ 0 ] ||
-			elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) :
-		elem;
-}
-
-// Replace/restore the type attribute of script elements for safe DOM manipulation
-function disableScript( elem ) {
-	elem.type = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type;
-	return elem;
-}
-function restoreScript( elem ) {
-	var match = rscriptTypeMasked.exec( elem.type );
-	if ( match ) {
-		elem.type = match[ 1 ];
-	} else {
-		elem.removeAttribute( "type" );
-	}
-	return elem;
-}
-
-function cloneCopyEvent( src, dest ) {
-	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
-		return;
-	}
-
-	var type, i, l,
-		oldData = jQuery._data( src ),
-		curData = jQuery._data( dest, oldData ),
-		events = oldData.events;
-
-	if ( events ) {
-		delete curData.handle;
-		curData.events = {};
-
-		for ( type in events ) {
-			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
-				jQuery.event.add( dest, type, events[ type ][ i ] );
-			}
-		}
-	}
-
-	// make the cloned public data object a copy from the original
-	if ( curData.data ) {
-		curData.data = jQuery.extend( {}, curData.data );
-	}
-}
-
-function fixCloneNodeIssues( src, dest ) {
-	var nodeName, e, data;
-
-	// We do not need to do anything for non-Elements
-	if ( dest.nodeType !== 1 ) {
-		return;
-	}
-
-	nodeName = dest.nodeName.toLowerCase();
-
-	// IE6-8 copies events bound via attachEvent when using cloneNode.
-	if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
-		data = jQuery._data( dest );
-
-		for ( e in data.events ) {
-			jQuery.removeEvent( dest, e, data.handle );
-		}
-
-		// Event data gets referenced instead of copied if the expando gets copied too
-		dest.removeAttribute( jQuery.expando );
-	}
-
-	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
-	if ( nodeName === "script" && dest.text !== src.text ) {
-		disableScript( dest ).text = src.text;
-		restoreScript( dest );
-
-	// IE6-10 improperly clones children of object elements using classid.
-	// IE10 throws NoModificationAllowedError if parent is null, #12132.
-	} else if ( nodeName === "object" ) {
-		if ( dest.parentNode ) {
-			dest.outerHTML = src.outerHTML;
-		}
-
-		// This path appears unavoidable for IE9. When cloning an object
-		// element in IE9, the outerHTML strategy above is not sufficient.
-		// If the src has innerHTML and the destination does not,
-		// copy the src.innerHTML into the dest.innerHTML. #10324
-		if ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) {
-			dest.innerHTML = src.innerHTML;
-		}
-
-	} else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
-
-		// IE6-8 fails to persist the checked state of a cloned checkbox
-		// or radio button. Worse, IE6-7 fail to give the cloned element
-		// a checked appearance if the defaultChecked value isn't also set
-
-		dest.defaultChecked = dest.checked = src.checked;
-
-		// IE6-7 get confused and end up setting the value of a cloned
-		// checkbox/radio button to an empty string instead of "on"
-		if ( dest.value !== src.value ) {
-			dest.value = src.value;
-		}
-
-	// IE6-8 fails to return the selected option to the default selected
-	// state when cloning options
-	} else if ( nodeName === "option" ) {
-		dest.defaultSelected = dest.selected = src.defaultSelected;
-
-	// IE6-8 fails to set the defaultValue to the correct value when
-	// cloning other types of input fields
-	} else if ( nodeName === "input" || nodeName === "textarea" ) {
-		dest.defaultValue = src.defaultValue;
-	}
-}
-
-function domManip( collection, args, callback, ignored ) {
-
-	// Flatten any nested arrays
-	args = concat.apply( [], args );
-
-	var first, node, hasScripts,
-		scripts, doc, fragment,
-		i = 0,
-		l = collection.length,
-		iNoClone = l - 1,
-		value = args[ 0 ],
-		isFunction = jQuery.isFunction( value );
-
-	// We can't cloneNode fragments that contain checked, in WebKit
-	if ( isFunction ||
-			( l > 1 && typeof value === "string" &&
-				!support.checkClone && rchecked.test( value ) ) ) {
-		return collection.each( function( index ) {
-			var self = collection.eq( index );
-			if ( isFunction ) {
-				args[ 0 ] = value.call( this, index, self.html() );
-			}
-			domManip( self, args, callback, ignored );
-		} );
-	}
-
-	if ( l ) {
-		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
-		first = fragment.firstChild;
-
-		if ( fragment.childNodes.length === 1 ) {
-			fragment = first;
-		}
-
-		// Require either new content or an interest in ignored elements to invoke the callback
-		if ( first || ignored ) {
-			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
-			hasScripts = scripts.length;
-
-			// Use the original fragment for the last item
-			// instead of the first because it can end up
-			// being emptied incorrectly in certain situations (#8070).
-			for ( ; i < l; i++ ) {
-				node = fragment;
-
-				if ( i !== iNoClone ) {
-					node = jQuery.clone( node, true, true );
-
-					// Keep references to cloned scripts for later restoration
-					if ( hasScripts ) {
-
-						// Support: Android<4.1, PhantomJS<2
-						// push.apply(_, arraylike) throws on ancient WebKit
-						jQuery.merge( scripts, getAll( node, "script" ) );
-					}
-				}
-
-				callback.call( collection[ i ], node, i );
-			}
-
-			if ( hasScripts ) {
-				doc = scripts[ scripts.length - 1 ].ownerDocument;
-
-				// Reenable scripts
-				jQuery.map( scripts, restoreScript );
-
-				// Evaluate executable scripts on first document insertion
-				for ( i = 0; i < hasScripts; i++ ) {
-					node = scripts[ i ];
-					if ( rscriptType.test( node.type || "" ) &&
-						!jQuery._data( node, "globalEval" ) &&
-						jQuery.contains( doc, node ) ) {
-
-						if ( node.src ) {
-
-							// Optional AJAX dependency, but won't run scripts if not present
-							if ( jQuery._evalUrl ) {
-								jQuery._evalUrl( node.src );
-							}
-						} else {
-							jQuery.globalEval(
-								( node.text || node.textContent || node.innerHTML || "" )
-									.replace( rcleanScript, "" )
-							);
-						}
-					}
-				}
-			}
-
-			// Fix #11809: Avoid leaking memory
-			fragment = first = null;
-		}
-	}
-
-	return collection;
-}
-
-function remove( elem, selector, keepData ) {
-	var node,
-		elems = selector ? jQuery.filter( selector, elem ) : elem,
-		i = 0;
-
-	for ( ; ( node = elems[ i ] ) != null; i++ ) {
-
-		if ( !keepData && node.nodeType === 1 ) {
-			jQuery.cleanData( getAll( node ) );
-		}
-
-		if ( node.parentNode ) {
-			if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
-				setGlobalEval( getAll( node, "script" ) );
-			}
-			node.parentNode.removeChild( node );
-		}
-	}
-
-	return elem;
-}
-
-jQuery.extend( {
-	htmlPrefilter: function( html ) {
-		return html.replace( rxhtmlTag, "<$1></$2>" );
-	},
-
-	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
-		var destElements, node, clone, i, srcElements,
-			inPage = jQuery.contains( elem.ownerDocument, elem );
-
-		if ( support.html5Clone || jQuery.isXMLDoc( elem ) ||
-			!rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
-
-			clone = elem.cloneNode( true );
-
-		// IE<=8 does not properly clone detached, unknown element nodes
-		} else {
-			fragmentDiv.innerHTML = elem.outerHTML;
-			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
-		}
-
-		if ( ( !support.noCloneEvent || !support.noCloneChecked ) &&
-				( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {
-
-			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
-			destElements = getAll( clone );
-			srcElements = getAll( elem );
-
-			// Fix all IE cloning issues
-			for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) {
-
-				// Ensure that the destination node is not null; Fixes #9587
-				if ( destElements[ i ] ) {
-					fixCloneNodeIssues( node, destElements[ i ] );
-				}
-			}
-		}
-
-		// Copy the events from the original to the clone
-		if ( dataAndEvents ) {
-			if ( deepDataAndEvents ) {
-				srcElements = srcElements || getAll( elem );
-				destElements = destElements || getAll( clone );
-
-				for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) {
-					cloneCopyEvent( node, destElements[ i ] );
-				}
-			} else {
-				cloneCopyEvent( elem, clone );
-			}
-		}
-
-		// Preserve script evaluation history
-		destElements = getAll( clone, "script" );
-		if ( destElements.length > 0 ) {
-			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
-		}
-
-		destElements = srcElements = node = null;
-
-		// Return the cloned set
-		return clone;
-	},
-
-	cleanData: function( elems, /* internal */ forceAcceptData ) {
-		var elem, type, id, data,
-			i = 0,
-			internalKey = jQuery.expando,
-			cache = jQuery.cache,
-			attributes = support.attributes,
-			special = jQuery.event.special;
-
-		for ( ; ( elem = elems[ i ] ) != null; i++ ) {
-			if ( forceAcceptData || acceptData( elem ) ) {
-
-				id = elem[ internalKey ];
-				data = id && cache[ id ];
-
-				if ( data ) {
-					if ( data.events ) {
-						for ( type in data.events ) {
-							if ( special[ type ] ) {
-								jQuery.event.remove( elem, type );
-
-							// This is a shortcut to avoid jQuery.event.remove's overhead
-							} else {
-								jQuery.removeEvent( elem, type, data.handle );
-							}
-						}
-					}
-
-					// Remove cache only if it was not already removed by jQuery.event.remove
-					if ( cache[ id ] ) {
-
-						delete cache[ id ];
-
-						// Support: IE<9
-						// IE does not allow us to delete expando properties from nodes
-						// IE creates expando attributes along with the property
-						// IE does not have a removeAttribute function on Document nodes
-						if ( !attributes && typeof elem.removeAttribute !== "undefined" ) {
-							elem.removeAttribute( internalKey );
-
-						// Webkit & Blink performance suffers when deleting properties
-						// from DOM nodes, so set to undefined instead
-						// https://code.google.com/p/chromium/issues/detail?id=378607
-						} else {
-							elem[ internalKey ] = undefined;
-						}
-
-						deletedIds.push( id );
-					}
-				}
-			}
-		}
-	}
-} );
-
-jQuery.fn.extend( {
-
-	// Keep domManip exposed until 3.0 (gh-2225)
-	domManip: domManip,
-
-	detach: function( selector ) {
-		return remove( this, selector, true );
-	},
-
-	remove: function( selector ) {
-		return remove( this, selector );
-	},
-
-	text: function( value ) {
-		return access( this, function( value ) {
-			return value === undefined ?
-				jQuery.text( this ) :
-				this.empty().append(
-					( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value )
-				);
-		}, null, value, arguments.length );
-	},
-
-	append: function() {
-		return domManip( this, arguments, function( elem ) {
-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-				var target = manipulationTarget( this, elem );
-				target.appendChild( elem );
-			}
-		} );
-	},
-
-	prepend: function() {
-		return domManip( this, arguments, function( elem ) {
-			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
-				var target = manipulationTarget( this, elem );
-				target.insertBefore( elem, target.firstChild );
-			}
-		} );
-	},
-
-	before: function() {
-		return domManip( this, arguments, function( elem ) {
-			if ( this.parentNode ) {
-				this.parentNode.insertBefore( elem, this );
-			}
-		} );
-	},
-
-	after: function() {
-		return domManip( this, arguments, function( elem ) {
-			if ( this.parentNode ) {
-				this.parentNode.insertBefore( elem, this.nextSibling );
-			}
-		} );
-	},
-
-	empty: function() {
-		var elem,
-			i = 0;
-
-		for ( ; ( elem = this[ i ] ) != null; i++ ) {
-
-			// Remove element nodes and prevent memory leaks
-			if ( elem.nodeType === 1 ) {
-				jQuery.cleanData( getAll( elem, false ) );
-			}
-
-			// Remove any remaining nodes
-			while ( elem.firstChild ) {
-				elem.removeChild( elem.firstChild );
-			}
-
-			// If this is a select, ensure that it displays empty (#12336)
-			// Support: IE<9
-			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
-				elem.options.length = 0;
-			}
-		}
-
-		return this;
-	},
-
-	clone: function( dataAndEvents, deepDataAndEvents ) {
-		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
-		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
-
-		return this.map( function() {
-			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
-		} );
-	},
-
-	html: function( value ) {
-		return access( this, function( value ) {
-			var elem = this[ 0 ] || {},
-				i = 0,
-				l = this.length;
-
-			if ( value === undefined ) {
-				return elem.nodeType === 1 ?
-					elem.innerHTML.replace( rinlinejQuery, "" ) :
-					undefined;
-			}
-
-			// See if we can take a shortcut and just use innerHTML
-			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
-				( support.htmlSerialize || !rnoshimcache.test( value )  ) &&
-				( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
-				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
-
-				value = jQuery.htmlPrefilter( value );
-
-				try {
-					for ( ; i < l; i++ ) {
-
-						// Remove element nodes and prevent memory leaks
-						elem = this[ i ] || {};
-						if ( elem.nodeType === 1 ) {
-							jQuery.cleanData( getAll( elem, false ) );
-							elem.innerHTML = value;
-						}
-					}
-
-					elem = 0;
-
-				// If using innerHTML throws an exception, use the fallback method
-				} catch ( e ) {}
-			}
-
-			if ( elem ) {
-				this.empty().append( value );
-			}
-		}, null, value, arguments.length );
-	},
-
-	replaceWith: function() {
-		var ignored = [];
-
-		// Make the changes, replacing each non-ignored context element with the new content
-		return domManip( this, arguments, function( elem ) {
-			var parent = this.parentNode;
-
-			if ( jQuery.inArray( this, ignored ) < 0 ) {
-				jQuery.cleanData( getAll( this ) );
-				if ( parent ) {
-					parent.replaceChild( elem, this );
-				}
-			}
-
-		// Force callback invocation
-		}, ignored );
-	}
-} );
-
-jQuery.each( {
-	appendTo: "append",
-	prependTo: "prepend",
-	insertBefore: "before",
-	insertAfter: "after",
-	replaceAll: "replaceWith"
-}, function( name, original ) {
-	jQuery.fn[ name ] = function( selector ) {
-		var elems,
-			i = 0,
-			ret = [],
-			insert = jQuery( selector ),
-			last = insert.length - 1;
-
-		for ( ; i <= last; i++ ) {
-			elems = i === last ? this : this.clone( true );
-			jQuery( insert[ i ] )[ original ]( elems );
-
-			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
-			push.apply( ret, elems.get() );
-		}
-
-		return this.pushStack( ret );
-	};
-} );
-
-
-var iframe,
-	elemdisplay = {
-
-		// Support: Firefox
-		// We have to pre-define these values for FF (#10227)
-		HTML: "block",
-		BODY: "block"
-	};
-
-/**
- * Retrieve the actual display of a element
- * @param {String} name nodeName of the element
- * @param {Object} doc Document object
- */
-
-// Called only from within defaultDisplay
-function actualDisplay( name, doc ) {
-	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
-
-		display = jQuery.css( elem[ 0 ], "display" );
-
-	// We don't have any data stored on the element,
-	// so use "detach" method as fast way to get rid of the element
-	elem.detach();
-
-	return display;
-}
-
-/**
- * Try to determine the default display value of an element
- * @param {String} nodeName
- */
-function defaultDisplay( nodeName ) {
-	var doc = document,
-		display = elemdisplay[ nodeName ];
-
-	if ( !display ) {
-		display = actualDisplay( nodeName, doc );
-
-		// If the simple way fails, read from inside an iframe
-		if ( display === "none" || !display ) {
-
-			// Use the already-created iframe if possible
-			iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) )
-				.appendTo( doc.documentElement );
-
-			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
-			doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
-
-			// Support: IE
-			doc.write();
-			doc.close();
-
-			display = actualDisplay( nodeName, doc );
-			iframe.detach();
-		}
-
-		// Store the correct default display
-		elemdisplay[ nodeName ] = display;
-	}
-
-	return display;
-}
-var rmargin = ( /^margin/ );
-
-var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
-
-var swap = function( elem, options, callback, args ) {
-	var ret, name,
-		old = {};
-
-	// Remember the old values, and insert the new ones
-	for ( name in options ) {
-		old[ name ] = elem.style[ name ];
-		elem.style[ name ] = options[ name ];
-	}
-
-	ret = callback.apply( elem, args || [] );
-
-	// Revert the old values
-	for ( name in options ) {
-		elem.style[ name ] = old[ name ];
-	}
-
-	return ret;
-};
-
-
-var documentElement = document.documentElement;
-
-
-
-( function() {
-	var pixelPositionVal, pixelMarginRightVal, boxSizingReliableVal,
-		reliableHiddenOffsetsVal, reliableMarginRightVal, reliableMarginLeftVal,
-		container = document.createElement( "div" ),
-		div = document.createElement( "div" );
-
-	// Finish early in limited (non-browser) environments
-	if ( !div.style ) {
-		return;
-	}
-
-	div.style.cssText = "float:left;opacity:.5";
-
-	// Support: IE<9
-	// Make sure that element opacity exists (as opposed to filter)
-	support.opacity = div.style.opacity === "0.5";
-
-	// Verify style float existence
-	// (IE uses styleFloat instead of cssFloat)
-	support.cssFloat = !!div.style.cssFloat;
-
-	div.style.backgroundClip = "content-box";
-	div.cloneNode( true ).style.backgroundClip = "";
-	support.clearCloneStyle = div.style.backgroundClip === "content-box";
-
-	container = document.createElement( "div" );
-	container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
-		"padding:0;margin-top:1px;position:absolute";
-	div.innerHTML = "";
-	container.appendChild( div );
-
-	// Support: Firefox<29, Android 2.3
-	// Vendor-prefix box-sizing
-	support.boxSizing = div.style.boxSizing === "" || div.style.MozBoxSizing === "" ||
-		div.style.WebkitBoxSizing === "";
-
-	jQuery.extend( support, {
-		reliableHiddenOffsets: function() {
-			if ( pixelPositionVal == null ) {
-				computeStyleTests();
-			}
-			return reliableHiddenOffsetsVal;
-		},
-
-		boxSizingReliable: function() {
-
-			// We're checking for pixelPositionVal here instead of boxSizingReliableVal
-			// since that compresses better and they're computed together anyway.
-			if ( pixelPositionVal == null ) {
-				computeStyleTests();
-			}
-			return boxSizingReliableVal;
-		},
-
-		pixelMarginRight: function() {
-
-			// Support: Android 4.0-4.3
-			if ( pixelPositionVal == null ) {
-				computeStyleTests();
-			}
-			return pixelMarginRightVal;
-		},
-
-		pixelPosition: function() {
-			if ( pixelPositionVal == null ) {
-				computeStyleTests();
-			}
-			return pixelPositionVal;
-		},
-
-		reliableMarginRight: function() {
-
-			// Support: Android 2.3
-			if ( pixelPositionVal == null ) {
-				computeStyleTests();
-			}
-			return reliableMarginRightVal;
-		},
-
-		reliableMarginLeft: function() {
-
-			// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37
-			if ( pixelPositionVal == null ) {
-				computeStyleTests();
-			}
-			return reliableMarginLeftVal;
-		}
-	} );
-
-	function computeStyleTests() {
-		var contents, divStyle,
-			documentElement = document.documentElement;
-
-		// Setup
-		documentElement.appendChild( container );
-
-		div.style.cssText =
-
-			// Support: Android 2.3
-			// Vendor-prefix box-sizing
-			"-webkit-box-sizing:border-box;box-sizing:border-box;" +
-			"position:relative;display:block;" +
-			"margin:auto;border:1px;padding:1px;" +
-			"top:1%;width:50%";
-
-		// Support: IE<9
-		// Assume reasonable values in the absence of getComputedStyle
-		pixelPositionVal = boxSizingReliableVal = reliableMarginLeftVal = false;
-		pixelMarginRightVal = reliableMarginRightVal = true;
-
-		// Check for getComputedStyle so that this code is not run in IE<9.
-		if ( window.getComputedStyle ) {
-			divStyle = window.getComputedStyle( div );
-			pixelPositionVal = ( divStyle || {} ).top !== "1%";
-			reliableMarginLeftVal = ( divStyle || {} ).marginLeft === "2px";
-			boxSizingReliableVal = ( divStyle || { width: "4px" } ).width === "4px";
-
-			// Support: Android 4.0 - 4.3 only
-			// Some styles come back with percentage values, even though they shouldn't
-			div.style.marginRight = "50%";
-			pixelMarginRightVal = ( divStyle || { marginRight: "4px" } ).marginRight === "4px";
-
-			// Support: Android 2.3 only
-			// Div with explicit width and no margin-right incorrectly
-			// gets computed margin-right based on width of container (#3333)
-			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
-			contents = div.appendChild( document.createElement( "div" ) );
-
-			// Reset CSS: box-sizing; display; margin; border; padding
-			contents.style.cssText = div.style.cssText =
-
-				// Support: Android 2.3
-				// Vendor-prefix box-sizing
-				"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
-				"box-sizing:content-box;display:block;margin:0;border:0;padding:0";
-			contents.style.marginRight = contents.style.width = "0";
-			div.style.width = "1px";
-
-			reliableMarginRightVal =
-				!parseFloat( ( window.getComputedStyle( contents ) || {} ).marginRight );
-
-			div.removeChild( contents );
-		}
-
-		// Support: IE6-8
-		// First check that getClientRects works as expected
-		// Check if table cells still have offsetWidth/Height when they are set
-		// to display:none and there are still other visible table cells in a
-		// table row; if so, offsetWidth/Height are not reliable for use when
-		// determining if an element has been hidden directly using
-		// display:none (it is still safe to use offsets if a parent element is
-		// hidden; don safety goggles and see bug #4512 for more information).
-		div.style.display = "none";
-		reliableHiddenOffsetsVal = div.getClientRects().length === 0;
-		if ( reliableHiddenOffsetsVal ) {
-			div.style.display = "";
-			div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
-			contents = div.getElementsByTagName( "td" );
-			contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
-			reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
-			if ( reliableHiddenOffsetsVal ) {
-				contents[ 0 ].style.display = "";
-				contents[ 1 ].style.display = "none";
-				reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
-			}
-		}
-
-		// Teardown
-		documentElement.removeChild( container );
-	}
-
-} )();
-
-
-var getStyles, curCSS,
-	rposition = /^(top|right|bottom|left)$/;
-
-if ( window.getComputedStyle ) {
-	getStyles = function( elem ) {
-
-		// Support: IE<=11+, Firefox<=30+ (#15098, #14150)
-		// IE throws on elements created in popups
-		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
-		var view = elem.ownerDocument.defaultView;
-
-		if ( !view.opener ) {
-			view = window;
-		}
-
-		return view.getComputedStyle( elem );
-	};
-
-	curCSS = function( elem, name, computed ) {
-		var width, minWidth, maxWidth, ret,
-			style = elem.style;
-
-		computed = computed || getStyles( elem );
-
-		// getPropertyValue is only needed for .css('filter') in IE9, see #12537
-		ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
-
-		if ( computed ) {
-
-			if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
-				ret = jQuery.style( elem, name );
-			}
-
-			// A tribute to the "awesome hack by Dean Edwards"
-			// Chrome < 17 and Safari 5.0 uses "computed value"
-			// instead of "used value" for margin-right
-			// Safari 5.1.7 (at least) returns percentage for a larger set of values,
-			// but width seems to be reliably pixels
-			// this is against the CSSOM draft spec:
-			// http://dev.w3.org/csswg/cssom/#resolved-values
-			if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
-
-				// Remember the original values
-				width = style.width;
-				minWidth = style.minWidth;
-				maxWidth = style.maxWidth;
-
-				// Put in the new values to get a computed value out
-				style.minWidth = style.maxWidth = style.width = ret;
-				ret = computed.width;
-
-				// Revert the changed values
-				style.width = width;
-				style.minWidth = minWidth;
-				style.maxWidth = maxWidth;
-			}
-		}
-
-		// Support: IE
-		// IE returns zIndex value as an integer.
-		return ret === undefined ?
-			ret :
-			ret + "";
-	};
-} else if ( documentElement.currentStyle ) {
-	getStyles = function( elem ) {
-		return elem.currentStyle;
-	};
-
-	curCSS = function( elem, name, computed ) {
-		var left, rs, rsLeft, ret,
-			style = elem.style;
-
-		computed = computed || getStyles( elem );
-		ret = computed ? computed[ name ] : undefined;
-
-		// Avoid setting ret to empty string here
-		// so we don't default to auto
-		if ( ret == null && style && style[ name ] ) {
-			ret = style[ name ];
-		}
-
-		// From the awesome hack by Dean Edwards
-		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
-
-		// If we're not dealing with a regular pixel number
-		// but a number that has a weird ending, we need to convert it to pixels
-		// but not position css attributes, as those are
-		// proportional to the parent element instead
-		// and we can't measure the parent instead because it
-		// might trigger a "stacking dolls" problem
-		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
-
-			// Remember the original values
-			left = style.left;
-			rs = elem.runtimeStyle;
-			rsLeft = rs && rs.left;
-
-			// Put in the new values to get a computed value out
-			if ( rsLeft ) {
-				rs.left = elem.currentStyle.left;
-			}
-			style.left = name === "fontSize" ? "1em" : ret;
-			ret = style.pixelLeft + "px";
-
-			// Revert the changed values
-			style.left = left;
-			if ( rsLeft ) {
-				rs.left = rsLeft;
-			}
-		}
-
-		// Support: IE
-		// IE returns zIndex value as an integer.
-		return ret === undefined ?
-			ret :
-			ret + "" || "auto";
-	};
-}
-
-
-
-
-function addGetHookIf( conditionFn, hookFn ) {
-
-	// Define the hook, we'll check on the first run if it's really needed.
-	return {
-		get: function() {
-			if ( conditionFn() ) {
-
-				// Hook not needed (or it's not possible to use it due
-				// to missing dependency), remove it.
-				delete this.get;
-				return;
-			}
-
-			// Hook needed; redefine it so that the support test is not executed again.
-			return ( this.get = hookFn ).apply( this, arguments );
-		}
-	};
-}
-
-
-var
-
-		ralpha = /alpha\([^)]*\)/i,
-	ropacity = /opacity\s*=\s*([^)]*)/i,
-
-	// swappable if display is none or starts with table except
-	// "table", "table-cell", or "table-caption"
-	// see here for display values:
-	// https://developer.mozilla.org/en-US/docs/CSS/display
-	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
-	rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
-
-	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
-	cssNormalTransform = {
-		letterSpacing: "0",
-		fontWeight: "400"
-	},
-
-	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
-	emptyStyle = document.createElement( "div" ).style;
-
-
-// return a css property mapped to a potentially vendor prefixed property
-function vendorPropName( name ) {
-
-	// shortcut for names that are not vendor prefixed
-	if ( name in emptyStyle ) {
-		return name;
-	}
-
-	// check for vendor prefixed names
-	var capName = name.charAt( 0 ).toUpperCase() + name.slice( 1 ),
-		i = cssPrefixes.length;
-
-	while ( i-- ) {
-		name = cssPrefixes[ i ] + capName;
-		if ( name in emptyStyle ) {
-			return name;
-		}
-	}
-}
-
-function showHide( elements, show ) {
-	var display, elem, hidden,
-		values = [],
-		index = 0,
-		length = elements.length;
-
-	for ( ; index < length; index++ ) {
-		elem = elements[ index ];
-		if ( !elem.style ) {
-			continue;
-		}
-
-		values[ index ] = jQuery._data( elem, "olddisplay" );
-		display = elem.style.display;
-		if ( show ) {
-
-			// Reset the inline display of this element to learn if it is
-			// being hidden by cascaded rules or not
-			if ( !values[ index ] && display === "none" ) {
-				elem.style.display = "";
-			}
-
-			// Set elements which have been overridden with display: none
-			// in a stylesheet to whatever the default browser style is
-			// for such an element
-			if ( elem.style.display === "" && isHidden( elem ) ) {
-				values[ index ] =
-					jQuery._data( elem, "olddisplay", defaultDisplay( elem.nodeName ) );
-			}
-		} else {
-			hidden = isHidden( elem );
-
-			if ( display && display !== "none" || !hidden ) {
-				jQuery._data(
-					elem,
-					"olddisplay",
-					hidden ? display : jQuery.css( elem, "display" )
-				);
-			}
-		}
-	}
-
-	// Set the display of most of the elements in a second loop
-	// to avoid the constant reflow
-	for ( index = 0; index < length; index++ ) {
-		elem = elements[ index ];
-		if ( !elem.style ) {
-			continue;
-		}
-		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
-			elem.style.display = show ? values[ index ] || "" : "none";
-		}
-	}
-
-	return elements;
-}
-
-function setPositiveNumber( elem, value, subtract ) {
-	var matches = rnumsplit.exec( value );
-	return matches ?
-
-		// Guard against undefined "subtract", e.g., when used as in cssHooks
-		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
-		value;
-}
-
-function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
-	var i = extra === ( isBorderBox ? "border" : "content" ) ?
-
-		// If we already have the right measurement, avoid augmentation
-		4 :
-
-		// Otherwise initialize for horizontal or vertical properties
-		name === "width" ? 1 : 0,
-
-		val = 0;
-
-	for ( ; i < 4; i += 2 ) {
-
-		// both box models exclude margin, so add it if we want it
-		if ( extra === "margin" ) {
-			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
-		}
-
-		if ( isBorderBox ) {
-
-			// border-box includes padding, so remove it if we want content
-			if ( extra === "content" ) {
-				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-			}
-
-			// at this point, extra isn't border nor margin, so remove border
-			if ( extra !== "margin" ) {
-				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-			}
-		} else {
-
-			// at this point, extra isn't content, so add padding
-			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
-
-			// at this point, extra isn't content nor padding, so add border
-			if ( extra !== "padding" ) {
-				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
-			}
-		}
-	}
-
-	return val;
-}
-
-function getWidthOrHeight( elem, name, extra ) {
-
-	// Start with offset property, which is equivalent to the border-box value
-	var valueIsBorderBox = true,
-		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
-		styles = getStyles( elem ),
-		isBorderBox = support.boxSizing &&
-			jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
-
-	// Support: IE11 only
-	// In IE 11 fullscreen elements inside of an iframe have
-	// 100x too small dimensions (gh-1764).
-	if ( document.msFullscreenElement && window.top !== window ) {
-
-		// Support: IE11 only
-		// Running getBoundingClientRect on a disconnected node
-		// in IE throws an error.
-		if ( elem.getClientRects().length ) {
-			val = Math.round( elem.getBoundingClientRect()[ name ] * 100 );
-		}
-	}
-
-	// some non-html elements return undefined for offsetWidth, so check for null/undefined
-	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
-	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
-	if ( val <= 0 || val == null ) {
-
-		// Fall back to computed then uncomputed css if necessary
-		val = curCSS( elem, name, styles );
-		if ( val < 0 || val == null ) {
-			val = elem.style[ name ];
-		}
-
-		// Computed unit is not pixels. Stop here and return.
-		if ( rnumnonpx.test( val ) ) {
-			return val;
-		}
-
-		// we need the check for style in case a browser which returns unreliable values
-		// for getComputedStyle silently falls back to the reliable elem.style
-		valueIsBorderBox = isBorderBox &&
-			( support.boxSizingReliable() || val === elem.style[ name ] );
-
-		// Normalize "", auto, and prepare for extra
-		val = parseFloat( val ) || 0;
-	}
-
-	// use the active box-sizing model to add/subtract irrelevant styles
-	return ( val +
-		augmentWidthOrHeight(
-			elem,
-			name,
-			extra || ( isBorderBox ? "border" : "content" ),
-			valueIsBorderBox,
-			styles
-		)
-	) + "px";
-}
-
-jQuery.extend( {
-
-	// Add in style property hooks for overriding the default
-	// behavior of getting and setting a style property
-	cssHooks: {
-		opacity: {
-			get: function( elem, computed ) {
-				if ( computed ) {
-
-					// We should always get a number back from opacity
-					var ret = curCSS( elem, "opacity" );
-					return ret === "" ? "1" : ret;
-				}
-			}
-		}
-	},
-
-	// Don't automatically add "px" to these possibly-unitless properties
-	cssNumber: {
-		"animationIterationCount": true,
-		"columnCount": true,
-		"fillOpacity": true,
-		"flexGrow": true,
-		"flexShrink": true,
-		"fontWeight": true,
-		"lineHeight": true,
-		"opacity": true,
-		"order": true,
-		"orphans": true,
-		"widows": true,
-		"zIndex": true,
-		"zoom": true
-	},
-
-	// Add in properties whose names you wish to fix before
-	// setting or getting the value
-	cssProps: {
-
-		// normalize float css property
-		"float": support.cssFloat ? "cssFloat" : "styleFloat"
-	},
-
-	// Get and set the style property on a DOM Node
-	style: function( elem, name, value, extra ) {
-
-		// Don't set styles on text and comment nodes
-		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
-			return;
-		}
-
-		// Make sure that we're working with the right name
-		var ret, type, hooks,
-			origName = jQuery.camelCase( name ),
-			style = elem.style;
-
-		name = jQuery.cssProps[ origName ] ||
-			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
-
-		// gets hook for the prefixed version
-		// followed by the unprefixed version
-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
-		// Check if we're setting a value
-		if ( value !== undefined ) {
-			type = typeof value;
-
-			// Convert "+=" or "-=" to relative numbers (#7345)
-			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
-				value = adjustCSS( elem, name, ret );
-
-				// Fixes bug #9237
-				type = "number";
-			}
-
-			// Make sure that null and NaN values aren't set. See: #7116
-			if ( value == null || value !== value ) {
-				return;
-			}
-
-			// If a number was passed in, add the unit (except for certain CSS properties)
-			if ( type === "number" ) {
-				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
-			}
-
-			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
-			// but it would mean to define eight
-			// (for every problematic property) identical functions
-			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
-				style[ name ] = "inherit";
-			}
-
-			// If a hook was provided, use that value, otherwise just set the specified value
-			if ( !hooks || !( "set" in hooks ) ||
-				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
-
-				// Support: IE
-				// Swallow errors from 'invalid' CSS values (#5509)
-				try {
-					style[ name ] = value;
-				} catch ( e ) {}
-			}
-
-		} else {
-
-			// If a hook was provided get the non-computed value from there
-			if ( hooks && "get" in hooks &&
-				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
-
-				return ret;
-			}
-
-			// Otherwise just get the value from the style object
-			return style[ name ];
-		}
-	},
-
-	css: function( elem, name, extra, styles ) {
-		var num, val, hooks,
-			origName = jQuery.camelCase( name );
-
-		// Make sure that we're working with the right name
-		name = jQuery.cssProps[ origName ] ||
-			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
-
-		// gets hook for the prefixed version
-		// followed by the unprefixed version
-		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
-
-		// If a hook was provided get the computed value from there
-		if ( hooks && "get" in hooks ) {
-			val = hooks.get( elem, true, extra );
-		}
-
-		// Otherwise, if a way to get the computed value exists, use that
-		if ( val === undefined ) {
-			val = curCSS( elem, name, styles );
-		}
-
-		//convert "normal" to computed value
-		if ( val === "normal" && name in cssNormalTransform ) {
-			val = cssNormalTransform[ name ];
-		}
-
-		// Return, converting to number if forced or a qualifier was provided and val looks numeric
-		if ( extra === "" || extra ) {
-			num = parseFloat( val );
-			return extra === true || isFinite( num ) ? num || 0 : val;
-		}
-		return val;
-	}
-} );
-
-jQuery.each( [ "height", "width" ], function( i, name ) {
-	jQuery.cssHooks[ name ] = {
-		get: function( elem, computed, extra ) {
-			if ( computed ) {
-
-				// certain elements can have dimension info if we invisibly show them
-				// however, it must have a current display style that would benefit from this
-				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
-					elem.offsetWidth === 0 ?
-						swap( elem, cssShow, function() {
-							return getWidthOrHeight( elem, name, extra );
-						} ) :
-						getWidthOrHeight( elem, name, extra );
-			}
-		},
-
-		set: function( elem, value, extra ) {
-			var styles = extra && getStyles( elem );
-			return setPositiveNumber( elem, value, extra ?
-				augmentWidthOrHeight(
-					elem,
-					name,
-					extra,
-					support.boxSizing &&
-						jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
-					styles
-				) : 0
-			);
-		}
-	};
-} );
-
-if ( !support.opacity ) {
-	jQuery.cssHooks.opacity = {
-		get: function( elem, computed ) {
-
-			// IE uses filters for opacity
-			return ropacity.test( ( computed && elem.currentStyle ?
-				elem.currentStyle.filter :
-				elem.style.filter ) || "" ) ?
-					( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
-					computed ? "1" : "";
-		},
-
-		set: function( elem, value ) {
-			var style = elem.style,
-				currentStyle = elem.currentStyle,
-				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
-				filter = currentStyle && currentStyle.filter || style.filter || "";
-
-			// IE has trouble with opacity if it does not have layout
-			// Force it by setting the zoom level
-			style.zoom = 1;
-
-			// if setting opacity to 1, and no other filters exist -
-			// attempt to remove filter attribute #6652
-			// if value === "", then remove inline opacity #12685
-			if ( ( value >= 1 || value === "" ) &&
-					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
-					style.removeAttribute ) {
-
-				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
-				// if "filter:" is present at all, clearType is disabled, we want to avoid this
-				// style.removeAttribute is IE Only, but so apparently is this code path...
-				style.removeAttribute( "filter" );
-
-				// if there is no filter style applied in a css rule
-				// or unset inline opacity, we are done
-				if ( value === "" || currentStyle && !currentStyle.filter ) {
-					return;
-				}
-			}
-
-			// otherwise, set new filter values
-			style.filter = ralpha.test( filter ) ?
-				filter.replace( ralpha, opacity ) :
-				filter + " " + opacity;
-		}
-	};
-}
-
-jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
-	function( elem, computed ) {
-		if ( computed ) {
-			return swap( elem, { "display": "inline-block" },
-				curCSS, [ elem, "marginRight" ] );
-		}
-	}
-);
-
-jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
-	function( elem, computed ) {
-		if ( computed ) {
-			return (
-				parseFloat( curCSS( elem, "marginLeft" ) ) ||
-
-				// Support: IE<=11+
-				// Running getBoundingClientRect on a disconnected node in IE throws an error
-				// Support: IE8 only
-				// getClientRects() errors on disconnected elems
-				( jQuery.contains( elem.ownerDocument, elem ) ?
-					elem.getBoundingClientRect().left -
-						swap( elem, { marginLeft: 0 }, function() {
-							return elem.getBoundingClientRect().left;
-						} ) :
-					0
-				)
-			) + "px";
-		}
-	}
-);
-
-// These hooks are used by animate to expand properties
-jQuery.each( {
-	margin: "",
-	padding: "",
-	border: "Width"
-}, function( prefix, suffix ) {
-	jQuery.cssHooks[ prefix + suffix ] = {
-		expand: function( value ) {
-			var i = 0,
-				expanded = {},
-
-				// assumes a single number if not a string
-				parts = typeof value === "string" ? value.split( " " ) : [ value ];
-
-			for ( ; i < 4; i++ ) {
-				expanded[ prefix + cssExpand[ i ] + suffix ] =
-					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
-			}
-
-			return expanded;
-		}
-	};
-
-	if ( !rmargin.test( prefix ) ) {
-		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
-	}
-} );
-
-jQuery.fn.extend( {
-	css: function( name, value ) {
-		return access( this, function( elem, name, value ) {
-			var styles, len,
-				map = {},
-				i = 0;
-
-			if ( jQuery.isArray( name ) ) {
-				styles = getStyles( elem );
-				len = name.length;
-
-				for ( ; i < len; i++ ) {
-					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
-				}
-
-				return map;
-			}
-
-			return value !== undefined ?
-				jQuery.style( elem, name, value ) :
-				jQuery.css( elem, name );
-		}, name, value, arguments.length > 1 );
-	},
-	show: function() {
-		return showHide( this, true );
-	},
-	hide: function() {
-		return showHide( this );
-	},
-	toggle: function( state ) {
-		if ( typeof state === "boolean" ) {
-			return state ? this.show() : this.hide();
-		}
-
-		return this.each( function() {
-			if ( isHidden( this ) ) {
-				jQuery( this ).show();
-			} else {
-				jQuery( this ).hide();
-			}
-		} );
-	}
-} );
-
-
-function Tween( elem, options, prop, end, easing ) {
-	return new Tween.prototype.init( elem, options, prop, end, easing );
-}
-jQuery.Tween = Tween;
-
-Tween.prototype = {
-	constructor: Tween,
-	init: function( elem, options, prop, end, easing, unit ) {
-		this.elem = elem;
-		this.prop = prop;
-		this.easing = easing || jQuery.easing._default;
-		this.options = options;
-		this.start = this.now = this.cur();
-		this.end = end;
-		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
-	},
-	cur: function() {
-		var hooks = Tween.propHooks[ this.prop ];
-
-		return hooks && hooks.get ?
-			hooks.get( this ) :
-			Tween.propHooks._default.get( this );
-	},
-	run: function( percent ) {
-		var eased,
-			hooks = Tween.propHooks[ this.prop ];
-
-		if ( this.options.duration ) {
-			this.pos = eased = jQuery.easing[ this.easing ](
-				percent, this.options.duration * percent, 0, 1, this.options.duration
-			);
-		} else {
-			this.pos = eased = percent;
-		}
-		this.now = ( this.end - this.start ) * eased + this.start;
-
-		if ( this.options.step ) {
-			this.options.step.call( this.elem, this.now, this );
-		}
-
-		if ( hooks && hooks.set ) {
-			hooks.set( this );
-		} else {
-			Tween.propHooks._default.set( this );
-		}
-		return this;
-	}
-};
-
-Tween.prototype.init.prototype = Tween.prototype;
-
-Tween.propHooks = {
-	_default: {
-		get: function( tween ) {
-			var result;
-
-			// Use a property on the element directly when it is not a DOM element,
-			// or when there is no matching style property that exists.
-			if ( tween.elem.nodeType !== 1 ||
-				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
-				return tween.elem[ tween.prop ];
-			}
-
-			// passing an empty string as a 3rd parameter to .css will automatically
-			// attempt a parseFloat and fallback to a string if the parse fails
-			// so, simple values such as "10px" are parsed to Float.
-			// complex values such as "rotate(1rad)" are returned as is.
-			result = jQuery.css( tween.elem, tween.prop, "" );
-
-			// Empty strings, null, undefined and "auto" are converted to 0.
-			return !result || result === "auto" ? 0 : result;
-		},
-		set: function( tween ) {
-
-			// use step hook for back compat - use cssHook if its there - use .style if its
-			// available and use plain properties where available
-			if ( jQuery.fx.step[ tween.prop ] ) {
-				jQuery.fx.step[ tween.prop ]( tween );
-			} else if ( tween.elem.nodeType === 1 &&
-				( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
-					jQuery.cssHooks[ tween.prop ] ) ) {
-				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
-			} else {
-				tween.elem[ tween.prop ] = tween.now;
-			}
-		}
-	}
-};
-
-// Support: IE <=9
-// Panic based approach to setting things on disconnected nodes
-
-Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
-	set: function( tween ) {
-		if ( tween.elem.nodeType && tween.elem.parentNode ) {
-			tween.elem[ tween.prop ] = tween.now;
-		}
-	}
-};
-
-jQuery.easing = {
-	linear: function( p ) {
-		return p;
-	},
-	swing: function( p ) {
-		return 0.5 - Math.cos( p * Math.PI ) / 2;
-	},
-	_default: "swing"
-};
-
-jQuery.fx = Tween.prototype.init;
-
-// Back Compat <1.8 extension point
-jQuery.fx.step = {};
-
-
-
-
-var
-	fxNow, timerId,
-	rfxtypes = /^(?:toggle|show|hide)$/,
-	rrun = /queueHooks$/;
-
-// Animations created synchronously will run synchronously
-function createFxNow() {
-	window.setTimeout( function() {
-		fxNow = undefined;
-	} );
-	return ( fxNow = jQuery.now() );
-}
-
-// Generate parameters to create a standard animation
-function genFx( type, includeWidth ) {
-	var which,
-		attrs = { height: type },
-		i = 0;
-
-	// if we include width, step value is 1 to do all cssExpand values,
-	// if we don't include width, step value is 2 to skip over Left and Right
-	includeWidth = includeWidth ? 1 : 0;
-	for ( ; i < 4 ; i += 2 - includeWidth ) {
-		which = cssExpand[ i ];
-		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
-	}
-
-	if ( includeWidth ) {
-		attrs.opacity = attrs.width = type;
-	}
-
-	return attrs;
-}
-
-function createTween( value, prop, animation ) {
-	var tween,
-		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
-		index = 0,
-		length = collection.length;
-	for ( ; index < length; index++ ) {
-		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
-
-			// we're done with this property
-			return tween;
-		}
-	}
-}
-
-function defaultPrefilter( elem, props, opts ) {
-	/* jshint validthis: true */
-	var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
-		anim = this,
-		orig = {},
-		style = elem.style,
-		hidden = elem.nodeType && isHidden( elem ),
-		dataShow = jQuery._data( elem, "fxshow" );
-
-	// handle queue: false promises
-	if ( !opts.queue ) {
-		hooks = jQuery._queueHooks( elem, "fx" );
-		if ( hooks.unqueued == null ) {
-			hooks.unqueued = 0;
-			oldfire = hooks.empty.fire;
-			hooks.empty.fire = function() {
-				if ( !hooks.unqueued ) {
-					oldfire();
-				}
-			};
-		}
-		hooks.unqueued++;
-
-		anim.always( function() {
-
-			// doing this makes sure that the complete handler will be called
-			// before this completes
-			anim.always( function() {
-				hooks.unqueued--;
-				if ( !jQuery.queue( elem, "fx" ).length ) {
-					hooks.empty.fire();
-				}
-			} );
-		} );
-	}
-
-	// height/width overflow pass
-	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
-
-		// Make sure that nothing sneaks out
-		// Record all 3 overflow attributes because IE does not
-		// change the overflow attribute when overflowX and
-		// overflowY are set to the same value
-		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
-
-		// Set display property to inline-block for height/width
-		// animations on inline elements that are having width/height animated
-		display = jQuery.css( elem, "display" );
-
-		// Test default display if display is currently "none"
-		checkDisplay = display === "none" ?
-			jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
-
-		if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
-
-			// inline-level elements accept inline-block;
-			// block-level elements need to be inline with layout
-			if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
-				style.display = "inline-block";
-			} else {
-				style.zoom = 1;
-			}
-		}
-	}
-
-	if ( opts.overflow ) {
-		style.overflow = "hidden";
-		if ( !support.shrinkWrapBlocks() ) {
-			anim.always( function() {
-				style.overflow = opts.overflow[ 0 ];
-				style.overflowX = opts.overflow[ 1 ];
-				style.overflowY = opts.overflow[ 2 ];
-			} );
-		}
-	}
-
-	// show/hide pass
-	for ( prop in props ) {
-		value = props[ prop ];
-		if ( rfxtypes.exec( value ) ) {
-			delete props[ prop ];
-			toggle = toggle || value === "toggle";
-			if ( value === ( hidden ? "hide" : "show" ) ) {
-
-				// If there is dataShow left over from a stopped hide or show
-				// and we are going to proceed with show, we should pretend to be hidden
-				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
-					hidden = true;
-				} else {
-					continue;
-				}
-			}
-			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
-
-		// Any non-fx value stops us from restoring the original display value
-		} else {
-			display = undefined;
-		}
-	}
-
-	if ( !jQuery.isEmptyObject( orig ) ) {
-		if ( dataShow ) {
-			if ( "hidden" in dataShow ) {
-				hidden = dataShow.hidden;
-			}
-		} else {
-			dataShow = jQuery._data( elem, "fxshow", {} );
-		}
-
-		// store state if its toggle - enables .stop().toggle() to "reverse"
-		if ( toggle ) {
-			dataShow.hidden = !hidden;
-		}
-		if ( hidden ) {
-			jQuery( elem ).show();
-		} else {
-			anim.done( function() {
-				jQuery( elem ).hide();
-			} );
-		}
-		anim.done( function() {
-			var prop;
-			jQuery._removeData( elem, "fxshow" );
-			for ( prop in orig ) {
-				jQuery.style( elem, prop, orig[ prop ] );
-			}
-		} );
-		for ( prop in orig ) {
-			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
-
-			if ( !( prop in dataShow ) ) {
-				dataShow[ prop ] = tween.start;
-				if ( hidden ) {
-					tween.end = tween.start;
-					tween.start = prop === "width" || prop === "height" ? 1 : 0;
-				}
-			}
-		}
-
-	// If this is a noop like .hide().hide(), restore an overwritten display value
-	} else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) {
-		style.display = display;
-	}
-}
-
-function propFilter( props, specialEasing ) {
-	var index, name, easing, value, hooks;
-
-	// camelCase, specialEasing and expand cssHook pass
-	for ( index in props ) {
-		name = jQuery.camelCase( index );
-		easing = specialEasing[ name ];
-		value = props[ index ];
-		if ( jQuery.isArray( value ) ) {
-			easing = value[ 1 ];
-			value = props[ index ] = value[ 0 ];
-		}
-
-		if ( index !== name ) {
-			props[ name ] = value;
-			delete props[ index ];
-		}
-
-		hooks = jQuery.cssHooks[ name ];
-		if ( hooks && "expand" in hooks ) {
-			value = hooks.expand( value );
-			delete props[ name ];
-
-			// not quite $.extend, this wont overwrite keys already present.
-			// also - reusing 'index' from above because we have the correct "name"
-			for ( index in value ) {
-				if ( !( index in props ) ) {
-					props[ index ] = value[ index ];
-					specialEasing[ index ] = easing;
-				}
-			}
-		} else {
-			specialEasing[ name ] = easing;
-		}
-	}
-}
-
-function Animation( elem, properties, options ) {
-	var result,
-		stopped,
-		index = 0,
-		length = Animation.prefilters.length,
-		deferred = jQuery.Deferred().always( function() {
-
-			// don't match elem in the :animated selector
-			delete tick.elem;
-		} ),
-		tick = function() {
-			if ( stopped ) {
-				return false;
-			}
-			var currentTime = fxNow || createFxNow(),
-				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
-
-				// Support: Android 2.3
-				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
-				temp = remaining / animation.duration || 0,
-				percent = 1 - temp,
-				index = 0,
-				length = animation.tweens.length;
-
-			for ( ; index < length ; index++ ) {
-				animation.tweens[ index ].run( percent );
-			}
-
-			deferred.notifyWith( elem, [ animation, percent, remaining ] );
-
-			if ( percent < 1 && length ) {
-				return remaining;
-			} else {
-				deferred.resolveWith( elem, [ animation ] );
-				return false;
-			}
-		},
-		animation = deferred.promise( {
-			elem: elem,
-			props: jQuery.extend( {}, properties ),
-			opts: jQuery.extend( true, {
-				specialEasing: {},
-				easing: jQuery.easing._default
-			}, options ),
-			originalProperties: properties,
-			originalOptions: options,
-			startTime: fxNow || createFxNow(),
-			duration: options.duration,
-			tweens: [],
-			createTween: function( prop, end ) {
-				var tween = jQuery.Tween( elem, animation.opts, prop, end,
-						animation.opts.specialEasing[ prop ] || animation.opts.easing );
-				animation.tweens.push( tween );
-				return tween;
-			},
-			stop: function( gotoEnd ) {
-				var index = 0,
-
-					// if we are going to the end, we want to run all the tweens
-					// otherwise we skip this part
-					length = gotoEnd ? animation.tweens.length : 0;
-				if ( stopped ) {
-					return this;
-				}
-				stopped = true;
-				for ( ; index < length ; index++ ) {
-					animation.tweens[ index ].run( 1 );
-				}
-
-				// resolve when we played the last frame
-				// otherwise, reject
-				if ( gotoEnd ) {
-					deferred.notifyWith( elem, [ animation, 1, 0 ] );
-					deferred.resolveWith( elem, [ animation, gotoEnd ] );
-				} else {
-					deferred.rejectWith( elem, [ animation, gotoEnd ] );
-				}
-				return this;
-			}
-		} ),
-		props = animation.props;
-
-	propFilter( props, animation.opts.specialEasing );
-
-	for ( ; index < length ; index++ ) {
-		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
-		if ( result ) {
-			if ( jQuery.isFunction( result.stop ) ) {
-				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
-					jQuery.proxy( result.stop, result );
-			}
-			return result;
-		}
-	}
-
-	jQuery.map( props, createTween, animation );
-
-	if ( jQuery.isFunction( animation.opts.start ) ) {
-		animation.opts.start.call( elem, animation );
-	}
-
-	jQuery.fx.timer(
-		jQuery.extend( tick, {
-			elem: elem,
-			anim: animation,
-			queue: animation.opts.queue
-		} )
-	);
-
-	// attach callbacks from options
-	return animation.progress( animation.opts.progress )
-		.done( animation.opts.done, animation.opts.complete )
-		.fail( animation.opts.fail )
-		.always( animation.opts.always );
-}
-
-jQuery.Animation = jQuery.extend( Animation, {
-
-	tweeners: {
-		"*": [ function( prop, value ) {
-			var tween = this.createTween( prop, value );
-			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
-			return tween;
-		} ]
-	},
-
-	tweener: function( props, callback ) {
-		if ( jQuery.isFunction( props ) ) {
-			callback = props;
-			props = [ "*" ];
-		} else {
-			props = props.match( rnotwhite );
-		}
-
-		var prop,
-			index = 0,
-			length = props.length;
-
-		for ( ; index < length ; index++ ) {
-			prop = props[ index ];
-			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
-			Animation.tweeners[ prop ].unshift( callback );
-		}
-	},
-
-	prefilters: [ defaultPrefilter ],
-
-	prefilter: function( callback, prepend ) {
-		if ( prepend ) {
-			Animation.prefilters.unshift( callback );
-		} else {
-			Animation.prefilters.push( callback );
-		}
-	}
-} );
-
-jQuery.speed = function( speed, easing, fn ) {
-	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
-		complete: fn || !fn && easing ||
-			jQuery.isFunction( speed ) && speed,
-		duration: speed,
-		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
-	};
-
-	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
-		opt.duration in jQuery.fx.speeds ?
-			jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
-
-	// normalize opt.queue - true/undefined/null -> "fx"
-	if ( opt.queue == null || opt.queue === true ) {
-		opt.queue = "fx";
-	}
-
-	// Queueing
-	opt.old = opt.complete;
-
-	opt.complete = function() {
-		if ( jQuery.isFunction( opt.old ) ) {
-			opt.old.call( this );
-		}
-
-		if ( opt.queue ) {
-			jQuery.dequeue( this, opt.queue );
-		}
-	};
-
-	return opt;
-};
-
-jQuery.fn.extend( {
-	fadeTo: function( speed, to, easing, callback ) {
-
-		// show any hidden elements after setting opacity to 0
-		return this.filter( isHidden ).css( "opacity", 0 ).show()
-
-			// animate to the value specified
-			.end().animate( { opacity: to }, speed, easing, callback );
-	},
-	animate: function( prop, speed, easing, callback ) {
-		var empty = jQuery.isEmptyObject( prop ),
-			optall = jQuery.speed( speed, easing, callback ),
-			doAnimation = function() {
-
-				// Operate on a copy of prop so per-property easing won't be lost
-				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
-
-				// Empty animations, or finishing resolves immediately
-				if ( empty || jQuery._data( this, "finish" ) ) {
-					anim.stop( true );
-				}
-			};
-			doAnimation.finish = doAnimation;
-
-		return empty || optall.queue === false ?
-			this.each( doAnimation ) :
-			this.queue( optall.queue, doAnimation );
-	},
-	stop: function( type, clearQueue, gotoEnd ) {
-		var stopQueue = function( hooks ) {
-			var stop = hooks.stop;
-			delete hooks.stop;
-			stop( gotoEnd );
-		};
-
-		if ( typeof type !== "string" ) {
-			gotoEnd = clearQueue;
-			clearQueue = type;
-			type = undefined;
-		}
-		if ( clearQueue && type !== false ) {
-			this.queue( type || "fx", [] );
-		}
-
-		return this.each( function() {
-			var dequeue = true,
-				index = type != null && type + "queueHooks",
-				timers = jQuery.timers,
-				data = jQuery._data( this );
-
-			if ( index ) {
-				if ( data[ index ] && data[ index ].stop ) {
-					stopQueue( data[ index ] );
-				}
-			} else {
-				for ( index in data ) {
-					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
-						stopQueue( data[ index ] );
-					}
-				}
-			}
-
-			for ( index = timers.length; index--; ) {
-				if ( timers[ index ].elem === this &&
-					( type == null || timers[ index ].queue === type ) ) {
-
-					timers[ index ].anim.stop( gotoEnd );
-					dequeue = false;
-					timers.splice( index, 1 );
-				}
-			}
-
-			// start the next in the queue if the last step wasn't forced
-			// timers currently will call their complete callbacks, which will dequeue
-			// but only if they were gotoEnd
-			if ( dequeue || !gotoEnd ) {
-				jQuery.dequeue( this, type );
-			}
-		} );
-	},
-	finish: function( type ) {
-		if ( type !== false ) {
-			type = type || "fx";
-		}
-		return this.each( function() {
-			var index,
-				data = jQuery._data( this ),
-				queue = data[ type + "queue" ],
-				hooks = data[ type + "queueHooks" ],
-				timers = jQuery.timers,
-				length = queue ? queue.length : 0;
-
-			// enable finishing flag on private data
-			data.finish = true;
-
-			// empty the queue first
-			jQuery.queue( this, type, [] );
-
-			if ( hooks && hooks.stop ) {
-				hooks.stop.call( this, true );
-			}
-
-			// look for any active animations, and finish them
-			for ( index = timers.length; index--; ) {
-				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
-					timers[ index ].anim.stop( true );
-					timers.splice( index, 1 );
-				}
-			}
-
-			// look for any animations in the old queue and finish them
-			for ( index = 0; index < length; index++ ) {
-				if ( queue[ index ] && queue[ index ].finish ) {
-					queue[ index ].finish.call( this );
-				}
-			}
-
-			// turn off finishing flag
-			delete data.finish;
-		} );
-	}
-} );
-
-jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
-	var cssFn = jQuery.fn[ name ];
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return speed == null || typeof speed === "boolean" ?
-			cssFn.apply( this, arguments ) :
-			this.animate( genFx( name, true ), speed, easing, callback );
-	};
-} );
-
-// Generate shortcuts for custom animations
-jQuery.each( {
-	slideDown: genFx( "show" ),
-	slideUp: genFx( "hide" ),
-	slideToggle: genFx( "toggle" ),
-	fadeIn: { opacity: "show" },
-	fadeOut: { opacity: "hide" },
-	fadeToggle: { opacity: "toggle" }
-}, function( name, props ) {
-	jQuery.fn[ name ] = function( speed, easing, callback ) {
-		return this.animate( props, speed, easing, callback );
-	};
-} );
-
-jQuery.timers = [];
-jQuery.fx.tick = function() {
-	var timer,
-		timers = jQuery.timers,
-		i = 0;
-
-	fxNow = jQuery.now();
-
-	for ( ; i < timers.length; i++ ) {
-		timer = timers[ i ];
-
-		// Checks the timer has not already been removed
-		if ( !timer() && timers[ i ] === timer ) {
-			timers.splice( i--, 1 );
-		}
-	}
-
-	if ( !timers.length ) {
-		jQuery.fx.stop();
-	}
-	fxNow = undefined;
-};
-
-jQuery.fx.timer = function( timer ) {
-	jQuery.timers.push( timer );
-	if ( timer() ) {
-		jQuery.fx.start();
-	} else {
-		jQuery.timers.pop();
-	}
-};
-
-jQuery.fx.interval = 13;
-
-jQuery.fx.start = function() {
-	if ( !timerId ) {
-		timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
-	}
-};
-
-jQuery.fx.stop = function() {
-	window.clearInterval( timerId );
-	timerId = null;
-};
-
-jQuery.fx.speeds = {
-	slow: 600,
-	fast: 200,
-
-	// Default speed
-	_default: 400
-};
-
-
-// Based off of the plugin by Clint Helfers, with permission.
-// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
-jQuery.fn.delay = function( time, type ) {
-	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
-	type = type || "fx";
-
-	return this.queue( type, function( next, hooks ) {
-		var timeout = window.setTimeout( next, time );
-		hooks.stop = function() {
-			window.clearTimeout( timeout );
-		};
-	} );
-};
-
-
-( function() {
-	var a,
-		input = document.createElement( "input" ),
-		div = document.createElement( "div" ),
-		select = document.createElement( "select" ),
-		opt = select.appendChild( document.createElement( "option" ) );
-
-	// Setup
-	div = document.createElement( "div" );
-	div.setAttribute( "className", "t" );
-	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
-	a = div.getElementsByTagName( "a" )[ 0 ];
-
-	// Support: Windows Web Apps (WWA)
-	// `type` must use .setAttribute for WWA (#14901)
-	input.setAttribute( "type", "checkbox" );
-	div.appendChild( input );
-
-	a = div.getElementsByTagName( "a" )[ 0 ];
-
-	// First batch of tests.
-	a.style.cssText = "top:1px";
-
-	// Test setAttribute on camelCase class.
-	// If it works, we need attrFixes when doing get/setAttribute (ie6/7)
-	support.getSetAttribute = div.className !== "t";
-
-	// Get the style information from getAttribute
-	// (IE uses .cssText instead)
-	support.style = /top/.test( a.getAttribute( "style" ) );
-
-	// Make sure that URLs aren't manipulated
-	// (IE normalizes it by default)
-	support.hrefNormalized = a.getAttribute( "href" ) === "/a";
-
-	// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
-	support.checkOn = !!input.value;
-
-	// Make sure that a selected-by-default option has a working selected property.
-	// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
-	support.optSelected = opt.selected;
-
-	// Tests for enctype support on a form (#6743)
-	support.enctype = !!document.createElement( "form" ).enctype;
-
-	// Make sure that the options inside disabled selects aren't marked as disabled
-	// (WebKit marks them as disabled)
-	select.disabled = true;
-	support.optDisabled = !opt.disabled;
-
-	// Support: IE8 only
-	// Check if we can trust getAttribute("value")
-	input = document.createElement( "input" );
-	input.setAttribute( "value", "" );
-	support.input = input.getAttribute( "value" ) === "";
-
-	// Check if an input maintains its value after becoming a radio
-	input.value = "t";
-	input.setAttribute( "type", "radio" );
-	support.radioValue = input.value === "t";
-} )();
-
-
-var rreturn = /\r/g;
-
-jQuery.fn.extend( {
-	val: function( value ) {
-		var hooks, ret, isFunction,
-			elem = this[ 0 ];
-
-		if ( !arguments.length ) {
-			if ( elem ) {
-				hooks = jQuery.valHooks[ elem.type ] ||
-					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
-
-				if (
-					hooks &&
-					"get" in hooks &&
-					( ret = hooks.get( elem, "value" ) ) !== undefined
-				) {
-					return ret;
-				}
-
-				ret = elem.value;
-
-				return typeof ret === "string" ?
-
-					// handle most common string cases
-					ret.replace( rreturn, "" ) :
-
-					// handle cases where value is null/undef or number
-					ret == null ? "" : ret;
-			}
-
-			return;
-		}
-
-		isFunction = jQuery.isFunction( value );
-
-		return this.each( function( i ) {
-			var val;
-
-			if ( this.nodeType !== 1 ) {
-				return;
-			}
-
-			if ( isFunction ) {
-				val = value.call( this, i, jQuery( this ).val() );
-			} else {
-				val = value;
-			}
-
-			// Treat null/undefined as ""; convert numbers to string
-			if ( val == null ) {
-				val = "";
-			} else if ( typeof val === "number" ) {
-				val += "";
-			} else if ( jQuery.isArray( val ) ) {
-				val = jQuery.map( val, function( value ) {
-					return value == null ? "" : value + "";
-				} );
-			}
-
-			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
-
-			// If set returns undefined, fall back to normal setting
-			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
-				this.value = val;
-			}
-		} );
-	}
-} );
-
-jQuery.extend( {
-	valHooks: {
-		option: {
-			get: function( elem ) {
-				var val = jQuery.find.attr( elem, "value" );
-				return val != null ?
-					val :
-
-					// Support: IE10-11+
-					// option.text throws exceptions (#14686, #14858)
-					jQuery.trim( jQuery.text( elem ) );
-			}
-		},
-		select: {
-			get: function( elem ) {
-				var value, option,
-					options = elem.options,
-					index = elem.selectedIndex,
-					one = elem.type === "select-one" || index < 0,
-					values = one ? null : [],
-					max = one ? index + 1 : options.length,
-					i = index < 0 ?
-						max :
-						one ? index : 0;
-
-				// Loop through all the selected options
-				for ( ; i < max; i++ ) {
-					option = options[ i ];
-
-					// oldIE doesn't update selected after form reset (#2551)
-					if ( ( option.selected || i === index ) &&
-
-							// Don't return options that are disabled or in a disabled optgroup
-							( support.optDisabled ?
-								!option.disabled :
-								option.getAttribute( "disabled" ) === null ) &&
-							( !option.parentNode.disabled ||
-								!jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
-
-						// Get the specific value for the option
-						value = jQuery( option ).val();
-
-						// We don't need an array for one selects
-						if ( one ) {
-							return value;
-						}
-
-						// Multi-Selects return an array
-						values.push( value );
-					}
-				}
-
-				return values;
-			},
-
-			set: function( elem, value ) {
-				var optionSet, option,
-					options = elem.options,
-					values = jQuery.makeArray( value ),
-					i = options.length;
-
-				while ( i-- ) {
-					option = options[ i ];
-
-					if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
-
-						// Support: IE6
-						// When new option element is added to select box we need to
-						// force reflow of newly added node in order to workaround delay
-						// of initialization properties
-						try {
-							option.selected = optionSet = true;
-
-						} catch ( _ ) {
-
-							// Will be executed only in IE6
-							option.scrollHeight;
-						}
-
-					} else {
-						option.selected = false;
-					}
-				}
-
-				// Force browsers to behave consistently when non-matching value is set
-				if ( !optionSet ) {
-					elem.selectedIndex = -1;
-				}
-
-				return options;
-			}
-		}
-	}
-} );
-
-// Radios and checkboxes getter/setter
-jQuery.each( [ "radio", "checkbox" ], function() {
-	jQuery.valHooks[ this ] = {
-		set: function( elem, value ) {
-			if ( jQuery.isArray( value ) ) {
-				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
-			}
-		}
-	};
-	if ( !support.checkOn ) {
-		jQuery.valHooks[ this ].get = function( elem ) {
-			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
-		};
-	}
-} );
-
-
-
-
-var nodeHook, boolHook,
-	attrHandle = jQuery.expr.attrHandle,
-	ruseDefault = /^(?:checked|selected)$/i,
-	getSetAttribute = support.getSetAttribute,
-	getSetInput = support.input;
-
-jQuery.fn.extend( {
-	attr: function( name, value ) {
-		return access( this, jQuery.attr, name, value, arguments.length > 1 );
-	},
-
-	removeAttr: function( name ) {
-		return this.each( function() {
-			jQuery.removeAttr( this, name );
-		} );
-	}
-} );
-
-jQuery.extend( {
-	attr: function( elem, name, value ) {
-		var ret, hooks,
-			nType = elem.nodeType;
-
-		// Don't get/set attributes on text, comment and attribute nodes
-		if ( nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		// Fallback to prop when attributes are not supported
-		if ( typeof elem.getAttribute === "undefined" ) {
-			return jQuery.prop( elem, name, value );
-		}
-
-		// All attributes are lowercase
-		// Grab necessary hook if one is defined
-		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-			name = name.toLowerCase();
-			hooks = jQuery.attrHooks[ name ] ||
-				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
-		}
-
-		if ( value !== undefined ) {
-			if ( value === null ) {
-				jQuery.removeAttr( elem, name );
-				return;
-			}
-
-			if ( hooks && "set" in hooks &&
-				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
-				return ret;
-			}
-
-			elem.setAttribute( name, value + "" );
-			return value;
-		}
-
-		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
-			return ret;
-		}
-
-		ret = jQuery.find.attr( elem, name );
-
-		// Non-existent attributes return null, we normalize to undefined
-		return ret == null ? undefined : ret;
-	},
-
-	attrHooks: {
-		type: {
-			set: function( elem, value ) {
-				if ( !support.radioValue && value === "radio" &&
-					jQuery.nodeName( elem, "input" ) ) {
-
-					// Setting the type on a radio button after the value resets the value in IE8-9
-					// Reset value to default in case type is set after value during creation
-					var val = elem.value;
-					elem.setAttribute( "type", value );
-					if ( val ) {
-						elem.value = val;
-					}
-					return value;
-				}
-			}
-		}
-	},
-
-	removeAttr: function( elem, value ) {
-		var name, propName,
-			i = 0,
-			attrNames = value && value.match( rnotwhite );
-
-		if ( attrNames && elem.nodeType === 1 ) {
-			while ( ( name = attrNames[ i++ ] ) ) {
-				propName = jQuery.propFix[ name ] || name;
-
-				// Boolean attributes get special treatment (#10870)
-				if ( jQuery.expr.match.bool.test( name ) ) {
-
-					// Set corresponding property to false
-					if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-						elem[ propName ] = false;
-
-					// Support: IE<9
-					// Also clear defaultChecked/defaultSelected (if appropriate)
-					} else {
-						elem[ jQuery.camelCase( "default-" + name ) ] =
-							elem[ propName ] = false;
-					}
-
-				// See #9699 for explanation of this approach (setting first, then removal)
-				} else {
-					jQuery.attr( elem, name, "" );
-				}
-
-				elem.removeAttribute( getSetAttribute ? name : propName );
-			}
-		}
-	}
-} );
-
-// Hooks for boolean attributes
-boolHook = {
-	set: function( elem, value, name ) {
-		if ( value === false ) {
-
-			// Remove boolean attributes when set to false
-			jQuery.removeAttr( elem, name );
-		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-
-			// IE<8 needs the *property* name
-			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
-
-		} else {
-
-			// Support: IE<9
-			// Use defaultChecked and defaultSelected for oldIE
-			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
-		}
-		return name;
-	}
-};
-
-jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
-	var getter = attrHandle[ name ] || jQuery.find.attr;
-
-	if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
-		attrHandle[ name ] = function( elem, name, isXML ) {
-			var ret, handle;
-			if ( !isXML ) {
-
-				// Avoid an infinite loop by temporarily removing this function from the getter
-				handle = attrHandle[ name ];
-				attrHandle[ name ] = ret;
-				ret = getter( elem, name, isXML ) != null ?
-					name.toLowerCase() :
-					null;
-				attrHandle[ name ] = handle;
-			}
-			return ret;
-		};
-	} else {
-		attrHandle[ name ] = function( elem, name, isXML ) {
-			if ( !isXML ) {
-				return elem[ jQuery.camelCase( "default-" + name ) ] ?
-					name.toLowerCase() :
-					null;
-			}
-		};
-	}
-} );
-
-// fix oldIE attroperties
-if ( !getSetInput || !getSetAttribute ) {
-	jQuery.attrHooks.value = {
-		set: function( elem, value, name ) {
-			if ( jQuery.nodeName( elem, "input" ) ) {
-
-				// Does not return so that setAttribute is also used
-				elem.defaultValue = value;
-			} else {
-
-				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
-				return nodeHook && nodeHook.set( elem, value, name );
-			}
-		}
-	};
-}
-
-// IE6/7 do not support getting/setting some attributes with get/setAttribute
-if ( !getSetAttribute ) {
-
-	// Use this for any attribute in IE6/7
-	// This fixes almost every IE6/7 issue
-	nodeHook = {
-		set: function( elem, value, name ) {
-
-			// Set the existing or create a new attribute node
-			var ret = elem.getAttributeNode( name );
-			if ( !ret ) {
-				elem.setAttributeNode(
-					( ret = elem.ownerDocument.createAttribute( name ) )
-				);
-			}
-
-			ret.value = value += "";
-
-			// Break association with cloned elements by also using setAttribute (#9646)
-			if ( name === "value" || value === elem.getAttribute( name ) ) {
-				return value;
-			}
-		}
-	};
-
-	// Some attributes are constructed with empty-string values when not defined
-	attrHandle.id = attrHandle.name = attrHandle.coords =
-		function( elem, name, isXML ) {
-			var ret;
-			if ( !isXML ) {
-				return ( ret = elem.getAttributeNode( name ) ) && ret.value !== "" ?
-					ret.value :
-					null;
-			}
-		};
-
-	// Fixing value retrieval on a button requires this module
-	jQuery.valHooks.button = {
-		get: function( elem, name ) {
-			var ret = elem.getAttributeNode( name );
-			if ( ret && ret.specified ) {
-				return ret.value;
-			}
-		},
-		set: nodeHook.set
-	};
-
-	// Set contenteditable to false on removals(#10429)
-	// Setting to empty string throws an error as an invalid value
-	jQuery.attrHooks.contenteditable = {
-		set: function( elem, value, name ) {
-			nodeHook.set( elem, value === "" ? false : value, name );
-		}
-	};
-
-	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
-	// This is for removals
-	jQuery.each( [ "width", "height" ], function( i, name ) {
-		jQuery.attrHooks[ name ] = {
-			set: function( elem, value ) {
-				if ( value === "" ) {
-					elem.setAttribute( name, "auto" );
-					return value;
-				}
-			}
-		};
-	} );
-}
-
-if ( !support.style ) {
-	jQuery.attrHooks.style = {
-		get: function( elem ) {
-
-			// Return undefined in the case of empty string
-			// Note: IE uppercases css property names, but if we were to .toLowerCase()
-			// .cssText, that would destroy case sensitivity in URL's, like in "background"
-			return elem.style.cssText || undefined;
-		},
-		set: function( elem, value ) {
-			return ( elem.style.cssText = value + "" );
-		}
-	};
-}
-
-
-
-
-var rfocusable = /^(?:input|select|textarea|button|object)$/i,
-	rclickable = /^(?:a|area)$/i;
-
-jQuery.fn.extend( {
-	prop: function( name, value ) {
-		return access( this, jQuery.prop, name, value, arguments.length > 1 );
-	},
-
-	removeProp: function( name ) {
-		name = jQuery.propFix[ name ] || name;
-		return this.each( function() {
-
-			// try/catch handles cases where IE balks (such as removing a property on window)
-			try {
-				this[ name ] = undefined;
-				delete this[ name ];
-			} catch ( e ) {}
-		} );
-	}
-} );
-
-jQuery.extend( {
-	prop: function( elem, name, value ) {
-		var ret, hooks,
-			nType = elem.nodeType;
-
-		// Don't get/set properties on text, comment and attribute nodes
-		if ( nType === 3 || nType === 8 || nType === 2 ) {
-			return;
-		}
-
-		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
-
-			// Fix name and attach hooks
-			name = jQuery.propFix[ name ] || name;
-			hooks = jQuery.propHooks[ name ];
-		}
-
-		if ( value !== undefined ) {
-			if ( hooks && "set" in hooks &&
-				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
-				return ret;
-			}
-
-			return ( elem[ name ] = value );
-		}
-
-		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
-			return ret;
-		}
-
-		return elem[ name ];
-	},
-
-	propHooks: {
-		tabIndex: {
-			get: function( elem ) {
-
-				// elem.tabIndex doesn't always return the
-				// correct value when it hasn't been explicitly set
-				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
-				// Use proper attribute retrieval(#12072)
-				var tabindex = jQuery.find.attr( elem, "tabindex" );
-
-				return tabindex ?
-					parseInt( tabindex, 10 ) :
-					rfocusable.test( elem.nodeName ) ||
-						rclickable.test( elem.nodeName ) && elem.href ?
-							0 :
-							-1;
-			}
-		}
-	},
-
-	propFix: {
-		"for": "htmlFor",
-		"class": "className"
-	}
-} );
-
-// Some attributes require a special call on IE
-// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
-if ( !support.hrefNormalized ) {
-
-	// href/src property should get the full normalized URL (#10299/#12915)
-	jQuery.each( [ "href", "src" ], function( i, name ) {
-		jQuery.propHooks[ name ] = {
-			get: function( elem ) {
-				return elem.getAttribute( name, 4 );
-			}
-		};
-	} );
-}
-
-// Support: Safari, IE9+
-// mis-reports the default selected property of an option
-// Accessing the parent's selectedIndex property fixes it
-if ( !support.optSelected ) {
-	jQuery.propHooks.selected = {
-		get: function( elem ) {
-			var parent = elem.parentNode;
-
-			if ( parent ) {
-				parent.selectedIndex;
-
-				// Make sure that it also works with optgroups, see #5701
-				if ( parent.parentNode ) {
-					parent.parentNode.selectedIndex;
-				}
-			}
-			return null;
-		}
-	};
-}
-
-jQuery.each( [
-	"tabIndex",
-	"readOnly",
-	"maxLength",
-	"cellSpacing",
-	"cellPadding",
-	"rowSpan",
-	"colSpan",
-	"useMap",
-	"frameBorder",
-	"contentEditable"
-], function() {
-	jQuery.propFix[ this.toLowerCase() ] = this;
-} );
-
-// IE6/7 call enctype encoding
-if ( !support.enctype ) {
-	jQuery.propFix.enctype = "encoding";
-}
-
-
-
-
-var rclass = /[\t\r\n\f]/g;
-
-function getClass( elem ) {
-	return jQuery.attr( elem, "class" ) || "";
-}
-
-jQuery.fn.extend( {
-	addClass: function( value ) {
-		var classes, elem, cur, curValue, clazz, j, finalValue,
-			i = 0;
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each( function( j ) {
-				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
-			} );
-		}
-
-		if ( typeof value === "string" && value ) {
-			classes = value.match( rnotwhite ) || [];
-
-			while ( ( elem = this[ i++ ] ) ) {
-				curValue = getClass( elem );
-				cur = elem.nodeType === 1 &&
-					( " " + curValue + " " ).replace( rclass, " " );
-
-				if ( cur ) {
-					j = 0;
-					while ( ( clazz = classes[ j++ ] ) ) {
-						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
-							cur += clazz + " ";
-						}
-					}
-
-					// only assign if different to avoid unneeded rendering.
-					finalValue = jQuery.trim( cur );
-					if ( curValue !== finalValue ) {
-						jQuery.attr( elem, "class", finalValue );
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	removeClass: function( value ) {
-		var classes, elem, cur, curValue, clazz, j, finalValue,
-			i = 0;
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each( function( j ) {
-				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
-			} );
-		}
-
-		if ( !arguments.length ) {
-			return this.attr( "class", "" );
-		}
-
-		if ( typeof value === "string" && value ) {
-			classes = value.match( rnotwhite ) || [];
-
-			while ( ( elem = this[ i++ ] ) ) {
-				curValue = getClass( elem );
-
-				// This expression is here for better compressibility (see addClass)
-				cur = elem.nodeType === 1 &&
-					( " " + curValue + " " ).replace( rclass, " " );
-
-				if ( cur ) {
-					j = 0;
-					while ( ( clazz = classes[ j++ ] ) ) {
-
-						// Remove *all* instances
-						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
-							cur = cur.replace( " " + clazz + " ", " " );
-						}
-					}
-
-					// Only assign if different to avoid unneeded rendering.
-					finalValue = jQuery.trim( cur );
-					if ( curValue !== finalValue ) {
-						jQuery.attr( elem, "class", finalValue );
-					}
-				}
-			}
-		}
-
-		return this;
-	},
-
-	toggleClass: function( value, stateVal ) {
-		var type = typeof value;
-
-		if ( typeof stateVal === "boolean" && type === "string" ) {
-			return stateVal ? this.addClass( value ) : this.removeClass( value );
-		}
-
-		if ( jQuery.isFunction( value ) ) {
-			return this.each( function( i ) {
-				jQuery( this ).toggleClass(
-					value.call( this, i, getClass( this ), stateVal ),
-					stateVal
-				);
-			} );
-		}
-
-		return this.each( function() {
-			var className, i, self, classNames;
-
-			if ( type === "string" ) {
-
-				// Toggle individual class names
-				i = 0;
-				self = jQuery( this );
-				classNames = value.match( rnotwhite ) || [];
-
-				while ( ( className = classNames[ i++ ] ) ) {
-
-					// Check each className given, space separated list
-					if ( self.hasClass( className ) ) {
-						self.removeClass( className );
-					} else {
-						self.addClass( className );
-					}
-				}
-
-			// Toggle whole class name
-			} else if ( value === undefined || type === "boolean" ) {
-				className = getClass( this );
-				if ( className ) {
-
-					// store className if set
-					jQuery._data( this, "__className__", className );
-				}
-
-				// If the element has a class name or if we're passed "false",
-				// then remove the whole classname (if there was one, the above saved it).
-				// Otherwise bring back whatever was previously saved (if anything),
-				// falling back to the empty string if nothing was stored.
-				jQuery.attr( this, "class",
-					className || value === false ?
-					"" :
-					jQuery._data( this, "__className__" ) || ""
-				);
-			}
-		} );
-	},
-
-	hasClass: function( selector ) {
-		var className, elem,
-			i = 0;
-
-		className = " " + selector + " ";
-		while ( ( elem = this[ i++ ] ) ) {
-			if ( elem.nodeType === 1 &&
-				( " " + getClass( elem ) + " " ).replace( rclass, " " )
-					.indexOf( className ) > -1
-			) {
-				return true;
-			}
-		}
-
-		return false;
-	}
-} );
-
-
-
-
-// Return jQuery for attributes-only inclusion
-
-
-jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " +
-	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
-	"change select submit keydown keypress keyup error contextmenu" ).split( " " ),
-	function( i, name ) {
-
-	// Handle event binding
-	jQuery.fn[ name ] = function( data, fn ) {
-		return arguments.length > 0 ?
-			this.on( name, null, data, fn ) :
-			this.trigger( name );
-	};
-} );
-
-jQuery.fn.extend( {
-	hover: function( fnOver, fnOut ) {
-		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
-	}
-} );
-
-
-var location = window.location;
-
-var nonce = jQuery.now();
-
-var rquery = ( /\?/ );
-
-
-
-var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
-
-jQuery.parseJSON = function( data ) {
-
-	// Attempt to parse using the native JSON parser first
-	if ( window.JSON && window.JSON.parse ) {
-
-		// Support: Android 2.3
-		// Workaround failure to string-cast null input
-		return window.JSON.parse( data + "" );
-	}
-
-	var requireNonComma,
-		depth = null,
-		str = jQuery.trim( data + "" );
-
-	// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
-	// after removing valid tokens
-	return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
-
-		// Force termination if we see a misplaced comma
-		if ( requireNonComma && comma ) {
-			depth = 0;
-		}
-
-		// Perform no more replacements after returning to outermost depth
-		if ( depth === 0 ) {
-			return token;
-		}
-
-		// Commas must not follow "[", "{", or ","
-		requireNonComma = open || comma;
-
-		// Determine new depth
-		// array/object open ("[" or "{"): depth += true - false (increment)
-		// array/object close ("]" or "}"): depth += false - true (decrement)
-		// other cases ("," or primitive): depth += true - true (numeric cast)
-		depth += !close - !open;
-
-		// Remove this token
-		return "";
-	} ) ) ?
-		( Function( "return " + str ) )() :
-		jQuery.error( "Invalid JSON: " + data );
-};
-
-
-// Cross-browser xml parsing
-jQuery.parseXML = function( data ) {
-	var xml, tmp;
-	if ( !data || typeof data !== "string" ) {
-		return null;
-	}
-	try {
-		if ( window.DOMParser ) { // Standard
-			tmp = new window.DOMParser();
-			xml = tmp.parseFromString( data, "text/xml" );
-		} else { // IE
-			xml = new window.ActiveXObject( "Microsoft.XMLDOM" );
-			xml.async = "false";
-			xml.loadXML( data );
-		}
-	} catch ( e ) {
-		xml = undefined;
-	}
-	if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
-		jQuery.error( "Invalid XML: " + data );
-	}
-	return xml;
-};
-
-
-var
-	rhash = /#.*$/,
-	rts = /([?&])_=[^&]*/,
-
-	// IE leaves an \r character at EOL
-	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
-
-	// #7653, #8125, #8152: local protocol detection
-	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
-	rnoContent = /^(?:GET|HEAD)$/,
-	rprotocol = /^\/\//,
-	rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
-
-	/* Prefilters
-	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
-	 * 2) These are called:
-	 *    - BEFORE asking for a transport
-	 *    - AFTER param serialization (s.data is a string if s.processData is true)
-	 * 3) key is the dataType
-	 * 4) the catchall symbol "*" can be used
-	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
-	 */
-	prefilters = {},
-
-	/* Transports bindings
-	 * 1) key is the dataType
-	 * 2) the catchall symbol "*" can be used
-	 * 3) selection will start with transport dataType and THEN go to "*" if needed
-	 */
-	transports = {},
-
-	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
-	allTypes = "*/".concat( "*" ),
-
-	// Document location
-	ajaxLocation = location.href,
-
-	// Segment location into parts
-	ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
-
-// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
-function addToPrefiltersOrTransports( structure ) {
-
-	// dataTypeExpression is optional and defaults to "*"
-	return function( dataTypeExpression, func ) {
-
-		if ( typeof dataTypeExpression !== "string" ) {
-			func = dataTypeExpression;
-			dataTypeExpression = "*";
-		}
-
-		var dataType,
-			i = 0,
-			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
-
-		if ( jQuery.isFunction( func ) ) {
-
-			// For each dataType in the dataTypeExpression
-			while ( ( dataType = dataTypes[ i++ ] ) ) {
-
-				// Prepend if requested
-				if ( dataType.charAt( 0 ) === "+" ) {
-					dataType = dataType.slice( 1 ) || "*";
-					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
-
-				// Otherwise append
-				} else {
-					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
-				}
-			}
-		}
-	};
-}
-
-// Base inspection function for prefilters and transports
-function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
-
-	var inspected = {},
-		seekingTransport = ( structure === transports );
-
-	function inspect( dataType ) {
-		var selected;
-		inspected[ dataType ] = true;
-		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
-			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
-			if ( typeof dataTypeOrTransport === "string" &&
-				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
-
-				options.dataTypes.unshift( dataTypeOrTransport );
-				inspect( dataTypeOrTransport );
-				return false;
-			} else if ( seekingTransport ) {
-				return !( selected = dataTypeOrTransport );
-			}
-		} );
-		return selected;
-	}
-
-	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
-}
-
-// A special extend for ajax options
-// that takes "flat" options (not to be deep extended)
-// Fixes #9887
-function ajaxExtend( target, src ) {
-	var deep, key,
-		flatOptions = jQuery.ajaxSettings.flatOptions || {};
-
-	for ( key in src ) {
-		if ( src[ key ] !== undefined ) {
-			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
-		}
-	}
-	if ( deep ) {
-		jQuery.extend( true, target, deep );
-	}
-
-	return target;
-}
-
-/* Handles responses to an ajax request:
- * - finds the right dataType (mediates between content-type and expected dataType)
- * - returns the corresponding response
- */
-function ajaxHandleResponses( s, jqXHR, responses ) {
-	var firstDataType, ct, finalDataType, type,
-		contents = s.contents,
-		dataTypes = s.dataTypes;
-
-	// Remove auto dataType and get content-type in the process
-	while ( dataTypes[ 0 ] === "*" ) {
-		dataTypes.shift();
-		if ( ct === undefined ) {
-			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
-		}
-	}
-
-	// Check if we're dealing with a known content-type
-	if ( ct ) {
-		for ( type in contents ) {
-			if ( contents[ type ] && contents[ type ].test( ct ) ) {
-				dataTypes.unshift( type );
-				break;
-			}
-		}
-	}
-
-	// Check to see if we have a response for the expected dataType
-	if ( dataTypes[ 0 ] in responses ) {
-		finalDataType = dataTypes[ 0 ];
-	} else {
-
-		// Try convertible dataTypes
-		for ( type in responses ) {
-			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
-				finalDataType = type;
-				break;
-			}
-			if ( !firstDataType ) {
-				firstDataType = type;
-			}
-		}
-
-		// Or just use first one
-		finalDataType = finalDataType || firstDataType;
-	}
-
-	// If we found a dataType
-	// We add the dataType to the list if needed
-	// and return the corresponding response
-	if ( finalDataType ) {
-		if ( finalDataType !== dataTypes[ 0 ] ) {
-			dataTypes.unshift( finalDataType );
-		}
-		return responses[ finalDataType ];
-	}
-}
-
-/* Chain conversions given the request and the original response
- * Also sets the responseXXX fields on the jqXHR instance
- */
-function ajaxConvert( s, response, jqXHR, isSuccess ) {
-	var conv2, current, conv, tmp, prev,
-		converters = {},
-
-		// Work with a copy of dataTypes in case we need to modify it for conversion
-		dataTypes = s.dataTypes.slice();
-
-	// Create converters map with lowercased keys
-	if ( dataTypes[ 1 ] ) {
-		for ( conv in s.converters ) {
-			converters[ conv.toLowerCase() ] = s.converters[ conv ];
-		}
-	}
-
-	current = dataTypes.shift();
-
-	// Convert to each sequential dataType
-	while ( current ) {
-
-		if ( s.responseFields[ current ] ) {
-			jqXHR[ s.responseFields[ current ] ] = response;
-		}
-
-		// Apply the dataFilter if provided
-		if ( !prev && isSuccess && s.dataFilter ) {
-			response = s.dataFilter( response, s.dataType );
-		}
-
-		prev = current;
-		current = dataTypes.shift();
-
-		if ( current ) {
-
-			// There's only work to do if current dataType is non-auto
-			if ( current === "*" ) {
-
-				current = prev;
-
-			// Convert response if prev dataType is non-auto and differs from current
-			} else if ( prev !== "*" && prev !== current ) {
-
-				// Seek a direct converter
-				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
-
-				// If none found, seek a pair
-				if ( !conv ) {
-					for ( conv2 in converters ) {
-
-						// If conv2 outputs current
-						tmp = conv2.split( " " );
-						if ( tmp[ 1 ] === current ) {
-
-							// If prev can be converted to accepted input
-							conv = converters[ prev + " " + tmp[ 0 ] ] ||
-								converters[ "* " + tmp[ 0 ] ];
-							if ( conv ) {
-
-								// Condense equivalence converters
-								if ( conv === true ) {
-									conv = converters[ conv2 ];
-
-								// Otherwise, insert the intermediate dataType
-								} else if ( converters[ conv2 ] !== true ) {
-									current = tmp[ 0 ];
-									dataTypes.unshift( tmp[ 1 ] );
-								}
-								break;
-							}
-						}
-					}
-				}
-
-				// Apply converter (if not an equivalence)
-				if ( conv !== true ) {
-
-					// Unless errors are allowed to bubble, catch and return them
-					if ( conv && s[ "throws" ] ) { // jscs:ignore requireDotNotation
-						response = conv( response );
-					} else {
-						try {
-							response = conv( response );
-						} catch ( e ) {
-							return {
-								state: "parsererror",
-								error: conv ? e : "No conversion from " + prev + " to " + current
-							};
-						}
-					}
-				}
-			}
-		}
-	}
-
-	return { state: "success", data: response };
-}
-
-jQuery.extend( {
-
-	// Counter for holding the number of active queries
-	active: 0,
-
-	// Last-Modified header cache for next request
-	lastModified: {},
-	etag: {},
-
-	ajaxSettings: {
-		url: ajaxLocation,
-		type: "GET",
-		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
-		global: true,
-		processData: true,
-		async: true,
-		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
-		/*
-		timeout: 0,
-		data: null,
-		dataType: null,
-		username: null,
-		password: null,
-		cache: null,
-		throws: false,
-		traditional: false,
-		headers: {},
-		*/
-
-		accepts: {
-			"*": allTypes,
-			text: "text/plain",
-			html: "text/html",
-			xml: "application/xml, text/xml",
-			json: "application/json, text/javascript"
-		},
-
-		contents: {
-			xml: /\bxml\b/,
-			html: /\bhtml/,
-			json: /\bjson\b/
-		},
-
-		responseFields: {
-			xml: "responseXML",
-			text: "responseText",
-			json: "responseJSON"
-		},
-
-		// Data converters
-		// Keys separate source (or catchall "*") and destination types with a single space
-		converters: {
-
-			// Convert anything to text
-			"* text": String,
-
-			// Text to html (true = no transformation)
-			"text html": true,
-
-			// Evaluate text as a json expression
-			"text json": jQuery.parseJSON,
-
-			// Parse text as xml
-			"text xml": jQuery.parseXML
-		},
-
-		// For options that shouldn't be deep extended:
-		// you can add your own custom options here if
-		// and when you create one that shouldn't be
-		// deep extended (see ajaxExtend)
-		flatOptions: {
-			url: true,
-			context: true
-		}
-	},
-
-	// Creates a full fledged settings object into target
-	// with both ajaxSettings and settings fields.
-	// If target is omitted, writes into ajaxSettings.
-	ajaxSetup: function( target, settings ) {
-		return settings ?
-
-			// Building a settings object
-			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
-
-			// Extending ajaxSettings
-			ajaxExtend( jQuery.ajaxSettings, target );
-	},
-
-	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
-	ajaxTransport: addToPrefiltersOrTransports( transports ),
-
-	// Main method
-	ajax: function( url, options ) {
-
-		// If url is an object, simulate pre-1.5 signature
-		if ( typeof url === "object" ) {
-			options = url;
-			url = undefined;
-		}
-
-		// Force options to be an object
-		options = options || {};
-
-		var
-
-			// Cross-domain detection vars
-			parts,
-
-			// Loop variable
-			i,
-
-			// URL without anti-cache param
-			cacheURL,
-
-			// Response headers as string
-			responseHeadersString,
-
-			// timeout handle
-			timeoutTimer,
-
-			// To know if global events are to be dispatched
-			fireGlobals,
-
-			transport,
-
-			// Response headers
-			responseHeaders,
-
-			// Create the final options object
-			s = jQuery.ajaxSetup( {}, options ),
-
-			// Callbacks context
-			callbackContext = s.context || s,
-
-			// Context for global events is callbackContext if it is a DOM node or jQuery collection
-			globalEventContext = s.context &&
-				( callbackContext.nodeType || callbackContext.jquery ) ?
-					jQuery( callbackContext ) :
-					jQuery.event,
-
-			// Deferreds
-			deferred = jQuery.Deferred(),
-			completeDeferred = jQuery.Callbacks( "once memory" ),
-
-			// Status-dependent callbacks
-			statusCode = s.statusCode || {},
-
-			// Headers (they are sent all at once)
-			requestHeaders = {},
-			requestHeadersNames = {},
-
-			// The jqXHR state
-			state = 0,
-
-			// Default abort message
-			strAbort = "canceled",
-
-			// Fake xhr
-			jqXHR = {
-				readyState: 0,
-
-				// Builds headers hashtable if needed
-				getResponseHeader: function( key ) {
-					var match;
-					if ( state === 2 ) {
-						if ( !responseHeaders ) {
-							responseHeaders = {};
-							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
-								responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
-							}
-						}
-						match = responseHeaders[ key.toLowerCase() ];
-					}
-					return match == null ? null : match;
-				},
-
-				// Raw string
-				getAllResponseHeaders: function() {
-					return state === 2 ? responseHeadersString : null;
-				},
-
-				// Caches the header
-				setRequestHeader: function( name, value ) {
-					var lname = name.toLowerCase();
-					if ( !state ) {
-						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
-						requestHeaders[ name ] = value;
-					}
-					return this;
-				},
-
-				// Overrides response content-type header
-				overrideMimeType: function( type ) {
-					if ( !state ) {
-						s.mimeType = type;
-					}
-					return this;
-				},
-
-				// Status-dependent callbacks
-				statusCode: function( map ) {
-					var code;
-					if ( map ) {
-						if ( state < 2 ) {
-							for ( code in map ) {
-
-								// Lazy-add the new callback in a way that preserves old ones
-								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
-							}
-						} else {
-
-							// Execute the appropriate callbacks
-							jqXHR.always( map[ jqXHR.status ] );
-						}
-					}
-					return this;
-				},
-
-				// Cancel the request
-				abort: function( statusText ) {
-					var finalText = statusText || strAbort;
-					if ( transport ) {
-						transport.abort( finalText );
-					}
-					done( 0, finalText );
-					return this;
-				}
-			};
-
-		// Attach deferreds
-		deferred.promise( jqXHR ).complete = completeDeferred.add;
-		jqXHR.success = jqXHR.done;
-		jqXHR.error = jqXHR.fail;
-
-		// Remove hash character (#7531: and string promotion)
-		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
-		// Handle falsy url in the settings object (#10093: consistency with old signature)
-		// We also use the url parameter if available
-		s.url = ( ( url || s.url || ajaxLocation ) + "" )
-			.replace( rhash, "" )
-			.replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
-
-		// Alias method option to type as per ticket #12004
-		s.type = options.method || options.type || s.method || s.type;
-
-		// Extract dataTypes list
-		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
-
-		// A cross-domain request is in order when we have a protocol:host:port mismatch
-		if ( s.crossDomain == null ) {
-			parts = rurl.exec( s.url.toLowerCase() );
-			s.crossDomain = !!( parts &&
-				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
-					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
-						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
-			);
-		}
-
-		// Convert data if not already a string
-		if ( s.data && s.processData && typeof s.data !== "string" ) {
-			s.data = jQuery.param( s.data, s.traditional );
-		}
-
-		// Apply prefilters
-		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
-
-		// If request was aborted inside a prefilter, stop there
-		if ( state === 2 ) {
-			return jqXHR;
-		}
-
-		// We can fire global events as of now if asked to
-		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
-		fireGlobals = jQuery.event && s.global;
-
-		// Watch for a new set of requests
-		if ( fireGlobals && jQuery.active++ === 0 ) {
-			jQuery.event.trigger( "ajaxStart" );
-		}
-
-		// Uppercase the type
-		s.type = s.type.toUpperCase();
-
-		// Determine if request has content
-		s.hasContent = !rnoContent.test( s.type );
-
-		// Save the URL in case we're toying with the If-Modified-Since
-		// and/or If-None-Match header later on
-		cacheURL = s.url;
-
-		// More options handling for requests with no content
-		if ( !s.hasContent ) {
-
-			// If data is available, append data to url
-			if ( s.data ) {
-				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
-
-				// #9682: remove data so that it's not used in an eventual retry
-				delete s.data;
-			}
-
-			// Add anti-cache in url if needed
-			if ( s.cache === false ) {
-				s.url = rts.test( cacheURL ) ?
-
-					// If there is already a '_' parameter, set its value
-					cacheURL.replace( rts, "$1_=" + nonce++ ) :
-
-					// Otherwise add one to the end
-					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
-			}
-		}
-
-		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-		if ( s.ifModified ) {
-			if ( jQuery.lastModified[ cacheURL ] ) {
-				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
-			}
-			if ( jQuery.etag[ cacheURL ] ) {
-				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
-			}
-		}
-
-		// Set the correct header, if data is being sent
-		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
-			jqXHR.setRequestHeader( "Content-Type", s.contentType );
-		}
-
-		// Set the Accepts header for the server, depending on the dataType
-		jqXHR.setRequestHeader(
-			"Accept",
-			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
-				s.accepts[ s.dataTypes[ 0 ] ] +
-					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
-				s.accepts[ "*" ]
-		);
-
-		// Check for headers option
-		for ( i in s.headers ) {
-			jqXHR.setRequestHeader( i, s.headers[ i ] );
-		}
-
-		// Allow custom headers/mimetypes and early abort
-		if ( s.beforeSend &&
-			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
-
-			// Abort if not done already and return
-			return jqXHR.abort();
-		}
-
-		// aborting is no longer a cancellation
-		strAbort = "abort";
-
-		// Install callbacks on deferreds
-		for ( i in { success: 1, error: 1, complete: 1 } ) {
-			jqXHR[ i ]( s[ i ] );
-		}
-
-		// Get transport
-		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
-
-		// If no transport, we auto-abort
-		if ( !transport ) {
-			done( -1, "No Transport" );
-		} else {
-			jqXHR.readyState = 1;
-
-			// Send global event
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
-			}
-
-			// If request was aborted inside ajaxSend, stop there
-			if ( state === 2 ) {
-				return jqXHR;
-			}
-
-			// Timeout
-			if ( s.async && s.timeout > 0 ) {
-				timeoutTimer = window.setTimeout( function() {
-					jqXHR.abort( "timeout" );
-				}, s.timeout );
-			}
-
-			try {
-				state = 1;
-				transport.send( requestHeaders, done );
-			} catch ( e ) {
-
-				// Propagate exception as error if not done
-				if ( state < 2 ) {
-					done( -1, e );
-
-				// Simply rethrow otherwise
-				} else {
-					throw e;
-				}
-			}
-		}
-
-		// Callback for when everything is done
-		function done( status, nativeStatusText, responses, headers ) {
-			var isSuccess, success, error, response, modified,
-				statusText = nativeStatusText;
-
-			// Called once
-			if ( state === 2 ) {
-				return;
-			}
-
-			// State is "done" now
-			state = 2;
-
-			// Clear timeout if it exists
-			if ( timeoutTimer ) {
-				window.clearTimeout( timeoutTimer );
-			}
-
-			// Dereference transport for early garbage collection
-			// (no matter how long the jqXHR object will be used)
-			transport = undefined;
-
-			// Cache response headers
-			responseHeadersString = headers || "";
-
-			// Set readyState
-			jqXHR.readyState = status > 0 ? 4 : 0;
-
-			// Determine if successful
-			isSuccess = status >= 200 && status < 300 || status === 304;
-
-			// Get response data
-			if ( responses ) {
-				response = ajaxHandleResponses( s, jqXHR, responses );
-			}
-
-			// Convert no matter what (that way responseXXX fields are always set)
-			response = ajaxConvert( s, response, jqXHR, isSuccess );
-
-			// If successful, handle type chaining
-			if ( isSuccess ) {
-
-				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
-				if ( s.ifModified ) {
-					modified = jqXHR.getResponseHeader( "Last-Modified" );
-					if ( modified ) {
-						jQuery.lastModified[ cacheURL ] = modified;
-					}
-					modified = jqXHR.getResponseHeader( "etag" );
-					if ( modified ) {
-						jQuery.etag[ cacheURL ] = modified;
-					}
-				}
-
-				// if no content
-				if ( status === 204 || s.type === "HEAD" ) {
-					statusText = "nocontent";
-
-				// if not modified
-				} else if ( status === 304 ) {
-					statusText = "notmodified";
-
-				// If we have data, let's convert it
-				} else {
-					statusText = response.state;
-					success = response.data;
-					error = response.error;
-					isSuccess = !error;
-				}
-			} else {
-
-				// We extract error from statusText
-				// then normalize statusText and status for non-aborts
-				error = statusText;
-				if ( status || !statusText ) {
-					statusText = "error";
-					if ( status < 0 ) {
-						status = 0;
-					}
-				}
-			}
-
-			// Set data for the fake xhr object
-			jqXHR.status = status;
-			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
-
-			// Success/Error
-			if ( isSuccess ) {
-				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
-			} else {
-				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
-			}
-
-			// Status-dependent callbacks
-			jqXHR.statusCode( statusCode );
-			statusCode = undefined;
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
-					[ jqXHR, s, isSuccess ? success : error ] );
-			}
-
-			// Complete
-			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
-
-			if ( fireGlobals ) {
-				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
-
-				// Handle the global AJAX counter
-				if ( !( --jQuery.active ) ) {
-					jQuery.event.trigger( "ajaxStop" );
-				}
-			}
-		}
-
-		return jqXHR;
-	},
-
-	getJSON: function( url, data, callback ) {
-		return jQuery.get( url, data, callback, "json" );
-	},
-
-	getScript: function( url, callback ) {
-		return jQuery.get( url, undefined, callback, "script" );
-	}
-} );
-
-jQuery.each( [ "get", "post" ], function( i, method ) {
-	jQuery[ method ] = function( url, data, callback, type ) {
-
-		// shift arguments if data argument was omitted
-		if ( jQuery.isFunction( data ) ) {
-			type = type || callback;
-			callback = data;
-			data = undefined;
-		}
-
-		// The url can be an options object (which then must have .url)
-		return jQuery.ajax( jQuery.extend( {
-			url: url,
-			type: method,
-			dataType: type,
-			data: data,
-			success: callback
-		}, jQuery.isPlainObject( url ) && url ) );
-	};
-} );
-
-
-jQuery._evalUrl = function( url ) {
-	return jQuery.ajax( {
-		url: url,
-
-		// Make this explicit, since user can override this through ajaxSetup (#11264)
-		type: "GET",
-		dataType: "script",
-		cache: true,
-		async: false,
-		global: false,
-		"throws": true
-	} );
-};
-
-
-jQuery.fn.extend( {
-	wrapAll: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each( function( i ) {
-				jQuery( this ).wrapAll( html.call( this, i ) );
-			} );
-		}
-
-		if ( this[ 0 ] ) {
-
-			// The elements to wrap the target around
-			var wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
-
-			if ( this[ 0 ].parentNode ) {
-				wrap.insertBefore( this[ 0 ] );
-			}
-
-			wrap.map( function() {
-				var elem = this;
-
-				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
-					elem = elem.firstChild;
-				}
-
-				return elem;
-			} ).append( this );
-		}
-
-		return this;
-	},
-
-	wrapInner: function( html ) {
-		if ( jQuery.isFunction( html ) ) {
-			return this.each( function( i ) {
-				jQuery( this ).wrapInner( html.call( this, i ) );
-			} );
-		}
-
-		return this.each( function() {
-			var self = jQuery( this ),
-				contents = self.contents();
-
-			if ( contents.length ) {
-				contents.wrapAll( html );
-
-			} else {
-				self.append( html );
-			}
-		} );
-	},
-
-	wrap: function( html ) {
-		var isFunction = jQuery.isFunction( html );
-
-		return this.each( function( i ) {
-			jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
-		} );
-	},
-
-	unwrap: function() {
-		return this.parent().each( function() {
-			if ( !jQuery.nodeName( this, "body" ) ) {
-				jQuery( this ).replaceWith( this.childNodes );
-			}
-		} ).end();
-	}
-} );
-
-
-function getDisplay( elem ) {
-	return elem.style && elem.style.display || jQuery.css( elem, "display" );
-}
-
-function filterHidden( elem ) {
-	while ( elem && elem.nodeType === 1 ) {
-		if ( getDisplay( elem ) === "none" || elem.type === "hidden" ) {
-			return true;
-		}
-		elem = elem.parentNode;
-	}
-	return false;
-}
-
-jQuery.expr.filters.hidden = function( elem ) {
-
-	// Support: Opera <= 12.12
-	// Opera reports offsetWidths and offsetHeights less than zero on some elements
-	return support.reliableHiddenOffsets() ?
-		( elem.offsetWidth <= 0 && elem.offsetHeight <= 0 &&
-			!elem.getClientRects().length ) :
-			filterHidden( elem );
-};
-
-jQuery.expr.filters.visible = function( elem ) {
-	return !jQuery.expr.filters.hidden( elem );
-};
-
-
-
-
-var r20 = /%20/g,
-	rbracket = /\[\]$/,
-	rCRLF = /\r?\n/g,
-	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
-	rsubmittable = /^(?:input|select|textarea|keygen)/i;
-
-function buildParams( prefix, obj, traditional, add ) {
-	var name;
-
-	if ( jQuery.isArray( obj ) ) {
-
-		// Serialize array item.
-		jQuery.each( obj, function( i, v ) {
-			if ( traditional || rbracket.test( prefix ) ) {
-
-				// Treat each array item as a scalar.
-				add( prefix, v );
-
-			} else {
-
-				// Item is non-scalar (array or object), encode its numeric index.
-				buildParams(
-					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
-					v,
-					traditional,
-					add
-				);
-			}
-		} );
-
-	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
-
-		// Serialize object item.
-		for ( name in obj ) {
-			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
-		}
-
-	} else {
-
-		// Serialize scalar item.
-		add( prefix, obj );
-	}
-}
-
-// Serialize an array of form elements or a set of
-// key/values into a query string
-jQuery.param = function( a, traditional ) {
-	var prefix,
-		s = [],
-		add = function( key, value ) {
-
-			// If value is a function, invoke it and return its value
-			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
-			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
-		};
-
-	// Set traditional to true for jQuery <= 1.3.2 behavior.
-	if ( traditional === undefined ) {
-		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
-	}
-
-	// If an array was passed in, assume that it is an array of form elements.
-	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
-
-		// Serialize the form elements
-		jQuery.each( a, function() {
-			add( this.name, this.value );
-		} );
-
-	} else {
-
-		// If traditional, encode the "old" way (the way 1.3.2 or older
-		// did it), otherwise encode params recursively.
-		for ( prefix in a ) {
-			buildParams( prefix, a[ prefix ], traditional, add );
-		}
-	}
-
-	// Return the resulting serialization
-	return s.join( "&" ).replace( r20, "+" );
-};
-
-jQuery.fn.extend( {
-	serialize: function() {
-		return jQuery.param( this.serializeArray() );
-	},
-	serializeArray: function() {
-		return this.map( function() {
-
-			// Can add propHook for "elements" to filter or add form elements
-			var elements = jQuery.prop( this, "elements" );
-			return elements ? jQuery.makeArray( elements ) : this;
-		} )
-		.filter( function() {
-			var type = this.type;
-
-			// Use .is(":disabled") so that fieldset[disabled] works
-			return this.name && !jQuery( this ).is( ":disabled" ) &&
-				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
-				( this.checked || !rcheckableType.test( type ) );
-		} )
-		.map( function( i, elem ) {
-			var val = jQuery( this ).val();
-
-			return val == null ?
-				null :
-				jQuery.isArray( val ) ?
-					jQuery.map( val, function( val ) {
-						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-					} ) :
-					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
-		} ).get();
-	}
-} );
-
-
-// Create the request object
-// (This is still attached to ajaxSettings for backward compatibility)
-jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
-
-	// Support: IE6-IE8
-	function() {
-
-		// XHR cannot access local files, always use ActiveX for that case
-		if ( this.isLocal ) {
-			return createActiveXHR();
-		}
-
-		// Support: IE 9-11
-		// IE seems to error on cross-domain PATCH requests when ActiveX XHR
-		// is used. In IE 9+ always use the native XHR.
-		// Note: this condition won't catch Edge as it doesn't define
-		// document.documentMode but it also doesn't support ActiveX so it won't
-		// reach this code.
-		if ( document.documentMode > 8 ) {
-			return createStandardXHR();
-		}
-
-		// Support: IE<9
-		// oldIE XHR does not support non-RFC2616 methods (#13240)
-		// See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
-		// and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
-		// Although this check for six methods instead of eight
-		// since IE also does not support "trace" and "connect"
-		return /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
-			createStandardXHR() || createActiveXHR();
-	} :
-
-	// For all other browsers, use the standard XMLHttpRequest object
-	createStandardXHR;
-
-var xhrId = 0,
-	xhrCallbacks = {},
-	xhrSupported = jQuery.ajaxSettings.xhr();
-
-// Support: IE<10
-// Open requests must be manually aborted on unload (#5280)
-// See https://support.microsoft.com/kb/2856746 for more info
-if ( window.attachEvent ) {
-	window.attachEvent( "onunload", function() {
-		for ( var key in xhrCallbacks ) {
-			xhrCallbacks[ key ]( undefined, true );
-		}
-	} );
-}
-
-// Determine support properties
-support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
-xhrSupported = support.ajax = !!xhrSupported;
-
-// Create transport if the browser can provide an xhr
-if ( xhrSupported ) {
-
-	jQuery.ajaxTransport( function( options ) {
-
-		// Cross domain only allowed if supported through XMLHttpRequest
-		if ( !options.crossDomain || support.cors ) {
-
-			var callback;
-
-			return {
-				send: function( headers, complete ) {
-					var i,
-						xhr = options.xhr(),
-						id = ++xhrId;
-
-					// Open the socket
-					xhr.open(
-						options.type,
-						options.url,
-						options.async,
-						options.username,
-						options.password
-					);
-
-					// Apply custom fields if provided
-					if ( options.xhrFields ) {
-						for ( i in options.xhrFields ) {
-							xhr[ i ] = options.xhrFields[ i ];
-						}
-					}
-
-					// Override mime type if needed
-					if ( options.mimeType && xhr.overrideMimeType ) {
-						xhr.overrideMimeType( options.mimeType );
-					}
-
-					// X-Requested-With header
-					// For cross-domain requests, seeing as conditions for a preflight are
-					// akin to a jigsaw puzzle, we simply never set it to be sure.
-					// (it can always be set on a per-request basis or even using ajaxSetup)
-					// For same-domain requests, won't change header if already provided.
-					if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
-						headers[ "X-Requested-With" ] = "XMLHttpRequest";
-					}
-
-					// Set headers
-					for ( i in headers ) {
-
-						// Support: IE<9
-						// IE's ActiveXObject throws a 'Type Mismatch' exception when setting
-						// request header to a null-value.
-						//
-						// To keep consistent with other XHR implementations, cast the value
-						// to string and ignore `undefined`.
-						if ( headers[ i ] !== undefined ) {
-							xhr.setRequestHeader( i, headers[ i ] + "" );
-						}
-					}
-
-					// Do send the request
-					// This may raise an exception which is actually
-					// handled in jQuery.ajax (so no try/catch here)
-					xhr.send( ( options.hasContent && options.data ) || null );
-
-					// Listener
-					callback = function( _, isAbort ) {
-						var status, statusText, responses;
-
-						// Was never called and is aborted or complete
-						if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
-
-							// Clean up
-							delete xhrCallbacks[ id ];
-							callback = undefined;
-							xhr.onreadystatechange = jQuery.noop;
-
-							// Abort manually if needed
-							if ( isAbort ) {
-								if ( xhr.readyState !== 4 ) {
-									xhr.abort();
-								}
-							} else {
-								responses = {};
-								status = xhr.status;
-
-								// Support: IE<10
-								// Accessing binary-data responseText throws an exception
-								// (#11426)
-								if ( typeof xhr.responseText === "string" ) {
-									responses.text = xhr.responseText;
-								}
-
-								// Firefox throws an exception when accessing
-								// statusText for faulty cross-domain requests
-								try {
-									statusText = xhr.statusText;
-								} catch ( e ) {
-
-									// We normalize with Webkit giving an empty statusText
-									statusText = "";
-								}
-
-								// Filter status for non standard behaviors
-
-								// If the request is local and we have data: assume a success
-								// (success with no data won't get notified, that's the best we
-								// can do given current implementations)
-								if ( !status && options.isLocal && !options.crossDomain ) {
-									status = responses.text ? 200 : 404;
-
-								// IE - #1450: sometimes returns 1223 when it should be 204
-								} else if ( status === 1223 ) {
-									status = 204;
-								}
-							}
-						}
-
-						// Call complete if needed
-						if ( responses ) {
-							complete( status, statusText, responses, xhr.getAllResponseHeaders() );
-						}
-					};
-
-					// Do send the request
-					// `xhr.send` may raise an exception, but it will be
-					// handled in jQuery.ajax (so no try/catch here)
-					if ( !options.async ) {
-
-						// If we're in sync mode we fire the callback
-						callback();
-					} else if ( xhr.readyState === 4 ) {
-
-						// (IE6 & IE7) if it's in cache and has been
-						// retrieved directly we need to fire the callback
-						window.setTimeout( callback );
-					} else {
-
-						// Register the callback, but delay it in case `xhr.send` throws
-						// Add to the list of active xhr callbacks
-						xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
-					}
-				},
-
-				abort: function() {
-					if ( callback ) {
-						callback( undefined, true );
-					}
-				}
-			};
-		}
-	} );
-}
-
-// Functions to create xhrs
-function createStandardXHR() {
-	try {
-		return new window.XMLHttpRequest();
-	} catch ( e ) {}
-}
-
-function createActiveXHR() {
-	try {
-		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
-	} catch ( e ) {}
-}
-
-
-
-
-// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
-jQuery.ajaxPrefilter( function( s ) {
-	if ( s.crossDomain ) {
-		s.contents.script = false;
-	}
-} );
-
-// Install script dataType
-jQuery.ajaxSetup( {
-	accepts: {
-		script: "text/javascript, application/javascript, " +
-			"application/ecmascript, application/x-ecmascript"
-	},
-	contents: {
-		script: /\b(?:java|ecma)script\b/
-	},
-	converters: {
-		"text script": function( text ) {
-			jQuery.globalEval( text );
-			return text;
-		}
-	}
-} );
-
-// Handle cache's special case and global
-jQuery.ajaxPrefilter( "script", function( s ) {
-	if ( s.cache === undefined ) {
-		s.cache = false;
-	}
-	if ( s.crossDomain ) {
-		s.type = "GET";
-		s.global = false;
-	}
-} );
-
-// Bind script tag hack transport
-jQuery.ajaxTransport( "script", function( s ) {
-
-	// This transport only deals with cross domain requests
-	if ( s.crossDomain ) {
-
-		var script,
-			head = document.head || jQuery( "head" )[ 0 ] || document.documentElement;
-
-		return {
-
-			send: function( _, callback ) {
-
-				script = document.createElement( "script" );
-
-				script.async = true;
-
-				if ( s.scriptCharset ) {
-					script.charset = s.scriptCharset;
-				}
-
-				script.src = s.url;
-
-				// Attach handlers for all browsers
-				script.onload = script.onreadystatechange = function( _, isAbort ) {
-
-					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
-
-						// Handle memory leak in IE
-						script.onload = script.onreadystatechange = null;
-
-						// Remove the script
-						if ( script.parentNode ) {
-							script.parentNode.removeChild( script );
-						}
-
-						// Dereference the script
-						script = null;
-
-						// Callback if not abort
-						if ( !isAbort ) {
-							callback( 200, "success" );
-						}
-					}
-				};
-
-				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
-				// Use native DOM manipulation to avoid our domManip AJAX trickery
-				head.insertBefore( script, head.firstChild );
-			},
-
-			abort: function() {
-				if ( script ) {
-					script.onload( undefined, true );
-				}
-			}
-		};
-	}
-} );
-
-
-
-
-var oldCallbacks = [],
-	rjsonp = /(=)\?(?=&|$)|\?\?/;
-
-// Default jsonp settings
-jQuery.ajaxSetup( {
-	jsonp: "callback",
-	jsonpCallback: function() {
-		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
-		this[ callback ] = true;
-		return callback;
-	}
-} );
-
-// Detect, normalize options and install callbacks for jsonp requests
-jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
-
-	var callbackName, overwritten, responseContainer,
-		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
-			"url" :
-			typeof s.data === "string" &&
-				( s.contentType || "" )
-					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
-				rjsonp.test( s.data ) && "data"
-		);
-
-	// Handle iff the expected data type is "jsonp" or we have a parameter to set
-	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
-
-		// Get callback name, remembering preexisting value associated with it
-		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
-			s.jsonpCallback() :
-			s.jsonpCallback;
-
-		// Insert callback into url or form data
-		if ( jsonProp ) {
-			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
-		} else if ( s.jsonp !== false ) {
-			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
-		}
-
-		// Use data converter to retrieve json after script execution
-		s.converters[ "script json" ] = function() {
-			if ( !responseContainer ) {
-				jQuery.error( callbackName + " was not called" );
-			}
-			return responseContainer[ 0 ];
-		};
-
-		// force json dataType
-		s.dataTypes[ 0 ] = "json";
-
-		// Install callback
-		overwritten = window[ callbackName ];
-		window[ callbackName ] = function() {
-			responseContainer = arguments;
-		};
-
-		// Clean-up function (fires after converters)
-		jqXHR.always( function() {
-
-			// If previous value didn't exist - remove it
-			if ( overwritten === undefined ) {
-				jQuery( window ).removeProp( callbackName );
-
-			// Otherwise restore preexisting value
-			} else {
-				window[ callbackName ] = overwritten;
-			}
-
-			// Save back as free
-			if ( s[ callbackName ] ) {
-
-				// make sure that re-using the options doesn't screw things around
-				s.jsonpCallback = originalSettings.jsonpCallback;
-
-				// save the callback name for future use
-				oldCallbacks.push( callbackName );
-			}
-
-			// Call if it was a function and we have a response
-			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
-				overwritten( responseContainer[ 0 ] );
-			}
-
-			responseContainer = overwritten = undefined;
-		} );
-
-		// Delegate to script
-		return "script";
-	}
-} );
-
-
-
-
-// Support: Safari 8+
-// In Safari 8 documents created via document.implementation.createHTMLDocument
-// collapse sibling forms: the second one becomes a child of the first one.
-// Because of that, this security measure has to be disabled in Safari 8.
-// https://bugs.webkit.org/show_bug.cgi?id=137337
-support.createHTMLDocument = ( function() {
-	if ( !document.implementation.createHTMLDocument ) {
-		return false;
-	}
-	var doc = document.implementation.createHTMLDocument( "" );
-	doc.body.innerHTML = "<form></form><form></form>";
-	return doc.body.childNodes.length === 2;
-} )();
-
-
-// data: string of html
-// context (optional): If specified, the fragment will be created in this context,
-// defaults to document
-// keepScripts (optional): If true, will include scripts passed in the html string
-jQuery.parseHTML = function( data, context, keepScripts ) {
-	if ( !data || typeof data !== "string" ) {
-		return null;
-	}
-	if ( typeof context === "boolean" ) {
-		keepScripts = context;
-		context = false;
-	}
-
-	// document.implementation stops scripts or inline event handlers from
-	// being executed immediately
-	context = context || ( support.createHTMLDocument ?
-		document.implementation.createHTMLDocument( "" ) :
-		document );
-
-	var parsed = rsingleTag.exec( data ),
-		scripts = !keepScripts && [];
-
-	// Single tag
-	if ( parsed ) {
-		return [ context.createElement( parsed[ 1 ] ) ];
-	}
-
-	parsed = buildFragment( [ data ], context, scripts );
-
-	if ( scripts && scripts.length ) {
-		jQuery( scripts ).remove();
-	}
-
-	return jQuery.merge( [], parsed.childNodes );
-};
-
-
-// Keep a copy of the old load method
-var _load = jQuery.fn.load;
-
-/**
- * Load a url into a page
- */
-jQuery.fn.load = function( url, params, callback ) {
-	if ( typeof url !== "string" && _load ) {
-		return _load.apply( this, arguments );
-	}
-
-	var selector, type, response,
-		self = this,
-		off = url.indexOf( " " );
-
-	if ( off > -1 ) {
-		selector = jQuery.trim( url.slice( off, url.length ) );
-		url = url.slice( 0, off );
-	}
-
-	// If it's a function
-	if ( jQuery.isFunction( params ) ) {
-
-		// We assume that it's the callback
-		callback = params;
-		params = undefined;
-
-	// Otherwise, build a param string
-	} else if ( params && typeof params === "object" ) {
-		type = "POST";
-	}
-
-	// If we have elements to modify, make the request
-	if ( self.length > 0 ) {
-		jQuery.ajax( {
-			url: url,
-
-			// If "type" variable is undefined, then "GET" method will be used.
-			// Make value of this field explicit since
-			// user can override it through ajaxSetup method
-			type: type || "GET",
-			dataType: "html",
-			data: params
-		} ).done( function( responseText ) {
-
-			// Save response for use in complete callback
-			response = arguments;
-
-			self.html( selector ?
-
-				// If a selector was specified, locate the right elements in a dummy div
-				// Exclude scripts to avoid IE 'Permission Denied' errors
-				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
-
-				// Otherwise use the full result
-				responseText );
-
-		// If the request succeeds, this function gets "data", "status", "jqXHR"
-		// but they are ignored because response was set above.
-		// If it fails, this function gets "jqXHR", "status", "error"
-		} ).always( callback && function( jqXHR, status ) {
-			self.each( function() {
-				callback.apply( self, response || [ jqXHR.responseText, status, jqXHR ] );
-			} );
-		} );
-	}
-
-	return this;
-};
-
-
-
-
-// Attach a bunch of functions for handling common AJAX events
-jQuery.each( [
-	"ajaxStart",
-	"ajaxStop",
-	"ajaxComplete",
-	"ajaxError",
-	"ajaxSuccess",
-	"ajaxSend"
-], function( i, type ) {
-	jQuery.fn[ type ] = function( fn ) {
-		return this.on( type, fn );
-	};
-} );
-
-
-
-
-jQuery.expr.filters.animated = function( elem ) {
-	return jQuery.grep( jQuery.timers, function( fn ) {
-		return elem === fn.elem;
-	} ).length;
-};
-
-
-
-
-
-/**
- * Gets a window from an element
- */
-function getWindow( elem ) {
-	return jQuery.isWindow( elem ) ?
-		elem :
-		elem.nodeType === 9 ?
-			elem.defaultView || elem.parentWindow :
-			false;
-}
-
-jQuery.offset = {
-	setOffset: function( elem, options, i ) {
-		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
-			position = jQuery.css( elem, "position" ),
-			curElem = jQuery( elem ),
-			props = {};
-
-		// set position first, in-case top/left are set even on static elem
-		if ( position === "static" ) {
-			elem.style.position = "relative";
-		}
-
-		curOffset = curElem.offset();
-		curCSSTop = jQuery.css( elem, "top" );
-		curCSSLeft = jQuery.css( elem, "left" );
-		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
-			jQuery.inArray( "auto", [ curCSSTop, curCSSLeft ] ) > -1;
-
-		// need to be able to calculate position if either top or left
-		// is auto and position is either absolute or fixed
-		if ( calculatePosition ) {
-			curPosition = curElem.position();
-			curTop = curPosition.top;
-			curLeft = curPosition.left;
-		} else {
-			curTop = parseFloat( curCSSTop ) || 0;
-			curLeft = parseFloat( curCSSLeft ) || 0;
-		}
-
-		if ( jQuery.isFunction( options ) ) {
-
-			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
-			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
-		}
-
-		if ( options.top != null ) {
-			props.top = ( options.top - curOffset.top ) + curTop;
-		}
-		if ( options.left != null ) {
-			props.left = ( options.left - curOffset.left ) + curLeft;
-		}
-
-		if ( "using" in options ) {
-			options.using.call( elem, props );
-		} else {
-			curElem.css( props );
-		}
-	}
-};
-
-jQuery.fn.extend( {
-	offset: function( options ) {
-		if ( arguments.length ) {
-			return options === undefined ?
-				this :
-				this.each( function( i ) {
-					jQuery.offset.setOffset( this, options, i );
-				} );
-		}
-
-		var docElem, win,
-			box = { top: 0, left: 0 },
-			elem = this[ 0 ],
-			doc = elem && elem.ownerDocument;
-
-		if ( !doc ) {
-			return;
-		}
-
-		docElem = doc.documentElement;
-
-		// Make sure it's not a disconnected DOM node
-		if ( !jQuery.contains( docElem, elem ) ) {
-			return box;
-		}
-
-		// If we don't have gBCR, just use 0,0 rather than error
-		// BlackBerry 5, iOS 3 (original iPhone)
-		if ( typeof elem.getBoundingClientRect !== "undefined" ) {
-			box = elem.getBoundingClientRect();
-		}
-		win = getWindow( doc );
-		return {
-			top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
-			left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
-		};
-	},
-
-	position: function() {
-		if ( !this[ 0 ] ) {
-			return;
-		}
-
-		var offsetParent, offset,
-			parentOffset = { top: 0, left: 0 },
-			elem = this[ 0 ];
-
-		// Fixed elements are offset from window (parentOffset = {top:0, left: 0},
-		// because it is its only offset parent
-		if ( jQuery.css( elem, "position" ) === "fixed" ) {
-
-			// we assume that getBoundingClientRect is available when computed position is fixed
-			offset = elem.getBoundingClientRect();
-		} else {
-
-			// Get *real* offsetParent
-			offsetParent = this.offsetParent();
-
-			// Get correct offsets
-			offset = this.offset();
-			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
-				parentOffset = offsetParent.offset();
-			}
-
-			// Add offsetParent borders
-			// Subtract offsetParent scroll positions
-			parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ) -
-				offsetParent.scrollTop();
-			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ) -
-				offsetParent.scrollLeft();
-		}
-
-		// Subtract parent offsets and element margins
-		// note: when an element has margin: auto the offsetLeft and marginLeft
-		// are the same in Safari causing offset.left to incorrectly be 0
-		return {
-			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
-			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
-		};
-	},
-
-	offsetParent: function() {
-		return this.map( function() {
-			var offsetParent = this.offsetParent;
-
-			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) &&
-				jQuery.css( offsetParent, "position" ) === "static" ) ) {
-				offsetParent = offsetParent.offsetParent;
-			}
-			return offsetParent || documentElement;
-		} );
-	}
-} );
-
-// Create scrollLeft and scrollTop methods
-jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
-	var top = /Y/.test( prop );
-
-	jQuery.fn[ method ] = function( val ) {
-		return access( this, function( elem, method, val ) {
-			var win = getWindow( elem );
-
-			if ( val === undefined ) {
-				return win ? ( prop in win ) ? win[ prop ] :
-					win.document.documentElement[ method ] :
-					elem[ method ];
-			}
-
-			if ( win ) {
-				win.scrollTo(
-					!top ? val : jQuery( win ).scrollLeft(),
-					top ? val : jQuery( win ).scrollTop()
-				);
-
-			} else {
-				elem[ method ] = val;
-			}
-		}, method, val, arguments.length, null );
-	};
-} );
-
-// Support: Safari<7-8+, Chrome<37-44+
-// Add the top/left cssHooks using jQuery.fn.position
-// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
-// getComputedStyle returns percent when specified for top/left/bottom/right
-// rather than make the css module depend on the offset module, we just check for it here
-jQuery.each( [ "top", "left" ], function( i, prop ) {
-	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
-		function( elem, computed ) {
-			if ( computed ) {
-				computed = curCSS( elem, prop );
-
-				// if curCSS returns percentage, fallback to offset
-				return rnumnonpx.test( computed ) ?
-					jQuery( elem ).position()[ prop ] + "px" :
-					computed;
-			}
-		}
-	);
-} );
-
-
-// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
-jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
-	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
-	function( defaultExtra, funcName ) {
-
-		// margin is only for outerHeight, outerWidth
-		jQuery.fn[ funcName ] = function( margin, value ) {
-			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
-				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
-
-			return access( this, function( elem, type, value ) {
-				var doc;
-
-				if ( jQuery.isWindow( elem ) ) {
-
-					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
-					// isn't a whole lot we can do. See pull request at this URL for discussion:
-					// https://github.com/jquery/jquery/pull/764
-					return elem.document.documentElement[ "client" + name ];
-				}
-
-				// Get document width or height
-				if ( elem.nodeType === 9 ) {
-					doc = elem.documentElement;
-
-					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
-					// whichever is greatest
-					// unfortunately, this causes bug #3838 in IE6/8 only,
-					// but there is currently no good, small way to fix it.
-					return Math.max(
-						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
-						elem.body[ "offset" + name ], doc[ "offset" + name ],
-						doc[ "client" + name ]
-					);
-				}
-
-				return value === undefined ?
-
-					// Get width or height on the element, requesting but not forcing parseFloat
-					jQuery.css( elem, type, extra ) :
-
-					// Set width or height on the element
-					jQuery.style( elem, type, value, extra );
-			}, type, chainable ? margin : undefined, chainable, null );
-		};
-	} );
-} );
-
-
-jQuery.fn.extend( {
-
-	bind: function( types, data, fn ) {
-		return this.on( types, null, data, fn );
-	},
-	unbind: function( types, fn ) {
-		return this.off( types, null, fn );
-	},
-
-	delegate: function( selector, types, data, fn ) {
-		return this.on( types, selector, data, fn );
-	},
-	undelegate: function( selector, types, fn ) {
-
-		// ( namespace ) or ( selector, types [, fn] )
-		return arguments.length === 1 ?
-			this.off( selector, "**" ) :
-			this.off( types, selector || "**", fn );
-	}
-} );
-
-// The number of elements contained in the matched element set
-jQuery.fn.size = function() {
-	return this.length;
-};
-
-jQuery.fn.andSelf = jQuery.fn.addBack;
-
-
-
-
-// Register as a named AMD module, since jQuery can be concatenated with other
-// files that may use define, but not via a proper concatenation script that
-// understands anonymous AMD modules. A named AMD is safest and most robust
-// way to register. Lowercase jquery is used because AMD module names are
-// derived from file names, and jQuery is normally delivered in a lowercase
-// file name. Do this after creating the global so that if an AMD module wants
-// to call noConflict to hide this version of jQuery, it will work.
-
-// Note that for maximum portability, libraries that are not jQuery should
-// declare themselves as anonymous modules, and avoid setting a global if an
-// AMD loader is present. jQuery is a special case. For more information, see
-// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
-
-if ( typeof define === "function" && define.amd ) {
-	define( "jquery", [], function() {
-		return jQuery;
-	} );
-}
-
-
-
-var
-
-	// Map over jQuery in case of overwrite
-	_jQuery = window.jQuery,
-
-	// Map over the $ in case of overwrite
-	_$ = window.$;
-
-jQuery.noConflict = function( deep ) {
-	if ( window.$ === jQuery ) {
-		window.$ = _$;
-	}
-
-	if ( deep && window.jQuery === jQuery ) {
-		window.jQuery = _jQuery;
-	}
-
-	return jQuery;
-};
-
-// Expose jQuery and $ identifiers, even in
-// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
-// and CommonJS for browser emulators (#13566)
-if ( !noGlobal ) {
-	window.jQuery = window.$ = jQuery;
-}
-
-return jQuery;
-}));
diff --git a/js/lib/jquery/jquery-1.12.0.min.js b/js/lib/jquery/jquery-1.12.0.min.js
deleted file mode 100644
index 6c60672..0000000
--- a/js/lib/jquery/jquery-1.12.0.min.js
+++ /dev/null
@@ -1,5 +0,0 @@
-/*! jQuery v1.12.0 | (c) jQuery Foundation | jquery.org/license */
-!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.0",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=R.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;
-return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.rnamespace||a.rnamespace.test(g.namespace))&&(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(b,c,e){var f=!0,g="width"===c?b.offsetWidth:b.offsetHeight,h=Ra(b),i=l.boxSizing&&"border-box"===n.css(b,"boxSizing",!1,h);if(d.msFullscreenElement&&a.top!==a&&b.getClientRects().length&&(g=Math.round(100*b.getBoundingClientRect()[c])),0>=g||null==g){if(g=Sa(b,c,h),(0>g||null==g)&&(g=b.style[c]),Oa.test(g))return g;f=i&&(l.boxSizingReliable()||g===b.style[c]),g=parseFloat(g)||0}return g+eb(b,c,e||(i?"border":"content"),f,h)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{
-marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb,tb,ub=n.expr.attrHandle,vb=/^(?:checked|selected)$/i,wb=l.getSetAttribute,xb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?tb:sb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?xb&&wb||!vb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(wb?c:d)}}),tb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):xb&&wb||!vb.test(c)?a.setAttribute(!wb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ub[b]||n.find.attr;xb&&wb||!vb.test(b)?ub[b]=function(a,b,d){var e,f;return d||(f=ub[b],ub[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ub[b]=f),e}:ub[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),xb&&wb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):sb&&sb.set(a,b,c)}}),wb||(sb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ub.id=ub.name=ub.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:sb.set},n.attrHooks.contenteditable={set:function(a,b,c){sb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var yb=/^(?:input|select|textarea|button|object)$/i,zb=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):yb.test(a.nodeName)||zb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Ab=/[\t\r\n\f]/g;function Bb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Bb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Bb(c),d=1===c.nodeType&&(" "+e+" ").replace(Ab," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Bb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Bb(c),d=1===c.nodeType&&(" "+e+" ").replace(Ab," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Bb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(void 0===a||"boolean"===c)&&(b=Bb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Bb(c)+" ").replace(Ab," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Cb=a.location,Db=n.now(),Eb=/\?/,Fb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Fb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Gb=/#.*$/,Hb=/([?&])_=[^&]*/,Ib=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Jb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Kb=/^(?:GET|HEAD)$/,Lb=/^\/\//,Mb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Nb={},Ob={},Pb="*/".concat("*"),Qb=Cb.href,Rb=Mb.exec(Qb.toLowerCase())||[];function Sb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Tb(a,b,c,d){var e={},f=a===Ob;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ub(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Vb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Wb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Qb,type:"GET",isLocal:Jb.test(Rb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Pb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ub(Ub(a,n.ajaxSettings),b):Ub(n.ajaxSettings,a)},ajaxPrefilter:Sb(Nb),ajaxTransport:Sb(Ob),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Ib.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Qb)+"").replace(Gb,"").replace(Lb,Rb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Mb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Rb[1]&&d[2]===Rb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Rb[3]||("http:"===Rb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Tb(Nb,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Kb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Eb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Hb.test(f)?f.replace(Hb,"$1_="+Db++):f+(Eb.test(f)?"&":"?")+"_="+Db++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Pb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Tb(Ob,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Vb(l,w,d)),v=Wb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,(b||!y)&&(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Xb(a){return a.style&&a.style.display||n.css(a,"display")}function Yb(a){while(a&&1===a.nodeType){if("none"===Xb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Yb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Zb=/%20/g,$b=/\[\]$/,_b=/\r?\n/g,ac=/^(?:submit|button|image|reset|file)$/i,bc=/^(?:input|select|textarea|keygen)/i;function cc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||$b.test(a)?d(a,e):cc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)cc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)cc(c,a[c],b,e);return d.join("&").replace(Zb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&bc.test(this.nodeName)&&!ac.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(_b,"\r\n")}}):{name:b.name,value:c.replace(_b,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?hc():d.documentMode>8?gc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&gc()||hc()}:gc;var dc=0,ec={},fc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in ec)ec[a](void 0,!0)}),l.cors=!!fc&&"withCredentials"in fc,fc=l.ajax=!!fc,fc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++dc;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete ec[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=ec[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function gc(){try{return new a.XMLHttpRequest}catch(b){}}function hc(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ic=[],jc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ic.pop()||n.expando+"_"+Db++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(jc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&jc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(jc,"$1"+e):b.jsonp!==!1&&(b.url+=(Eb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ic.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),l.createHTMLDocument=function(){if(!d.implementation.createHTMLDocument)return!1;var a=d.implementation.createHTMLDocument("");return a.body.innerHTML="<form></form><form></form>",2===a.body.childNodes.length}(),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||(l.createHTMLDocument?d.implementation.createHTMLDocument(""):d);var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var kc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&kc)return kc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(g,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function lc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=lc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0)-a.scrollTop(),c.left+=n.css(a[0],"borderLeftWidth",!0)-a.scrollLeft()),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=lc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e)},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){
-n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var mc=a.jQuery,nc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=nc),b&&a.jQuery===n&&(a.jQuery=mc),n},b||(a.jQuery=a.$=n),n});
diff --git a/js/lib/jquery/jquery-1.12.0.min.map b/js/lib/jquery/jquery-1.12.0.min.map
deleted file mode 100644
index be41d37..0000000
--- a/js/lib/jquery/jquery-1.12.0.min.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"sources":["jquery.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","deletedIds","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","support","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","call","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","src","copyIsArray","copy","name","options","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","Array","isWindow","isNumeric","realStringObj","parseFloat","isEmptyObject","key","nodeType","e","ownFirst","globalEval","data","trim","execScript","camelCase","string","nodeName","toLowerCase","isArrayLike","text","makeArray","arr","results","Object","inArray","max","second","grep","invert","callbackInverse","matches","callbackExpect","arg","value","guid","proxy","args","tmp","now","Date","Symbol","iterator","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","MAX_NEGATIVE","pop","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","childNodes","els","seed","m","nid","nidselect","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","join","testContext","parentNode","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","div","createElement","removeChild","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","parent","doc","defaultView","top","addEventListener","attachEvent","className","appendChild","createComment","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","div1","defaultValue","unique","isXMLDoc","until","truncate","is","siblings","n","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","rootjQuery","charAt","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","targets","closest","l","pos","index","prevAll","add","addBack","sibling","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","contentWindow","reverse","rnotwhite","createOptions","object","flag","Callbacks","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","promise","always","deferred","fail","then","fns","newDefer","tuple","returned","progress","notify","resolve","reject","pipe","stateString","when","subordinate","resolveValues","remaining","updateFunc","values","progressValues","notifyWith","resolveWith","progressContexts","resolveContexts","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","detach","removeEventListener","completed","detachEvent","event","readyState","setTimeout","frameElement","doScroll","doScrollCheck","inlineBlockNeedsLayout","body","container","style","cssText","zoom","offsetWidth","deleteExpando","acceptData","noData","rbrace","rmultiDash","dataAttr","parseJSON","isEmptyDataObject","internalData","pvt","thisCache","internalKey","isNode","toJSON","internalRemoveData","cleanData","applet ","embed ","object ","hasData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","shrinkWrapBlocksVal","shrinkWrapBlocks","width","pnum","source","rcssNum","cssExpand","isHidden","el","css","adjustCSS","prop","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","access","chainable","emptyGet","raw","bulk","rcheckableType","rtagName","rscriptType","rleadingWhitespace","nodeNames","createSafeFragment","safeFrag","createDocumentFragment","fragment","leadingWhitespace","tbody","htmlSerialize","html5Clone","cloneNode","outerHTML","appendChecked","noCloneChecked","checkClone","noCloneEvent","wrapMap","option","legend","area","param","thead","tr","col","td","_default","optgroup","tfoot","colgroup","caption","th","getAll","found","setGlobalEval","refElements","rhtml","rtbody","fixDefaultChecked","defaultChecked","buildFragment","scripts","selection","ignored","wrap","safe","nodes","htmlPrefilter","createTextNode","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","on","types","one","origFn","events","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","rnamespace","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","isNaN","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","props","srcElement","metaKey","original","which","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","click","beforeunload","returnValue","simulate","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","form","_submitBubble","propertyName","_justChanged","attaches","rinlinejQuery","rnoshimcache","rxhtmlTag","rnoInnerhtml","rchecked","rscriptTypeMasked","rcleanScript","safeFragment","fragmentDiv","manipulationTarget","content","disableScript","restoreScript","cloneCopyEvent","dest","oldData","curData","fixCloneNodeIssues","defaultSelected","domManip","collection","hasScripts","iNoClone","html","_evalUrl","keepData","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","forceAcceptData","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","HTML","BODY","actualDisplay","display","defaultDisplay","write","close","rmargin","rnumnonpx","swap","old","pixelPositionVal","pixelMarginRightVal","boxSizingReliableVal","reliableHiddenOffsetsVal","reliableMarginRightVal","reliableMarginLeftVal","opacity","cssFloat","backgroundClip","clearCloneStyle","boxSizing","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","computeStyleTests","boxSizingReliable","pixelMarginRight","pixelPosition","reliableMarginRight","reliableMarginLeft","divStyle","getComputedStyle","marginLeft","marginRight","getClientRects","offsetHeight","getStyles","curCSS","rposition","view","opener","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","addGetHookIf","conditionFn","hookFn","ralpha","ropacity","rdisplayswap","rnumsplit","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","vendorPropName","capName","showHide","show","hidden","setPositiveNumber","subtract","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","msFullscreenElement","round","getBoundingClientRect","cssHooks","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","origName","set","isFinite","$1","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","Tween","easing","propHooks","run","percent","eased","duration","step","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rrun","createFxNow","genFx","includeWidth","height","createTween","animation","Animation","tweeners","defaultPrefilter","opts","oldfire","checkDisplay","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","properties","stopped","prefilters","tick","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","rejectWith","timer","complete","*","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","tabindex","parseInt","for","class","rclass","getClass","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","ActiveXObject","async","loadXML","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","transports","allTypes","ajaxLocation","ajaxLocParts","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","cacheURL","responseHeadersString","timeoutTimer","fireGlobals","transport","responseHeaders","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","status","abort","statusText","finalText","success","method","crossDomain","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","modified","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","getDisplay","filterHidden","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","v","encodeURIComponent","serialize","serializeArray","xhr","createActiveXHR","documentMode","createStandardXHR","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","XMLHttpRequest","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","_load","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","bind","unbind","delegate","undelegate","size","andSelf","define","amd","_jQuery","_$","$","noConflict"],"mappings":"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","file":"jquery.min.js"}
\ No newline at end of file
diff --git a/js/lib/jquery/jquery-1.12.1.js b/js/lib/jquery/jquery-1.12.1.js
new file mode 100644
index 0000000..d888910
--- /dev/null
+++ b/js/lib/jquery/jquery-1.12.1.js
@@ -0,0 +1,11026 @@
+/*!
+ * jQuery JavaScript Library v1.12.1
+ * http://jquery.com/
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-02-22T19:07Z
+ */
+
+(function( global, factory ) {
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Support: Firefox 18+
+// Can't be in strict mode, several libs including ASP.NET trace
+// the stack via arguments.caller.callee and Firefox dies if
+// you try to trace through "use strict" call chains. (#13335)
+//"use strict";
+var deletedIds = [];
+
+var document = window.document;
+
+var slice = deletedIds.slice;
+
+var concat = deletedIds.concat;
+
+var push = deletedIds.push;
+
+var indexOf = deletedIds.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var support = {};
+
+
+
+var
+	version = "1.12.1",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Support: Android<4.1, IE<9
+	// Make sure we trim BOM and NBSP
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([\da-z])/gi,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// Start with an empty selector
+	selector: "",
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num != null ?
+
+			// Return just the one element from the set
+			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+
+			// Return all the elements in a clean array
+			slice.call( this );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+		ret.context = this.context;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: deletedIds.sort,
+	splice: deletedIds.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var src, copyIsArray, copy, name, options, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+		target = {};
+	}
+
+	// extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = jQuery.isArray( copy ) ) ) ) {
+
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray( src ) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject( src ) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	// See test/unit/core.js for details concerning isFunction.
+	// Since version 1.3, DOM methods and functions like alert
+	// aren't supported. They return false on IE (#2968).
+	isFunction: function( obj ) {
+		return jQuery.type( obj ) === "function";
+	},
+
+	isArray: Array.isArray || function( obj ) {
+		return jQuery.type( obj ) === "array";
+	},
+
+	isWindow: function( obj ) {
+		/* jshint eqeqeq: false */
+		return obj != null && obj == obj.window;
+	},
+
+	isNumeric: function( obj ) {
+
+		// parseFloat NaNs numeric-cast false positives (null|true|false|"")
+		// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+		// subtraction forces infinities to NaN
+		// adding 1 corrects loss of precision from parseFloat (#15100)
+		var realStringObj = obj && obj.toString();
+		return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;
+	},
+
+	isEmptyObject: function( obj ) {
+		var name;
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	isPlainObject: function( obj ) {
+		var key;
+
+		// Must be an Object.
+		// Because of IE, we also have to check the presence of the constructor property.
+		// Make sure that DOM nodes and window objects don't pass through, as well
+		if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
+			return false;
+		}
+
+		try {
+
+			// Not own constructor property must be Object
+			if ( obj.constructor &&
+				!hasOwn.call( obj, "constructor" ) &&
+				!hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) {
+				return false;
+			}
+		} catch ( e ) {
+
+			// IE8,9 Will throw exceptions on certain host objects #9897
+			return false;
+		}
+
+		// Support: IE<9
+		// Handle iteration over inherited properties before own properties.
+		if ( !support.ownFirst ) {
+			for ( key in obj ) {
+				return hasOwn.call( obj, key );
+			}
+		}
+
+		// Own properties are enumerated firstly, so to speed up,
+		// if last one is own, then all properties are own.
+		for ( key in obj ) {}
+
+		return key === undefined || hasOwn.call( obj, key );
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return obj + "";
+		}
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ toString.call( obj ) ] || "object" :
+			typeof obj;
+	},
+
+	// Workarounds based on findings by Jim Driscoll
+	// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context
+	globalEval: function( data ) {
+		if ( data && jQuery.trim( data ) ) {
+
+			// We use execScript on Internet Explorer
+			// We use an anonymous function so that context is window
+			// rather than jQuery in Firefox
+			( window.execScript || function( data ) {
+				window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation
+			} )( data );
+		}
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Support: Android<4.1, IE<9
+	trim: function( text ) {
+		return text == null ?
+			"" :
+			( text + "" ).replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		var len;
+
+		if ( arr ) {
+			if ( indexOf ) {
+				return indexOf.call( arr, elem, i );
+			}
+
+			len = arr.length;
+			i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;
+
+			for ( ; i < len; i++ ) {
+
+				// Skip accessing in sparse arrays
+				if ( i in arr && arr[ i ] === elem ) {
+					return i;
+				}
+			}
+		}
+
+		return -1;
+	},
+
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		while ( j < len ) {
+			first[ i++ ] = second[ j++ ];
+		}
+
+		// Support: IE<9
+		// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)
+		if ( len !== len ) {
+			while ( second[ j ] !== undefined ) {
+				first[ i++ ] = second[ j++ ];
+			}
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var args, proxy, tmp;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	now: function() {
+		return +( new Date() );
+	},
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+// JSHint would error on this code due to the Symbol not being defined in ES5.
+// Defining this global in .jshintrc would create a danger of using the global
+// unguarded in another place, it seems safer to just disable JSHint for these
+// three lines.
+/* jshint ignore: start */
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];
+}
+/* jshint ignore: end */
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+	// Support: iOS 8.2 (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = jQuery.type( obj );
+
+	if ( type === "function" || jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.2.1
+ * http://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2015-10-17
+ */
+(function( window ) {
+
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// General-purpose constants
+	MAX_NEGATIVE = 1 << 31,
+
+	// Instance methods
+	hasOwn = ({}).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	push_native = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf as it's faster than native
+	// http://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+
+	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+		"*\\]",
+
+	pseudos = ":(" + identifier + ")(?:\\((" +
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + identifier + ")" ),
+		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+	rescape = /'|\\/g,
+
+	// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+	funescape = function( _, escaped, escapedWhitespace ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		// Support: Firefox<24
+		// Workaround erroneous numeric interpretation of +"0x"
+		return high !== high || escapedWhitespace ?
+			escaped :
+			high < 0 ?
+				// BMP codepoint
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	};
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		(arr = slice.call( preferredDoc.childNodes )),
+		preferredDoc.childNodes
+	);
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			push_native.apply( target, slice.call(els) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+			// Can't trust NodeList.length
+			while ( (target[j++] = els[i++]) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var m, i, elem, nid, nidselect, match, groups, newSelector,
+		newContext = context && context.ownerDocument,
+
+		// nodeType defaults to 9, since context defaults to document
+		nodeType = context ? context.nodeType : 9;
+
+	results = results || [];
+
+	// Return early from calls with invalid selector or context
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	// Try to shortcut find operations (as opposed to filters) in HTML documents
+	if ( !seed ) {
+
+		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+			setDocument( context );
+		}
+		context = context || document;
+
+		if ( documentIsHTML ) {
+
+			// If the selector is sufficiently simple, try using a "get*By*" DOM method
+			// (excepting DocumentFragment context, where the methods don't exist)
+			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+				// ID selector
+				if ( (m = match[1]) ) {
+
+					// Document context
+					if ( nodeType === 9 ) {
+						if ( (elem = context.getElementById( m )) ) {
+
+							// Support: IE, Opera, Webkit
+							// TODO: identify versions
+							// getElementById can match elements by name instead of ID
+							if ( elem.id === m ) {
+								results.push( elem );
+								return results;
+							}
+						} else {
+							return results;
+						}
+
+					// Element context
+					} else {
+
+						// Support: IE, Opera, Webkit
+						// TODO: identify versions
+						// getElementById can match elements by name instead of ID
+						if ( newContext && (elem = newContext.getElementById( m )) &&
+							contains( context, elem ) &&
+							elem.id === m ) {
+
+							results.push( elem );
+							return results;
+						}
+					}
+
+				// Type selector
+				} else if ( match[2] ) {
+					push.apply( results, context.getElementsByTagName( selector ) );
+					return results;
+
+				// Class selector
+				} else if ( (m = match[3]) && support.getElementsByClassName &&
+					context.getElementsByClassName ) {
+
+					push.apply( results, context.getElementsByClassName( m ) );
+					return results;
+				}
+			}
+
+			// Take advantage of querySelectorAll
+			if ( support.qsa &&
+				!compilerCache[ selector + " " ] &&
+				(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+				if ( nodeType !== 1 ) {
+					newContext = context;
+					newSelector = selector;
+
+				// qSA looks outside Element context, which is not what we want
+				// Thanks to Andrew Dupont for this workaround technique
+				// Support: IE <=8
+				// Exclude object elements
+				} else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+					// Capture the context ID, setting it first if necessary
+					if ( (nid = context.getAttribute( "id" )) ) {
+						nid = nid.replace( rescape, "\\$&" );
+					} else {
+						context.setAttribute( "id", (nid = expando) );
+					}
+
+					// Prefix every selector in the list
+					groups = tokenize( selector );
+					i = groups.length;
+					nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']";
+					while ( i-- ) {
+						groups[i] = nidselect + " " + toSelector( groups[i] );
+					}
+					newSelector = groups.join( "," );
+
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+				}
+
+				if ( newSelector ) {
+					try {
+						push.apply( results,
+							newContext.querySelectorAll( newSelector )
+						);
+						return results;
+					} catch ( qsaError ) {
+					} finally {
+						if ( nid === expando ) {
+							context.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key + " " ] = value);
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created div and expects a boolean result
+ */
+function assert( fn ) {
+	var div = document.createElement("div");
+
+	try {
+		return !!fn( div );
+	} catch (e) {
+		return false;
+	} finally {
+		// Remove from its parent by default
+		if ( div.parentNode ) {
+			div.parentNode.removeChild( div );
+		}
+		// release memory in IE
+		div = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split("|"),
+		i = arr.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[i] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			( ~b.sourceIndex || MAX_NEGATIVE ) -
+			( ~a.sourceIndex || MAX_NEGATIVE );
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, parent,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// Return early if doc is invalid or already selected
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Update global variables
+	document = doc;
+	docElem = document.documentElement;
+	documentIsHTML = !isXML( document );
+
+	// Support: IE 9-11, Edge
+	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+	if ( (parent = document.defaultView) && parent.top !== parent ) {
+		// Support: IE 11
+		if ( parent.addEventListener ) {
+			parent.addEventListener( "unload", unloadHandler, false );
+
+		// Support: IE 9 - 10 only
+		} else if ( parent.attachEvent ) {
+			parent.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert(function( div ) {
+		div.className = "i";
+		return !div.getAttribute("className");
+	});
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert(function( div ) {
+		div.appendChild( document.createComment("") );
+		return !div.getElementsByTagName("*").length;
+	});
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert(function( div ) {
+		docElem.appendChild( div ).id = expando;
+		return !document.getElementsByName || !document.getElementsByName( expando ).length;
+	});
+
+	// ID find and filter
+	if ( support.getById ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var m = context.getElementById( id );
+				return m ? [ m ] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		// Support: IE6/7
+		// getElementById is not reliable as a find shortcut
+		delete Expr.find["ID"];
+
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" &&
+					elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See http://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( div ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// http://bugs.jquery.com/ticket/12359
+			docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( div.querySelectorAll("[msallowcapture^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !div.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+			if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push("~=");
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibing-combinator selector` fails
+			if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push(".#.+[+~]");
+			}
+		});
+
+		assert(function( div ) {
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = document.createElement("input");
+			input.setAttribute( "type", "hidden" );
+			div.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( div.querySelectorAll("[name=d]").length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( !div.querySelectorAll(":enabled").length ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			div.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( div ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( div, "div" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( div, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully self-exclusive
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+			// Choose the first element that is related to our preferred document
+			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+				return -1;
+			}
+			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+			return a === document ? -1 :
+				b === document ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		!compilerCache[ expr + " " ] &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch (e) {}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			(val = elem.getAttributeNode(name)) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( (elem = results[i++]) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		while ( (node = elem[i++]) ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[6] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[3] ) {
+				match[2] = match[4] || match[5] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() { return true; } :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, uniqueCache, outerCache, node, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType,
+						diff = false;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) {
+
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+
+							// Seek `elem` from a previously-cached index
+
+							// ...in a gzip-friendly way
+							node = parent;
+							outerCache = node[ expando ] || (node[ expando ] = {});
+
+							// Support: IE <9 only
+							// Defend against cloned attroperties (jQuery gh-1709)
+							uniqueCache = outerCache[ node.uniqueID ] ||
+								(outerCache[ node.uniqueID ] = {});
+
+							cache = uniqueCache[ type ] || [];
+							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+							diff = nodeIndex && cache[ 2 ];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						} else {
+							// Use previously-cached element index if available
+							if ( useCache ) {
+								// ...in a gzip-friendly way
+								node = elem;
+								outerCache = node[ expando ] || (node[ expando ] = {});
+
+								// Support: IE <9 only
+								// Defend against cloned attroperties (jQuery gh-1709)
+								uniqueCache = outerCache[ node.uniqueID ] ||
+									(outerCache[ node.uniqueID ] = {});
+
+								cache = uniqueCache[ type ] || [];
+								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+								diff = nodeIndex;
+							}
+
+							// xml :nth-child(...)
+							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
+							if ( diff === false ) {
+								// Use the same loop as above to seek `elem` from the start
+								while ( (node = ++nodeIndex && node && node[ dir ] ||
+									(diff = nodeIndex = 0) || start.pop()) ) {
+
+									if ( ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) &&
+										++diff ) {
+
+										// Cache the index of each encountered element
+										if ( useCache ) {
+											outerCache = node[ expando ] || (node[ expando ] = {});
+
+											// Support: IE <9 only
+											// Defend against cloned attroperties (jQuery gh-1709)
+											uniqueCache = outerCache[ node.uniqueID ] ||
+												(outerCache[ node.uniqueID ] = {});
+
+											uniqueCache[ type ] = [ dirruns, diff ];
+										}
+
+										if ( node === elem ) {
+											break;
+										}
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					// Don't keep the element (issue #299)
+					input[0] = null;
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			text = text.replace( runescape, funescape );
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifier
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": function( elem ) {
+			return elem.disabled === false;
+		},
+
+		"disabled": function( elem ) {
+			return elem.disabled === true;
+		},
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( (tokens = []) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push({
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			});
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push({
+					value: matched,
+					type: type,
+					matches: match
+				});
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		checkNonElements = base && dir === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, uniqueCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+						// Support: IE <9 only
+						// Defend against cloned attroperties (jQuery gh-1709)
+						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+						if ( (oldCache = uniqueCache[ dir ]) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return (newCache[ 2 ] = oldCache[ 2 ]);
+						} else {
+							// Reuse newcache so results back-propagate to previous elements
+							uniqueCache[ dir ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+			// Avoid hanging onto element (issue #299)
+			checkContext = null;
+			return ret;
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+				len = elems.length;
+
+			if ( outermost ) {
+				outermostContext = context === document || context || outermost;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					if ( !context && elem.ownerDocument !== document ) {
+						setDocument( elem );
+						xml = !documentIsHTML;
+					}
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context || document, xml) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// `i` is now the count of elements visited above, and adding it to `matchedCount`
+			// makes the latter nonnegative.
+			matchedCount += i;
+
+			// Apply set filters to unmatched elements
+			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+			// no element matchers and no seed.
+			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
+			// numerically zero.
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is only one selector in the list and no seed
+	// (the latter of which guarantees us context)
+	if ( match.length === 1 ) {
+
+		// Reduce context if the leading compound selector is an ID
+		tokens = match[0] = match[0].slice( 0 );
+		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+				support.getById && context.nodeType === 9 && documentIsHTML &&
+				Expr.relative[ tokens[1].type ] ) {
+
+			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[i];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ (type = token.type) ] ) {
+				break;
+			}
+			if ( (find = Expr.find[ type ]) ) {
+				// Search, expanding context for leading sibling combinators
+				if ( (seed = find(
+					token.matches[0].replace( runescape, funescape ),
+					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+				)) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( div1 ) {
+	// Should return 1, but returns 4 (following)
+	return div1.compareDocumentPosition( document.createElement("div") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( div ) {
+	div.innerHTML = "<a href='#'></a>";
+	return div.firstChild.getAttribute("href") === "#" ;
+}) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	});
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( div ) {
+	div.innerHTML = "<input/>";
+	div.firstChild.setAttribute( "value", "" );
+	return div.firstChild.getAttribute( "value" ) === "";
+}) ) {
+	addHandle( "value", function( elem, name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	});
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( div ) {
+	return div.getAttribute("disabled") == null;
+}) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+					(val = elem.getAttributeNode( name )) && val.specified ?
+					val.value :
+				null;
+		}
+	});
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+
+
+
+var dir = function( elem, dir, until ) {
+	var matched = [],
+		truncate = until !== undefined;
+
+	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+		if ( elem.nodeType === 1 ) {
+			if ( truncate && jQuery( elem ).is( until ) ) {
+				break;
+			}
+			matched.push( elem );
+		}
+	}
+	return matched;
+};
+
+
+var siblings = function( n, elem ) {
+	var matched = [];
+
+	for ( ; n; n = n.nextSibling ) {
+		if ( n.nodeType === 1 && n !== elem ) {
+			matched.push( n );
+		}
+	}
+
+	return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ );
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			/* jshint -W018 */
+			return !!qualifier.call( elem, i, elem ) !== not;
+		} );
+
+	}
+
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		} );
+
+	}
+
+	if ( typeof qualifier === "string" ) {
+		if ( risSimple.test( qualifier ) ) {
+			return jQuery.filter( qualifier, elements, not );
+		}
+
+		qualifier = jQuery.filter( qualifier, elements );
+	}
+
+	return jQuery.grep( elements, function( elem ) {
+		return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;
+	} );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	return elems.length === 1 && elem.nodeType === 1 ?
+		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+			return elem.nodeType === 1;
+		} ) );
+};
+
+jQuery.fn.extend( {
+	find: function( selector ) {
+		var i,
+			ret = [],
+			self = this,
+			len = self.length;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter( function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			} ) );
+		}
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		// Needed because $( selector, context ) becomes $( context ).find( selector )
+		ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );
+		ret.selector = this.selector ? this.selector + " " + selector : selector;
+		return ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], false ) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], true ) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
+
+	init = jQuery.fn.init = function( selector, context, root ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// init accepts an alternate rootjQuery
+		// so migrate can support jQuery.sub (gh-2101)
+		root = root || rootjQuery;
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector.charAt( 0 ) === "<" &&
+				selector.charAt( selector.length - 1 ) === ">" &&
+				selector.length >= 3 ) {
+
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && ( match[ 1 ] || !context ) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[ 1 ] ) {
+					context = context instanceof jQuery ? context[ 0 ] : context;
+
+					// scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[ 1 ],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[ 2 ] );
+
+					// Check parentNode to catch when Blackberry 4.6 returns
+					// nodes that are no longer in the document #6963
+					if ( elem && elem.parentNode ) {
+
+						// Handle the case where IE and Opera return items
+						// by name instead of ID
+						if ( elem.id !== match[ 2 ] ) {
+							return rootjQuery.find( selector );
+						}
+
+						// Otherwise, we inject the element directly into the jQuery object
+						this.length = 1;
+						this[ 0 ] = elem;
+					}
+
+					this.context = document;
+					this.selector = selector;
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || root ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this.context = this[ 0 ] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return typeof root.ready !== "undefined" ?
+				root.ready( selector ) :
+
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		if ( selector.selector !== undefined ) {
+			this.selector = selector.selector;
+			this.context = selector.context;
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+	// methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend( {
+	has: function( target ) {
+		var i,
+			targets = jQuery( target, this ),
+			len = targets.length;
+
+		return this.filter( function() {
+			for ( i = 0; i < len; i++ ) {
+				if ( jQuery.contains( this, targets[ i ] ) ) {
+					return true;
+				}
+			}
+		} );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ?
+				jQuery( selectors, context || this.context ) :
+				0;
+
+		for ( ; i < l; i++ ) {
+			for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+				// Always skip document fragments
+				if ( cur.nodeType < 11 && ( pos ?
+					pos.index( cur ) > -1 :
+
+					// Don't pass non-elements to Sizzle
+					cur.nodeType === 1 &&
+						jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+					matched.push( cur );
+					break;
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+	},
+
+	// Determine the position of an element within
+	// the matched set of elements
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// index in selector
+		if ( typeof elem === "string" ) {
+			return jQuery.inArray( this[ 0 ], jQuery( elem ) );
+		}
+
+		// Locate the position of the desired element
+		return jQuery.inArray(
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem, this );
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.uniqueSort(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	}
+} );
+
+function sibling( cur, dir ) {
+	do {
+		cur = cur[ dir ];
+	} while ( cur && cur.nodeType !== 1 );
+
+	return cur;
+}
+
+jQuery.each( {
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return siblings( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return siblings( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return jQuery.nodeName( elem, "iframe" ) ?
+			elem.contentDocument || elem.contentWindow.document :
+			jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var ret = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			ret = jQuery.filter( selector, ret );
+		}
+
+		if ( this.length > 1 ) {
+
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				ret = jQuery.uniqueSort( ret );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				ret = ret.reverse();
+			}
+		}
+
+		return this.pushStack( ret );
+	};
+} );
+var rnotwhite = ( /\S+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+	var object = {};
+	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	} );
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		createOptions( options ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+
+		// Last fire value for non-forgettable lists
+		memory,
+
+		// Flag to know if list was already fired
+		fired,
+
+		// Flag to prevent firing
+		locked,
+
+		// Actual callback list
+		list = [],
+
+		// Queue of execution data for repeatable lists
+		queue = [],
+
+		// Index of currently firing callback (modified by add/remove as needed)
+		firingIndex = -1,
+
+		// Fire callbacks
+		fire = function() {
+
+			// Enforce single-firing
+			locked = options.once;
+
+			// Execute callbacks for all pending executions,
+			// respecting firingIndex overrides and runtime changes
+			fired = firing = true;
+			for ( ; queue.length; firingIndex = -1 ) {
+				memory = queue.shift();
+				while ( ++firingIndex < list.length ) {
+
+					// Run callback and check for early termination
+					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+						options.stopOnFalse ) {
+
+						// Jump to end and forget the data so .add doesn't re-fire
+						firingIndex = list.length;
+						memory = false;
+					}
+				}
+			}
+
+			// Forget the data if we're done with it
+			if ( !options.memory ) {
+				memory = false;
+			}
+
+			firing = false;
+
+			// Clean up if we're done firing for good
+			if ( locked ) {
+
+				// Keep an empty list if we have data for future add calls
+				if ( memory ) {
+					list = [];
+
+				// Otherwise, this object is spent
+				} else {
+					list = "";
+				}
+			}
+		},
+
+		// Actual Callbacks object
+		self = {
+
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+
+					// If we have memory from a past run, we should fire after adding
+					if ( memory && !firing ) {
+						firingIndex = list.length - 1;
+						queue.push( memory );
+					}
+
+					( function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							if ( jQuery.isFunction( arg ) ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
+								// Inspect recursively
+								add( arg );
+							}
+						} );
+					} )( arguments );
+
+					if ( memory && !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Remove a callback from the list
+			remove: function() {
+				jQuery.each( arguments, function( _, arg ) {
+					var index;
+					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+						list.splice( index, 1 );
+
+						// Handle firing indexes
+						if ( index <= firingIndex ) {
+							firingIndex--;
+						}
+					}
+				} );
+				return this;
+			},
+
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ?
+					jQuery.inArray( fn, list ) > -1 :
+					list.length > 0;
+			},
+
+			// Remove all callbacks from the list
+			empty: function() {
+				if ( list ) {
+					list = [];
+				}
+				return this;
+			},
+
+			// Disable .fire and .add
+			// Abort any current/pending executions
+			// Clear all callbacks and values
+			disable: function() {
+				locked = queue = [];
+				list = memory = "";
+				return this;
+			},
+			disabled: function() {
+				return !list;
+			},
+
+			// Disable .fire
+			// Also disable .add unless we have memory (since it would have no effect)
+			// Abort any pending executions
+			lock: function() {
+				locked = true;
+				if ( !memory ) {
+					self.disable();
+				}
+				return this;
+			},
+			locked: function() {
+				return !!locked;
+			},
+
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( !locked ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					queue.push( args );
+					if ( !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+jQuery.extend( {
+
+	Deferred: function( func ) {
+		var tuples = [
+
+				// action, add listener, listener list, final state
+				[ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ],
+				[ "notify", "progress", jQuery.Callbacks( "memory" ) ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				then: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+					return jQuery.Deferred( function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+							var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];
+
+							// deferred[ done | fail | progress ] for forwarding actions to newDefer
+							deferred[ tuple[ 1 ] ]( function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.progress( newDefer.notify )
+										.done( newDefer.resolve )
+										.fail( newDefer.reject );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ](
+										this === promise ? newDefer.promise() : this,
+										fn ? [ returned ] : arguments
+									);
+								}
+							} );
+						} );
+						fns = null;
+					} ).promise();
+				},
+
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Keep pipe for back-compat
+		promise.pipe = promise.then;
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 3 ];
+
+			// promise[ done | fail | progress ] = list.add
+			promise[ tuple[ 1 ] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add( function() {
+
+					// state = [ resolved | rejected ]
+					state = stateString;
+
+				// [ reject_list | resolve_list ].disable; progress_list.lock
+				}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );
+			}
+
+			// deferred[ resolve | reject | notify ]
+			deferred[ tuple[ 0 ] ] = function() {
+				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments );
+				return this;
+			};
+			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+		} );
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( subordinate /* , ..., subordinateN */ ) {
+		var i = 0,
+			resolveValues = slice.call( arguments ),
+			length = resolveValues.length,
+
+			// the count of uncompleted subordinates
+			remaining = length !== 1 ||
+				( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,
+
+			// the master Deferred.
+			// If resolveValues consist of only a single Deferred, just use that.
+			deferred = remaining === 1 ? subordinate : jQuery.Deferred(),
+
+			// Update function for both resolve and progress values
+			updateFunc = function( i, contexts, values ) {
+				return function( value ) {
+					contexts[ i ] = this;
+					values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( values === progressValues ) {
+						deferred.notifyWith( contexts, values );
+
+					} else if ( !( --remaining ) ) {
+						deferred.resolveWith( contexts, values );
+					}
+				};
+			},
+
+			progressValues, progressContexts, resolveContexts;
+
+		// add listeners to Deferred subordinates; treat others as resolved
+		if ( length > 1 ) {
+			progressValues = new Array( length );
+			progressContexts = new Array( length );
+			resolveContexts = new Array( length );
+			for ( ; i < length; i++ ) {
+				if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {
+					resolveValues[ i ].promise()
+						.progress( updateFunc( i, progressContexts, progressValues ) )
+						.done( updateFunc( i, resolveContexts, resolveValues ) )
+						.fail( deferred.reject );
+				} else {
+					--remaining;
+				}
+			}
+		}
+
+		// if we're not waiting on anything, resolve the master
+		if ( !remaining ) {
+			deferred.resolveWith( resolveContexts, resolveValues );
+		}
+
+		return deferred.promise();
+	}
+} );
+
+
+// The deferred used on DOM ready
+var readyList;
+
+jQuery.fn.ready = function( fn ) {
+
+	// Add the callback
+	jQuery.ready.promise().done( fn );
+
+	return this;
+};
+
+jQuery.extend( {
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+
+		// Trigger any bound ready events
+		if ( jQuery.fn.triggerHandler ) {
+			jQuery( document ).triggerHandler( "ready" );
+			jQuery( document ).off( "ready" );
+		}
+	}
+} );
+
+/**
+ * Clean-up method for dom ready events
+ */
+function detach() {
+	if ( document.addEventListener ) {
+		document.removeEventListener( "DOMContentLoaded", completed );
+		window.removeEventListener( "load", completed );
+
+	} else {
+		document.detachEvent( "onreadystatechange", completed );
+		window.detachEvent( "onload", completed );
+	}
+}
+
+/**
+ * The ready event handler and self cleanup method
+ */
+function completed() {
+
+	// readyState === "complete" is good enough for us to call the dom ready in oldIE
+	if ( document.addEventListener ||
+		window.event.type === "load" ||
+		document.readyState === "complete" ) {
+
+		detach();
+		jQuery.ready();
+	}
+}
+
+jQuery.ready.promise = function( obj ) {
+	if ( !readyList ) {
+
+		readyList = jQuery.Deferred();
+
+		// Catch cases where $(document).ready() is called
+		// after the browser event has already occurred.
+		// Support: IE6-10
+		// Older IE sometimes signals "interactive" too soon
+		if ( document.readyState === "complete" ||
+			( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+			// Handle it asynchronously to allow scripts the opportunity to delay ready
+			window.setTimeout( jQuery.ready );
+
+		// Standards-based browsers support DOMContentLoaded
+		} else if ( document.addEventListener ) {
+
+			// Use the handy event callback
+			document.addEventListener( "DOMContentLoaded", completed );
+
+			// A fallback to window.onload, that will always work
+			window.addEventListener( "load", completed );
+
+		// If IE event model is used
+		} else {
+
+			// Ensure firing before onload, maybe late but safe also for iframes
+			document.attachEvent( "onreadystatechange", completed );
+
+			// A fallback to window.onload, that will always work
+			window.attachEvent( "onload", completed );
+
+			// If IE and not a frame
+			// continually check to see if the document is ready
+			var top = false;
+
+			try {
+				top = window.frameElement == null && document.documentElement;
+			} catch ( e ) {}
+
+			if ( top && top.doScroll ) {
+				( function doScrollCheck() {
+					if ( !jQuery.isReady ) {
+
+						try {
+
+							// Use the trick by Diego Perini
+							// http://javascript.nwbox.com/IEContentLoaded/
+							top.doScroll( "left" );
+						} catch ( e ) {
+							return window.setTimeout( doScrollCheck, 50 );
+						}
+
+						// detach all dom ready events
+						detach();
+
+						// and execute any waiting functions
+						jQuery.ready();
+					}
+				} )();
+			}
+		}
+	}
+	return readyList.promise( obj );
+};
+
+// Kick off the DOM ready check even if the user does not
+jQuery.ready.promise();
+
+
+
+
+// Support: IE<9
+// Iteration over object's inherited properties before its own
+var i;
+for ( i in jQuery( support ) ) {
+	break;
+}
+support.ownFirst = i === "0";
+
+// Note: most support tests are defined in their respective modules.
+// false until the test is run
+support.inlineBlockNeedsLayout = false;
+
+// Execute ASAP in case we need to set body.style.zoom
+jQuery( function() {
+
+	// Minified: var a,b,c,d
+	var val, div, body, container;
+
+	body = document.getElementsByTagName( "body" )[ 0 ];
+	if ( !body || !body.style ) {
+
+		// Return for frameset docs that don't have a body
+		return;
+	}
+
+	// Setup
+	div = document.createElement( "div" );
+	container = document.createElement( "div" );
+	container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
+	body.appendChild( container ).appendChild( div );
+
+	if ( typeof div.style.zoom !== "undefined" ) {
+
+		// Support: IE<8
+		// Check if natively block-level elements act like inline-block
+		// elements when setting their display to 'inline' and giving
+		// them layout
+		div.style.cssText = "display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1";
+
+		support.inlineBlockNeedsLayout = val = div.offsetWidth === 3;
+		if ( val ) {
+
+			// Prevent IE 6 from affecting layout for positioned elements #11048
+			// Prevent IE from shrinking the body in IE 7 mode #12869
+			// Support: IE<8
+			body.style.zoom = 1;
+		}
+	}
+
+	body.removeChild( container );
+} );
+
+
+( function() {
+	var div = document.createElement( "div" );
+
+	// Support: IE<9
+	support.deleteExpando = true;
+	try {
+		delete div.test;
+	} catch ( e ) {
+		support.deleteExpando = false;
+	}
+
+	// Null elements to avoid leaks in IE.
+	div = null;
+} )();
+var acceptData = function( elem ) {
+	var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ],
+		nodeType = +elem.nodeType || 1;
+
+	// Do not set data on non-element DOM nodes because it will not be cleared (#8335).
+	return nodeType !== 1 && nodeType !== 9 ?
+		false :
+
+		// Nodes accept data unless otherwise specified; rejection can be conditional
+		!noData || noData !== true && elem.getAttribute( "classid" ) === noData;
+};
+
+
+
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /([A-Z])/g;
+
+function dataAttr( elem, key, data ) {
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+
+		var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
+
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+					data === "false" ? false :
+					data === "null" ? null :
+
+					// Only convert to a number if it doesn't change the string
+					+data + "" === data ? +data :
+					rbrace.test( data ) ? jQuery.parseJSON( data ) :
+					data;
+			} catch ( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			jQuery.data( elem, key, data );
+
+		} else {
+			data = undefined;
+		}
+	}
+
+	return data;
+}
+
+// checks a cache object for emptiness
+function isEmptyDataObject( obj ) {
+	var name;
+	for ( name in obj ) {
+
+		// if the public data object is empty, the private is still empty
+		if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) {
+			continue;
+		}
+		if ( name !== "toJSON" ) {
+			return false;
+		}
+	}
+
+	return true;
+}
+
+function internalData( elem, name, data, pvt /* Internal Use Only */ ) {
+	if ( !acceptData( elem ) ) {
+		return;
+	}
+
+	var ret, thisCache,
+		internalKey = jQuery.expando,
+
+		// We have to handle DOM nodes and JS objects differently because IE6-7
+		// can't GC object references properly across the DOM-JS boundary
+		isNode = elem.nodeType,
+
+		// Only DOM nodes need the global jQuery cache; JS object data is
+		// attached directly to the object so GC can occur automatically
+		cache = isNode ? jQuery.cache : elem,
+
+		// Only defining an ID for JS objects if its cache already exists allows
+		// the code to shortcut on the same path as a DOM node with no cache
+		id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;
+
+	// Avoid doing any more work than we need to when trying to get data on an
+	// object that has no data at all
+	if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&
+		data === undefined && typeof name === "string" ) {
+		return;
+	}
+
+	if ( !id ) {
+
+		// Only DOM nodes need a new unique ID for each element since their data
+		// ends up in the global cache
+		if ( isNode ) {
+			id = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;
+		} else {
+			id = internalKey;
+		}
+	}
+
+	if ( !cache[ id ] ) {
+
+		// Avoid exposing jQuery metadata on plain JS objects when the object
+		// is serialized using JSON.stringify
+		cache[ id ] = isNode ? {} : { toJSON: jQuery.noop };
+	}
+
+	// An object can be passed to jQuery.data instead of a key/value pair; this gets
+	// shallow copied over onto the existing cache
+	if ( typeof name === "object" || typeof name === "function" ) {
+		if ( pvt ) {
+			cache[ id ] = jQuery.extend( cache[ id ], name );
+		} else {
+			cache[ id ].data = jQuery.extend( cache[ id ].data, name );
+		}
+	}
+
+	thisCache = cache[ id ];
+
+	// jQuery data() is stored in a separate object inside the object's internal data
+	// cache in order to avoid key collisions between internal data and user-defined
+	// data.
+	if ( !pvt ) {
+		if ( !thisCache.data ) {
+			thisCache.data = {};
+		}
+
+		thisCache = thisCache.data;
+	}
+
+	if ( data !== undefined ) {
+		thisCache[ jQuery.camelCase( name ) ] = data;
+	}
+
+	// Check for both converted-to-camel and non-converted data property names
+	// If a data property was specified
+	if ( typeof name === "string" ) {
+
+		// First Try to find as-is property data
+		ret = thisCache[ name ];
+
+		// Test for null|undefined property data
+		if ( ret == null ) {
+
+			// Try to find the camelCased property
+			ret = thisCache[ jQuery.camelCase( name ) ];
+		}
+	} else {
+		ret = thisCache;
+	}
+
+	return ret;
+}
+
+function internalRemoveData( elem, name, pvt ) {
+	if ( !acceptData( elem ) ) {
+		return;
+	}
+
+	var thisCache, i,
+		isNode = elem.nodeType,
+
+		// See jQuery.data for more information
+		cache = isNode ? jQuery.cache : elem,
+		id = isNode ? elem[ jQuery.expando ] : jQuery.expando;
+
+	// If there is already no cache entry for this object, there is no
+	// purpose in continuing
+	if ( !cache[ id ] ) {
+		return;
+	}
+
+	if ( name ) {
+
+		thisCache = pvt ? cache[ id ] : cache[ id ].data;
+
+		if ( thisCache ) {
+
+			// Support array or space separated string names for data keys
+			if ( !jQuery.isArray( name ) ) {
+
+				// try the string as a key before any manipulation
+				if ( name in thisCache ) {
+					name = [ name ];
+				} else {
+
+					// split the camel cased version by spaces unless a key with the spaces exists
+					name = jQuery.camelCase( name );
+					if ( name in thisCache ) {
+						name = [ name ];
+					} else {
+						name = name.split( " " );
+					}
+				}
+			} else {
+
+				// If "name" is an array of keys...
+				// When data is initially created, via ("key", "val") signature,
+				// keys will be converted to camelCase.
+				// Since there is no way to tell _how_ a key was added, remove
+				// both plain key and camelCase key. #12786
+				// This will only penalize the array argument path.
+				name = name.concat( jQuery.map( name, jQuery.camelCase ) );
+			}
+
+			i = name.length;
+			while ( i-- ) {
+				delete thisCache[ name[ i ] ];
+			}
+
+			// If there is no data left in the cache, we want to continue
+			// and let the cache object itself get destroyed
+			if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {
+				return;
+			}
+		}
+	}
+
+	// See jQuery.data for more information
+	if ( !pvt ) {
+		delete cache[ id ].data;
+
+		// Don't destroy the parent cache unless the internal data object
+		// had been the only thing left in it
+		if ( !isEmptyDataObject( cache[ id ] ) ) {
+			return;
+		}
+	}
+
+	// Destroy the cache
+	if ( isNode ) {
+		jQuery.cleanData( [ elem ], true );
+
+	// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)
+	/* jshint eqeqeq: false */
+	} else if ( support.deleteExpando || cache != cache.window ) {
+		/* jshint eqeqeq: true */
+		delete cache[ id ];
+
+	// When all else fails, undefined
+	} else {
+		cache[ id ] = undefined;
+	}
+}
+
+jQuery.extend( {
+	cache: {},
+
+	// The following elements (space-suffixed to avoid Object.prototype collisions)
+	// throw uncatchable exceptions if you attempt to set expando properties
+	noData: {
+		"applet ": true,
+		"embed ": true,
+
+		// ...but Flash objects (which have this classid) *can* handle expandos
+		"object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
+	},
+
+	hasData: function( elem ) {
+		elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];
+		return !!elem && !isEmptyDataObject( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return internalData( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		return internalRemoveData( elem, name );
+	},
+
+	// For internal use only.
+	_data: function( elem, name, data ) {
+		return internalData( elem, name, data, true );
+	},
+
+	_removeData: function( elem, name ) {
+		return internalRemoveData( elem, name, true );
+	}
+} );
+
+jQuery.fn.extend( {
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Special expections of .data basically thwart jQuery.access,
+		// so implement the relevant behavior ourselves
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = jQuery.data( elem );
+
+				if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE11+
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = jQuery.camelCase( name.slice( 5 ) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					jQuery._data( elem, "parsedAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each( function() {
+				jQuery.data( this, key );
+			} );
+		}
+
+		return arguments.length > 1 ?
+
+			// Sets one value
+			this.each( function() {
+				jQuery.data( this, key, value );
+			} ) :
+
+			// Gets one value
+			// Try to fetch any internally stored data first
+			elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;
+	},
+
+	removeData: function( key ) {
+		return this.each( function() {
+			jQuery.removeData( this, key );
+		} );
+	}
+} );
+
+
+jQuery.extend( {
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = jQuery._data( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray( data ) ) {
+					queue = jQuery._data( elem, type, jQuery.makeArray( data ) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// not intended for public consumption - generates a queueHooks object,
+	// or returns the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return jQuery._data( elem, key ) || jQuery._data( elem, key, {
+			empty: jQuery.Callbacks( "once memory" ).add( function() {
+				jQuery._removeData( elem, type + "queue" );
+				jQuery._removeData( elem, key );
+			} )
+		} );
+	}
+} );
+
+jQuery.fn.extend( {
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[ 0 ], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each( function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			} );
+	},
+	dequeue: function( type ) {
+		return this.each( function() {
+			jQuery.dequeue( this, type );
+		} );
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = jQuery._data( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+} );
+
+
+( function() {
+	var shrinkWrapBlocksVal;
+
+	support.shrinkWrapBlocks = function() {
+		if ( shrinkWrapBlocksVal != null ) {
+			return shrinkWrapBlocksVal;
+		}
+
+		// Will be changed later if needed.
+		shrinkWrapBlocksVal = false;
+
+		// Minified: var b,c,d
+		var div, body, container;
+
+		body = document.getElementsByTagName( "body" )[ 0 ];
+		if ( !body || !body.style ) {
+
+			// Test fired too early or in an unsupported environment, exit.
+			return;
+		}
+
+		// Setup
+		div = document.createElement( "div" );
+		container = document.createElement( "div" );
+		container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px";
+		body.appendChild( container ).appendChild( div );
+
+		// Support: IE6
+		// Check if elements with layout shrink-wrap their children
+		if ( typeof div.style.zoom !== "undefined" ) {
+
+			// Reset CSS: box-sizing; display; margin; border
+			div.style.cssText =
+
+				// Support: Firefox<29, Android 2.3
+				// Vendor-prefix box-sizing
+				"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
+				"box-sizing:content-box;display:block;margin:0;border:0;" +
+				"padding:1px;width:1px;zoom:1";
+			div.appendChild( document.createElement( "div" ) ).style.width = "5px";
+			shrinkWrapBlocksVal = div.offsetWidth !== 3;
+		}
+
+		body.removeChild( container );
+
+		return shrinkWrapBlocksVal;
+	};
+
+} )();
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHidden = function( elem, el ) {
+
+		// isHidden might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+		return jQuery.css( elem, "display" ) === "none" ||
+			!jQuery.contains( elem.ownerDocument, elem );
+	};
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+	var adjusted,
+		scale = 1,
+		maxIterations = 20,
+		currentValue = tween ?
+			function() { return tween.cur(); } :
+			function() { return jQuery.css( elem, prop, "" ); },
+		initial = currentValue(),
+		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+		// Starting value computation is required for potential unit mismatches
+		initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+			rcssNum.exec( jQuery.css( elem, prop ) );
+
+	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+		// Trust units reported by jQuery.css
+		unit = unit || initialInUnit[ 3 ];
+
+		// Make sure we update the tween properties later on
+		valueParts = valueParts || [];
+
+		// Iteratively approximate from a nonzero starting point
+		initialInUnit = +initial || 1;
+
+		do {
+
+			// If previous iteration zeroed out, double until we get *something*.
+			// Use string for doubling so we don't accidentally see scale as unchanged below
+			scale = scale || ".5";
+
+			// Adjust and apply
+			initialInUnit = initialInUnit / scale;
+			jQuery.style( elem, prop, initialInUnit + unit );
+
+		// Update scale, tolerating zero or NaN from tween.cur()
+		// Break the loop if scale is unchanged or perfect, or if we've just had enough.
+		} while (
+			scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+		);
+	}
+
+	if ( valueParts ) {
+		initialInUnit = +initialInUnit || +initial || 0;
+
+		// Apply relative offset (+=/-=) if specified
+		adjusted = valueParts[ 1 ] ?
+			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+			+valueParts[ 2 ];
+		if ( tween ) {
+			tween.unit = unit;
+			tween.start = initialInUnit;
+			tween.end = adjusted;
+		}
+	}
+	return adjusted;
+}
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		length = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( jQuery.type( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			access( elems, fn, i, key[ i ], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !jQuery.isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < length; i++ ) {
+				fn(
+					elems[ i ],
+					key,
+					raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )
+				);
+			}
+		}
+	}
+
+	return chainable ?
+		elems :
+
+		// Gets
+		bulk ?
+			fn.call( elems ) :
+			length ? fn( elems[ 0 ], key ) : emptyGet;
+};
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([\w:-]+)/ );
+
+var rscriptType = ( /^$|\/(?:java|ecma)script/i );
+
+var rleadingWhitespace = ( /^\s+/ );
+
+var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" +
+		"details|dialog|figcaption|figure|footer|header|hgroup|main|" +
+		"mark|meter|nav|output|picture|progress|section|summary|template|time|video";
+
+
+
+function createSafeFragment( document ) {
+	var list = nodeNames.split( "|" ),
+		safeFrag = document.createDocumentFragment();
+
+	if ( safeFrag.createElement ) {
+		while ( list.length ) {
+			safeFrag.createElement(
+				list.pop()
+			);
+		}
+	}
+	return safeFrag;
+}
+
+
+( function() {
+	var div = document.createElement( "div" ),
+		fragment = document.createDocumentFragment(),
+		input = document.createElement( "input" );
+
+	// Setup
+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+
+	// IE strips leading whitespace when .innerHTML is used
+	support.leadingWhitespace = div.firstChild.nodeType === 3;
+
+	// Make sure that tbody elements aren't automatically inserted
+	// IE will insert them into empty tables
+	support.tbody = !div.getElementsByTagName( "tbody" ).length;
+
+	// Make sure that link elements get serialized correctly by innerHTML
+	// This requires a wrapper element in IE
+	support.htmlSerialize = !!div.getElementsByTagName( "link" ).length;
+
+	// Makes sure cloning an html5 element does not cause problems
+	// Where outerHTML is undefined, this still works
+	support.html5Clone =
+		document.createElement( "nav" ).cloneNode( true ).outerHTML !== "<:nav></:nav>";
+
+	// Check if a disconnected checkbox will retain its checked
+	// value of true after appended to the DOM (IE6/7)
+	input.type = "checkbox";
+	input.checked = true;
+	fragment.appendChild( input );
+	support.appendChecked = input.checked;
+
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	// Support: IE6-IE11+
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+
+	// #11217 - WebKit loses check when the name is after the checked attribute
+	fragment.appendChild( div );
+
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input = document.createElement( "input" );
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3
+	// old WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE<9
+	// Cloned elements keep attachEvent handlers, we use addEventListener on IE9+
+	support.noCloneEvent = !!div.addEventListener;
+
+	// Support: IE<9
+	// Since attributes and properties are the same in IE,
+	// cleanData must set properties to undefined rather than use removeAttribute
+	div[ jQuery.expando ] = 1;
+	support.attributes = !div.getAttribute( jQuery.expando );
+} )();
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+	option: [ 1, "<select multiple='multiple'>", "</select>" ],
+	legend: [ 1, "<fieldset>", "</fieldset>" ],
+	area: [ 1, "<map>", "</map>" ],
+
+	// Support: IE8
+	param: [ 1, "<object>", "</object>" ],
+	thead: [ 1, "<table>", "</table>" ],
+	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+	col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
+	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+	// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,
+	// unless wrapped in a div with non-breaking characters in front of it.
+	_default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X<div>", "</div>" ]
+};
+
+// Support: IE8-IE9
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+	var elems, elem,
+		i = 0,
+		found = typeof context.getElementsByTagName !== "undefined" ?
+			context.getElementsByTagName( tag || "*" ) :
+			typeof context.querySelectorAll !== "undefined" ?
+				context.querySelectorAll( tag || "*" ) :
+				undefined;
+
+	if ( !found ) {
+		for ( found = [], elems = context.childNodes || context;
+			( elem = elems[ i ] ) != null;
+			i++
+		) {
+			if ( !tag || jQuery.nodeName( elem, tag ) ) {
+				found.push( elem );
+			} else {
+				jQuery.merge( found, getAll( elem, tag ) );
+			}
+		}
+	}
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], found ) :
+		found;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var elem,
+		i = 0;
+	for ( ; ( elem = elems[ i ] ) != null; i++ ) {
+		jQuery._data(
+			elem,
+			"globalEval",
+			!refElements || jQuery._data( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+
+var rhtml = /<|&#?\w+;/,
+	rtbody = /<tbody/i;
+
+function fixDefaultChecked( elem ) {
+	if ( rcheckableType.test( elem.type ) ) {
+		elem.defaultChecked = elem.checked;
+	}
+}
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+	var j, elem, contains,
+		tmp, tag, tbody, wrap,
+		l = elems.length,
+
+		// Ensure a safe fragment
+		safe = createSafeFragment( context ),
+
+		nodes = [],
+		i = 0;
+
+	for ( ; i < l; i++ ) {
+		elem = elems[ i ];
+
+		if ( elem || elem === 0 ) {
+
+			// Add nodes directly
+			if ( jQuery.type( elem ) === "object" ) {
+				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+			// Convert non-html into a text node
+			} else if ( !rhtml.test( elem ) ) {
+				nodes.push( context.createTextNode( elem ) );
+
+			// Convert html into DOM nodes
+			} else {
+				tmp = tmp || safe.appendChild( context.createElement( "div" ) );
+
+				// Deserialize a standard representation
+				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+				wrap = wrapMap[ tag ] || wrapMap._default;
+
+				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+				// Descend through wrappers to the right content
+				j = wrap[ 0 ];
+				while ( j-- ) {
+					tmp = tmp.lastChild;
+				}
+
+				// Manually add leading whitespace removed by IE
+				if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
+					nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[ 0 ] ) );
+				}
+
+				// Remove IE's autoinserted <tbody> from table fragments
+				if ( !support.tbody ) {
+
+					// String was a <table>, *may* have spurious <tbody>
+					elem = tag === "table" && !rtbody.test( elem ) ?
+						tmp.firstChild :
+
+						// String was a bare <thead> or <tfoot>
+						wrap[ 1 ] === "<table>" && !rtbody.test( elem ) ?
+							tmp :
+							0;
+
+					j = elem && elem.childNodes.length;
+					while ( j-- ) {
+						if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) &&
+							!tbody.childNodes.length ) {
+
+							elem.removeChild( tbody );
+						}
+					}
+				}
+
+				jQuery.merge( nodes, tmp.childNodes );
+
+				// Fix #12392 for WebKit and IE > 9
+				tmp.textContent = "";
+
+				// Fix #12392 for oldIE
+				while ( tmp.firstChild ) {
+					tmp.removeChild( tmp.firstChild );
+				}
+
+				// Remember the top-level container for proper cleanup
+				tmp = safe.lastChild;
+			}
+		}
+	}
+
+	// Fix #11356: Clear elements from fragment
+	if ( tmp ) {
+		safe.removeChild( tmp );
+	}
+
+	// Reset defaultChecked for any radios and checkboxes
+	// about to be appended to the DOM in IE 6/7 (#8060)
+	if ( !support.appendChecked ) {
+		jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked );
+	}
+
+	i = 0;
+	while ( ( elem = nodes[ i++ ] ) ) {
+
+		// Skip elements already in the context collection (trac-4087)
+		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+			if ( ignored ) {
+				ignored.push( elem );
+			}
+
+			continue;
+		}
+
+		contains = jQuery.contains( elem.ownerDocument, elem );
+
+		// Append to fragment
+		tmp = getAll( safe.appendChild( elem ), "script" );
+
+		// Preserve script evaluation history
+		if ( contains ) {
+			setGlobalEval( tmp );
+		}
+
+		// Capture executables
+		if ( scripts ) {
+			j = 0;
+			while ( ( elem = tmp[ j++ ] ) ) {
+				if ( rscriptType.test( elem.type || "" ) ) {
+					scripts.push( elem );
+				}
+			}
+		}
+	}
+
+	tmp = null;
+
+	return safe;
+}
+
+
+( function() {
+	var i, eventName,
+		div = document.createElement( "div" );
+
+	// Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)
+	for ( i in { submit: true, change: true, focusin: true } ) {
+		eventName = "on" + i;
+
+		if ( !( support[ i ] = eventName in window ) ) {
+
+			// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)
+			div.setAttribute( eventName, "t" );
+			support[ i ] = div.attributes[ eventName ].expando === false;
+		}
+	}
+
+	// Null elements to avoid leaks in IE.
+	div = null;
+} )();
+
+
+var rformElems = /^(?:input|select|textarea)$/i,
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+	rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+// Support: IE9
+// See #13393 for more info
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+	var origFn, type;
+
+	// Types can be a map of types/handlers
+	if ( typeof types === "object" ) {
+
+		// ( types-Object, selector, data )
+		if ( typeof selector !== "string" ) {
+
+			// ( types-Object, data )
+			data = data || selector;
+			selector = undefined;
+		}
+		for ( type in types ) {
+			on( elem, type, selector, data, types[ type ], one );
+		}
+		return elem;
+	}
+
+	if ( data == null && fn == null ) {
+
+		// ( types, fn )
+		fn = selector;
+		data = selector = undefined;
+	} else if ( fn == null ) {
+		if ( typeof selector === "string" ) {
+
+			// ( types, selector, fn )
+			fn = data;
+			data = undefined;
+		} else {
+
+			// ( types, data, fn )
+			fn = data;
+			data = selector;
+			selector = undefined;
+		}
+	}
+	if ( fn === false ) {
+		fn = returnFalse;
+	} else if ( !fn ) {
+		return elem;
+	}
+
+	if ( one === 1 ) {
+		origFn = fn;
+		fn = function( event ) {
+
+			// Can use an empty set, since event contains the info
+			jQuery().off( event );
+			return origFn.apply( this, arguments );
+		};
+
+		// Use same guid so caller can remove using origFn
+		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+	}
+	return elem.each( function() {
+		jQuery.event.add( this, types, fn, data, selector );
+	} );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+		var tmp, events, t, handleObjIn,
+			special, eventHandle, handleObj,
+			handlers, type, namespaces, origType,
+			elemData = jQuery._data( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !( events = elemData.events ) ) {
+			events = elemData.events = {};
+		}
+		if ( !( eventHandle = elemData.handle ) ) {
+			eventHandle = elemData.handle = function( e ) {
+
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" &&
+					( !e || jQuery.event.triggered !== e.type ) ?
+					jQuery.event.dispatch.apply( eventHandle.elem, arguments ) :
+					undefined;
+			};
+
+			// Add elem as a property of the handle fn to prevent a memory leak
+			// with IE non-native events
+			eventHandle.elem = elem;
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend( {
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join( "." )
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !( handlers = events[ type ] ) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener/attachEvent if the special events handler returns false
+				if ( !special.setup ||
+					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+					// Bind the global event handler to the element
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle, false );
+
+					} else if ( elem.attachEvent ) {
+						elem.attachEvent( "on" + type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+		// Nullify elem to prevent memory leaks in IE
+		elem = null;
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+		var j, handleObj, tmp,
+			origCount, t, events,
+			special, handlers, type,
+			namespaces, origType,
+			elemData = jQuery.hasData( elem ) && jQuery._data( elem );
+
+		if ( !elemData || !( events = elemData.events ) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[ 2 ] &&
+				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector ||
+						selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown ||
+					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			delete elemData.handle;
+
+			// removeData also checks for emptiness and clears the expando if empty
+			// so use it instead of delete
+			jQuery._removeData( elem, "events" );
+		}
+	},
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+		var handle, ontype, cur,
+			bubbleType, special, tmp, i,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "." ) > -1 ) {
+
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split( "." );
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join( "." );
+		event.rnamespace = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === ( elem.ownerDocument || document ) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] &&
+				jQuery._data( cur, "handle" );
+
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if (
+				( !special._default ||
+				 special._default.apply( eventPath.pop(), data ) === false
+				) && acceptData( elem )
+			) {
+
+				// Call a native DOM method on the target with the same name name as the event.
+				// Can't use an .isFunction() check here because IE6/7 fails that test.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					try {
+						elem[ type ]();
+					} catch ( e ) {
+
+						// IE<9 dies on focus/blur to hidden element (#1486,#12518)
+						// only reproducible on winXP IE8 native, not IE9 in IE8 mode
+					}
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	dispatch: function( event ) {
+
+		// Make a writable jQuery.Event from the native event object
+		event = jQuery.event.fix( event );
+
+		var i, j, ret, matched, handleObj,
+			handlerQueue = [],
+			args = slice.call( arguments ),
+			handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[ 0 ] = event;
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( ( handleObj = matched.handlers[ j++ ] ) &&
+				!event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
+				// a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+						handleObj.handler ).apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( ( event.result = ret ) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, matches, sel, handleObj,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Support (at least): Chrome, IE9
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		//
+		// Support: Firefox<=42+
+		// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
+		if ( delegateCount && cur.nodeType &&
+			( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
+
+			/* jshint eqeqeq: false */
+			for ( ; cur != this; cur = cur.parentNode || this ) {
+				/* jshint eqeqeq: true */
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) > -1 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push( { elem: cur, handlers: matches } );
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
+		}
+
+		return handlerQueue;
+	},
+
+	fix: function( event ) {
+		if ( event[ jQuery.expando ] ) {
+			return event;
+		}
+
+		// Create a writable copy of the event object and normalize some properties
+		var i, prop, copy,
+			type = event.type,
+			originalEvent = event,
+			fixHook = this.fixHooks[ type ];
+
+		if ( !fixHook ) {
+			this.fixHooks[ type ] = fixHook =
+				rmouseEvent.test( type ) ? this.mouseHooks :
+				rkeyEvent.test( type ) ? this.keyHooks :
+				{};
+		}
+		copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;
+
+		event = new jQuery.Event( originalEvent );
+
+		i = copy.length;
+		while ( i-- ) {
+			prop = copy[ i ];
+			event[ prop ] = originalEvent[ prop ];
+		}
+
+		// Support: IE<9
+		// Fix target property (#1925)
+		if ( !event.target ) {
+			event.target = originalEvent.srcElement || document;
+		}
+
+		// Support: Safari 6-8+
+		// Target should not be a text node (#504, #13143)
+		if ( event.target.nodeType === 3 ) {
+			event.target = event.target.parentNode;
+		}
+
+		// Support: IE<9
+		// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)
+		event.metaKey = !!event.metaKey;
+
+		return fixHook.filter ? fixHook.filter( event, originalEvent ) : event;
+	},
+
+	// Includes some event props shared by KeyEvent and MouseEvent
+	props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " +
+		"metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ),
+
+	fixHooks: {},
+
+	keyHooks: {
+		props: "char charCode key keyCode".split( " " ),
+		filter: function( event, original ) {
+
+			// Add which for key events
+			if ( event.which == null ) {
+				event.which = original.charCode != null ? original.charCode : original.keyCode;
+			}
+
+			return event;
+		}
+	},
+
+	mouseHooks: {
+		props: ( "button buttons clientX clientY fromElement offsetX offsetY " +
+			"pageX pageY screenX screenY toElement" ).split( " " ),
+		filter: function( event, original ) {
+			var body, eventDoc, doc,
+				button = original.button,
+				fromElement = original.fromElement;
+
+			// Calculate pageX/Y if missing and clientX/Y available
+			if ( event.pageX == null && original.clientX != null ) {
+				eventDoc = event.target.ownerDocument || document;
+				doc = eventDoc.documentElement;
+				body = eventDoc.body;
+
+				event.pageX = original.clientX +
+					( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -
+					( doc && doc.clientLeft || body && body.clientLeft || 0 );
+				event.pageY = original.clientY +
+					( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -
+					( doc && doc.clientTop  || body && body.clientTop  || 0 );
+			}
+
+			// Add relatedTarget, if necessary
+			if ( !event.relatedTarget && fromElement ) {
+				event.relatedTarget = fromElement === event.target ?
+					original.toElement :
+					fromElement;
+			}
+
+			// Add which for click: 1 === left; 2 === middle; 3 === right
+			// Note: button is not normalized, so don't use it
+			if ( !event.which && button !== undefined ) {
+				event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+			}
+
+			return event;
+		}
+	},
+
+	special: {
+		load: {
+
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		focus: {
+
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== safeActiveElement() && this.focus ) {
+					try {
+						this.focus();
+						return false;
+					} catch ( e ) {
+
+						// Support: IE<9
+						// If we error on focus to hidden element (#1486, #12518),
+						// let .trigger() run the handlers
+					}
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === safeActiveElement() && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+		click: {
+
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) {
+					this.click();
+					return false;
+				}
+			},
+
+			// For cross-browser consistency, don't fire native .click() on links
+			_default: function( event ) {
+				return jQuery.nodeName( event.target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	},
+
+	// Piggyback on a donor event to simulate a different one
+	simulate: function( type, elem, event ) {
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true
+
+				// Previously, `originalEvent: {}` was set here, so stopPropagation call
+				// would not be triggered on donor event, since in our own
+				// jQuery.event.stopPropagation function we had a check for existence of
+				// originalEvent.stopPropagation method, so, consequently it would be a noop.
+				//
+				// Guard for simulated events was moved to jQuery.event.stopPropagation function
+				// since `originalEvent` should point to the original event for the
+				// constancy with other events and for more focused logic
+			}
+		);
+
+		jQuery.event.trigger( e, null, elem );
+
+		if ( e.isDefaultPrevented() ) {
+			event.preventDefault();
+		}
+	}
+};
+
+jQuery.removeEvent = document.removeEventListener ?
+	function( elem, type, handle ) {
+
+		// This "if" is needed for plain objects
+		if ( elem.removeEventListener ) {
+			elem.removeEventListener( type, handle );
+		}
+	} :
+	function( elem, type, handle ) {
+		var name = "on" + type;
+
+		if ( elem.detachEvent ) {
+
+			// #8545, #7054, preventing memory leaks for custom events in IE6-8
+			// detachEvent needed property on element, by name of that event,
+			// to properly expose it to GC
+			if ( typeof elem[ name ] === "undefined" ) {
+				elem[ name ] = null;
+			}
+
+			elem.detachEvent( name, handle );
+		}
+	};
+
+jQuery.Event = function( src, props ) {
+
+	// Allow instantiation without the 'new' keyword
+	if ( !( this instanceof jQuery.Event ) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+
+				// Support: IE < 9, Android < 4.0
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	constructor: jQuery.Event,
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+		if ( !e ) {
+			return;
+		}
+
+		// If preventDefault exists, run it on the original event
+		if ( e.preventDefault ) {
+			e.preventDefault();
+
+		// Support: IE
+		// Otherwise set the returnValue property of the original event to false
+		} else {
+			e.returnValue = false;
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( !e || this.isSimulated ) {
+			return;
+		}
+
+		// If stopPropagation exists, run it on the original event
+		if ( e.stopPropagation ) {
+			e.stopPropagation();
+		}
+
+		// Support: IE
+		// Set the cancelBubble property of the original event to true
+		e.cancelBubble = true;
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e && e.stopImmediatePropagation ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://code.google.com/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mouseenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+} );
+
+// IE submit delegation
+if ( !support.submit ) {
+
+	jQuery.event.special.submit = {
+		setup: function() {
+
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Lazy-add a submit handler when a descendant form may potentially be submitted
+			jQuery.event.add( this, "click._submit keypress._submit", function( e ) {
+
+				// Node name check avoids a VML-related crash in IE (#9807)
+				var elem = e.target,
+					form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ?
+
+						// Support: IE <=8
+						// We use jQuery.prop instead of elem.form
+						// to allow fixing the IE8 delegated submit issue (gh-2332)
+						// by 3rd party polyfills/workarounds.
+						jQuery.prop( elem, "form" ) :
+						undefined;
+
+				if ( form && !jQuery._data( form, "submit" ) ) {
+					jQuery.event.add( form, "submit._submit", function( event ) {
+						event._submitBubble = true;
+					} );
+					jQuery._data( form, "submit", true );
+				}
+			} );
+
+			// return undefined since we don't need an event listener
+		},
+
+		postDispatch: function( event ) {
+
+			// If form was submitted by the user, bubble the event up the tree
+			if ( event._submitBubble ) {
+				delete event._submitBubble;
+				if ( this.parentNode && !event.isTrigger ) {
+					jQuery.event.simulate( "submit", this.parentNode, event );
+				}
+			}
+		},
+
+		teardown: function() {
+
+			// Only need this for delegated form submit events
+			if ( jQuery.nodeName( this, "form" ) ) {
+				return false;
+			}
+
+			// Remove delegated handlers; cleanData eventually reaps submit handlers attached above
+			jQuery.event.remove( this, "._submit" );
+		}
+	};
+}
+
+// IE change delegation and checkbox/radio fix
+if ( !support.change ) {
+
+	jQuery.event.special.change = {
+
+		setup: function() {
+
+			if ( rformElems.test( this.nodeName ) ) {
+
+				// IE doesn't fire change on a check/radio until blur; trigger it on click
+				// after a propertychange. Eat the blur-change in special.change.handle.
+				// This still fires onchange a second time for check/radio after blur.
+				if ( this.type === "checkbox" || this.type === "radio" ) {
+					jQuery.event.add( this, "propertychange._change", function( event ) {
+						if ( event.originalEvent.propertyName === "checked" ) {
+							this._justChanged = true;
+						}
+					} );
+					jQuery.event.add( this, "click._change", function( event ) {
+						if ( this._justChanged && !event.isTrigger ) {
+							this._justChanged = false;
+						}
+
+						// Allow triggered, simulated change events (#11500)
+						jQuery.event.simulate( "change", this, event );
+					} );
+				}
+				return false;
+			}
+
+			// Delegated event; lazy-add a change handler on descendant inputs
+			jQuery.event.add( this, "beforeactivate._change", function( e ) {
+				var elem = e.target;
+
+				if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) {
+					jQuery.event.add( elem, "change._change", function( event ) {
+						if ( this.parentNode && !event.isSimulated && !event.isTrigger ) {
+							jQuery.event.simulate( "change", this.parentNode, event );
+						}
+					} );
+					jQuery._data( elem, "change", true );
+				}
+			} );
+		},
+
+		handle: function( event ) {
+			var elem = event.target;
+
+			// Swallow native change events from checkbox/radio, we already triggered them above
+			if ( this !== elem || event.isSimulated || event.isTrigger ||
+				( elem.type !== "radio" && elem.type !== "checkbox" ) ) {
+
+				return event.handleObj.handler.apply( this, arguments );
+			}
+		},
+
+		teardown: function() {
+			jQuery.event.remove( this, "._change" );
+
+			return !rformElems.test( this.nodeName );
+		}
+	};
+}
+
+// Support: Firefox
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome, Safari
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+		};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				var doc = this.ownerDocument || this,
+					attaches = jQuery._data( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				jQuery._data( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this,
+					attaches = jQuery._data( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					jQuery._removeData( doc, fix );
+				} else {
+					jQuery._data( doc, fix, attaches );
+				}
+			}
+		};
+	} );
+}
+
+jQuery.fn.extend( {
+
+	on: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn );
+	},
+	one: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ?
+					handleObj.origType + "." + handleObj.namespace :
+					handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each( function() {
+			jQuery.event.remove( this, types, fn, selector );
+		} );
+	},
+
+	trigger: function( type, data ) {
+		return this.each( function() {
+			jQuery.event.trigger( type, data, this );
+		} );
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[ 0 ];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+} );
+
+
+var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g,
+	rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ),
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,
+
+	// Support: IE 10-11, Edge 10240+
+	// In IE/Edge using regex groups here causes severe slowdowns.
+	// See https://connect.microsoft.com/IE/feedback/details/1736512/
+	rnoInnerhtml = /<script|<style|<link/i,
+
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,
+	safeFragment = createSafeFragment( document ),
+	fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) );
+
+// Support: IE<8
+// Manipulating tables requires a tbody
+function manipulationTarget( elem, content ) {
+	return jQuery.nodeName( elem, "table" ) &&
+		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ?
+
+		elem.getElementsByTagName( "tbody" )[ 0 ] ||
+			elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) :
+		elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+	if ( match ) {
+		elem.type = match[ 1 ];
+	} else {
+		elem.removeAttribute( "type" );
+	}
+	return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+	if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {
+		return;
+	}
+
+	var type, i, l,
+		oldData = jQuery._data( src ),
+		curData = jQuery._data( dest, oldData ),
+		events = oldData.events;
+
+	if ( events ) {
+		delete curData.handle;
+		curData.events = {};
+
+		for ( type in events ) {
+			for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+				jQuery.event.add( dest, type, events[ type ][ i ] );
+			}
+		}
+	}
+
+	// make the cloned public data object a copy from the original
+	if ( curData.data ) {
+		curData.data = jQuery.extend( {}, curData.data );
+	}
+}
+
+function fixCloneNodeIssues( src, dest ) {
+	var nodeName, e, data;
+
+	// We do not need to do anything for non-Elements
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	nodeName = dest.nodeName.toLowerCase();
+
+	// IE6-8 copies events bound via attachEvent when using cloneNode.
+	if ( !support.noCloneEvent && dest[ jQuery.expando ] ) {
+		data = jQuery._data( dest );
+
+		for ( e in data.events ) {
+			jQuery.removeEvent( dest, e, data.handle );
+		}
+
+		// Event data gets referenced instead of copied if the expando gets copied too
+		dest.removeAttribute( jQuery.expando );
+	}
+
+	// IE blanks contents when cloning scripts, and tries to evaluate newly-set text
+	if ( nodeName === "script" && dest.text !== src.text ) {
+		disableScript( dest ).text = src.text;
+		restoreScript( dest );
+
+	// IE6-10 improperly clones children of object elements using classid.
+	// IE10 throws NoModificationAllowedError if parent is null, #12132.
+	} else if ( nodeName === "object" ) {
+		if ( dest.parentNode ) {
+			dest.outerHTML = src.outerHTML;
+		}
+
+		// This path appears unavoidable for IE9. When cloning an object
+		// element in IE9, the outerHTML strategy above is not sufficient.
+		// If the src has innerHTML and the destination does not,
+		// copy the src.innerHTML into the dest.innerHTML. #10324
+		if ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) {
+			dest.innerHTML = src.innerHTML;
+		}
+
+	} else if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+
+		// IE6-8 fails to persist the checked state of a cloned checkbox
+		// or radio button. Worse, IE6-7 fail to give the cloned element
+		// a checked appearance if the defaultChecked value isn't also set
+
+		dest.defaultChecked = dest.checked = src.checked;
+
+		// IE6-7 get confused and end up setting the value of a cloned
+		// checkbox/radio button to an empty string instead of "on"
+		if ( dest.value !== src.value ) {
+			dest.value = src.value;
+		}
+
+	// IE6-8 fails to return the selected option to the default selected
+	// state when cloning options
+	} else if ( nodeName === "option" ) {
+		dest.defaultSelected = dest.selected = src.defaultSelected;
+
+	// IE6-8 fails to set the defaultValue to the correct value when
+	// cloning other types of input fields
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+	// Flatten any nested arrays
+	args = concat.apply( [], args );
+
+	var first, node, hasScripts,
+		scripts, doc, fragment,
+		i = 0,
+		l = collection.length,
+		iNoClone = l - 1,
+		value = args[ 0 ],
+		isFunction = jQuery.isFunction( value );
+
+	// We can't cloneNode fragments that contain checked, in WebKit
+	if ( isFunction ||
+			( l > 1 && typeof value === "string" &&
+				!support.checkClone && rchecked.test( value ) ) ) {
+		return collection.each( function( index ) {
+			var self = collection.eq( index );
+			if ( isFunction ) {
+				args[ 0 ] = value.call( this, index, self.html() );
+			}
+			domManip( self, args, callback, ignored );
+		} );
+	}
+
+	if ( l ) {
+		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+		first = fragment.firstChild;
+
+		if ( fragment.childNodes.length === 1 ) {
+			fragment = first;
+		}
+
+		// Require either new content or an interest in ignored elements to invoke the callback
+		if ( first || ignored ) {
+			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+			hasScripts = scripts.length;
+
+			// Use the original fragment for the last item
+			// instead of the first because it can end up
+			// being emptied incorrectly in certain situations (#8070).
+			for ( ; i < l; i++ ) {
+				node = fragment;
+
+				if ( i !== iNoClone ) {
+					node = jQuery.clone( node, true, true );
+
+					// Keep references to cloned scripts for later restoration
+					if ( hasScripts ) {
+
+						// Support: Android<4.1, PhantomJS<2
+						// push.apply(_, arraylike) throws on ancient WebKit
+						jQuery.merge( scripts, getAll( node, "script" ) );
+					}
+				}
+
+				callback.call( collection[ i ], node, i );
+			}
+
+			if ( hasScripts ) {
+				doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+				// Reenable scripts
+				jQuery.map( scripts, restoreScript );
+
+				// Evaluate executable scripts on first document insertion
+				for ( i = 0; i < hasScripts; i++ ) {
+					node = scripts[ i ];
+					if ( rscriptType.test( node.type || "" ) &&
+						!jQuery._data( node, "globalEval" ) &&
+						jQuery.contains( doc, node ) ) {
+
+						if ( node.src ) {
+
+							// Optional AJAX dependency, but won't run scripts if not present
+							if ( jQuery._evalUrl ) {
+								jQuery._evalUrl( node.src );
+							}
+						} else {
+							jQuery.globalEval(
+								( node.text || node.textContent || node.innerHTML || "" )
+									.replace( rcleanScript, "" )
+							);
+						}
+					}
+				}
+			}
+
+			// Fix #11809: Avoid leaking memory
+			fragment = first = null;
+		}
+	}
+
+	return collection;
+}
+
+function remove( elem, selector, keepData ) {
+	var node,
+		elems = selector ? jQuery.filter( selector, elem ) : elem,
+		i = 0;
+
+	for ( ; ( node = elems[ i ] ) != null; i++ ) {
+
+		if ( !keepData && node.nodeType === 1 ) {
+			jQuery.cleanData( getAll( node ) );
+		}
+
+		if ( node.parentNode ) {
+			if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+				setGlobalEval( getAll( node, "script" ) );
+			}
+			node.parentNode.removeChild( node );
+		}
+	}
+
+	return elem;
+}
+
+jQuery.extend( {
+	htmlPrefilter: function( html ) {
+		return html.replace( rxhtmlTag, "<$1></$2>" );
+	},
+
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var destElements, node, clone, i, srcElements,
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		if ( support.html5Clone || jQuery.isXMLDoc( elem ) ||
+			!rnoshimcache.test( "<" + elem.nodeName + ">" ) ) {
+
+			clone = elem.cloneNode( true );
+
+		// IE<=8 does not properly clone detached, unknown element nodes
+		} else {
+			fragmentDiv.innerHTML = elem.outerHTML;
+			fragmentDiv.removeChild( clone = fragmentDiv.firstChild );
+		}
+
+		if ( ( !support.noCloneEvent || !support.noCloneChecked ) &&
+				( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			// Fix all IE cloning issues
+			for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) {
+
+				// Ensure that the destination node is not null; Fixes #9587
+				if ( destElements[ i ] ) {
+					fixCloneNodeIssues( node, destElements[ i ] );
+				}
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) {
+					cloneCopyEvent( node, destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		destElements = srcElements = node = null;
+
+		// Return the cloned set
+		return clone;
+	},
+
+	cleanData: function( elems, /* internal */ forceAcceptData ) {
+		var elem, type, id, data,
+			i = 0,
+			internalKey = jQuery.expando,
+			cache = jQuery.cache,
+			attributes = support.attributes,
+			special = jQuery.event.special;
+
+		for ( ; ( elem = elems[ i ] ) != null; i++ ) {
+			if ( forceAcceptData || acceptData( elem ) ) {
+
+				id = elem[ internalKey ];
+				data = id && cache[ id ];
+
+				if ( data ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Remove cache only if it was not already removed by jQuery.event.remove
+					if ( cache[ id ] ) {
+
+						delete cache[ id ];
+
+						// Support: IE<9
+						// IE does not allow us to delete expando properties from nodes
+						// IE creates expando attributes along with the property
+						// IE does not have a removeAttribute function on Document nodes
+						if ( !attributes && typeof elem.removeAttribute !== "undefined" ) {
+							elem.removeAttribute( internalKey );
+
+						// Webkit & Blink performance suffers when deleting properties
+						// from DOM nodes, so set to undefined instead
+						// https://code.google.com/p/chromium/issues/detail?id=378607
+						} else {
+							elem[ internalKey ] = undefined;
+						}
+
+						deletedIds.push( id );
+					}
+				}
+			}
+		}
+	}
+} );
+
+jQuery.fn.extend( {
+
+	// Keep domManip exposed until 3.0 (gh-2225)
+	domManip: domManip,
+
+	detach: function( selector ) {
+		return remove( this, selector, true );
+	},
+
+	remove: function( selector ) {
+		return remove( this, selector );
+	},
+
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().append(
+					( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value )
+				);
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		} );
+	},
+
+	prepend: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		} );
+	},
+
+	before: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		} );
+	},
+
+	after: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		} );
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; ( elem = this[ i ] ) != null; i++ ) {
+
+			// Remove element nodes and prevent memory leaks
+			if ( elem.nodeType === 1 ) {
+				jQuery.cleanData( getAll( elem, false ) );
+			}
+
+			// Remove any remaining nodes
+			while ( elem.firstChild ) {
+				elem.removeChild( elem.firstChild );
+			}
+
+			// If this is a select, ensure that it displays empty (#12336)
+			// Support: IE<9
+			if ( elem.options && jQuery.nodeName( elem, "select" ) ) {
+				elem.options.length = 0;
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		} );
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined ) {
+				return elem.nodeType === 1 ?
+					elem.innerHTML.replace( rinlinejQuery, "" ) :
+					undefined;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				( support.htmlSerialize || !rnoshimcache.test( value )  ) &&
+				( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = jQuery.htmlPrefilter( value );
+
+				try {
+					for ( ; i < l; i++ ) {
+
+						// Remove element nodes and prevent memory leaks
+						elem = this[ i ] || {};
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch ( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var ignored = [];
+
+		// Make the changes, replacing each non-ignored context element with the new content
+		return domManip( this, arguments, function( elem ) {
+			var parent = this.parentNode;
+
+			if ( jQuery.inArray( this, ignored ) < 0 ) {
+				jQuery.cleanData( getAll( this ) );
+				if ( parent ) {
+					parent.replaceChild( elem, this );
+				}
+			}
+
+		// Force callback invocation
+		}, ignored );
+	}
+} );
+
+jQuery.each( {
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			i = 0,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+} );
+
+
+var iframe,
+	elemdisplay = {
+
+		// Support: Firefox
+		// We have to pre-define these values for FF (#10227)
+		HTML: "block",
+		BODY: "block"
+	};
+
+/**
+ * Retrieve the actual display of a element
+ * @param {String} name nodeName of the element
+ * @param {Object} doc Document object
+ */
+
+// Called only from within defaultDisplay
+function actualDisplay( name, doc ) {
+	var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),
+
+		display = jQuery.css( elem[ 0 ], "display" );
+
+	// We don't have any data stored on the element,
+	// so use "detach" method as fast way to get rid of the element
+	elem.detach();
+
+	return display;
+}
+
+/**
+ * Try to determine the default display value of an element
+ * @param {String} nodeName
+ */
+function defaultDisplay( nodeName ) {
+	var doc = document,
+		display = elemdisplay[ nodeName ];
+
+	if ( !display ) {
+		display = actualDisplay( nodeName, doc );
+
+		// If the simple way fails, read from inside an iframe
+		if ( display === "none" || !display ) {
+
+			// Use the already-created iframe if possible
+			iframe = ( iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" ) )
+				.appendTo( doc.documentElement );
+
+			// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse
+			doc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;
+
+			// Support: IE
+			doc.write();
+			doc.close();
+
+			display = actualDisplay( nodeName, doc );
+			iframe.detach();
+		}
+
+		// Store the correct default display
+		elemdisplay[ nodeName ] = display;
+	}
+
+	return display;
+}
+var rmargin = ( /^margin/ );
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var swap = function( elem, options, callback, args ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.apply( elem, args || [] );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+var documentElement = document.documentElement;
+
+
+
+( function() {
+	var pixelPositionVal, pixelMarginRightVal, boxSizingReliableVal,
+		reliableHiddenOffsetsVal, reliableMarginRightVal, reliableMarginLeftVal,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	// Finish early in limited (non-browser) environments
+	if ( !div.style ) {
+		return;
+	}
+
+	div.style.cssText = "float:left;opacity:.5";
+
+	// Support: IE<9
+	// Make sure that element opacity exists (as opposed to filter)
+	support.opacity = div.style.opacity === "0.5";
+
+	// Verify style float existence
+	// (IE uses styleFloat instead of cssFloat)
+	support.cssFloat = !!div.style.cssFloat;
+
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	container = document.createElement( "div" );
+	container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
+		"padding:0;margin-top:1px;position:absolute";
+	div.innerHTML = "";
+	container.appendChild( div );
+
+	// Support: Firefox<29, Android 2.3
+	// Vendor-prefix box-sizing
+	support.boxSizing = div.style.boxSizing === "" || div.style.MozBoxSizing === "" ||
+		div.style.WebkitBoxSizing === "";
+
+	jQuery.extend( support, {
+		reliableHiddenOffsets: function() {
+			if ( pixelPositionVal == null ) {
+				computeStyleTests();
+			}
+			return reliableHiddenOffsetsVal;
+		},
+
+		boxSizingReliable: function() {
+
+			// We're checking for pixelPositionVal here instead of boxSizingReliableVal
+			// since that compresses better and they're computed together anyway.
+			if ( pixelPositionVal == null ) {
+				computeStyleTests();
+			}
+			return boxSizingReliableVal;
+		},
+
+		pixelMarginRight: function() {
+
+			// Support: Android 4.0-4.3
+			if ( pixelPositionVal == null ) {
+				computeStyleTests();
+			}
+			return pixelMarginRightVal;
+		},
+
+		pixelPosition: function() {
+			if ( pixelPositionVal == null ) {
+				computeStyleTests();
+			}
+			return pixelPositionVal;
+		},
+
+		reliableMarginRight: function() {
+
+			// Support: Android 2.3
+			if ( pixelPositionVal == null ) {
+				computeStyleTests();
+			}
+			return reliableMarginRightVal;
+		},
+
+		reliableMarginLeft: function() {
+
+			// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37
+			if ( pixelPositionVal == null ) {
+				computeStyleTests();
+			}
+			return reliableMarginLeftVal;
+		}
+	} );
+
+	function computeStyleTests() {
+		var contents, divStyle,
+			documentElement = document.documentElement;
+
+		// Setup
+		documentElement.appendChild( container );
+
+		div.style.cssText =
+
+			// Support: Android 2.3
+			// Vendor-prefix box-sizing
+			"-webkit-box-sizing:border-box;box-sizing:border-box;" +
+			"position:relative;display:block;" +
+			"margin:auto;border:1px;padding:1px;" +
+			"top:1%;width:50%";
+
+		// Support: IE<9
+		// Assume reasonable values in the absence of getComputedStyle
+		pixelPositionVal = boxSizingReliableVal = reliableMarginLeftVal = false;
+		pixelMarginRightVal = reliableMarginRightVal = true;
+
+		// Check for getComputedStyle so that this code is not run in IE<9.
+		if ( window.getComputedStyle ) {
+			divStyle = window.getComputedStyle( div );
+			pixelPositionVal = ( divStyle || {} ).top !== "1%";
+			reliableMarginLeftVal = ( divStyle || {} ).marginLeft === "2px";
+			boxSizingReliableVal = ( divStyle || { width: "4px" } ).width === "4px";
+
+			// Support: Android 4.0 - 4.3 only
+			// Some styles come back with percentage values, even though they shouldn't
+			div.style.marginRight = "50%";
+			pixelMarginRightVal = ( divStyle || { marginRight: "4px" } ).marginRight === "4px";
+
+			// Support: Android 2.3 only
+			// Div with explicit width and no margin-right incorrectly
+			// gets computed margin-right based on width of container (#3333)
+			// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right
+			contents = div.appendChild( document.createElement( "div" ) );
+
+			// Reset CSS: box-sizing; display; margin; border; padding
+			contents.style.cssText = div.style.cssText =
+
+				// Support: Android 2.3
+				// Vendor-prefix box-sizing
+				"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" +
+				"box-sizing:content-box;display:block;margin:0;border:0;padding:0";
+			contents.style.marginRight = contents.style.width = "0";
+			div.style.width = "1px";
+
+			reliableMarginRightVal =
+				!parseFloat( ( window.getComputedStyle( contents ) || {} ).marginRight );
+
+			div.removeChild( contents );
+		}
+
+		// Support: IE6-8
+		// First check that getClientRects works as expected
+		// Check if table cells still have offsetWidth/Height when they are set
+		// to display:none and there are still other visible table cells in a
+		// table row; if so, offsetWidth/Height are not reliable for use when
+		// determining if an element has been hidden directly using
+		// display:none (it is still safe to use offsets if a parent element is
+		// hidden; don safety goggles and see bug #4512 for more information).
+		div.style.display = "none";
+		reliableHiddenOffsetsVal = div.getClientRects().length === 0;
+		if ( reliableHiddenOffsetsVal ) {
+			div.style.display = "";
+			div.innerHTML = "<table><tr><td></td><td>t</td></tr></table>";
+			contents = div.getElementsByTagName( "td" );
+			contents[ 0 ].style.cssText = "margin:0;border:0;padding:0;display:none";
+			reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
+			if ( reliableHiddenOffsetsVal ) {
+				contents[ 0 ].style.display = "";
+				contents[ 1 ].style.display = "none";
+				reliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;
+			}
+		}
+
+		// Teardown
+		documentElement.removeChild( container );
+	}
+
+} )();
+
+
+var getStyles, curCSS,
+	rposition = /^(top|right|bottom|left)$/;
+
+if ( window.getComputedStyle ) {
+	getStyles = function( elem ) {
+
+		// Support: IE<=11+, Firefox<=30+ (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		var view = elem.ownerDocument.defaultView;
+
+		if ( !view || !view.opener ) {
+			view = window;
+		}
+
+		return view.getComputedStyle( elem );
+	};
+
+	curCSS = function( elem, name, computed ) {
+		var width, minWidth, maxWidth, ret,
+			style = elem.style;
+
+		computed = computed || getStyles( elem );
+
+		// getPropertyValue is only needed for .css('filter') in IE9, see #12537
+		ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;
+
+		// Support: Opera 12.1x only
+		// Fall back to style even without computed
+		// computed is undefined for elems on document fragments
+		if ( ( ret === "" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {
+			ret = jQuery.style( elem, name );
+		}
+
+		if ( computed ) {
+
+			// A tribute to the "awesome hack by Dean Edwards"
+			// Chrome < 17 and Safari 5.0 uses "computed value"
+			// instead of "used value" for margin-right
+			// Safari 5.1.7 (at least) returns percentage for a larger set of values,
+			// but width seems to be reliably pixels
+			// this is against the CSSOM draft spec:
+			// http://dev.w3.org/csswg/cssom/#resolved-values
+			if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+				// Remember the original values
+				width = style.width;
+				minWidth = style.minWidth;
+				maxWidth = style.maxWidth;
+
+				// Put in the new values to get a computed value out
+				style.minWidth = style.maxWidth = style.width = ret;
+				ret = computed.width;
+
+				// Revert the changed values
+				style.width = width;
+				style.minWidth = minWidth;
+				style.maxWidth = maxWidth;
+			}
+		}
+
+		// Support: IE
+		// IE returns zIndex value as an integer.
+		return ret === undefined ?
+			ret :
+			ret + "";
+	};
+} else if ( documentElement.currentStyle ) {
+	getStyles = function( elem ) {
+		return elem.currentStyle;
+	};
+
+	curCSS = function( elem, name, computed ) {
+		var left, rs, rsLeft, ret,
+			style = elem.style;
+
+		computed = computed || getStyles( elem );
+		ret = computed ? computed[ name ] : undefined;
+
+		// Avoid setting ret to empty string here
+		// so we don't default to auto
+		if ( ret == null && style && style[ name ] ) {
+			ret = style[ name ];
+		}
+
+		// From the awesome hack by Dean Edwards
+		// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
+
+		// If we're not dealing with a regular pixel number
+		// but a number that has a weird ending, we need to convert it to pixels
+		// but not position css attributes, as those are
+		// proportional to the parent element instead
+		// and we can't measure the parent instead because it
+		// might trigger a "stacking dolls" problem
+		if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {
+
+			// Remember the original values
+			left = style.left;
+			rs = elem.runtimeStyle;
+			rsLeft = rs && rs.left;
+
+			// Put in the new values to get a computed value out
+			if ( rsLeft ) {
+				rs.left = elem.currentStyle.left;
+			}
+			style.left = name === "fontSize" ? "1em" : ret;
+			ret = style.pixelLeft + "px";
+
+			// Revert the changed values
+			style.left = left;
+			if ( rsLeft ) {
+				rs.left = rsLeft;
+			}
+		}
+
+		// Support: IE
+		// IE returns zIndex value as an integer.
+		return ret === undefined ?
+			ret :
+			ret + "" || "auto";
+	};
+}
+
+
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+
+				// Hook not needed (or it's not possible to use it due
+				// to missing dependency), remove it.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+			return ( this.get = hookFn ).apply( this, arguments );
+		}
+	};
+}
+
+
+var
+
+		ralpha = /alpha\([^)]*\)/i,
+	ropacity = /opacity\s*=\s*([^)]*)/i,
+
+	// swappable if display is none or starts with table except
+	// "table", "table-cell", or "table-caption"
+	// see here for display values:
+	// https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ),
+
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	},
+
+	cssPrefixes = [ "Webkit", "O", "Moz", "ms" ],
+	emptyStyle = document.createElement( "div" ).style;
+
+
+// return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
+
+	// shortcut for names that are not vendor prefixed
+	if ( name in emptyStyle ) {
+		return name;
+	}
+
+	// check for vendor prefixed names
+	var capName = name.charAt( 0 ).toUpperCase() + name.slice( 1 ),
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in emptyStyle ) {
+			return name;
+		}
+	}
+}
+
+function showHide( elements, show ) {
+	var display, elem, hidden,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		values[ index ] = jQuery._data( elem, "olddisplay" );
+		display = elem.style.display;
+		if ( show ) {
+
+			// Reset the inline display of this element to learn if it is
+			// being hidden by cascaded rules or not
+			if ( !values[ index ] && display === "none" ) {
+				elem.style.display = "";
+			}
+
+			// Set elements which have been overridden with display: none
+			// in a stylesheet to whatever the default browser style is
+			// for such an element
+			if ( elem.style.display === "" && isHidden( elem ) ) {
+				values[ index ] =
+					jQuery._data( elem, "olddisplay", defaultDisplay( elem.nodeName ) );
+			}
+		} else {
+			hidden = isHidden( elem );
+
+			if ( display && display !== "none" || !hidden ) {
+				jQuery._data(
+					elem,
+					"olddisplay",
+					hidden ? display : jQuery.css( elem, "display" )
+				);
+			}
+		}
+	}
+
+	// Set the display of most of the elements in a second loop
+	// to avoid the constant reflow
+	for ( index = 0; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+		if ( !show || elem.style.display === "none" || elem.style.display === "" ) {
+			elem.style.display = show ? values[ index ] || "" : "none";
+		}
+	}
+
+	return elements;
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+	var matches = rnumsplit.exec( value );
+	return matches ?
+
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+
+		// If we already have the right measurement, avoid augmentation
+		4 :
+
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+
+		// both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// at this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+
+			// at this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// at this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var valueIsBorderBox = true,
+		val = name === "width" ? elem.offsetWidth : elem.offsetHeight,
+		styles = getStyles( elem ),
+		isBorderBox = support.boxSizing &&
+			jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// Support: IE11 only
+	// In IE 11 fullscreen elements inside of an iframe have
+	// 100x too small dimensions (gh-1764).
+	if ( document.msFullscreenElement && window.top !== window ) {
+
+		// Support: IE11 only
+		// Running getBoundingClientRect on a disconnected node
+		// in IE throws an error.
+		if ( elem.getClientRects().length ) {
+			val = Math.round( elem.getBoundingClientRect()[ name ] * 100 );
+		}
+	}
+
+	// some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test( val ) ) {
+			return val;
+		}
+
+		// we need the check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox &&
+			( support.boxSizingReliable() || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+jQuery.extend( {
+
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"animationIterationCount": true,
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+
+		// normalize float css property
+		"float": support.cssFloat ? "cssFloat" : "styleFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] ||
+			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Convert "+=" or "-=" to relative numbers (#7345)
+			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+				value = adjustCSS( elem, name, ret );
+
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set. See: #7116
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add the unit (except for certain CSS properties)
+			if ( type === "number" ) {
+				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+			}
+
+			// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,
+			// but it would mean to define eight
+			// (for every problematic property) identical functions
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !( "set" in hooks ) ||
+				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+				// Support: IE
+				// Swallow errors from 'invalid' CSS values (#5509)
+				try {
+					style[ name ] = value;
+				} catch ( e ) {}
+			}
+
+		} else {
+
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks &&
+				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var num, val, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] ||
+			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
+
+		// gets hook for the prefixed version
+		// followed by the unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		//convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Return, converting to number if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || isFinite( num ) ? num || 0 : val;
+		}
+		return val;
+	}
+} );
+
+jQuery.each( [ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+
+				// certain elements can have dimension info if we invisibly show them
+				// however, it must have a current display style that would benefit from this
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+					elem.offsetWidth === 0 ?
+						swap( elem, cssShow, function() {
+							return getWidthOrHeight( elem, name, extra );
+						} ) :
+						getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var styles = extra && getStyles( elem );
+			return setPositiveNumber( elem, value, extra ?
+				augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					support.boxSizing &&
+						jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				) : 0
+			);
+		}
+	};
+} );
+
+if ( !support.opacity ) {
+	jQuery.cssHooks.opacity = {
+		get: function( elem, computed ) {
+
+			// IE uses filters for opacity
+			return ropacity.test( ( computed && elem.currentStyle ?
+				elem.currentStyle.filter :
+				elem.style.filter ) || "" ) ?
+					( 0.01 * parseFloat( RegExp.$1 ) ) + "" :
+					computed ? "1" : "";
+		},
+
+		set: function( elem, value ) {
+			var style = elem.style,
+				currentStyle = elem.currentStyle,
+				opacity = jQuery.isNumeric( value ) ? "alpha(opacity=" + value * 100 + ")" : "",
+				filter = currentStyle && currentStyle.filter || style.filter || "";
+
+			// IE has trouble with opacity if it does not have layout
+			// Force it by setting the zoom level
+			style.zoom = 1;
+
+			// if setting opacity to 1, and no other filters exist -
+			// attempt to remove filter attribute #6652
+			// if value === "", then remove inline opacity #12685
+			if ( ( value >= 1 || value === "" ) &&
+					jQuery.trim( filter.replace( ralpha, "" ) ) === "" &&
+					style.removeAttribute ) {
+
+				// Setting style.filter to null, "" & " " still leave "filter:" in the cssText
+				// if "filter:" is present at all, clearType is disabled, we want to avoid this
+				// style.removeAttribute is IE Only, but so apparently is this code path...
+				style.removeAttribute( "filter" );
+
+				// if there is no filter style applied in a css rule
+				// or unset inline opacity, we are done
+				if ( value === "" || currentStyle && !currentStyle.filter ) {
+					return;
+				}
+			}
+
+			// otherwise, set new filter values
+			style.filter = ralpha.test( filter ) ?
+				filter.replace( ralpha, opacity ) :
+				filter + " " + opacity;
+		}
+	};
+}
+
+jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,
+	function( elem, computed ) {
+		if ( computed ) {
+			return swap( elem, { "display": "inline-block" },
+				curCSS, [ elem, "marginRight" ] );
+		}
+	}
+);
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+	function( elem, computed ) {
+		if ( computed ) {
+			return (
+				parseFloat( curCSS( elem, "marginLeft" ) ) ||
+
+				// Support: IE<=11+
+				// Running getBoundingClientRect on a disconnected node in IE throws an error
+				// Support: IE8 only
+				// getClientRects() errors on disconnected elems
+				( jQuery.contains( elem.ownerDocument, elem ) ?
+					elem.getBoundingClientRect().left -
+						swap( elem, { marginLeft: 0 }, function() {
+							return elem.getBoundingClientRect().left;
+						} ) :
+					0
+				)
+			) + "px";
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// assumes a single number if not a string
+				parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+} );
+
+jQuery.fn.extend( {
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	},
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each( function() {
+			if ( isHidden( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		} );
+	}
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || jQuery.easing._default;
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			// Use a property on the element directly when it is not a DOM element,
+			// or when there is no matching style property that exists.
+			if ( tween.elem.nodeType !== 1 ||
+				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails
+			// so, simple values such as "10px" are parsed to Float.
+			// complex values such as "rotate(1rad)" are returned as is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+
+			// use step hook for back compat - use cssHook if its there - use .style if its
+			// available and use plain properties where available
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.nodeType === 1 &&
+				( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
+					jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE <=9
+// Panic based approach to setting things on disconnected nodes
+
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	},
+	_default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back Compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rrun = /queueHooks$/;
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	window.setTimeout( function() {
+		fxNow = undefined;
+	} );
+	return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		attrs = { height: type },
+		i = 0;
+
+	// if we include width, step value is 1 to do all cssExpand values,
+	// if we don't include width, step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4 ; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+			// we're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	/* jshint validthis: true */
+	var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHidden( elem ),
+		dataShow = jQuery._data( elem, "fxshow" );
+
+	// handle queue: false promises
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always( function() {
+
+			// doing this makes sure that the complete handler will be called
+			// before this completes
+			anim.always( function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			} );
+		} );
+	}
+
+	// height/width overflow pass
+	if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) {
+
+		// Make sure that nothing sneaks out
+		// Record all 3 overflow attributes because IE does not
+		// change the overflow attribute when overflowX and
+		// overflowY are set to the same value
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Set display property to inline-block for height/width
+		// animations on inline elements that are having width/height animated
+		display = jQuery.css( elem, "display" );
+
+		// Test default display if display is currently "none"
+		checkDisplay = display === "none" ?
+			jQuery._data( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display;
+
+		if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) {
+
+			// inline-level elements accept inline-block;
+			// block-level elements need to be inline with layout
+			if ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === "inline" ) {
+				style.display = "inline-block";
+			} else {
+				style.zoom = 1;
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		if ( !support.shrinkWrapBlocks() ) {
+			anim.always( function() {
+				style.overflow = opts.overflow[ 0 ];
+				style.overflowX = opts.overflow[ 1 ];
+				style.overflowY = opts.overflow[ 2 ];
+			} );
+		}
+	}
+
+	// show/hide pass
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.exec( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// If there is dataShow left over from a stopped hide or show
+				// and we are going to proceed with show, we should pretend to be hidden
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+
+		// Any non-fx value stops us from restoring the original display value
+		} else {
+			display = undefined;
+		}
+	}
+
+	if ( !jQuery.isEmptyObject( orig ) ) {
+		if ( dataShow ) {
+			if ( "hidden" in dataShow ) {
+				hidden = dataShow.hidden;
+			}
+		} else {
+			dataShow = jQuery._data( elem, "fxshow", {} );
+		}
+
+		// store state if its toggle - enables .stop().toggle() to "reverse"
+		if ( toggle ) {
+			dataShow.hidden = !hidden;
+		}
+		if ( hidden ) {
+			jQuery( elem ).show();
+		} else {
+			anim.done( function() {
+				jQuery( elem ).hide();
+			} );
+		}
+		anim.done( function() {
+			var prop;
+			jQuery._removeData( elem, "fxshow" );
+			for ( prop in orig ) {
+				jQuery.style( elem, prop, orig[ prop ] );
+			}
+		} );
+		for ( prop in orig ) {
+			tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+
+			if ( !( prop in dataShow ) ) {
+				dataShow[ prop ] = tween.start;
+				if ( hidden ) {
+					tween.end = tween.start;
+					tween.start = prop === "width" || prop === "height" ? 1 : 0;
+				}
+			}
+		}
+
+	// If this is a noop like .hide().hide(), restore an overwritten display value
+	} else if ( ( display === "none" ? defaultDisplay( elem.nodeName ) : display ) === "inline" ) {
+		style.display = display;
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// not quite $.extend, this wont overwrite keys already present.
+			// also - reusing 'index' from above because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = Animation.prefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+
+			// don't match elem in the :animated selector
+			delete tick.elem;
+		} ),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+				// Support: Android 2.3
+				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length ; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise( {
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, {
+				specialEasing: {},
+				easing: jQuery.easing._default
+			}, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+
+					// if we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length ; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// resolve when we played the last frame
+				// otherwise, reject
+				if ( gotoEnd ) {
+					deferred.notifyWith( elem, [ animation, 1, 0 ] );
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		} ),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length ; index++ ) {
+		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			if ( jQuery.isFunction( result.stop ) ) {
+				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+					jQuery.proxy( result.stop, result );
+			}
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		} )
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweeners: {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value );
+			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+			return tween;
+		} ]
+	},
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.match( rnotwhite );
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length ; index++ ) {
+			prop = props[ index ];
+			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+			Animation.tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilters: [ defaultPrefilter ],
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			Animation.prefilters.unshift( callback );
+		} else {
+			Animation.prefilters.push( callback );
+		}
+	}
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
+		opt.duration in jQuery.fx.speeds ?
+			jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+
+	// normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend( {
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// show any hidden elements after setting opacity to 0
+		return this.filter( isHidden ).css( "opacity", 0 ).show()
+
+			// animate to the value specified
+			.end().animate( { opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || jQuery._data( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each( function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = jQuery._data( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this &&
+					( type == null || timers[ index ].queue === type ) ) {
+
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// start the next in the queue if the last step wasn't forced
+			// timers currently will call their complete callbacks, which will dequeue
+			// but only if they were gotoEnd
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		} );
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each( function() {
+			var index,
+				data = jQuery._data( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// enable finishing flag on private data
+			data.finish = true;
+
+			// empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// turn off finishing flag
+			delete data.finish;
+		} );
+	}
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+	slideDown: genFx( "show" ),
+	slideUp: genFx( "hide" ),
+	slideToggle: genFx( "toggle" ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		timers = jQuery.timers,
+		i = 0;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	if ( timer() ) {
+		jQuery.fx.start();
+	} else {
+		jQuery.timers.pop();
+	}
+};
+
+jQuery.fx.interval = 13;
+
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	window.clearInterval( timerId );
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = window.setTimeout( next, time );
+		hooks.stop = function() {
+			window.clearTimeout( timeout );
+		};
+	} );
+};
+
+
+( function() {
+	var a,
+		input = document.createElement( "input" ),
+		div = document.createElement( "div" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	// Setup
+	div = document.createElement( "div" );
+	div.setAttribute( "className", "t" );
+	div.innerHTML = "  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>";
+	a = div.getElementsByTagName( "a" )[ 0 ];
+
+	// Support: Windows Web Apps (WWA)
+	// `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "checkbox" );
+	div.appendChild( input );
+
+	a = div.getElementsByTagName( "a" )[ 0 ];
+
+	// First batch of tests.
+	a.style.cssText = "top:1px";
+
+	// Test setAttribute on camelCase class.
+	// If it works, we need attrFixes when doing get/setAttribute (ie6/7)
+	support.getSetAttribute = div.className !== "t";
+
+	// Get the style information from getAttribute
+	// (IE uses .cssText instead)
+	support.style = /top/.test( a.getAttribute( "style" ) );
+
+	// Make sure that URLs aren't manipulated
+	// (IE normalizes it by default)
+	support.hrefNormalized = a.getAttribute( "href" ) === "/a";
+
+	// Check the default checkbox/radio value ("" on WebKit; "on" elsewhere)
+	support.checkOn = !!input.value;
+
+	// Make sure that a selected-by-default option has a working selected property.
+	// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
+	support.optSelected = opt.selected;
+
+	// Tests for enctype support on a form (#6743)
+	support.enctype = !!document.createElement( "form" ).enctype;
+
+	// Make sure that the options inside disabled selects aren't marked as disabled
+	// (WebKit marks them as disabled)
+	select.disabled = true;
+	support.optDisabled = !opt.disabled;
+
+	// Support: IE8 only
+	// Check if we can trust getAttribute("value")
+	input = document.createElement( "input" );
+	input.setAttribute( "value", "" );
+	support.input = input.getAttribute( "value" ) === "";
+
+	// Check if an input maintains its value after becoming a radio
+	input.value = "t";
+	input.setAttribute( "type", "radio" );
+	support.radioValue = input.value === "t";
+} )();
+
+
+var rreturn = /\r/g;
+
+jQuery.fn.extend( {
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[ 0 ];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] ||
+					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if (
+					hooks &&
+					"get" in hooks &&
+					( ret = hooks.get( elem, "value" ) ) !== undefined
+				) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+
+					// handle most common string cases
+					ret.replace( rreturn, "" ) :
+
+					// handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each( function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+			} else if ( typeof val === "number" ) {
+				val += "";
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				} );
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		} );
+	}
+} );
+
+jQuery.extend( {
+	valHooks: {
+		option: {
+			get: function( elem ) {
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+
+					// Support: IE10-11+
+					// option.text throws exceptions (#14686, #14858)
+					jQuery.trim( jQuery.text( elem ) );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one" || index < 0,
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// oldIE doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+
+							// Don't return options that are disabled or in a disabled optgroup
+							( support.optDisabled ?
+								!option.disabled :
+								option.getAttribute( "disabled" ) === null ) &&
+							( !option.parentNode.disabled ||
+								!jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+
+					if ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) >= 0 ) {
+
+						// Support: IE6
+						// When new option element is added to select box we need to
+						// force reflow of newly added node in order to workaround delay
+						// of initialization properties
+						try {
+							option.selected = optionSet = true;
+
+						} catch ( _ ) {
+
+							// Will be executed only in IE6
+							option.scrollHeight;
+						}
+
+					} else {
+						option.selected = false;
+					}
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+
+				return options;
+			}
+		}
+	}
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+		};
+	}
+} );
+
+
+
+
+var nodeHook, boolHook,
+	attrHandle = jQuery.expr.attrHandle,
+	ruseDefault = /^(?:checked|selected)$/i,
+	getSetAttribute = support.getSetAttribute,
+	getSetInput = support.input;
+
+jQuery.fn.extend( {
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each( function() {
+			jQuery.removeAttr( this, name );
+		} );
+	}
+} );
+
+jQuery.extend( {
+	attr: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set attributes on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// All attributes are lowercase
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			name = name.toLowerCase();
+			hooks = jQuery.attrHooks[ name ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );
+		}
+
+		if ( value !== undefined ) {
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+			}
+
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			elem.setAttribute( name, value + "" );
+			return value;
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		ret = jQuery.find.attr( elem, name );
+
+		// Non-existent attributes return null, we normalize to undefined
+		return ret == null ? undefined : ret;
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					jQuery.nodeName( elem, "input" ) ) {
+
+					// Setting the type on a radio button after the value resets the value in IE8-9
+					// Reset value to default in case type is set after value during creation
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name, propName,
+			i = 0,
+			attrNames = value && value.match( rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( ( name = attrNames[ i++ ] ) ) {
+				propName = jQuery.propFix[ name ] || name;
+
+				// Boolean attributes get special treatment (#10870)
+				if ( jQuery.expr.match.bool.test( name ) ) {
+
+					// Set corresponding property to false
+					if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+						elem[ propName ] = false;
+
+					// Support: IE<9
+					// Also clear defaultChecked/defaultSelected (if appropriate)
+					} else {
+						elem[ jQuery.camelCase( "default-" + name ) ] =
+							elem[ propName ] = false;
+					}
+
+				// See #9699 for explanation of this approach (setting first, then removal)
+				} else {
+					jQuery.attr( elem, name, "" );
+				}
+
+				elem.removeAttribute( getSetAttribute ? name : propName );
+			}
+		}
+	}
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+
+			// IE<8 needs the *property* name
+			elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );
+
+		} else {
+
+			// Support: IE<9
+			// Use defaultChecked and defaultSelected for oldIE
+			elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true;
+		}
+		return name;
+	}
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {
+		attrHandle[ name ] = function( elem, name, isXML ) {
+			var ret, handle;
+			if ( !isXML ) {
+
+				// Avoid an infinite loop by temporarily removing this function from the getter
+				handle = attrHandle[ name ];
+				attrHandle[ name ] = ret;
+				ret = getter( elem, name, isXML ) != null ?
+					name.toLowerCase() :
+					null;
+				attrHandle[ name ] = handle;
+			}
+			return ret;
+		};
+	} else {
+		attrHandle[ name ] = function( elem, name, isXML ) {
+			if ( !isXML ) {
+				return elem[ jQuery.camelCase( "default-" + name ) ] ?
+					name.toLowerCase() :
+					null;
+			}
+		};
+	}
+} );
+
+// fix oldIE attroperties
+if ( !getSetInput || !getSetAttribute ) {
+	jQuery.attrHooks.value = {
+		set: function( elem, value, name ) {
+			if ( jQuery.nodeName( elem, "input" ) ) {
+
+				// Does not return so that setAttribute is also used
+				elem.defaultValue = value;
+			} else {
+
+				// Use nodeHook if defined (#1954); otherwise setAttribute is fine
+				return nodeHook && nodeHook.set( elem, value, name );
+			}
+		}
+	};
+}
+
+// IE6/7 do not support getting/setting some attributes with get/setAttribute
+if ( !getSetAttribute ) {
+
+	// Use this for any attribute in IE6/7
+	// This fixes almost every IE6/7 issue
+	nodeHook = {
+		set: function( elem, value, name ) {
+
+			// Set the existing or create a new attribute node
+			var ret = elem.getAttributeNode( name );
+			if ( !ret ) {
+				elem.setAttributeNode(
+					( ret = elem.ownerDocument.createAttribute( name ) )
+				);
+			}
+
+			ret.value = value += "";
+
+			// Break association with cloned elements by also using setAttribute (#9646)
+			if ( name === "value" || value === elem.getAttribute( name ) ) {
+				return value;
+			}
+		}
+	};
+
+	// Some attributes are constructed with empty-string values when not defined
+	attrHandle.id = attrHandle.name = attrHandle.coords =
+		function( elem, name, isXML ) {
+			var ret;
+			if ( !isXML ) {
+				return ( ret = elem.getAttributeNode( name ) ) && ret.value !== "" ?
+					ret.value :
+					null;
+			}
+		};
+
+	// Fixing value retrieval on a button requires this module
+	jQuery.valHooks.button = {
+		get: function( elem, name ) {
+			var ret = elem.getAttributeNode( name );
+			if ( ret && ret.specified ) {
+				return ret.value;
+			}
+		},
+		set: nodeHook.set
+	};
+
+	// Set contenteditable to false on removals(#10429)
+	// Setting to empty string throws an error as an invalid value
+	jQuery.attrHooks.contenteditable = {
+		set: function( elem, value, name ) {
+			nodeHook.set( elem, value === "" ? false : value, name );
+		}
+	};
+
+	// Set width and height to auto instead of 0 on empty string( Bug #8150 )
+	// This is for removals
+	jQuery.each( [ "width", "height" ], function( i, name ) {
+		jQuery.attrHooks[ name ] = {
+			set: function( elem, value ) {
+				if ( value === "" ) {
+					elem.setAttribute( name, "auto" );
+					return value;
+				}
+			}
+		};
+	} );
+}
+
+if ( !support.style ) {
+	jQuery.attrHooks.style = {
+		get: function( elem ) {
+
+			// Return undefined in the case of empty string
+			// Note: IE uppercases css property names, but if we were to .toLowerCase()
+			// .cssText, that would destroy case sensitivity in URL's, like in "background"
+			return elem.style.cssText || undefined;
+		},
+		set: function( elem, value ) {
+			return ( elem.style.cssText = value + "" );
+		}
+	};
+}
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button|object)$/i,
+	rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		name = jQuery.propFix[ name ] || name;
+		return this.each( function() {
+
+			// try/catch handles cases where IE balks (such as removing a property on window)
+			try {
+				this[ name ] = undefined;
+				delete this[ name ];
+			} catch ( e ) {}
+		} );
+	}
+} );
+
+jQuery.extend( {
+	prop: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set properties on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			return ( elem[ name ] = value );
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		return elem[ name ];
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+
+				// elem.tabIndex doesn't always return the
+				// correct value when it hasn't been explicitly set
+				// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				// Use proper attribute retrieval(#12072)
+				var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+				return tabindex ?
+					parseInt( tabindex, 10 ) :
+					rfocusable.test( elem.nodeName ) ||
+						rclickable.test( elem.nodeName ) && elem.href ?
+							0 :
+							-1;
+			}
+		}
+	},
+
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	}
+} );
+
+// Some attributes require a special call on IE
+// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !support.hrefNormalized ) {
+
+	// href/src property should get the full normalized URL (#10299/#12915)
+	jQuery.each( [ "href", "src" ], function( i, name ) {
+		jQuery.propHooks[ name ] = {
+			get: function( elem ) {
+				return elem.getAttribute( name, 4 );
+			}
+		};
+	} );
+}
+
+// Support: Safari, IE9+
+// mis-reports the default selected property of an option
+// Accessing the parent's selectedIndex property fixes it
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+
+			if ( parent ) {
+				parent.selectedIndex;
+
+				// Make sure that it also works with optgroups, see #5701
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+			return null;
+		}
+	};
+}
+
+jQuery.each( [
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+// IE6/7 call enctype encoding
+if ( !support.enctype ) {
+	jQuery.propFix.enctype = "encoding";
+}
+
+
+
+
+var rclass = /[\t\r\n\f]/g;
+
+function getClass( elem ) {
+	return jQuery.attr( elem, "class" ) || "";
+}
+
+jQuery.fn.extend( {
+	addClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( typeof value === "string" && value ) {
+			classes = value.match( rnotwhite ) || [];
+
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+				cur = elem.nodeType === 1 &&
+					( " " + curValue + " " ).replace( rclass, " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( curValue !== finalValue ) {
+						jQuery.attr( elem, "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( !arguments.length ) {
+			return this.attr( "class", "" );
+		}
+
+		if ( typeof value === "string" && value ) {
+			classes = value.match( rnotwhite ) || [];
+
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 &&
+					( " " + curValue + " " ).replace( rclass, " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( curValue !== finalValue ) {
+						jQuery.attr( elem, "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value;
+
+		if ( typeof stateVal === "boolean" && type === "string" ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).toggleClass(
+					value.call( this, i, getClass( this ), stateVal ),
+					stateVal
+				);
+			} );
+		}
+
+		return this.each( function() {
+			var className, i, self, classNames;
+
+			if ( type === "string" ) {
+
+				// Toggle individual class names
+				i = 0;
+				self = jQuery( this );
+				classNames = value.match( rnotwhite ) || [];
+
+				while ( ( className = classNames[ i++ ] ) ) {
+
+					// Check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( value === undefined || type === "boolean" ) {
+				className = getClass( this );
+				if ( className ) {
+
+					// store className if set
+					jQuery._data( this, "__className__", className );
+				}
+
+				// If the element has a class name or if we're passed "false",
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				jQuery.attr( this, "class",
+					className || value === false ?
+					"" :
+					jQuery._data( this, "__className__" ) || ""
+				);
+			}
+		} );
+	},
+
+	hasClass: function( selector ) {
+		var className, elem,
+			i = 0;
+
+		className = " " + selector + " ";
+		while ( ( elem = this[ i++ ] ) ) {
+			if ( elem.nodeType === 1 &&
+				( " " + getClass( elem ) + " " ).replace( rclass, " " )
+					.indexOf( className ) > -1
+			) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+jQuery.each( ( "blur focus focusin focusout load resize scroll unload click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup error contextmenu" ).split( " " ),
+	function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+} );
+
+jQuery.fn.extend( {
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+} );
+
+
+var location = window.location;
+
+var nonce = jQuery.now();
+
+var rquery = ( /\?/ );
+
+
+
+var rvalidtokens = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;
+
+jQuery.parseJSON = function( data ) {
+
+	// Attempt to parse using the native JSON parser first
+	if ( window.JSON && window.JSON.parse ) {
+
+		// Support: Android 2.3
+		// Workaround failure to string-cast null input
+		return window.JSON.parse( data + "" );
+	}
+
+	var requireNonComma,
+		depth = null,
+		str = jQuery.trim( data + "" );
+
+	// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains
+	// after removing valid tokens
+	return str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {
+
+		// Force termination if we see a misplaced comma
+		if ( requireNonComma && comma ) {
+			depth = 0;
+		}
+
+		// Perform no more replacements after returning to outermost depth
+		if ( depth === 0 ) {
+			return token;
+		}
+
+		// Commas must not follow "[", "{", or ","
+		requireNonComma = open || comma;
+
+		// Determine new depth
+		// array/object open ("[" or "{"): depth += true - false (increment)
+		// array/object close ("]" or "}"): depth += false - true (decrement)
+		// other cases ("," or primitive): depth += true - true (numeric cast)
+		depth += !close - !open;
+
+		// Remove this token
+		return "";
+	} ) ) ?
+		( Function( "return " + str ) )() :
+		jQuery.error( "Invalid JSON: " + data );
+};
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml, tmp;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+	try {
+		if ( window.DOMParser ) { // Standard
+			tmp = new window.DOMParser();
+			xml = tmp.parseFromString( data, "text/xml" );
+		} else { // IE
+			xml = new window.ActiveXObject( "Microsoft.XMLDOM" );
+			xml.async = "false";
+			xml.loadXML( data );
+		}
+	} catch ( e ) {
+		xml = undefined;
+	}
+	if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+
+	// IE leaves an \r character at EOL
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg,
+
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+	rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Document location
+	ajaxLocation = location.href,
+
+	// Segment location into parts
+	ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+
+			// For each dataType in the dataTypeExpression
+			while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+				// Prepend if requested
+				if ( dataType.charAt( 0 ) === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+				// Otherwise append
+				} else {
+					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" &&
+				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		} );
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var deep, key,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+	var firstDataType, ct, finalDataType, type,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+			// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s[ "throws" ] ) { // jscs:ignore requireDotNotation
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return {
+								state: "parsererror",
+								error: conv ? e : "No conversion from " + prev + " to " + current
+							};
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: ajaxLocation,
+		type: "GET",
+		isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /\bxml\b/,
+			html: /\bhtml/,
+			json: /\bjson\b/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": jQuery.parseJSON,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var
+
+			// Cross-domain detection vars
+			parts,
+
+			// Loop variable
+			i,
+
+			// URL without anti-cache param
+			cacheURL,
+
+			// Response headers as string
+			responseHeadersString,
+
+			// timeout handle
+			timeoutTimer,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			transport,
+
+			// Response headers
+			responseHeaders,
+
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+
+			// Callbacks context
+			callbackContext = s.context || s,
+
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context &&
+				( callbackContext.nodeType || callbackContext.jquery ) ?
+					jQuery( callbackContext ) :
+					jQuery.event,
+
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+
+			// The jqXHR state
+			state = 0,
+
+			// Default abort message
+			strAbort = "canceled",
+
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( state === 2 ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return state === 2 ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					var lname = name.toLowerCase();
+					if ( !state ) {
+						name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( !state ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( state < 2 ) {
+							for ( code in map ) {
+
+								// Lazy-add the new callback in a way that preserves old ones
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						} else {
+
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR ).complete = completeDeferred.add;
+		jqXHR.success = jqXHR.done;
+		jqXHR.error = jqXHR.fail;
+
+		// Remove hash character (#7531: and string promotion)
+		// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || ajaxLocation ) + "" )
+			.replace( rhash, "" )
+			.replace( rprotocol, ajaxLocParts[ 1 ] + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
+
+		// A cross-domain request is in order when we have a protocol:host:port mismatch
+		if ( s.crossDomain == null ) {
+			parts = rurl.exec( s.url.toLowerCase() );
+			s.crossDomain = !!( parts &&
+				( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||
+					( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !==
+						( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) )
+			);
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( state === 2 ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		cacheURL = s.url;
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data );
+
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in url if needed
+			if ( s.cache === false ) {
+				s.url = rts.test( cacheURL ) ?
+
+					// If there is already a '_' parameter, set its value
+					cacheURL.replace( rts, "$1_=" + nonce++ ) :
+
+					// Otherwise add one to the end
+					cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++;
+			}
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+				s.accepts[ s.dataTypes[ 0 ] ] +
+					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend &&
+			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {
+
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		for ( i in { success: 1, error: 1, complete: 1 } ) {
+			jqXHR[ i ]( s[ i ] );
+		}
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+
+			// If request was aborted inside ajaxSend, stop there
+			if ( state === 2 ) {
+				return jqXHR;
+			}
+
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = window.setTimeout( function() {
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				state = 1;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+
+				// Propagate exception as error if not done
+				if ( state < 2 ) {
+					done( -1, e );
+
+				// Simply rethrow otherwise
+				} else {
+					throw e;
+				}
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Called once
+			if ( state === 2 ) {
+				return;
+			}
+
+			// State is "done" now
+			state = 2;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				window.clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader( "Last-Modified" );
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader( "etag" );
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+
+				// We extract error from statusText
+				// then normalize statusText and status for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+
+		// shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		// The url can be an options object (which then must have .url)
+		return jQuery.ajax( jQuery.extend( {
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		}, jQuery.isPlainObject( url ) && url ) );
+	};
+} );
+
+
+jQuery._evalUrl = function( url ) {
+	return jQuery.ajax( {
+		url: url,
+
+		// Make this explicit, since user can override this through ajaxSetup (#11264)
+		type: "GET",
+		dataType: "script",
+		cache: true,
+		async: false,
+		global: false,
+		"throws": true
+	} );
+};
+
+
+jQuery.fn.extend( {
+	wrapAll: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapAll( html.call( this, i ) );
+			} );
+		}
+
+		if ( this[ 0 ] ) {
+
+			// The elements to wrap the target around
+			var wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map( function() {
+				var elem = this;
+
+				while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
+					elem = elem.firstChild;
+				}
+
+				return elem;
+			} ).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapInner( html.call( this, i ) );
+			} );
+		}
+
+		return this.each( function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		} );
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each( function( i ) {
+			jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
+		} );
+	},
+
+	unwrap: function() {
+		return this.parent().each( function() {
+			if ( !jQuery.nodeName( this, "body" ) ) {
+				jQuery( this ).replaceWith( this.childNodes );
+			}
+		} ).end();
+	}
+} );
+
+
+function getDisplay( elem ) {
+	return elem.style && elem.style.display || jQuery.css( elem, "display" );
+}
+
+function filterHidden( elem ) {
+	while ( elem && elem.nodeType === 1 ) {
+		if ( getDisplay( elem ) === "none" || elem.type === "hidden" ) {
+			return true;
+		}
+		elem = elem.parentNode;
+	}
+	return false;
+}
+
+jQuery.expr.filters.hidden = function( elem ) {
+
+	// Support: Opera <= 12.12
+	// Opera reports offsetWidths and offsetHeights less than zero on some elements
+	return support.reliableHiddenOffsets() ?
+		( elem.offsetWidth <= 0 && elem.offsetHeight <= 0 &&
+			!elem.getClientRects().length ) :
+			filterHidden( elem );
+};
+
+jQuery.expr.filters.visible = function( elem ) {
+	return !jQuery.expr.filters.hidden( elem );
+};
+
+
+
+
+var r20 = /%20/g,
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams(
+					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+					v,
+					traditional,
+					add
+				);
+			}
+		} );
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, value ) {
+
+			// If value is a function, invoke it and return its value
+			value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
+			s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
+		};
+
+	// Set traditional to true for jQuery <= 1.3.2 behavior.
+	if ( traditional === undefined ) {
+		traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
+	}
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		} );
+
+	} else {
+
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" ).replace( r20, "+" );
+};
+
+jQuery.fn.extend( {
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map( function() {
+
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		} )
+		.filter( function() {
+			var type = this.type;
+
+			// Use .is(":disabled") so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		} )
+		.map( function( i, elem ) {
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ) {
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					} ) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		} ).get();
+	}
+} );
+
+
+// Create the request object
+// (This is still attached to ajaxSettings for backward compatibility)
+jQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?
+
+	// Support: IE6-IE8
+	function() {
+
+		// XHR cannot access local files, always use ActiveX for that case
+		if ( this.isLocal ) {
+			return createActiveXHR();
+		}
+
+		// Support: IE 9-11
+		// IE seems to error on cross-domain PATCH requests when ActiveX XHR
+		// is used. In IE 9+ always use the native XHR.
+		// Note: this condition won't catch Edge as it doesn't define
+		// document.documentMode but it also doesn't support ActiveX so it won't
+		// reach this code.
+		if ( document.documentMode > 8 ) {
+			return createStandardXHR();
+		}
+
+		// Support: IE<9
+		// oldIE XHR does not support non-RFC2616 methods (#13240)
+		// See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx
+		// and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9
+		// Although this check for six methods instead of eight
+		// since IE also does not support "trace" and "connect"
+		return /^(get|post|head|put|delete|options)$/i.test( this.type ) &&
+			createStandardXHR() || createActiveXHR();
+	} :
+
+	// For all other browsers, use the standard XMLHttpRequest object
+	createStandardXHR;
+
+var xhrId = 0,
+	xhrCallbacks = {},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+// Support: IE<10
+// Open requests must be manually aborted on unload (#5280)
+// See https://support.microsoft.com/kb/2856746 for more info
+if ( window.attachEvent ) {
+	window.attachEvent( "onunload", function() {
+		for ( var key in xhrCallbacks ) {
+			xhrCallbacks[ key ]( undefined, true );
+		}
+	} );
+}
+
+// Determine support properties
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+xhrSupported = support.ajax = !!xhrSupported;
+
+// Create transport if the browser can provide an xhr
+if ( xhrSupported ) {
+
+	jQuery.ajaxTransport( function( options ) {
+
+		// Cross domain only allowed if supported through XMLHttpRequest
+		if ( !options.crossDomain || support.cors ) {
+
+			var callback;
+
+			return {
+				send: function( headers, complete ) {
+					var i,
+						xhr = options.xhr(),
+						id = ++xhrId;
+
+					// Open the socket
+					xhr.open(
+						options.type,
+						options.url,
+						options.async,
+						options.username,
+						options.password
+					);
+
+					// Apply custom fields if provided
+					if ( options.xhrFields ) {
+						for ( i in options.xhrFields ) {
+							xhr[ i ] = options.xhrFields[ i ];
+						}
+					}
+
+					// Override mime type if needed
+					if ( options.mimeType && xhr.overrideMimeType ) {
+						xhr.overrideMimeType( options.mimeType );
+					}
+
+					// X-Requested-With header
+					// For cross-domain requests, seeing as conditions for a preflight are
+					// akin to a jigsaw puzzle, we simply never set it to be sure.
+					// (it can always be set on a per-request basis or even using ajaxSetup)
+					// For same-domain requests, won't change header if already provided.
+					if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+						headers[ "X-Requested-With" ] = "XMLHttpRequest";
+					}
+
+					// Set headers
+					for ( i in headers ) {
+
+						// Support: IE<9
+						// IE's ActiveXObject throws a 'Type Mismatch' exception when setting
+						// request header to a null-value.
+						//
+						// To keep consistent with other XHR implementations, cast the value
+						// to string and ignore `undefined`.
+						if ( headers[ i ] !== undefined ) {
+							xhr.setRequestHeader( i, headers[ i ] + "" );
+						}
+					}
+
+					// Do send the request
+					// This may raise an exception which is actually
+					// handled in jQuery.ajax (so no try/catch here)
+					xhr.send( ( options.hasContent && options.data ) || null );
+
+					// Listener
+					callback = function( _, isAbort ) {
+						var status, statusText, responses;
+
+						// Was never called and is aborted or complete
+						if ( callback && ( isAbort || xhr.readyState === 4 ) ) {
+
+							// Clean up
+							delete xhrCallbacks[ id ];
+							callback = undefined;
+							xhr.onreadystatechange = jQuery.noop;
+
+							// Abort manually if needed
+							if ( isAbort ) {
+								if ( xhr.readyState !== 4 ) {
+									xhr.abort();
+								}
+							} else {
+								responses = {};
+								status = xhr.status;
+
+								// Support: IE<10
+								// Accessing binary-data responseText throws an exception
+								// (#11426)
+								if ( typeof xhr.responseText === "string" ) {
+									responses.text = xhr.responseText;
+								}
+
+								// Firefox throws an exception when accessing
+								// statusText for faulty cross-domain requests
+								try {
+									statusText = xhr.statusText;
+								} catch ( e ) {
+
+									// We normalize with Webkit giving an empty statusText
+									statusText = "";
+								}
+
+								// Filter status for non standard behaviors
+
+								// If the request is local and we have data: assume a success
+								// (success with no data won't get notified, that's the best we
+								// can do given current implementations)
+								if ( !status && options.isLocal && !options.crossDomain ) {
+									status = responses.text ? 200 : 404;
+
+								// IE - #1450: sometimes returns 1223 when it should be 204
+								} else if ( status === 1223 ) {
+									status = 204;
+								}
+							}
+						}
+
+						// Call complete if needed
+						if ( responses ) {
+							complete( status, statusText, responses, xhr.getAllResponseHeaders() );
+						}
+					};
+
+					// Do send the request
+					// `xhr.send` may raise an exception, but it will be
+					// handled in jQuery.ajax (so no try/catch here)
+					if ( !options.async ) {
+
+						// If we're in sync mode we fire the callback
+						callback();
+					} else if ( xhr.readyState === 4 ) {
+
+						// (IE6 & IE7) if it's in cache and has been
+						// retrieved directly we need to fire the callback
+						window.setTimeout( callback );
+					} else {
+
+						// Register the callback, but delay it in case `xhr.send` throws
+						// Add to the list of active xhr callbacks
+						xhr.onreadystatechange = xhrCallbacks[ id ] = callback;
+					}
+				},
+
+				abort: function() {
+					if ( callback ) {
+						callback( undefined, true );
+					}
+				}
+			};
+		}
+	} );
+}
+
+// Functions to create xhrs
+function createStandardXHR() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch ( e ) {}
+}
+
+function createActiveXHR() {
+	try {
+		return new window.ActiveXObject( "Microsoft.XMLHTTP" );
+	} catch ( e ) {}
+}
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+	if ( s.crossDomain ) {
+		s.contents.script = false;
+	}
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+	accepts: {
+		script: "text/javascript, application/javascript, " +
+			"application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /\b(?:java|ecma)script\b/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+} );
+
+// Handle cache's special case and global
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+		s.global = false;
+	}
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+
+		var script,
+			head = document.head || jQuery( "head" )[ 0 ] || document.documentElement;
+
+		return {
+
+			send: function( _, callback ) {
+
+				script = document.createElement( "script" );
+
+				script.async = true;
+
+				if ( s.scriptCharset ) {
+					script.charset = s.scriptCharset;
+				}
+
+				script.src = s.url;
+
+				// Attach handlers for all browsers
+				script.onload = script.onreadystatechange = function( _, isAbort ) {
+
+					if ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {
+
+						// Handle memory leak in IE
+						script.onload = script.onreadystatechange = null;
+
+						// Remove the script
+						if ( script.parentNode ) {
+							script.parentNode.removeChild( script );
+						}
+
+						// Dereference the script
+						script = null;
+
+						// Callback if not abort
+						if ( !isAbort ) {
+							callback( 200, "success" );
+						}
+					}
+				};
+
+				// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				head.insertBefore( script, head.firstChild );
+			},
+
+			abort: function() {
+				if ( script ) {
+					script.onload( undefined, true );
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" &&
+				( s.contentType || "" )
+					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+				rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters[ "script json" ] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always( function() {
+
+			// If previous value didn't exist - remove it
+			if ( overwritten === undefined ) {
+				jQuery( window ).removeProp( callbackName );
+
+			// Otherwise restore preexisting value
+			} else {
+				window[ callbackName ] = overwritten;
+			}
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+
+				// make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		} );
+
+		// Delegate to script
+		return "script";
+	}
+} );
+
+
+
+
+// Support: Safari 8+
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+	if ( !document.implementation.createHTMLDocument ) {
+		return false;
+	}
+	var doc = document.implementation.createHTMLDocument( "" );
+	doc.body.innerHTML = "<form></form><form></form>";
+	return doc.body.childNodes.length === 2;
+} )();
+
+
+// data: string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+
+	// document.implementation stops scripts or inline event handlers from
+	// being executed immediately
+	context = context || ( support.createHTMLDocument ?
+		document.implementation.createHTMLDocument( "" ) :
+		document );
+
+	var parsed = rsingleTag.exec( data ),
+		scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[ 1 ] ) ];
+	}
+
+	parsed = buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+// Keep a copy of the old load method
+var _load = jQuery.fn.load;
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	if ( typeof url !== "string" && _load ) {
+		return _load.apply( this, arguments );
+	}
+
+	var selector, type, response,
+		self = this,
+		off = url.indexOf( " " );
+
+	if ( off > -1 ) {
+		selector = jQuery.trim( url.slice( off, url.length ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax( {
+			url: url,
+
+			// If "type" variable is undefined, then "GET" method will be used.
+			// Make value of this field explicit since
+			// user can override it through ajaxSetup method
+			type: type || "GET",
+			dataType: "html",
+			data: params
+		} ).done( function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		// If the request succeeds, this function gets "data", "status", "jqXHR"
+		// but they are ignored because response was set above.
+		// If it fails, this function gets "jqXHR", "status", "error"
+		} ).always( callback && function( jqXHR, status ) {
+			self.each( function() {
+				callback.apply( self, response || [ jqXHR.responseText, status, jqXHR ] );
+			} );
+		} );
+	}
+
+	return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [
+	"ajaxStart",
+	"ajaxStop",
+	"ajaxComplete",
+	"ajaxError",
+	"ajaxSuccess",
+	"ajaxSend"
+], function( i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+} );
+
+
+
+
+jQuery.expr.filters.animated = function( elem ) {
+	return jQuery.grep( jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	} ).length;
+};
+
+
+
+
+
+/**
+ * Gets a window from an element
+ */
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ?
+		elem :
+		elem.nodeType === 9 ?
+			elem.defaultView || elem.parentWindow :
+			false;
+}
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			jQuery.inArray( "auto", [ curCSSTop, curCSSLeft ] ) > -1;
+
+		// need to be able to calculate position if either top or left
+		// is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+
+			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend( {
+	offset: function( options ) {
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each( function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				} );
+		}
+
+		var docElem, win,
+			box = { top: 0, left: 0 },
+			elem = this[ 0 ],
+			doc = elem && elem.ownerDocument;
+
+		if ( !doc ) {
+			return;
+		}
+
+		docElem = doc.documentElement;
+
+		// Make sure it's not a disconnected DOM node
+		if ( !jQuery.contains( docElem, elem ) ) {
+			return box;
+		}
+
+		// If we don't have gBCR, just use 0,0 rather than error
+		// BlackBerry 5, iOS 3 (original iPhone)
+		if ( typeof elem.getBoundingClientRect !== "undefined" ) {
+			box = elem.getBoundingClientRect();
+		}
+		win = getWindow( doc );
+		return {
+			top: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),
+			left: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )
+		};
+	},
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			parentOffset = { top: 0, left: 0 },
+			elem = this[ 0 ];
+
+		// Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+		// because it is its only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+			// we assume that getBoundingClientRect is available when computed position is fixed
+			offset = elem.getBoundingClientRect();
+		} else {
+
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset.top  += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true );
+			parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true );
+		}
+
+		// Subtract parent offsets and element margins
+		// note: when an element has margin: auto the offsetLeft and marginLeft
+		// are the same in Safari causing offset.left to incorrectly be 0
+		return {
+			top:  offset.top  - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	offsetParent: function() {
+		return this.map( function() {
+			var offsetParent = this.offsetParent;
+
+			while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) &&
+				jQuery.css( offsetParent, "position" ) === "static" ) ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+			return offsetParent || documentElement;
+		} );
+	}
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = /Y/.test( prop );
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? ( prop in win ) ? win[ prop ] :
+					win.document.documentElement[ method ] :
+					elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : jQuery( win ).scrollLeft(),
+					top ? val : jQuery( win ).scrollTop()
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length, null );
+	};
+} );
+
+// Support: Safari<7-8+, Chrome<37-44+
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// getComputedStyle returns percent when specified for top/left/bottom/right
+// rather than make the css module depend on the offset module, we just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+
+				// if curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+	function( defaultExtra, funcName ) {
+
+		// margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+
+					// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there
+					// isn't a whole lot we can do. See pull request at this URL for discussion:
+					// https://github.com/jquery/jquery/pull/764
+					return elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					// unfortunately, this causes bug #3838 in IE6/8 only,
+					// but there is currently no good, small way to fix it.
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable, null );
+		};
+	} );
+} );
+
+
+jQuery.fn.extend( {
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ?
+			this.off( selector, "**" ) :
+			this.off( types, selector || "**", fn );
+	}
+} );
+
+// The number of elements contained in the matched element set
+jQuery.fn.size = function() {
+	return this.length;
+};
+
+jQuery.fn.andSelf = jQuery.fn.addBack;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	} );
+}
+
+
+
+var
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in
+// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+return jQuery;
+}));
diff --git a/js/lib/jquery/jquery-1.12.1.min.js b/js/lib/jquery/jquery-1.12.1.min.js
new file mode 100644
index 0000000..a5195a3
--- /dev/null
+++ b/js/lib/jquery/jquery-1.12.1.min.js
@@ -0,0 +1,5 @@
+/*! jQuery v1.12.1 | (c) jQuery Foundation | jquery.org/license */
+!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="1.12.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(e=arguments[h]))for(d in e)a=g[d],c=e[d],g!==c&&(j&&c&&(n.isPlainObject(c)||(b=n.isArray(c)))?(b?(b=!1,f=a&&n.isArray(a)?a:[]):f=a&&n.isPlainObject(a)?a:{},g[d]=n.extend(j,f,c)):void 0!==c&&(g[d]=c));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray||function(a){return"array"===n.type(a)},isWindow:function(a){return null!=a&&a==a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},isPlainObject:function(a){var b;if(!a||"object"!==n.type(a)||a.nodeType||n.isWindow(a))return!1;try{if(a.constructor&&!k.call(a,"constructor")&&!k.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}if(!l.ownFirst)for(b in a)return k.call(a,b);for(b in a);return void 0===b||k.call(a,b)},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(b){b&&n.trim(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){var d;if(b){if(h)return h.call(b,a,c);for(d=b.length,c=c?0>c?Math.max(0,d+c):c:0;d>c;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,b){var c=+b.length,d=0,e=a.length;while(c>d)a[e++]=b[d++];if(c!==c)while(void 0!==b[d])a[e++]=b[d++];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(f=a[b],b=a,a=f),n.isFunction(a)?(c=e.call(arguments,2),d=function(){return a.apply(b||this,c.concat(e.call(arguments)))},d.guid=a.guid=a.guid||n.guid++,d):void 0},now:function(){return+new Date},support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=la(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=ma(b);function pa(){}pa.prototype=d.filters=d.pseudos,d.setFilters=new pa,g=fa.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){(!c||(e=R.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=S.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(Q," ")}),h=h.slice(c.length));for(g in d.filter)!(e=W[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?fa.error(a):z(a,i).slice(0)};function qa(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return n.inArray(a,b)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;e>b;b++)if(n.contains(d[b],this))return!0}));for(b=0;e>b;b++)n.find(a,d[b],c);return c=this.pushStack(e>1?n.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}if(f=d.getElementById(e[2]),f&&f.parentNode){if(f.id!==e[2])return A.find(a);this.length=1,this[0]=f}return this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?"undefined"!=typeof c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b,c=n(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(n.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?n.inArray(this[0],n(a)):n.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return n.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||(e=n.uniqueSort(e)),D.test(a)&&(e=e.reverse())),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){n.each(b,function(b,c){n.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==n.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return n.each(arguments,function(a,b){var c;while((c=n.inArray(b,f,c))>-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=!0,c||j.disable(),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.addEventListener?(d.removeEventListener("DOMContentLoaded",K),a.removeEventListener("load",K)):(d.detachEvent("onreadystatechange",K),a.detachEvent("onload",K))}function K(){(d.addEventListener||"load"===a.event.type||"complete"===d.readyState)&&(J(),n.ready())}n.ready.promise=function(b){if(!I)if(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll)a.setTimeout(n.ready);else if(d.addEventListener)d.addEventListener("DOMContentLoaded",K),a.addEventListener("load",K);else{d.attachEvent("onreadystatechange",K),a.attachEvent("onload",K);var c=!1;try{c=null==a.frameElement&&d.documentElement}catch(e){}c&&c.doScroll&&!function f(){if(!n.isReady){try{c.doScroll("left")}catch(b){return a.setTimeout(f,50)}J(),n.ready()}}()}return I.promise(b)},n.ready.promise();var L;for(L in n(l))break;l.ownFirst="0"===L,l.inlineBlockNeedsLayout=!1,n(function(){var a,b,c,e;c=d.getElementsByTagName("body")[0],c&&c.style&&(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",l.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(e))}),function(){var a=d.createElement("div");l.deleteExpando=!0;try{delete a.test}catch(b){l.deleteExpando=!1}a=null}();var M=function(a){var b=n.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b},N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(O,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?n.parseJSON(c):c}catch(e){}n.data(a,b,c)}else c=void 0;
+}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||n.guid++:h),j[k]||(j[k]=i?{}:{toJSON:n.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=n.extend(j[k],b):j[k].data=n.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[n.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[n.camelCase(b)])):f=g,f}}function S(a,b,c){if(M(a)){var d,e,f=a.nodeType,g=f?n.cache:a,h=f?a[n.expando]:n.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){n.isArray(b)?b=b.concat(n.map(b,n.camelCase)):b in d?b=[b]:(b=n.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!Q(d):!n.isEmptyObject(d))return}(c||(delete g[h].data,Q(g[h])))&&(f?n.cleanData([a],!0):l.deleteExpando||g!=g.window?delete g[h]:g[h]=void 0)}}}n.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?n.cache[a[n.expando]]:a[n.expando],!!a&&!Q(a)},data:function(a,b,c){return R(a,b,c)},removeData:function(a,b){return S(a,b)},_data:function(a,b,c){return R(a,b,c,!0)},_removeData:function(a,b){return S(a,b,!0)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=n.data(f),1===f.nodeType&&!n._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),P(f,d,e[d])));n._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){n.data(this,a)}):arguments.length>1?this.each(function(){n.data(this,a,b)}):f?P(f,a,n.data(f,a)):void 0},removeData:function(a){return this.each(function(){n.removeData(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=n._data(a,b),c&&(!d||n.isArray(c)?d=n._data(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return n._data(a,c)||n._data(a,c,{empty:n.Callbacks("once memory").add(function(){n._removeData(a,b+"queue"),n._removeData(a,c)})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?n.queue(this[0],a):void 0===b?this:this.each(function(){var c=n.queue(this,a,b);n._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&n.dequeue(this,a)})},dequeue:function(a){return this.each(function(){n.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=n.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=n._data(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}}),function(){var a;l.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,e;return c=d.getElementsByTagName("body")[0],c&&c.style?(b=d.createElement("div"),e=d.createElement("div"),e.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(e).appendChild(b),"undefined"!=typeof b.style.zoom&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(d.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(e),a):void 0}}();var T=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,U=new RegExp("^(?:([+-])=|)("+T+")([a-z%]*)$","i"),V=["Top","Right","Bottom","Left"],W=function(a,b){return a=b||a,"none"===n.css(a,"display")||!n.contains(a.ownerDocument,a)};function X(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return n.css(a,b,"")},i=h(),j=c&&c[3]||(n.cssNumber[b]?"":"px"),k=(n.cssNumber[b]||"px"!==j&&+i)&&U.exec(n.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,n.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var Y=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)Y(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},Z=/^(?:checkbox|radio)$/i,$=/<([\w:-]+)/,_=/^$|\/(?:java|ecma)script/i,aa=/^\s+/,ba="abbr|article|aside|audio|bdi|canvas|data|datalist|details|dialog|figcaption|figure|footer|header|hgroup|main|mark|meter|nav|output|picture|progress|section|summary|template|time|video";function ca(a){var b=ba.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}!function(){var a=d.createElement("div"),b=d.createDocumentFragment(),c=d.createElement("input");a.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",l.leadingWhitespace=3===a.firstChild.nodeType,l.tbody=!a.getElementsByTagName("tbody").length,l.htmlSerialize=!!a.getElementsByTagName("link").length,l.html5Clone="<:nav></:nav>"!==d.createElement("nav").cloneNode(!0).outerHTML,c.type="checkbox",c.checked=!0,b.appendChild(c),l.appendChecked=c.checked,a.innerHTML="<textarea>x</textarea>",l.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,b.appendChild(a),c=d.createElement("input"),c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),l.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,l.noCloneEvent=!!a.addEventListener,a[n.expando]=1,l.attributes=!a.getAttribute(n.expando)}();var da={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],area:[1,"<map>","</map>"],param:[1,"<object>","</object>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:l.htmlSerialize?[0,"",""]:[1,"X<div>","</div>"]};da.optgroup=da.option,da.tbody=da.tfoot=da.colgroup=da.caption=da.thead,da.th=da.td;function ea(a,b){var c,d,e=0,f="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||n.nodeName(d,b)?f.push(d):n.merge(f,ea(d,b));return void 0===b||b&&n.nodeName(a,b)?n.merge([a],f):f}function fa(a,b){for(var c,d=0;null!=(c=a[d]);d++)n._data(c,"globalEval",!b||n._data(b[d],"globalEval"))}var ga=/<|&#?\w+;/,ha=/<tbody/i;function ia(a){Z.test(a.type)&&(a.defaultChecked=a.checked)}function ja(a,b,c,d,e){for(var f,g,h,i,j,k,m,o=a.length,p=ca(b),q=[],r=0;o>r;r++)if(g=a[r],g||0===g)if("object"===n.type(g))n.merge(q,g.nodeType?[g]:g);else if(ga.test(g)){i=i||p.appendChild(b.createElement("div")),j=($.exec(g)||["",""])[1].toLowerCase(),m=da[j]||da._default,i.innerHTML=m[1]+n.htmlPrefilter(g)+m[2],f=m[0];while(f--)i=i.lastChild;if(!l.leadingWhitespace&&aa.test(g)&&q.push(b.createTextNode(aa.exec(g)[0])),!l.tbody){g="table"!==j||ha.test(g)?"<table>"!==m[1]||ha.test(g)?0:i:i.firstChild,f=g&&g.childNodes.length;while(f--)n.nodeName(k=g.childNodes[f],"tbody")&&!k.childNodes.length&&g.removeChild(k)}n.merge(q,i.childNodes),i.textContent="";while(i.firstChild)i.removeChild(i.firstChild);i=p.lastChild}else q.push(b.createTextNode(g));i&&p.removeChild(i),l.appendChecked||n.grep(ea(q,"input"),ia),r=0;while(g=q[r++])if(d&&n.inArray(g,d)>-1)e&&e.push(g);else if(h=n.contains(g.ownerDocument,g),i=ea(p.appendChild(g),"script"),h&&fa(i),c){f=0;while(g=i[f++])_.test(g.type||"")&&c.push(g)}return i=null,p}!function(){var b,c,e=d.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(l[b]=c in a)||(e.setAttribute(c,"t"),l[b]=e.attributes[c].expando===!1);e=null}();var ka=/^(?:input|select|textarea)$/i,la=/^key/,ma=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,na=/^(?:focusinfocus|focusoutblur)$/,oa=/^([^.]*)(?:\.(.+)|)/;function pa(){return!0}function qa(){return!1}function ra(){try{return d.activeElement}catch(a){}}function sa(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)sa(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=qa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=n.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return"undefined"==typeof n||a&&n.event.triggered===a.type?void 0:n.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(G)||[""],h=b.length;while(h--)f=oa.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=n.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=n.event.special[o]||{},l=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},i),(m=g[o])||(m=g[o]=[],m.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,l):m.push(l),n.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=n.hasData(a)&&n._data(a);if(r&&(k=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=oa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=m.length;while(f--)g=m[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(m.splice(f,1),g.selector&&m.delegateCount--,l.remove&&l.remove.call(a,g));i&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(k)&&(delete r.handle,n._removeData(a,"events"))}},trigger:function(b,c,e,f){var g,h,i,j,l,m,o,p=[e||d],q=k.call(b,"type")?b.type:b,r=k.call(b,"namespace")?b.namespace.split("."):[];if(i=m=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!na.test(q+n.event.triggered)&&(q.indexOf(".")>-1&&(r=q.split("."),q=r.shift(),r.sort()),h=q.indexOf(":")<0&&"on"+q,b=b[n.expando]?b:new n.Event(q,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=r.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:n.makeArray(c,[b]),l=n.event.special[q]||{},f||!l.trigger||l.trigger.apply(e,c)!==!1)){if(!f&&!l.noBubble&&!n.isWindow(e)){for(j=l.delegateType||q,na.test(j+q)||(i=i.parentNode);i;i=i.parentNode)p.push(i),m=i;m===(e.ownerDocument||d)&&p.push(m.defaultView||m.parentWindow||a)}o=0;while((i=p[o++])&&!b.isPropagationStopped())b.type=o>1?j:l.bindType||q,g=(n._data(i,"events")||{})[b.type]&&n._data(i,"handle"),g&&g.apply(i,c),g=h&&i[h],g&&g.apply&&M(i)&&(b.result=g.apply(i,c),b.result===!1&&b.preventDefault());if(b.type=q,!f&&!b.isDefaultPrevented()&&(!l._default||l._default.apply(p.pop(),c)===!1)&&M(e)&&h&&e[q]&&!n.isWindow(e)){m=e[h],m&&(e[h]=null),n.event.triggered=q;try{e[q]()}catch(s){}n.event.triggered=void 0,m&&(e[h]=m)}return b.result}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(n._data(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.rnamespace||a.rnamespace.test(g.namespace))&&(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},fix:function(a){if(a[n.expando])return a;var b,c,e,f=a.type,g=a,h=this.fixHooks[f];h||(this.fixHooks[f]=h=ma.test(f)?this.mouseHooks:la.test(f)?this.keyHooks:{}),e=h.props?this.props.concat(h.props):this.props,a=new n.Event(g),b=e.length;while(b--)c=e[b],a[c]=g[c];return a.target||(a.target=g.srcElement||d),3===a.target.nodeType&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,h.filter?h.filter(a,g):a},props:"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,e,f,g=b.button,h=b.fromElement;return null==a.pageX&&null!=b.clientX&&(e=a.target.ownerDocument||d,f=e.documentElement,c=e.body,a.pageX=b.clientX+(f&&f.scrollLeft||c&&c.scrollLeft||0)-(f&&f.clientLeft||c&&c.clientLeft||0),a.pageY=b.clientY+(f&&f.scrollTop||c&&c.scrollTop||0)-(f&&f.clientTop||c&&c.clientTop||0)),!a.relatedTarget&&h&&(a.relatedTarget=h===a.target?b.toElement:h),a.which||void 0===g||(a.which=1&g?1:2&g?3:4&g?2:0),a}},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==ra()&&this.focus)try{return this.focus(),!1}catch(a){}},delegateType:"focusin"},blur:{trigger:function(){return this===ra()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return n.nodeName(this,"input")&&"checkbox"===this.type&&this.click?(this.click(),!1):void 0},_default:function(a){return n.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c){var d=n.extend(new n.Event,c,{type:a,isSimulated:!0});n.event.trigger(d,null,b),d.isDefaultPrevented()&&c.preventDefault()}},n.removeEvent=d.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)}:function(a,b,c){var d="on"+b;a.detachEvent&&("undefined"==typeof a[d]&&(a[d]=null),a.detachEvent(d,c))},n.Event=function(a,b){return this instanceof n.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?pa:qa):this.type=a,b&&n.extend(this,b),this.timeStamp=a&&a.timeStamp||n.now(),void(this[n.expando]=!0)):new n.Event(a,b)},n.Event.prototype={constructor:n.Event,isDefaultPrevented:qa,isPropagationStopped:qa,isImmediatePropagationStopped:qa,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=pa,a&&(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=pa,a&&!this.isSimulated&&(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=pa,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},n.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){n.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!n.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),l.submit||(n.event.special.submit={setup:function(){return n.nodeName(this,"form")?!1:void n.event.add(this,"click._submit keypress._submit",function(a){var b=a.target,c=n.nodeName(b,"input")||n.nodeName(b,"button")?n.prop(b,"form"):void 0;c&&!n._data(c,"submit")&&(n.event.add(c,"submit._submit",function(a){a._submitBubble=!0}),n._data(c,"submit",!0))})},postDispatch:function(a){a._submitBubble&&(delete a._submitBubble,this.parentNode&&!a.isTrigger&&n.event.simulate("submit",this.parentNode,a))},teardown:function(){return n.nodeName(this,"form")?!1:void n.event.remove(this,"._submit")}}),l.change||(n.event.special.change={setup:function(){return ka.test(this.nodeName)?(("checkbox"===this.type||"radio"===this.type)&&(n.event.add(this,"propertychange._change",function(a){"checked"===a.originalEvent.propertyName&&(this._justChanged=!0)}),n.event.add(this,"click._change",function(a){this._justChanged&&!a.isTrigger&&(this._justChanged=!1),n.event.simulate("change",this,a)})),!1):void n.event.add(this,"beforeactivate._change",function(a){var b=a.target;ka.test(b.nodeName)&&!n._data(b,"change")&&(n.event.add(b,"change._change",function(a){!this.parentNode||a.isSimulated||a.isTrigger||n.event.simulate("change",this.parentNode,a)}),n._data(b,"change",!0))})},handle:function(a){var b=a.target;return this!==b||a.isSimulated||a.isTrigger||"radio"!==b.type&&"checkbox"!==b.type?a.handleObj.handler.apply(this,arguments):void 0},teardown:function(){return n.event.remove(this,"._change"),!ka.test(this.nodeName)}}),l.focusin||n.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){n.event.simulate(b,a.target,n.event.fix(a))};n.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=n._data(d,b);e||d.addEventListener(a,c,!0),n._data(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=n._data(d,b)-1;e?n._data(d,b,e):(d.removeEventListener(a,c,!0),n._removeData(d,b))}}}),n.fn.extend({on:function(a,b,c,d){return sa(this,a,b,c,d)},one:function(a,b,c,d){return sa(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,n(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=qa),this.each(function(){n.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){n.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?n.event.trigger(a,b,c,!0):void 0}});var ta=/ jQuery\d+="(?:null|\d+)"/g,ua=new RegExp("<(?:"+ba+")[\\s/>]","i"),va=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi,wa=/<script|<style|<link/i,xa=/checked\s*(?:[^=]|=\s*.checked.)/i,ya=/^true\/(.*)/,za=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Aa=ca(d),Ba=Aa.appendChild(d.createElement("div"));function Ca(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function Da(a){return a.type=(null!==n.find.attr(a,"type"))+"/"+a.type,a}function Ea(a){var b=ya.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Fa(a,b){if(1===b.nodeType&&n.hasData(a)){var c,d,e,f=n._data(a),g=n._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)n.event.add(b,c,h[c][d])}g.data&&(g.data=n.extend({},g.data))}}function Ga(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!l.noCloneEvent&&b[n.expando]){e=n._data(b);for(d in e.events)n.removeEvent(b,d,e.handle);b.removeAttribute(n.expando)}"script"===c&&b.text!==a.text?(Da(b).text=a.text,Ea(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),l.html5Clone&&a.innerHTML&&!n.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&Z.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}function Ha(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&xa.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),Ha(f,b,c,d)});if(o&&(k=ja(b,a[0].ownerDocument,!1,a,d),e=k.firstChild,1===k.childNodes.length&&(k=e),e||d)){for(i=n.map(ea(k,"script"),Da),h=i.length;o>m;m++)g=k,m!==p&&(g=n.clone(g,!0,!0),h&&n.merge(i,ea(g,"script"))),c.call(a[m],g,m);if(h)for(j=i[i.length-1].ownerDocument,n.map(i,Ea),m=0;h>m;m++)g=i[m],_.test(g.type||"")&&!n._data(g,"globalEval")&&n.contains(j,g)&&(g.src?n._evalUrl&&n._evalUrl(g.src):n.globalEval((g.text||g.textContent||g.innerHTML||"").replace(za,"")));k=e=null}return a}function Ia(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(ea(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&fa(ea(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(va,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h,i=n.contains(a.ownerDocument,a);if(l.html5Clone||n.isXMLDoc(a)||!ua.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(Ba.innerHTML=a.outerHTML,Ba.removeChild(f=Ba.firstChild)),!(l.noCloneEvent&&l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(d=ea(f),h=ea(a),g=0;null!=(e=h[g]);++g)d[g]&&Ga(e,d[g]);if(b)if(c)for(h=h||ea(a),d=d||ea(f),g=0;null!=(e=h[g]);g++)Fa(e,d[g]);else Fa(a,f);return d=ea(f,"script"),d.length>0&&fa(d,!i&&ea(a,"script")),d=h=e=null,f},cleanData:function(a,b){for(var d,e,f,g,h=0,i=n.expando,j=n.cache,k=l.attributes,m=n.event.special;null!=(d=a[h]);h++)if((b||M(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)m[e]?n.event.remove(d,e):n.removeEvent(d,e,g.handle);j[f]&&(delete j[f],k||"undefined"==typeof d.removeAttribute?d[i]=void 0:d.removeAttribute(i),c.push(f))}}}),n.fn.extend({domManip:Ha,detach:function(a){return Ia(this,a,!0)},remove:function(a){return Ia(this,a)},text:function(a){return Y(this,function(a){return void 0===a?n.text(this):this.empty().append((this[0]&&this[0].ownerDocument||d).createTextNode(a))},null,a,arguments.length)},append:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.appendChild(a)}})},prepend:function(){return Ha(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ca(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ha(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&n.cleanData(ea(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&n.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return Y(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(ta,""):void 0;if("string"==typeof a&&!wa.test(a)&&(l.htmlSerialize||!ua.test(a))&&(l.leadingWhitespace||!aa.test(a))&&!da[($.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(ea(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ha(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(ea(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=0,e=[],f=n(a),h=f.length-1;h>=d;d++)c=d===h?this:this.clone(!0),n(f[d])[b](c),g.apply(e,c.get());return this.pushStack(e)}});var Ja,Ka={HTML:"block",BODY:"block"};function La(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function Ma(a){var b=d,c=Ka[a];return c||(c=La(a,b),"none"!==c&&c||(Ja=(Ja||n("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=(Ja[0].contentWindow||Ja[0].contentDocument).document,b.write(),b.close(),c=La(a,b),Ja.detach()),Ka[a]=c),c}var Na=/^margin/,Oa=new RegExp("^("+T+")(?!px)[a-z%]+$","i"),Pa=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e},Qa=d.documentElement;!function(){var b,c,e,f,g,h,i=d.createElement("div"),j=d.createElement("div");if(j.style){j.style.cssText="float:left;opacity:.5",l.opacity="0.5"===j.style.opacity,l.cssFloat=!!j.style.cssFloat,j.style.backgroundClip="content-box",j.cloneNode(!0).style.backgroundClip="",l.clearCloneStyle="content-box"===j.style.backgroundClip,i=d.createElement("div"),i.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",j.innerHTML="",i.appendChild(j),l.boxSizing=""===j.style.boxSizing||""===j.style.MozBoxSizing||""===j.style.WebkitBoxSizing,n.extend(l,{reliableHiddenOffsets:function(){return null==b&&k(),f},boxSizingReliable:function(){return null==b&&k(),e},pixelMarginRight:function(){return null==b&&k(),c},pixelPosition:function(){return null==b&&k(),b},reliableMarginRight:function(){return null==b&&k(),g},reliableMarginLeft:function(){return null==b&&k(),h}});function k(){var k,l,m=d.documentElement;m.appendChild(i),j.style.cssText="-webkit-box-sizing:border-box;box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",b=e=h=!1,c=g=!0,a.getComputedStyle&&(l=a.getComputedStyle(j),b="1%"!==(l||{}).top,h="2px"===(l||{}).marginLeft,e="4px"===(l||{width:"4px"}).width,j.style.marginRight="50%",c="4px"===(l||{marginRight:"4px"}).marginRight,k=j.appendChild(d.createElement("div")),k.style.cssText=j.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",k.style.marginRight=k.style.width="0",j.style.width="1px",g=!parseFloat((a.getComputedStyle(k)||{}).marginRight),j.removeChild(k)),j.style.display="none",f=0===j.getClientRects().length,f&&(j.style.display="",j.innerHTML="<table><tr><td></td><td>t</td></tr></table>",k=j.getElementsByTagName("td"),k[0].style.cssText="margin:0;border:0;padding:0;display:none",f=0===k[0].offsetHeight,f&&(k[0].style.display="",k[1].style.display="none",f=0===k[0].offsetHeight)),m.removeChild(i)}}}();var Ra,Sa,Ta=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ra=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c.getPropertyValue(b)||c[b]:void 0,""!==g&&void 0!==g||n.contains(a.ownerDocument,a)||(g=n.style(a,b)),c&&!l.pixelMarginRight()&&Oa.test(g)&&Na.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f),void 0===g?g:g+""}):Qa.currentStyle&&(Ra=function(a){return a.currentStyle},Sa=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Oa.test(g)&&!Ta.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function Ua(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Va=/alpha\([^)]*\)/i,Wa=/opacity\s*=\s*([^)]*)/i,Xa=/^(none|table(?!-c[ea]).+)/,Ya=new RegExp("^("+T+")(.*)$","i"),Za={position:"absolute",visibility:"hidden",display:"block"},$a={letterSpacing:"0",fontWeight:"400"},_a=["Webkit","O","Moz","ms"],ab=d.createElement("div").style;function bb(a){if(a in ab)return a;var b=a.charAt(0).toUpperCase()+a.slice(1),c=_a.length;while(c--)if(a=_a[c]+b,a in ab)return a}function cb(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=n._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&W(d)&&(f[g]=n._data(d,"olddisplay",Ma(d.nodeName)))):(e=W(d),(c&&"none"!==c||!e)&&n._data(d,"olddisplay",e?c:n.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function db(a,b,c){var d=Ya.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function eb(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=n.css(a,c+V[f],!0,e)),d?("content"===c&&(g-=n.css(a,"padding"+V[f],!0,e)),"margin"!==c&&(g-=n.css(a,"border"+V[f]+"Width",!0,e))):(g+=n.css(a,"padding"+V[f],!0,e),"padding"!==c&&(g+=n.css(a,"border"+V[f]+"Width",!0,e)));return g}function fb(b,c,e){var f=!0,g="width"===c?b.offsetWidth:b.offsetHeight,h=Ra(b),i=l.boxSizing&&"border-box"===n.css(b,"boxSizing",!1,h);if(d.msFullscreenElement&&a.top!==a&&b.getClientRects().length&&(g=Math.round(100*b.getBoundingClientRect()[c])),0>=g||null==g){if(g=Sa(b,c,h),(0>g||null==g)&&(g=b.style[c]),Oa.test(g))return g;f=i&&(l.boxSizingReliable()||g===b.style[c]),g=parseFloat(g)||0}return g+eb(b,c,e||(i?"border":"content"),f,h)+"px"}n.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Sa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":l.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=n.camelCase(b),i=a.style;if(b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=U.exec(c))&&e[1]&&(c=X(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(n.cssNumber[h]?"":"px")),l.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=n.camelCase(b);return b=n.cssProps[h]||(n.cssProps[h]=bb(h)||h),g=n.cssHooks[b]||n.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Sa(a,b,d)),"normal"===f&&b in $a&&(f=$a[b]),""===c||c?(e=parseFloat(f),c===!0||isFinite(e)?e||0:f):f}}),n.each(["height","width"],function(a,b){n.cssHooks[b]={get:function(a,c,d){return c?Xa.test(n.css(a,"display"))&&0===a.offsetWidth?Pa(a,Za,function(){return fb(a,b,d)}):fb(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return db(a,c,d?eb(a,b,d,l.boxSizing&&"border-box"===n.css(a,"boxSizing",!1,e),e):0)}}}),l.opacity||(n.cssHooks.opacity={get:function(a,b){return Wa.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=n.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===n.trim(f.replace(Va,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Va.test(f)?f.replace(Va,e):f+" "+e)}}),n.cssHooks.marginRight=Ua(l.reliableMarginRight,function(a,b){return b?Pa(a,{display:"inline-block"},Sa,[a,"marginRight"]):void 0}),n.cssHooks.marginLeft=Ua(l.reliableMarginLeft,function(a,b){
+return b?(parseFloat(Sa(a,"marginLeft"))||(n.contains(a.ownerDocument,a)?a.getBoundingClientRect().left-Pa(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+b]=f[d]||f[d-2]||f[0];return e}},Na.test(a)||(n.cssHooks[a+b].set=db)}),n.fn.extend({css:function(a,b){return Y(this,function(a,b,c){var d,e,f={},g=0;if(n.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=n.css(a,b[g],!1,d);return f}return void 0!==c?n.style(a,b,c):n.css(a,b)},a,b,arguments.length>1)},show:function(){return cb(this,!0)},hide:function(){return cb(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){W(this)?n(this).show():n(this).hide()})}});function gb(a,b,c,d,e){return new gb.prototype.init(a,b,c,d,e)}n.Tween=gb,gb.prototype={constructor:gb,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||n.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(n.cssNumber[c]?"":"px")},cur:function(){var a=gb.propHooks[this.prop];return a&&a.get?a.get(this):gb.propHooks._default.get(this)},run:function(a){var b,c=gb.propHooks[this.prop];return this.options.duration?this.pos=b=n.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):gb.propHooks._default.set(this),this}},gb.prototype.init.prototype=gb.prototype,gb.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=n.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){n.fx.step[a.prop]?n.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[n.cssProps[a.prop]]&&!n.cssHooks[a.prop]?a.elem[a.prop]=a.now:n.style(a.elem,a.prop,a.now+a.unit)}}},gb.propHooks.scrollTop=gb.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},n.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},n.fx=gb.prototype.init,n.fx.step={};var hb,ib,jb=/^(?:toggle|show|hide)$/,kb=/queueHooks$/;function lb(){return a.setTimeout(function(){hb=void 0}),hb=n.now()}function mb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=V[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function nb(a,b,c){for(var d,e=(qb.tweeners[b]||[]).concat(qb.tweeners["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ob(a,b,c){var d,e,f,g,h,i,j,k,m=this,o={},p=a.style,q=a.nodeType&&W(a),r=n._data(a,"fxshow");c.queue||(h=n._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,m.always(function(){m.always(function(){h.unqueued--,n.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=n.css(a,"display"),k="none"===j?n._data(a,"olddisplay")||Ma(a.nodeName):j,"inline"===k&&"none"===n.css(a,"float")&&(l.inlineBlockNeedsLayout&&"inline"!==Ma(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",l.shrinkWrapBlocks()||m.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],jb.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||n.style(a,d)}else j=void 0;if(n.isEmptyObject(o))"inline"===("none"===j?Ma(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=n._data(a,"fxshow",{}),f&&(r.hidden=!q),q?n(a).show():m.done(function(){n(a).hide()}),m.done(function(){var b;n._removeData(a,"fxshow");for(b in o)n.style(a,b,o[b])});for(d in o)g=nb(q?r[d]:0,d,m),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function pb(a,b){var c,d,e,f,g;for(c in a)if(d=n.camelCase(c),e=b[d],f=a[c],n.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=n.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function qb(a,b,c){var d,e,f=0,g=qb.prefilters.length,h=n.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=hb||lb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:n.extend({},b),opts:n.extend(!0,{specialEasing:{},easing:n.easing._default},c),originalProperties:b,originalOptions:c,startTime:hb||lb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=n.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(pb(k,j.opts.specialEasing);g>f;f++)if(d=qb.prefilters[f].call(j,a,k,j.opts))return n.isFunction(d.stop)&&(n._queueHooks(j.elem,j.opts.queue).stop=n.proxy(d.stop,d)),d;return n.map(k,nb,j),n.isFunction(j.opts.start)&&j.opts.start.call(a,j),n.fx.timer(n.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}n.Animation=n.extend(qb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return X(c.elem,a,U.exec(b),c),c}]},tweener:function(a,b){n.isFunction(a)?(b=a,a=["*"]):a=a.match(G);for(var c,d=0,e=a.length;e>d;d++)c=a[d],qb.tweeners[c]=qb.tweeners[c]||[],qb.tweeners[c].unshift(b)},prefilters:[ob],prefilter:function(a,b){b?qb.prefilters.unshift(a):qb.prefilters.push(a)}}),n.speed=function(a,b,c){var d=a&&"object"==typeof a?n.extend({},a):{complete:c||!c&&b||n.isFunction(a)&&a,duration:a,easing:c&&b||b&&!n.isFunction(b)&&b};return d.duration=n.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in n.fx.speeds?n.fx.speeds[d.duration]:n.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){n.isFunction(d.old)&&d.old.call(this),d.queue&&n.dequeue(this,d.queue)},d},n.fn.extend({fadeTo:function(a,b,c,d){return this.filter(W).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=n.isEmptyObject(a),f=n.speed(b,c,d),g=function(){var b=qb(this,n.extend({},a),f);(e||n._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=n.timers,g=n._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&kb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&n.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=n._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=n.timers,g=d?d.length:0;for(c.finish=!0,n.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),n.each(["toggle","show","hide"],function(a,b){var c=n.fn[b];n.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(mb(b,!0),a,d,e)}}),n.each({slideDown:mb("show"),slideUp:mb("hide"),slideToggle:mb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){n.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),n.timers=[],n.fx.tick=function(){var a,b=n.timers,c=0;for(hb=n.now();c<b.length;c++)a=b[c],a()||b[c]!==a||b.splice(c--,1);b.length||n.fx.stop(),hb=void 0},n.fx.timer=function(a){n.timers.push(a),a()?n.fx.start():n.timers.pop()},n.fx.interval=13,n.fx.start=function(){ib||(ib=a.setInterval(n.fx.tick,n.fx.interval))},n.fx.stop=function(){a.clearInterval(ib),ib=null},n.fx.speeds={slow:600,fast:200,_default:400},n.fn.delay=function(b,c){return b=n.fx?n.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a,b=d.createElement("input"),c=d.createElement("div"),e=d.createElement("select"),f=e.appendChild(d.createElement("option"));c=d.createElement("div"),c.setAttribute("className","t"),c.innerHTML="  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",a=c.getElementsByTagName("a")[0],b.setAttribute("type","checkbox"),c.appendChild(b),a=c.getElementsByTagName("a")[0],a.style.cssText="top:1px",l.getSetAttribute="t"!==c.className,l.style=/top/.test(a.getAttribute("style")),l.hrefNormalized="/a"===a.getAttribute("href"),l.checkOn=!!b.value,l.optSelected=f.selected,l.enctype=!!d.createElement("form").enctype,e.disabled=!0,l.optDisabled=!f.disabled,b=d.createElement("input"),b.setAttribute("value",""),l.input=""===b.getAttribute("value"),b.value="t",b.setAttribute("type","radio"),l.radioValue="t"===b.value}();var rb=/\r/g;n.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=n.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,n(this).val()):a,null==e?e="":"number"==typeof e?e+="":n.isArray(e)&&(e=n.map(e,function(a){return null==a?"":a+""})),b=n.valHooks[this.type]||n.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=n.valHooks[e.type]||n.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),n.extend({valHooks:{option:{get:function(a){var b=n.find.attr(a,"value");return null!=b?b:n.trim(n.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(l.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!n.nodeName(c.parentNode,"optgroup"))){if(b=n(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=n.makeArray(b),g=e.length;while(g--)if(d=e[g],n.inArray(n.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),n.each(["radio","checkbox"],function(){n.valHooks[this]={set:function(a,b){return n.isArray(b)?a.checked=n.inArray(n(a).val(),b)>-1:void 0}},l.checkOn||(n.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb,tb,ub=n.expr.attrHandle,vb=/^(?:checked|selected)$/i,wb=l.getSetAttribute,xb=l.input;n.fn.extend({attr:function(a,b){return Y(this,n.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){n.removeAttr(this,a)})}}),n.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?n.prop(a,b,c):(1===f&&n.isXMLDoc(a)||(b=b.toLowerCase(),e=n.attrHooks[b]||(n.expr.match.bool.test(b)?tb:sb)),void 0!==c?null===c?void n.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=n.find.attr(a,b),null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!l.radioValue&&"radio"===b&&n.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(G);if(f&&1===a.nodeType)while(c=f[e++])d=n.propFix[c]||c,n.expr.match.bool.test(c)?xb&&wb||!vb.test(c)?a[d]=!1:a[n.camelCase("default-"+c)]=a[d]=!1:n.attr(a,c,""),a.removeAttribute(wb?c:d)}}),tb={set:function(a,b,c){return b===!1?n.removeAttr(a,c):xb&&wb||!vb.test(c)?a.setAttribute(!wb&&n.propFix[c]||c,c):a[n.camelCase("default-"+c)]=a[c]=!0,c}},n.each(n.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ub[b]||n.find.attr;xb&&wb||!vb.test(b)?ub[b]=function(a,b,d){var e,f;return d||(f=ub[b],ub[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ub[b]=f),e}:ub[b]=function(a,b,c){return c?void 0:a[n.camelCase("default-"+b)]?b.toLowerCase():null}}),xb&&wb||(n.attrHooks.value={set:function(a,b,c){return n.nodeName(a,"input")?void(a.defaultValue=b):sb&&sb.set(a,b,c)}}),wb||(sb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ub.id=ub.name=ub.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},n.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:sb.set},n.attrHooks.contenteditable={set:function(a,b,c){sb.set(a,""===b?!1:b,c)}},n.each(["width","height"],function(a,b){n.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),l.style||(n.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var yb=/^(?:input|select|textarea|button|object)$/i,zb=/^(?:a|area)$/i;n.fn.extend({prop:function(a,b){return Y(this,n.prop,a,b,arguments.length>1)},removeProp:function(a){return a=n.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),n.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&n.isXMLDoc(a)||(b=n.propFix[b]||b,e=n.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=n.find.attr(a,"tabindex");return b?parseInt(b,10):yb.test(a.nodeName)||zb.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),l.hrefNormalized||n.each(["href","src"],function(a,b){n.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),l.optSelected||(n.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),n.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){n.propFix[this.toLowerCase()]=this}),l.enctype||(n.propFix.enctype="encoding");var Ab=/[\t\r\n\f]/g;function Bb(a){return n.attr(a,"class")||""}n.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).addClass(a.call(this,b,Bb(this)))});if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Bb(c),d=1===c.nodeType&&(" "+e+" ").replace(Ab," ")){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(n.isFunction(a))return this.each(function(b){n(this).removeClass(a.call(this,b,Bb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(G)||[];while(c=this[i++])if(e=Bb(c),d=1===c.nodeType&&(" "+e+" ").replace(Ab," ")){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=n.trim(d),e!==h&&n.attr(c,"class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):n.isFunction(a)?this.each(function(c){n(this).toggleClass(a.call(this,c,Bb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=n(this),f=a.match(G)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(void 0===a||"boolean"===c)&&(b=Bb(this),b&&n._data(this,"__className__",b),n.attr(this,"class",b||a===!1?"":n._data(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+Bb(c)+" ").replace(Ab," ").indexOf(b)>-1)return!0;return!1}}),n.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){n.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),n.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Cb=a.location,Db=n.now(),Eb=/\?/,Fb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;n.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=n.trim(b+"");return e&&!n.trim(e.replace(Fb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():n.error("Invalid JSON: "+b)},n.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new a.DOMParser,c=d.parseFromString(b,"text/xml")):(c=new a.ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||n.error("Invalid XML: "+b),c};var Gb=/#.*$/,Hb=/([?&])_=[^&]*/,Ib=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Jb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Kb=/^(?:GET|HEAD)$/,Lb=/^\/\//,Mb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Nb={},Ob={},Pb="*/".concat("*"),Qb=Cb.href,Rb=Mb.exec(Qb.toLowerCase())||[];function Sb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(G)||[];if(n.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Tb(a,b,c,d){var e={},f=a===Ob;function g(h){var i;return e[h]=!0,n.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ub(a,b){var c,d,e=n.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&n.extend(!0,a,c),a}function Vb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Wb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}n.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Qb,type:"GET",isLocal:Jb.test(Rb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Pb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":n.parseJSON,"text xml":n.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ub(Ub(a,n.ajaxSettings),b):Ub(n.ajaxSettings,a)},ajaxPrefilter:Sb(Nb),ajaxTransport:Sb(Ob),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var d,e,f,g,h,i,j,k,l=n.ajaxSetup({},c),m=l.context||l,o=l.context&&(m.nodeType||m.jquery)?n(m):n.event,p=n.Deferred(),q=n.Callbacks("once memory"),r=l.statusCode||{},s={},t={},u=0,v="canceled",w={readyState:0,getResponseHeader:function(a){var b;if(2===u){if(!k){k={};while(b=Ib.exec(g))k[b[1].toLowerCase()]=b[2]}b=k[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===u?g:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return u||(a=t[c]=t[c]||a,s[a]=b),this},overrideMimeType:function(a){return u||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>u)for(b in a)r[b]=[r[b],a[b]];else w.always(a[w.status]);return this},abort:function(a){var b=a||v;return j&&j.abort(b),y(0,b),this}};if(p.promise(w).complete=q.add,w.success=w.done,w.error=w.fail,l.url=((b||l.url||Qb)+"").replace(Gb,"").replace(Lb,Rb[1]+"//"),l.type=c.method||c.type||l.method||l.type,l.dataTypes=n.trim(l.dataType||"*").toLowerCase().match(G)||[""],null==l.crossDomain&&(d=Mb.exec(l.url.toLowerCase()),l.crossDomain=!(!d||d[1]===Rb[1]&&d[2]===Rb[2]&&(d[3]||("http:"===d[1]?"80":"443"))===(Rb[3]||("http:"===Rb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=n.param(l.data,l.traditional)),Tb(Nb,l,c,w),2===u)return w;i=n.event&&l.global,i&&0===n.active++&&n.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!Kb.test(l.type),f=l.url,l.hasContent||(l.data&&(f=l.url+=(Eb.test(f)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=Hb.test(f)?f.replace(Hb,"$1_="+Db++):f+(Eb.test(f)?"&":"?")+"_="+Db++)),l.ifModified&&(n.lastModified[f]&&w.setRequestHeader("If-Modified-Since",n.lastModified[f]),n.etag[f]&&w.setRequestHeader("If-None-Match",n.etag[f])),(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&w.setRequestHeader("Content-Type",l.contentType),w.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+Pb+"; q=0.01":""):l.accepts["*"]);for(e in l.headers)w.setRequestHeader(e,l.headers[e]);if(l.beforeSend&&(l.beforeSend.call(m,w,l)===!1||2===u))return w.abort();v="abort";for(e in{success:1,error:1,complete:1})w[e](l[e]);if(j=Tb(Ob,l,c,w)){if(w.readyState=1,i&&o.trigger("ajaxSend",[w,l]),2===u)return w;l.async&&l.timeout>0&&(h=a.setTimeout(function(){w.abort("timeout")},l.timeout));try{u=1,j.send(s,y)}catch(x){if(!(2>u))throw x;y(-1,x)}}else y(-1,"No Transport");function y(b,c,d,e){var k,s,t,v,x,y=c;2!==u&&(u=2,h&&a.clearTimeout(h),j=void 0,g=e||"",w.readyState=b>0?4:0,k=b>=200&&300>b||304===b,d&&(v=Vb(l,w,d)),v=Wb(l,v,w,k),k?(l.ifModified&&(x=w.getResponseHeader("Last-Modified"),x&&(n.lastModified[f]=x),x=w.getResponseHeader("etag"),x&&(n.etag[f]=x)),204===b||"HEAD"===l.type?y="nocontent":304===b?y="notmodified":(y=v.state,s=v.data,t=v.error,k=!t)):(t=y,(b||!y)&&(y="error",0>b&&(b=0))),w.status=b,w.statusText=(c||y)+"",k?p.resolveWith(m,[s,y,w]):p.rejectWith(m,[w,y,t]),w.statusCode(r),r=void 0,i&&o.trigger(k?"ajaxSuccess":"ajaxError",[w,l,k?s:t]),q.fireWith(m,[w,y]),i&&(o.trigger("ajaxComplete",[w,l]),--n.active||n.event.trigger("ajaxStop")))}return w},getJSON:function(a,b,c){return n.get(a,b,c,"json")},getScript:function(a,b){return n.get(a,void 0,b,"script")}}),n.each(["get","post"],function(a,b){n[b]=function(a,c,d,e){return n.isFunction(c)&&(e=e||d,d=c,c=void 0),n.ajax(n.extend({url:a,type:b,dataType:e,data:c,success:d},n.isPlainObject(a)&&a))}}),n._evalUrl=function(a){return n.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},n.fn.extend({wrapAll:function(a){if(n.isFunction(a))return this.each(function(b){n(this).wrapAll(a.call(this,b))});if(this[0]){var b=n(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return n.isFunction(a)?this.each(function(b){n(this).wrapInner(a.call(this,b))}):this.each(function(){var b=n(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=n.isFunction(a);return this.each(function(c){n(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){n.nodeName(this,"body")||n(this).replaceWith(this.childNodes)}).end()}});function Xb(a){return a.style&&a.style.display||n.css(a,"display")}function Yb(a){while(a&&1===a.nodeType){if("none"===Xb(a)||"hidden"===a.type)return!0;a=a.parentNode}return!1}n.expr.filters.hidden=function(a){return l.reliableHiddenOffsets()?a.offsetWidth<=0&&a.offsetHeight<=0&&!a.getClientRects().length:Yb(a)},n.expr.filters.visible=function(a){return!n.expr.filters.hidden(a)};var Zb=/%20/g,$b=/\[\]$/,_b=/\r?\n/g,ac=/^(?:submit|button|image|reset|file)$/i,bc=/^(?:input|select|textarea|keygen)/i;function cc(a,b,c,d){var e;if(n.isArray(b))n.each(b,function(b,e){c||$b.test(a)?d(a,e):cc(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==n.type(b))d(a,b);else for(e in b)cc(a+"["+e+"]",b[e],c,d)}n.param=function(a,b){var c,d=[],e=function(a,b){b=n.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=n.ajaxSettings&&n.ajaxSettings.traditional),n.isArray(a)||a.jquery&&!n.isPlainObject(a))n.each(a,function(){e(this.name,this.value)});else for(c in a)cc(c,a[c],b,e);return d.join("&").replace(Zb,"+")},n.fn.extend({serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=n.prop(this,"elements");return a?n.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!n(this).is(":disabled")&&bc.test(this.nodeName)&&!ac.test(a)&&(this.checked||!Z.test(a))}).map(function(a,b){var c=n(this).val();return null==c?null:n.isArray(c)?n.map(c,function(a){return{name:b.name,value:a.replace(_b,"\r\n")}}):{name:b.name,value:c.replace(_b,"\r\n")}}).get()}}),n.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return this.isLocal?hc():d.documentMode>8?gc():/^(get|post|head|put|delete|options)$/i.test(this.type)&&gc()||hc()}:gc;var dc=0,ec={},fc=n.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in ec)ec[a](void 0,!0)}),l.cors=!!fc&&"withCredentials"in fc,fc=l.ajax=!!fc,fc&&n.ajaxTransport(function(b){if(!b.crossDomain||l.cors){var c;return{send:function(d,e){var f,g=b.xhr(),h=++dc;if(g.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(f in b.xhrFields)g[f]=b.xhrFields[f];b.mimeType&&g.overrideMimeType&&g.overrideMimeType(b.mimeType),b.crossDomain||d["X-Requested-With"]||(d["X-Requested-With"]="XMLHttpRequest");for(f in d)void 0!==d[f]&&g.setRequestHeader(f,d[f]+"");g.send(b.hasContent&&b.data||null),c=function(a,d){var f,i,j;if(c&&(d||4===g.readyState))if(delete ec[h],c=void 0,g.onreadystatechange=n.noop,d)4!==g.readyState&&g.abort();else{j={},f=g.status,"string"==typeof g.responseText&&(j.text=g.responseText);try{i=g.statusText}catch(k){i=""}f||!b.isLocal||b.crossDomain?1223===f&&(f=204):f=j.text?200:404}j&&e(f,i,j,g.getAllResponseHeaders())},b.async?4===g.readyState?a.setTimeout(c):g.onreadystatechange=ec[h]=c:c()},abort:function(){c&&c(void 0,!0)}}}});function gc(){try{return new a.XMLHttpRequest}catch(b){}}function hc(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}n.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),n.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return n.globalEval(a),a}}}),n.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),n.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=d.head||n("head")[0]||d.documentElement;return{send:function(e,f){b=d.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||f(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var ic=[],jc=/(=)\?(?=&|$)|\?\?/;n.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=ic.pop()||n.expando+"_"+Db++;return this[a]=!0,a}}),n.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(jc.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&jc.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=n.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(jc,"$1"+e):b.jsonp!==!1&&(b.url+=(Eb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||n.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?n(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,ic.push(e)),g&&n.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),l.createHTMLDocument=function(){if(!d.implementation.createHTMLDocument)return!1;var a=d.implementation.createHTMLDocument("");return a.body.innerHTML="<form></form><form></form>",2===a.body.childNodes.length}(),n.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||(l.createHTMLDocument?d.implementation.createHTMLDocument(""):d);var e=x.exec(a),f=!c&&[];return e?[b.createElement(e[1])]:(e=ja([a],b,f),f&&f.length&&n(f).remove(),n.merge([],e.childNodes))};var kc=n.fn.load;n.fn.load=function(a,b,c){if("string"!=typeof a&&kc)return kc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=n.trim(a.slice(h,a.length)),a=a.slice(0,h)),n.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&n.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?n("<div>").append(n.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(g,f||[a.responseText,b,a])})}),this},n.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){n.fn[b]=function(a){return this.on(b,a)}}),n.expr.filters.animated=function(a){return n.grep(n.timers,function(b){return a===b.elem}).length};function lc(a){return n.isWindow(a)?a:9===a.nodeType?a.defaultView||a.parentWindow:!1}n.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=n.css(a,"position"),l=n(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=n.css(a,"top"),i=n.css(a,"left"),j=("absolute"===k||"fixed"===k)&&n.inArray("auto",[f,i])>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),n.isFunction(b)&&(b=b.call(a,c,n.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},n.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){n.offset.setOffset(this,a,b)});var b,c,d={top:0,left:0},e=this[0],f=e&&e.ownerDocument;if(f)return b=f.documentElement,n.contains(b,e)?("undefined"!=typeof e.getBoundingClientRect&&(d=e.getBoundingClientRect()),c=lc(f),{top:d.top+(c.pageYOffset||b.scrollTop)-(b.clientTop||0),left:d.left+(c.pageXOffset||b.scrollLeft)-(b.clientLeft||0)}):d},position:function(){if(this[0]){var a,b,c={top:0,left:0},d=this[0];return"fixed"===n.css(d,"position")?b=d.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),n.nodeName(a[0],"html")||(c=a.offset()),c.top+=n.css(a[0],"borderTopWidth",!0),c.left+=n.css(a[0],"borderLeftWidth",!0)),{top:b.top-c.top-n.css(d,"marginTop",!0),left:b.left-c.left-n.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&!n.nodeName(a,"html")&&"static"===n.css(a,"position"))a=a.offsetParent;return a||Qa})}}),n.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c=/Y/.test(b);n.fn[a]=function(d){return Y(this,function(a,d,e){var f=lc(a);return void 0===e?f?b in f?f[b]:f.document.documentElement[d]:a[d]:void(f?f.scrollTo(c?n(f).scrollLeft():e,c?e:n(f).scrollTop()):a[d]=e);
+},a,d,arguments.length,null)}}),n.each(["top","left"],function(a,b){n.cssHooks[b]=Ua(l.pixelPosition,function(a,c){return c?(c=Sa(a,b),Oa.test(c)?n(a).position()[b]+"px":c):void 0})}),n.each({Height:"height",Width:"width"},function(a,b){n.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?n.css(b,c,g):n.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),n.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),n.fn.size=function(){return this.length},n.fn.andSelf=n.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return n});var mc=a.jQuery,nc=a.$;return n.noConflict=function(b){return a.$===n&&(a.$=nc),b&&a.jQuery===n&&(a.jQuery=mc),n},b||(a.jQuery=a.$=n),n});
diff --git a/js/lib/jquery/jquery-1.12.1.min.map b/js/lib/jquery/jquery-1.12.1.min.map
new file mode 100644
index 0000000..3aacf71
--- /dev/null
+++ b/js/lib/jquery/jquery-1.12.1.min.map
@@ -0,0 +1 @@
+{"version":3,"sources":["jquery.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","deletedIds","slice","concat","push","indexOf","class2type","toString","hasOwn","hasOwnProperty","support","version","jQuery","selector","context","fn","init","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","toUpperCase","prototype","jquery","constructor","length","toArray","call","get","num","pushStack","elems","ret","merge","prevObject","each","callback","map","elem","i","apply","arguments","first","eq","last","len","j","end","sort","splice","extend","src","copyIsArray","copy","name","options","clone","target","deep","isFunction","isPlainObject","isArray","undefined","expando","Math","random","replace","isReady","error","msg","noop","obj","type","Array","isWindow","isNumeric","realStringObj","parseFloat","isEmptyObject","key","nodeType","e","ownFirst","globalEval","data","trim","execScript","camelCase","string","nodeName","toLowerCase","isArrayLike","text","makeArray","arr","results","Object","inArray","max","second","grep","invert","callbackInverse","matches","callbackExpect","arg","value","guid","proxy","args","tmp","now","Date","Symbol","iterator","split","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","sortOrder","a","b","MAX_NEGATIVE","pop","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","rquickExpr","rsibling","rescape","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","childNodes","els","seed","m","nid","nidselect","match","groups","newSelector","newContext","ownerDocument","exec","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","test","getAttribute","setAttribute","toSelector","join","testContext","parentNode","querySelectorAll","qsaError","removeAttribute","keys","cache","cacheLength","shift","markFunction","assert","div","createElement","removeChild","addHandle","attrs","handler","attrHandle","siblingCheck","cur","diff","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","documentElement","node","hasCompare","parent","doc","defaultView","top","addEventListener","attachEvent","className","appendChild","createComment","getById","getElementsByName","find","filter","attrId","getAttributeNode","tag","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","val","specified","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative",">","dir"," ","+","~","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","result","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","useCache","lastChild","uniqueID","pseudo","setFilters","idx","matched","not","matcher","unmatched","has","innerText","lang","elemLang","hash","location","root","focus","activeElement","hasFocus","href","tabIndex","enabled","disabled","checked","selected","selectedIndex","empty","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","tokens","soFar","preFilters","cached","addCombinator","combinator","base","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","multipleContexts","contexts","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","token","compiled","div1","defaultValue","unique","isXMLDoc","until","truncate","is","siblings","n","rneedsContext","rsingleTag","risSimple","winnow","qualifier","self","rootjQuery","charAt","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","next","prev","targets","closest","l","pos","index","prevAll","add","addBack","sibling","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","contentWindow","reverse","rnotwhite","createOptions","object","flag","Callbacks","firing","memory","fired","locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","fireWith","Deferred","func","tuples","state","promise","always","deferred","fail","then","fns","newDefer","tuple","returned","progress","notify","resolve","reject","pipe","stateString","when","subordinate","resolveValues","remaining","updateFunc","values","progressValues","notifyWith","resolveWith","progressContexts","resolveContexts","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","detach","removeEventListener","completed","detachEvent","event","readyState","doScroll","setTimeout","frameElement","doScrollCheck","inlineBlockNeedsLayout","body","container","style","cssText","zoom","offsetWidth","deleteExpando","acceptData","noData","rbrace","rmultiDash","dataAttr","parseJSON","isEmptyDataObject","internalData","pvt","thisCache","internalKey","isNode","toJSON","internalRemoveData","cleanData","applet ","embed ","object ","hasData","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","stop","setter","clearQueue","count","defer","shrinkWrapBlocksVal","shrinkWrapBlocks","width","pnum","source","rcssNum","cssExpand","isHidden","el","css","adjustCSS","prop","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","unit","cssNumber","initialInUnit","access","chainable","emptyGet","raw","bulk","rcheckableType","rtagName","rscriptType","rleadingWhitespace","nodeNames","createSafeFragment","safeFrag","createDocumentFragment","fragment","leadingWhitespace","tbody","htmlSerialize","html5Clone","cloneNode","outerHTML","appendChecked","noCloneChecked","checkClone","noCloneEvent","wrapMap","option","legend","area","param","thead","tr","col","td","_default","optgroup","tfoot","colgroup","caption","th","getAll","found","setGlobalEval","refElements","rhtml","rtbody","fixDefaultChecked","defaultChecked","buildFragment","scripts","selection","ignored","wrap","safe","nodes","htmlPrefilter","createTextNode","eventName","change","focusin","rformElems","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","returnTrue","returnFalse","safeActiveElement","err","on","types","one","origFn","events","t","handleObjIn","special","eventHandle","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","ontype","bubbleType","eventPath","Event","isTrigger","rnamespace","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","isNaN","originalEvent","fixHook","fixHooks","mouseHooks","keyHooks","props","srcElement","metaKey","original","which","charCode","keyCode","eventDoc","fromElement","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","relatedTarget","toElement","load","blur","click","beforeunload","returnValue","simulate","isSimulated","defaultPrevented","timeStamp","cancelBubble","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","form","_submitBubble","propertyName","_justChanged","attaches","rinlinejQuery","rnoshimcache","rxhtmlTag","rnoInnerhtml","rchecked","rscriptTypeMasked","rcleanScript","safeFragment","fragmentDiv","manipulationTarget","content","disableScript","restoreScript","cloneCopyEvent","dest","oldData","curData","fixCloneNodeIssues","defaultSelected","domManip","collection","hasScripts","iNoClone","html","_evalUrl","keepData","dataAndEvents","deepDataAndEvents","destElements","srcElements","inPage","forceAcceptData","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","insert","iframe","elemdisplay","HTML","BODY","actualDisplay","display","defaultDisplay","write","close","rmargin","rnumnonpx","swap","old","pixelPositionVal","pixelMarginRightVal","boxSizingReliableVal","reliableHiddenOffsetsVal","reliableMarginRightVal","reliableMarginLeftVal","opacity","cssFloat","backgroundClip","clearCloneStyle","boxSizing","MozBoxSizing","WebkitBoxSizing","reliableHiddenOffsets","computeStyleTests","boxSizingReliable","pixelMarginRight","pixelPosition","reliableMarginRight","reliableMarginLeft","divStyle","getComputedStyle","marginLeft","marginRight","getClientRects","offsetHeight","getStyles","curCSS","rposition","view","opener","computed","minWidth","maxWidth","getPropertyValue","currentStyle","left","rs","rsLeft","runtimeStyle","pixelLeft","addGetHookIf","conditionFn","hookFn","ralpha","ropacity","rdisplayswap","rnumsplit","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssPrefixes","emptyStyle","vendorPropName","capName","showHide","show","hidden","setPositiveNumber","subtract","augmentWidthOrHeight","extra","isBorderBox","styles","getWidthOrHeight","valueIsBorderBox","msFullscreenElement","round","getBoundingClientRect","cssHooks","animationIterationCount","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","cssProps","float","origName","set","isFinite","$1","margin","padding","border","prefix","suffix","expand","expanded","parts","hide","toggle","Tween","easing","propHooks","run","percent","eased","duration","step","fx","linear","p","swing","cos","PI","fxNow","timerId","rfxtypes","rrun","createFxNow","genFx","includeWidth","height","createTween","animation","Animation","tweeners","defaultPrefilter","opts","oldfire","checkDisplay","anim","dataShow","unqueued","overflow","overflowX","overflowY","propFilter","specialEasing","properties","stopped","prefilters","tick","currentTime","startTime","tweens","originalProperties","originalOptions","gotoEnd","rejectWith","timer","complete","*","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","getSetAttribute","hrefNormalized","checkOn","optSelected","enctype","optDisabled","radioValue","rreturn","valHooks","optionSet","scrollHeight","nodeHook","boolHook","ruseDefault","getSetInput","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","setAttributeNode","createAttribute","coords","contenteditable","rfocusable","rclickable","removeProp","tabindex","parseInt","for","class","rclass","getClass","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","classNames","hasClass","hover","fnOver","fnOut","nonce","rquery","rvalidtokens","JSON","parse","requireNonComma","depth","str","comma","open","Function","parseXML","DOMParser","parseFromString","ActiveXObject","async","loadXML","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","transports","allTypes","ajaxLocation","ajaxLocParts","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","firstDataType","ct","finalDataType","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","responseFields","dataFilter","active","lastModified","etag","url","isLocal","processData","contentType","accepts","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","cacheURL","responseHeadersString","timeoutTimer","fireGlobals","transport","responseHeaders","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","code","status","abort","statusText","finalText","success","method","crossDomain","traditional","hasContent","ifModified","headers","beforeSend","send","nativeStatusText","modified","getJSON","getScript","throws","wrapAll","wrapInner","unwrap","getDisplay","filterHidden","visible","r20","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","v","encodeURIComponent","serialize","serializeArray","xhr","createActiveXHR","documentMode","createStandardXHR","xhrId","xhrCallbacks","xhrSupported","cors","username","xhrFields","isAbort","onreadystatechange","responseText","XMLHttpRequest","script","text script","head","scriptCharset","charset","onload","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","_load","params","animated","getWindow","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","using","win","box","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","bind","unbind","delegate","undelegate","size","andSelf","define","amd","_jQuery","_$","$","noConflict"],"mappings":"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","file":"jquery.min.js"}
\ No newline at end of file
diff --git a/js/prototype/validation.js b/js/prototype/validation.js
index 8e671e2..5ea0b32 100644
--- a/js/prototype/validation.js
+++ b/js/prototype/validation.js
@@ -482,6 +482,9 @@ Validation.addAllThese([
     ['validate-code', 'Please use only letters (a-z), numbers (0-9) or underscore(_) in this field, first character should be a letter.', function (v) {
                 return Validation.get('IsEmpty').test(v) ||  /^[a-z]+[a-z0-9_]+$/.test(v)
             }],
+    ['validate-code-event', 'Please do not use "event" for an attribute code.', function (v) {
+        return Validation.get('IsEmpty').test(v) || !/^(event)$/.test(v)
+            }],
     ['validate-alphanum', 'Please use only letters (a-z or A-Z) or numbers (0-9) only in this field. No spaces or other characters are allowed.', function(v) {
                 return Validation.get('IsEmpty').test(v) || /^[a-zA-Z0-9]+$/.test(v)
             }],
diff --git a/lib/Varien/Autoload.php b/lib/Varien/Autoload.php
index b842be6..f91fec5 100644
--- a/lib/Varien/Autoload.php
+++ b/lib/Varien/Autoload.php
@@ -91,7 +91,7 @@ class Varien_Autoload
         }
         $classFile.= '.php';
         //echo $classFile;die();
-        return include $classFile;
+        return @include $classFile;
     }
 
     /**
diff --git a/lib/Varien/File/Uploader.php b/lib/Varien/File/Uploader.php
index 06a8bb1..6b797ba 100644
--- a/lib/Varien/File/Uploader.php
+++ b/lib/Varien/File/Uploader.php
@@ -519,7 +519,7 @@ class Varien_File_Uploader
 
                 $fileAttributes = $tmp_var;
                 $this->_file = $fileAttributes;
-            } elseif( count($fileId) > 0 && isset($_FILES[$fileId])) {
+            } elseif(!empty($fileId) && isset($_FILES[$fileId])) {
                 $this->_uploadType = self::SINGLE_STYLE;
                 $this->_file = $_FILES[$fileId];
             } elseif( $fileId == '' ) {
diff --git a/lib/Varien/Io/Sftp.php b/lib/Varien/Io/Sftp.php
index aa56fae..2e22c60 100644
--- a/lib/Varien/Io/Sftp.php
+++ b/lib/Varien/Io/Sftp.php
@@ -40,7 +40,7 @@ class Varien_Io_Sftp extends Varien_Io_Abstract implements Varien_Io_Interface
     const SSH2_PORT = 22;
 
     /**
-     * @var Net_SFTP $_connection
+     * @var phpseclib\Net\SFTP $_connection
      */
     protected $_connection = null;
 
@@ -66,7 +66,7 @@ class Varien_Io_Sftp extends Varien_Io_Abstract implements Varien_Io_Interface
             $host = $args['host'];
             $port = self::SSH2_PORT;
         }
-        $this->_connection = new Net_SFTP($host, $port, $args['timeout']);
+        $this->_connection = new phpseclib\Net\SFTP($host, $port, $args['timeout']);
         if (!$this->_connection->login($args['username'], $args['password'])) {
             throw new Exception(sprintf(__("Unable to open SFTP connection as %s@%s", $args['username'], $args['host'])));
         }
diff --git a/lib/mcryptcompat/mcrypt.php b/lib/mcryptcompat/mcrypt.php
new file mode 100644
index 0000000..5ce4caf
--- /dev/null
+++ b/lib/mcryptcompat/mcrypt.php
@@ -0,0 +1,1341 @@
+<?php
+
+/**
+ * mcrypt polyfill
+ *
+ * PHP 7.1 removed the mcrypt extension. This provides a compatibility layer for legacy applications.
+ *
+ * PHP versions 5 and 7
+ *
+ * LICENSE: Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ *
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2016 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
+ */
+
+use phpseclib\Crypt\Rijndael;
+use phpseclib\Crypt\Twofish;
+use phpseclib\Crypt\Blowfish;
+use phpseclib\Crypt\TripleDES;
+use phpseclib\Crypt\DES;
+use phpseclib\Crypt\RC2;
+use phpseclib\Crypt\RC4;
+use phpseclib\Crypt\Random;
+use phpseclib\Crypt\Base;
+
+if (!defined('MCRYPT_MODE_ECB')) {
+    /**#@+
+     * mcrypt constants
+     *
+     * @access public
+     */
+    // http://php.net/manual/en/mcrypt.constants.php
+    define('MCRYPT_MODE_ECB', 'ecb');
+    define('MCRYPT_MODE_CBC', 'cbc');
+    define('MCRYPT_MODE_CFB', 'cfb');
+    define('MCRYPT_MODE_OFB', 'ofb');
+    define('MCRYPT_MODE_NOFB', 'nofb');
+    define('MCRYPT_MODE_STREAM', 'stream');
+
+    define('MCRYPT_ENCRYPT', 0);
+    define('MCRYPT_DECRYPT', 1);
+    define('MCRYPT_DEV_RANDOM', 0);
+    define('MCRYPT_DEV_URANDOM', 1);
+    define('MCRYPT_RAND', 2);
+
+    // http://php.net/manual/en/mcrypt.ciphers.php
+    define('MCRYPT_3DES', 'tripledes');
+    define('MCRYPT_ARCFOUR_IV', 'arcfour-iv');
+    define('MCRYPT_ARCFOUR', 'arcfour');
+    define('MCRYPT_BLOWFISH', 'blowfish');
+    define('MCRYPT_CAST_128', 'cast-128');
+    define('MCRYPT_CAST_256', 'cast-256');
+    define('MCRYPT_CRYPT', 'crypt');
+    define('MCRYPT_DES', 'des');
+    // MCRYPT_DES_COMPAT?
+    // MCRYPT_ENIGMA?
+    define('MCRYPT_GOST', 'gost');
+    define('MCRYPT_IDEA', 'idea');
+    define('MCRYPT_LOKI97', 'loki97');
+    define('MCRYPT_MARS', 'mars');
+    define('MCRYPT_PANAMA', 'panama');
+    define('MCRYPT_RIJNDAEL_128', 'rijndael-128');
+    define('MCRYPT_RIJNDAEL_192', 'rijndael-192');
+    define('MCRYPT_RIJNDAEL_256', 'rijndael-256');
+    define('MCRYPT_RC2', 'rc2');
+    // MCRYPT_RC4?
+    define('MCRYPT_RC6', 'rc6');
+    // MCRYPT_RC6_128
+    // MCRYPT_RC6_192
+    // MCRYPT_RC6_256
+    define('MCRYPT_SAFER64', 'safer-sk64');
+    define('MCRYPT_SAFER128', 'safer-sk128');
+    define('MCRYPT_SAFERPLUS', 'saferplus');
+    define('MCRYPT_SERPENT', 'serpent');
+    // MCRYPT_SERPENT_128?
+    // MCRYPT_SERPENT_192?
+    // MCRYPT_SERPENT_256?
+    define('MCRYPT_SKIPJACK', 'skipjack');
+    // MCRYPT_TEAN?
+    define('MCRYPT_THREEWAY', 'threeway');
+    define('MCRYPT_TRIPLEDES', 'tripledes');
+    define('MCRYPT_TWOFISH', 'twofish');
+    // MCRYPT_TWOFISH128?
+    // MCRYPT_TWOFISH192?
+    // MCRYPT_TWOFISH256?
+    define('MCRYPT_WAKE', 'wake');
+    define('MCRYPT_XTEA', 'xtea');
+    /**#@-*/
+}
+
+if (!function_exists('phpseclib_mcrypt_list_algorithms')) {
+    /**
+     * Sets the key
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @param string $key
+     * @access private
+     */
+    function phpseclib_set_key(Base $td, $key)
+    {
+        $length = $origLength = strlen($key);
+
+        $reflection = new \ReflectionClass($td);
+
+        switch ($reflection->getShortName()) {
+            case 'TripleDES':
+                $length = 24;
+                break;
+            case 'DES':
+                $length = 8;
+                break;
+            case 'Twofish':
+            case 'Rijndael':
+                switch (true) {
+                    case $length <= 16:
+                        $length = 16;
+                        break;
+                    case $length <= 24:
+                        $length = 24;
+                        break;
+                    default:
+                        $length = 32;
+                }
+                break;
+            case 'Blowfish':
+                switch (true) {
+                    case $length <= 3:
+                        while (strlen($key) <= 5) {
+                            $key.= $key;
+                        }
+                        $key = substr($key, 0, 6);
+                        $td->setKey($key);
+                        return;
+                    case $length > 56:
+                        $length = 56;
+                }
+                break;
+            case 'RC2':
+                if ($length > 56) {
+                    $length = 56;
+                }
+                break;
+            case 'RC4':
+                if ($length > 256) {
+                    $length = 256;
+                }
+        }
+
+        if ($length != $origLength) {
+            $key = str_pad(substr($key, 0, $length), $length, "\0");
+        }
+
+        $td->setKey($key);
+    }
+
+    /**
+     * Sets the IV
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @param string $iv
+     * @access private
+     */
+    function phpseclib_set_iv(Base $td, $iv)
+    {
+        if (phpseclib_mcrypt_module_is_iv_mode($td->mcrypt_mode)) {
+            $length = $td->getBlockLength() >> 3;
+            $iv = str_pad(substr($iv, 0, $length), $length, "\0");
+            $td->setIV($iv);
+        }
+    }
+
+    /**
+     * Gets an array of all supported ciphers.
+     *
+     * @param string $lib_dir optional
+     * @return array
+     * @access public
+     */
+    function phpseclib_mcrypt_list_algorithms($lib_dir = '')
+    {
+        return array(
+            'rijndael-128',
+            'twofish',
+            'rijndael-192',
+            'blowfish-compat',
+            'des',
+            'rijndael-256',
+            'blowfish',
+            'rc2',
+            'tripledes',
+            'arcfour'
+        );
+    }
+
+    /**
+     * Gets an array of all supported modes
+     *
+     * @param string $lib_dir optional
+     * @return array
+     * @access public
+     */
+    function phpseclib_mcrypt_list_modes($lib_dir = '')
+    {
+        return array(
+            'cbc',
+            'cfb',
+            'ctr',
+            'ecb',
+            'ncfb',
+            'nofb',
+            //'ofb',
+            'stream'
+        );
+    }
+
+    /**
+     * Creates an initialization vector (IV) from a random source
+     *
+     * The IV is only meant to give an alternative seed to the encryption routines. This IV does not need
+     * to be secret at all, though it can be desirable. You even can send it along with your ciphertext
+     * without losing security.
+     *
+     * @param int $size
+     * @param int $source optional
+     * @return string
+     * @access public
+     */
+    function phpseclib_mcrypt_create_iv($size, $source = MCRYPT_DEV_URANDOM)
+    {
+        if ($size < 1 || $size > 0x7FFFFFFF) {
+            trigger_error('mcrypt_create_iv(): Cannot create an IV with a size of less than 1 or greater than 2147483647', E_USER_WARNING);
+            return '';
+        }
+        return Random::string($size);
+    }
+
+    /**
+     * Opens the module of the algorithm and the mode to be used
+     *
+     * This function opens the module of the algorithm and the mode to be used. The name of the algorithm
+     * is specified in algorithm, e.g. "twofish" or is one of the MCRYPT_ciphername constants. The module
+     * is closed by calling mcrypt_module_close().
+     *
+     * @param string $algorithm
+     * @param string $algorithm_directory
+     * @param string $mode
+     * @param string $mode_directory
+     * @return object
+     * @access public
+     */
+    function phpseclib_mcrypt_module_open($algorithm, $algorithm_directory, $mode, $mode_directory)
+    {
+        $modeMap = array(
+            'ctr' => Base::MODE_CTR,
+            'ecb' => Base::MODE_ECB,
+            'cbc' => Base::MODE_CBC,
+            'ncfb'=> Base::MODE_CFB,
+            'nofb'=> Base::MODE_OFB,
+            'stream' => Base::MODE_STREAM
+        );
+        switch (true) {
+            case !isset($modeMap[$mode]):
+            case $mode == 'stream' && $algorithm != 'arcfour':
+            case $algorithm == 'arcfour' && $mode != 'stream':
+                trigger_error('mcrypt_module_open(): Could not open encryption module', E_USER_WARNING);
+                return false;
+        }
+        switch ($algorithm) {
+            case 'rijndael-128':
+                $cipher = new Rijndael($modeMap[$mode]);
+                $cipher->setBlockLength(128);
+                break;
+            case 'twofish':
+                $cipher = new Twofish($modeMap[$mode]);
+                break;
+            case 'rijndael-192':
+                $cipher = new Rijndael($modeMap[$mode]);
+                $cipher->setBlockLength(192);
+                break;
+            case 'des':
+                $cipher = new DES($modeMap[$mode]);
+                break;
+            case 'rijndael-256':
+                $cipher = new Rijndael($modeMap[$mode]);
+                $cipher->setBlockLength(256);
+                break;
+            case 'blowfish':
+                $cipher = new Blowfish($modeMap[$mode]);
+                break;
+            case 'rc2':
+                $cipher = new RC2($modeMap[$mode]);
+                break;
+            case'tripledes':
+                $cipher = new TripleDES($modeMap[$mode]);
+                break;
+            case 'arcfour':
+                $cipher = new RC4();
+                break;
+            default:
+                trigger_error('mcrypt_module_open(): Could not open encryption module', E_USER_WARNING);
+                return false;
+        }
+
+        $cipher->mcrypt_mode = $mode;
+        $cipher->disablePadding();
+
+        return $cipher;
+    }
+
+    /**
+     * Returns the maximum supported keysize of the opened mode
+     *
+     * Gets the maximum supported key size of the algorithm in bytes.
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @return int
+     * @access public
+     */
+    function phpseclib_mcrypt_enc_get_key_size(Base $td)
+    {
+        // invalid parameters with mcrypt result in warning's. type hinting, as this function is doing,
+        // produces a catchable fatal error.
+
+        $reflection = new \ReflectionClass($td);
+
+        switch ($reflection->getShortName()) {
+            case 'Rijndael':
+            case 'Twofish':
+                return 32;
+            case 'DES':
+                return 8;
+            case 'TripleDES':
+                return 24;
+            case 'RC4':
+                return 256;
+            case 'Blowfish':
+                return 56;
+            case 'RC2':
+                return 128;
+        }
+    }
+
+   /**
+     * Gets the name of the specified cipher
+     *
+     * @param string $cipher
+     * @return mixed
+     * @access public
+     */
+    function phpseclib_mcrypt_get_cipher_name($cipher)
+    {
+        switch ($cipher) {
+            case 'rijndael-128':
+                return 'Rijndael-128';
+            case 'twofish':
+                return 'Twofish';
+            case 'rijndael-192':
+                return 'Rijndael-192';
+            case 'des':
+                return 'DES';
+            case 'rijndael-256':
+                return 'Rijndael-256';
+            case 'blowfish':
+                return 'Blowfish';
+            case 'rc2':
+                return 'RC2';
+            case 'tripledes':
+                return '3DES';
+            case 'arcfour':
+                return 'RC4';
+            default:
+                return false;
+        }
+    }
+
+   /**
+     * Gets the block size of the specified cipher
+     *
+     * @param string $cipher
+     * @param string $mode optional
+     * @return int
+     * @access public
+     */
+    function phpseclib_mcrypt_get_block_size($cipher, $mode = false)
+    {
+        if (!$mode) {
+            $mode = $cipher == 'rc4' ? 'stream' : 'cbc';
+        }
+        $td = @phpseclib_mcrypt_module_open($cipher, '', $mode, '');
+        if ($td === false) {
+            trigger_error('mcrypt_get_block_size(): Module initialization failed', E_USER_WARNING);
+            return false;
+        }
+        return phpseclib_mcrypt_enc_get_block_size($td);
+    }
+
+   /**
+     * Gets the key size of the specified cipher
+     *
+     * @param string $cipher
+     * @param string $mode optional
+     * @return int
+     * @access public
+     */
+    function phpseclib_mcrypt_get_key_size($cipher, $mode = false)
+    {
+        if (!$mode) {
+            $mode = $cipher == 'rc4' ? 'stream' : 'cbc';
+        }
+        $td = @phpseclib_mcrypt_module_open($cipher, '', $mode, '');
+        if ($td === false) {
+            trigger_error('mcrypt_get_key_size(): Module initialization failed', E_USER_WARNING);
+            return false;
+        }
+        return phpseclib_mcrypt_enc_get_key_size($td);
+    }
+
+   /**
+     * Returns the size of the IV belonging to a specific cipher/mode combination
+     *
+     * @param string $cipher
+     * @param string $mode
+     * @return int
+     * @access public
+     */
+    function phpseclib_mcrypt_get_iv_size($cipher, $mode)
+    {
+        $td = @phpseclib_mcrypt_module_open($cipher, '', $mode, '');
+        if ($td === false) {
+            trigger_error('mcrypt_get_iv_size(): Module initialization failed', E_USER_WARNING);
+            return false;
+        }
+        return phpseclib_mcrypt_enc_get_iv_size($td);
+    }
+
+    /**
+     * Returns the maximum supported keysize of the opened mode
+     *
+     * Gets the maximum supported keysize of the opened mode.
+     *
+     * @param string $algorithm
+     * @param string $lib_dir
+     * @return int
+     * @access public
+     */
+    function phpseclib_mcrypt_module_get_algo_key_size($algorithm, $lib_dir = '')
+    {
+        $mode = $algorithm == 'rc4' ? 'stream' : 'cbc';
+        $td = @phpseclib_mcrypt_module_open($algorithm, '', $mode, '');
+        if ($td === false) {
+            trigger_error('mcrypt_module_get_algo_key_size(): Module initialization failed', E_USER_WARNING);
+            return false;
+        }
+        return phpseclib_mcrypt_enc_get_key_size($td);
+    }
+
+    /**
+     * Returns the size of the IV of the opened algorithm
+     *
+     * This function returns the size of the IV of the algorithm specified by the encryption
+     * descriptor in bytes. An IV is used in cbc, cfb and ofb modes, and in some algorithms
+     * in stream mode.
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @return int
+     * @access public
+     */
+    function phpseclib_mcrypt_enc_get_iv_size(Base $td)
+    {
+        return $td->getBlockLength() >> 3;
+    }
+
+    /**
+     * Returns the blocksize of the opened algorithm
+     *
+     * Gets the blocksize of the opened algorithm.
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @return int
+     * @access public
+     */
+    function phpseclib_mcrypt_enc_get_block_size(Base $td)
+    {
+        return $td->getBlockLength() >> 3;
+    }
+
+    /**
+     * Returns the blocksize of the specified algorithm
+     *
+     * Gets the blocksize of the specified algorithm.
+     *
+     * @param string $algorithm
+     * @param string $lib_dir
+     * @return int
+     * @access public
+     */
+    function phpseclib_mcrypt_module_get_algo_block_size($algorithm, $lib_dir = '')
+    {
+        // cbc isn't a valid mode for rc4 but that's ok: -1 will still be returned
+        $td = @phpseclib_mcrypt_module_open($algorithm, '', 'cbc', '');
+        if ($td === false) {
+            return -1;
+        }
+        return $td->getBlockLength() >> 3;
+    }
+
+    /**
+     * Returns the name of the opened algorithm
+     *
+     * This function returns the name of the algorithm.
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @return string|bool
+     * @access public
+     */
+    function phpseclib_mcrypt_enc_get_algorithms_name(Base $td)
+    {
+        $reflection = new \ReflectionObject($td);
+        switch ($reflection->getShortName()) {
+            case 'Rijndael':
+                return 'RIJNDAEL-' . $td->getBlockLength();
+            case 'Twofish':
+                return 'TWOFISH';
+            case 'Blowfish':
+                return 'BLOWFISH'; // what about BLOWFISH-COMPAT?
+            case 'DES':
+                return 'DES';
+            case 'RC2':
+                return 'RC2';
+            case 'TripleDES':
+                return 'TRIPLEDES';
+            case 'RC4':
+                return 'ARCFOUR';
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns the name of the opened mode
+     *
+     * This function returns the name of the mode.
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @return string|bool
+     * @access public
+     */
+    function phpseclib_mcrypt_enc_get_modes_name(Base $td)
+    {
+        $modeMap = array(
+            Base::MODE_CTR => 'CTR',
+            Base::MODE_ECB => 'ECB',
+            Base::MODE_CBC => 'CBC',
+            Base::MODE_CFB => 'nCFB',
+            Base::MODE_OFB => 'nOFB',
+            Base::MODE_STREAM => 'STREAM'
+        );
+
+        return isset($modeMap[$td->mode]) ? $modeMap[$td->mode] : false;
+    }
+
+    /**
+     * Checks whether the encryption of the opened mode works on blocks
+     *
+     * Tells whether the algorithm of the opened mode works on blocks (e.g. FALSE for stream, and TRUE for cbc, cfb, ofb)..
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @return bool
+     * @access public
+     */
+    function phpseclib_mcrypt_enc_is_block_algorithm_mode(Base $td)
+    {
+        return $td->mode != Base::MODE_STREAM;
+    }
+
+    /**
+     * Checks whether the algorithm of the opened mode is a block algorithm
+     *
+     * Tells whether the algorithm of the opened mode is a block algorithm.
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @return bool
+     * @access public
+     */
+    function phpseclib_mcrypt_enc_is_block_algorithm(Base $td)
+    {
+        return phpseclib_mcrypt_enc_get_algorithms_name($td) != 'ARCFOUR';
+    }
+
+    /**
+     * Checks whether the opened mode outputs blocks
+     *
+     * Tells whether the opened mode outputs blocks (e.g. TRUE for cbc and ecb, and FALSE for cfb and stream).
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @return bool
+     * @access public
+     */
+    function phpseclib_mcrypt_enc_is_block_mode(Base $td)
+    {
+        return $td->mode == Base::MODE_ECB || $td->mode == Base::MODE_CBC;
+    }
+
+    /**
+     * Runs a self test on the opened module
+     *
+     * This function runs the self test on the algorithm specified by the descriptor td.
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @return bool
+     * @access public
+     */
+    function phpseclib_mcrypt_enc_self_test(Base $td)
+    {
+        return true;
+    }
+
+    /**
+     * This function initializes all buffers needed for en/decryption.
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @param string $key
+     * @param string $iv
+     * @return int
+     * @access public
+     */
+    function phpseclib_mcrypt_generic_init(Base $td, $key, $iv)
+    {
+        $iv_size = phpseclib_mcrypt_enc_get_iv_size($td);
+        if (strlen($iv) != $iv_size && $td->mcrypt_mode != 'ecb') {
+            trigger_error('mcrypt_generic_init(): Iv size incorrect; supplied length: ' . strlen($iv) . ', needed: ' . $iv_size, E_USER_WARNING);
+        }
+        if (!strlen($key)) {
+            trigger_error('mcrypt_generic_init(): Key size is 0', E_USER_WARNING);
+            return -3;
+        }
+        $max_key_size = phpseclib_mcrypt_enc_get_key_size($td);
+        if (strlen($key) > $max_key_size) {
+            trigger_error('mcrypt_generic_init(): Key size too large; supplied length: ' . strlen($key) . ', max: ' . $max_key_size, E_USER_WARNING);
+        }
+        phpseclib_set_key($td, $key);
+        phpseclib_set_iv($td, $iv);
+
+        $td->enableContinuousBuffer();
+        $td->mcrypt_polyfill_init = true;
+
+        return 0;
+    }
+
+    /**
+     * Encrypt / decrypt data
+     *
+     * Performs checks common to both mcrypt_generic and mdecrypt_generic
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @param string $data
+     * @param string $op
+     * @return string|bool
+     * @access private
+     */
+    function phpseclib_mcrypt_generic_helper(Base $td, &$data, $op)
+    {
+        // in the orig mcrypt, if mcrypt_generic_init() was called and an empty key was provided you'd get the following error:
+        // Warning: mcrypt_generic(): supplied resource is not a valid MCrypt resource
+        // that error doesn't really make a lot of sense in this context since $td is not a resource nor should it be one.
+        // in light of that we'll just display the same error that you get when you don't call mcrypt_generic_init() at all
+        if (!isset($td->mcrypt_polyfill_init)) {
+            trigger_error('m' . $op . '_generic(): Operation disallowed prior to mcrypt_generic_init().', E_USER_WARNING);
+            return false;
+        }
+
+        // phpseclib does not currently provide a way to retrieve the mode once it has been set via "public" methods
+        if (phpseclib_mcrypt_module_is_block_mode($td->mcrypt_mode)) {
+            $block_length = phpseclib_mcrypt_enc_get_iv_size($td);
+            $extra = strlen($data) % $block_length;
+            if ($extra) {
+                $data.= str_repeat("\0", $block_length - $extra);
+            }
+        }
+
+        return $op == 'crypt' ? $td->encrypt($data) : $td->decrypt($data);
+    }
+
+    /**
+     * This function encrypts data
+     *
+     * This function encrypts data. The data is padded with "\0" to make sure the length of the data
+     * is n * blocksize. This function returns the encrypted data. Note that the length of the
+     * returned string can in fact be longer than the input, due to the padding of the data.
+     *
+     * If you want to store the encrypted data in a database make sure to store the entire string as
+     * returned by mcrypt_generic, or the string will not entirely decrypt properly. If your original
+     * string is 10 characters long and the block size is 8 (use mcrypt_enc_get_block_size() to
+     * determine the blocksize), you would need at least 16 characters in your database field. Note
+     * the string returned by mdecrypt_generic() will be 16 characters as well...use rtrim($str, "\0")
+     * to remove the padding.
+     *
+     * If you are for example storing the data in a MySQL database remember that varchar fields
+     * automatically have trailing spaces removed during insertion. As encrypted data can end in a
+     * space (ASCII 32), the data will be damaged by this removal. Store data in a tinyblob/tinytext
+     * (or larger) field instead.
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @param string $data
+     * @return string|bool
+     * @access public
+     */
+    function phpseclib_mcrypt_generic(Base $td, $data)
+    {
+        return phpseclib_mcrypt_generic_helper($td, $data, 'crypt');
+    }
+
+    /**
+     * Decrypts data
+     *
+     * This function decrypts data. Note that the length of the returned string can in fact be
+     * longer than the unencrypted string, due to the padding of the data.
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @param string $data
+     * @return string|bool
+     * @access public
+     */
+    function phpseclib_mdecrypt_generic(Base $td, $data)
+    {
+        return phpseclib_mcrypt_generic_helper($td, $data, 'decrypt');
+    }
+
+    /**
+     * This function deinitializes an encryption module
+     *
+     * This function terminates encryption specified by the encryption descriptor (td).
+     * It clears all buffers, but does not close the module. You need to call
+     * mcrypt_module_close() yourself. (But PHP does this for you at the end of the
+     * script.)
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @return bool
+     * @access public
+     */
+    function phpseclib_mcrypt_generic_deinit(Base $td)
+    {
+        if (!isset($td->mcrypt_polyfill_init)) {
+            trigger_error('mcrypt_generic_deinit(): Could not terminate encryption specifier', E_USER_WARNING);
+            return false;
+        }
+
+        $td->disableContinuousBuffer();
+        unset($td->mcrypt_polyfill_init);
+        return true;
+    }
+
+    /**
+     * Closes the mcrypt module
+     *
+     * Closes the specified encryption handle.
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @return bool
+     * @access public
+     */
+    function phpseclib_mcrypt_module_close(Base $td)
+    {
+        //unset($td->mcrypt_polyfill_init);
+        return true;
+    }
+
+    /**
+     * Returns an array with the supported keysizes of the opened algorithm
+     *
+     * Returns an array with the key sizes supported by the specified algorithm.
+     * If it returns an empty array then all key sizes between 1 and mcrypt_module_get_algo_key_size()
+     * are supported by the algorithm.
+     *
+     * @param string $algorithm
+     * @param string $lib_dir optional
+     * @return array
+     * @access public
+     */
+    function phpseclib_mcrypt_module_get_supported_key_sizes($algorithm, $lib_dir = '')
+    {
+        switch ($algorithm) {
+            case 'rijndael-128':
+            case 'rijndael-192':
+            case 'rijndael-256':
+            case 'twofish':
+                return array(16, 24, 32);
+            case 'des':
+                return array(8);
+            case 'tripledes':
+                return array(24);
+            //case 'arcfour':
+            //case 'blowfish':
+            //case 'rc2':
+            default:
+                return array();
+        }
+    }
+
+    /**
+     * Returns an array with the supported keysizes of the opened algorithm
+     *
+     * Gets the supported key sizes of the opened algorithm.
+     *
+     * @param \phpseclib\Crypt\Base $td
+     * @return array
+     * @access public
+     */
+    function phpseclib_mcrypt_enc_get_supported_key_sizes(Base $td)
+    {
+        $algorithm = strtolower(phpseclib_mcrypt_enc_get_algorithms_name($td));
+        return phpseclib_mcrypt_module_get_supported_key_sizes($algorithm);
+    }
+
+    /**
+     * Returns if the specified module is a block algorithm or not
+     *
+     * This function returns TRUE if the mode is for use with block algorithms, otherwise it returns FALSE. (e.g. FALSE for stream, and TRUE for cbc, cfb, ofb).
+     *
+     * @param string $mode
+     * @param string $lib_dir optional
+     * @return bool
+     * @access public
+     */
+    function phpseclib_mcrypt_module_is_block_algorithm_mode($mode, $lib_dir = '')
+    {
+        switch ($mode) {
+            case 'cbc':
+            case 'ctr':
+            case 'ecb':
+            case 'cfb':
+            case 'ncfb':
+            case 'nofb':
+                return true;
+        }
+        return false;
+    }
+
+    /**
+     * This function checks whether the specified algorithm is a block algorithm
+     *
+     * This function returns TRUE if the specified algorithm is a block algorithm, or FALSE if it is a stream one.
+     *
+     * @param string $mode
+     * @param string $lib_dir optional
+     * @return bool
+     * @access public
+     */
+    function phpseclib_mcrypt_module_is_block_algorithm($algorithm, $lib_dir = '')
+    {
+        switch ($algorithm) {
+            case 'rijndael-128':
+            case 'twofish':
+            case 'rijndael-192':
+            case 'des':
+            case 'rijndael-256':
+            case 'blowfish':
+            case 'rc2':
+            case 'tripledes':
+                return true;
+        }
+        return false;
+    }
+
+    /**
+     * Returns if the specified mode outputs blocks or not
+     *
+     * This function returns TRUE if the mode outputs blocks of bytes or FALSE if it outputs just bytes. (e.g. TRUE for cbc and ecb, and FALSE for cfb and stream).
+     *
+     * @param string $mode
+     * @param string $lib_dir optional
+     * @return bool
+     * @access public
+     */
+    function phpseclib_mcrypt_module_is_block_mode($mode, $lib_dir = '')
+    {
+        switch ($mode) {
+            case 'cbc':
+            case 'ecb':
+                return true;
+        }
+        return false;
+    }
+
+    /**
+     * Returns if the specified mode can use an IV or not
+     *
+     * @param string $mode
+     * @return bool
+     * @access private
+     */
+    function phpseclib_mcrypt_module_is_iv_mode($mode)
+    {
+        switch ($mode) {
+            case 'ecb':
+            case 'stream':
+                return false;
+        }
+        return true;
+    }
+
+    /**
+     * This function runs a self test on the specified module
+     *
+     * This function runs the self test on the algorithm specified.
+     *
+     * @param string $mode
+     * @param string $lib_dir optional
+     * @return bool
+     * @access public
+     */
+    function phpseclib_mcrypt_module_self_test($algorithm, $lib_dir = '')
+    {
+        return in_array($algorithm, phpseclib_mcrypt_list_algorithms());
+    }
+
+    /**
+     * Encrypt / decrypt data
+     *
+     * Performs checks common to both mcrypt_encrypt and mcrypt_decrypt
+     *
+     * @param string $cipher
+     * @param string $key
+     * @param string $data
+     * @param string $mode
+     * @param string $iv
+     * @param string $op
+     * @return string|bool
+     * @access private
+     */
+    function phpseclib_mcrypt_helper($cipher, $key, $data, $mode, $iv, $op)
+    {
+        // PHP 5.6 made mcrypt_encrypt() a lot less tolerant of bad input but it neglected to change
+        // anything about mcrypt_generic(). and despite the changes insufficiently long plaintext
+        // is still accepted.
+        $keyLen = strlen($key);
+        $sizes = phpseclib_mcrypt_module_get_supported_key_sizes($cipher);
+        if (count($sizes) && !in_array($keyLen, $sizes)) {
+            trigger_error(
+                'mcrypt_' . $op . '(): Key of size ' . $keyLen . ' not supported by this algorithm. Only keys of sizes ' .
+                preg_replace('#, (\d+)$#', ' or $1', implode(', ', $sizes)) . ' supported',
+                E_USER_WARNING
+            );
+            return false;
+        }
+        $td = @phpseclib_mcrypt_module_open($cipher, '', $mode, '');
+        if ($td === false) {
+            trigger_error('mcrypt_encrypt(): Module initialization failed', E_USER_WARNING);
+            return false;
+        }
+        $maxKeySize = phpseclib_mcrypt_enc_get_key_size($td);
+        if (!count($sizes) && $keyLen > $maxKeySize) {
+            trigger_error(
+                'mcrypt_' . $op . '(): Key of size ' . $keyLen . ' not supported by this algorithm. Only keys of size 1 to ' . $maxKeySize . ' supported',
+                E_USER_WARNING
+            );
+            return false;
+        }
+        if (phpseclib_mcrypt_module_is_iv_mode($mode)) {
+            $iv_size = phpseclib_mcrypt_enc_get_iv_size($td);
+            if (!isset($iv) && $iv_size) {
+                trigger_error(
+                    'mcrypt_' . $op . '(): Encryption mode requires an initialization vector of size ' . $iv_size,
+                    E_USER_WARNING
+                );
+                return false;
+            }
+            if (strlen($iv) != $iv_size) {
+                trigger_error(
+                    'mcrypt_' . $op . '(): Received initialization vector of size ' . strlen($iv) . ', but size ' . $iv_size . ' is required for this encryption mode',
+                    E_USER_WARNING
+                );
+                return false;
+            }
+        } else {
+            $iv = null;
+        }
+        phpseclib_mcrypt_generic_init($td, $key, $iv);
+        return $op == 'encrypt' ? phpseclib_mcrypt_generic($td, $data) : phpseclib_mdecrypt_generic($td, $data);
+    }
+
+    /**
+     * Encrypts plaintext with given parameters
+     *
+     * Encrypts the data and returns it.
+     *
+     * @param string $cipher
+     * @param string $key
+     * @param string $data
+     * @param string $mode
+     * @param string $iv optional
+     * @return string|bool
+     * @access public
+     */
+    function phpseclib_mcrypt_encrypt($cipher, $key, $data, $mode, $iv = null)
+    {
+        return phpseclib_mcrypt_helper($cipher, $key, $data, $mode, $iv, 'encrypt');
+    }
+
+    /**
+     * Decrypts crypttext with given parameters
+     *
+     * Decrypts the data and returns the unencrypted data.
+     *
+     * @param string $cipher
+     * @param string $key
+     * @param string $data
+     * @param string $mode
+     * @param string $iv optional
+     * @return string|bool
+     * @access public
+     */
+    function phpseclib_mcrypt_decrypt($cipher, $key, $data, $mode, $iv = null)
+    {
+        return phpseclib_mcrypt_helper($cipher, $key, $data, $mode, $iv, 'decrypt');
+    }
+
+    /**
+     * mcrypt_compat stream filter
+     *
+     * @author  Jim Wigginton <terrafrost@php.net>
+     * @access  public
+     */
+    class phpseclib_mcrypt_filter extends php_user_filter
+    {
+        /**
+         * The Cipher Object
+         *
+         * @var object
+         * @access private
+         */
+        private $cipher;
+
+        /**
+         * To encrypt or decrypt
+         *
+         * @var boolean
+         * @access private
+         */
+        private $op;
+
+        /**
+         * Buffer for ECB / CBC
+         *
+         * @var string
+         * @access private
+         */
+        private $buffer = '';
+
+        /**
+         * Cipher block length
+         *
+         * @var int
+         * @access private
+         */
+        private $block_length = '';
+
+        /**
+         * Called when applying the filter
+         *
+         * This method is called whenever data is read from or written to the attached stream
+         * (such as with fread() or fwrite()).
+         *
+         * @param resource $in
+         * @param resource $out
+         * @param int $consumed
+         * @param bool $closing
+         * @link http://php.net/manual/en/php-user-filter.filter.php
+         * @return int
+         * @access public
+         */
+        public function filter($in, $out, &$consumed, $closing)
+        {
+            $newlen = 0;
+            $block_mode = phpseclib_mcrypt_module_is_block_mode($this->cipher->mcrypt_mode);
+            while ($bucket = stream_bucket_make_writeable($in)) {
+                if ($block_mode) {
+                    $bucket->data = $this->buffer . $bucket->data;
+                    $extra = strlen($bucket->data) % $this->block_length;
+                    if ($extra) {
+                        $this->buffer = substr($bucket->data, -$extra);
+                        $bucket->data = substr($bucket->data, 0, -$extra);
+                    }
+                }
+
+                $bucket->data = $this->op ?
+                    $this->cipher->encrypt($bucket->data) :
+                    $this->cipher->decrypt($bucket->data);
+                $newlen+= strlen($bucket->data);
+                $consumed+= $bucket->datalen;
+
+                stream_bucket_append($out, $bucket);
+            }
+
+            return $block_mode && $newlen < $this->block_length ? PSFS_FEED_ME : PSFS_PASS_ON;
+        }
+
+        /**
+         * Called when creating the filter
+         *
+         * This method is called during instantiation of the filter class object.
+         * If your filter allocates or initializes any other resources (such as a buffer),
+         * this is the place to do it.
+         *
+         * @link http://php.net/manual/en/php-user-filter.oncreate.php
+         * @return bool
+         * @access public
+         */
+        public function onCreate()
+        {
+            if (!isset($this->params) || !is_array($this->params)) {
+                trigger_error('stream_filter_append(): Filter parameters for ' . $this->filtername . ' must be an array');
+                return false;
+            }
+            if (!isset($this->params['iv']) || !is_string($this->params['iv'])) {
+                trigger_error('stream_filter_append(): Filter parameter[iv] not provided or not of type: string');
+                return false;
+            }
+            if (!isset($this->params['key']) || !is_string($this->params['key'])) {
+                trigger_error('stream_filter_append(): key not specified or is not a string');
+                return false;
+            }
+            $filtername = substr($this->filtername, 0, 10) == 'phpseclib.' ?
+                substr($this->filtername, 10) :
+                $this->filtername;
+            $parts = explode('.', $filtername);
+            if (count($parts) != 2) {
+                trigger_error('stream_filter_append(): Could not open encryption module');
+                return false;
+            }
+            switch ($parts[0]) {
+                case 'mcrypt':
+                case 'mdecrypt':
+                    break;
+                default:
+                    trigger_error('stream_filter_append(): Could not open encryption module');
+                    return false;
+            }
+            $mode = isset($this->params['mode']) ? $this->params['mode'] : 'cbc';
+            $cipher = @phpseclib_mcrypt_module_open($parts[1], '', $mode, '');
+            if ($cipher === false) {
+                trigger_error('stream_filter_append(): Could not open encryption module');
+                return false;
+            }
+
+            $cipher->enableContinuousBuffer();
+            phpseclib_set_key($cipher, $this->params['key']);
+            phpseclib_set_iv($cipher, $this->params['iv']);
+
+            $this->op = $parts[0] == 'mcrypt';
+            $this->cipher = $cipher;
+            $this->block_length = phpseclib_mcrypt_enc_get_iv_size($cipher);
+
+            return true;
+        }
+    }
+
+    stream_filter_register('phpseclib.mcrypt.*', 'phpseclib_mcrypt_filter');
+    stream_filter_register('phpseclib.mdecrypt.*', 'phpseclib_mcrypt_filter');
+}
+
+// define
+if (!function_exists('mcrypt_list_algorithms')) {
+    function mcrypt_list_algorithms($lib_dir = '')
+    {
+        return phpseclib_mcrypt_list_algorithms($lib_dir);
+    }
+
+    function mcrypt_list_modes($lib_dir = '')
+    {
+        return phpseclib_mcrypt_list_modes($lib_dir);
+    }
+
+    function mcrypt_create_iv($size, $source = MCRYPT_DEV_URANDOM)
+    {
+        return phpseclib_mcrypt_create_iv($size, $source);
+    }
+
+    function mcrypt_module_open($algorithm, $algorithm_directory, $mode, $mode_directory)
+    {
+        return phpseclib_mcrypt_module_open($algorithm, $algorithm_directory, $mode, $mode_directory);
+    }
+
+    function mcrypt_enc_get_key_size(Base $td)
+    {
+        return phpseclib_mcrypt_enc_get_key_size($td);
+    }
+
+    function mcrypt_enc_get_iv_size(Base $td)
+    {
+        return phpseclib_mcrypt_enc_get_iv_size($td);
+    }
+
+    function mcrypt_enc_get_block_size(Base $td)
+    {
+        return phpseclib_mcrypt_enc_get_block_size($td);
+    }
+
+    function mcrypt_generic_init(Base $td, $key, $iv)
+    {
+        return phpseclib_mcrypt_generic_init($td, $key, $iv);
+    }
+
+    function mcrypt_generic(Base $td, $data)
+    {
+        return phpseclib_mcrypt_generic($td, $data);
+    }
+
+    function mcrypt_generic_deinit(Base $td)
+    {
+        return phpseclib_mcrypt_generic_deinit($td);
+    }
+
+    function mcrypt_module_close(Base $td)
+    {
+        return phpseclib_mcrypt_module_close($td);
+    }
+
+    function mdecrypt_generic(Base $td, $data)
+    {
+        return phpseclib_mdecrypt_generic($td, $data);
+    }
+
+    function mcrypt_enc_get_algorithms_name(Base $td)
+    {
+        return phpseclib_mcrypt_enc_get_algorithms_name($td);
+    }
+
+    function mcrypt_enc_get_modes_name(Base $td)
+    {
+        return phpseclib_mcrypt_enc_get_modes_name($td);
+    }
+
+    function mcrypt_enc_is_block_algorithm_mode(Base $td)
+    {
+        return phpseclib_mcrypt_enc_is_block_algorithm_mode($td);
+    }
+
+    function mcrypt_enc_is_block_algorithm(Base $td)
+    {
+        return phpseclib_mcrypt_enc_is_block_algorithm($td);
+    }
+
+    function mcrypt_enc_self_test(Base $td)
+    {
+        return phpseclib_mcrypt_enc_self_test($td);
+    }
+
+    function mcrypt_module_get_supported_key_sizes($algorithm, $lib_dir = '')
+    {
+        return phpseclib_mcrypt_module_get_supported_key_sizes($algorithm, $lib_dir);
+    }
+
+    function mcrypt_encrypt($cipher, $key, $data, $mode, $iv = null)
+    {
+        return phpseclib_mcrypt_encrypt($cipher, $key, $data, $mode, $iv);
+    }
+
+    function mcrypt_module_get_algo_block_size($algorithm, $lib_dir = '')
+    {
+        return phpseclib_mcrypt_module_get_algo_block_size($algorithm, $lib_dir);
+    }
+
+    function mcrypt_get_block_size($cipher, $mode = '')
+    {
+        return phpseclib_mcrypt_get_block_size($cipher, $mode);
+    }
+
+    function mcrypt_get_cipher_name($cipher)
+    {
+        return phpseclib_mcrypt_get_cipher_name($cipher);
+    }
+
+    function mcrypt_get_key_size($cipher, $mode = false)
+    {
+        return phpseclib_mcrypt_get_key_size($cipher, $mode);
+    }
+
+    function mcrypt_get_iv_size($cipher, $mode)
+    {
+        return phpseclib_mcrypt_get_iv_size($cipher, $mode);
+    }
+
+    function mcrypt_module_get_algo_key_size($algorithm, $lib_dir = '')
+    {
+        return phpseclib_mcrypt_module_get_algo_key_size($algorithm, $lib_dir);
+    }
+
+    function mcrypt_enc_get_supported_key_sizes(Base $td)
+    {
+        return phpseclib_mcrypt_enc_get_supported_key_sizes($td);
+    }
+
+    function mcrypt_module_is_block_algorithm_mode($mode, $lib_dir = '')
+    {
+        return phpseclib_mcrypt_module_is_block_algorithm_mode($mode, $lib_dir);
+    }
+
+    function mcrypt_module_is_block_algorithm($algorithm, $lib_dir=  '')
+    {
+        return phpseclib_mcrypt_module_is_block_algorithm($algorithm, $lib_dir);
+    }
+
+    function mcrypt_module_is_block_mode($mode, $lib_dir = '')
+    {
+        return phpseclib_mcrypt_module_is_block_mode($mode, $lib_dir);
+    }
+
+    function mcrypt_module_self_test($algorithm, $lib_dir = '')
+    {
+        return phpseclib_mcrypt_module_self_test($algorithm, $lib_dir);
+    }
+
+    function mcrypt_decrypt($cipher, $key, $data, $mode, $iv = null)
+    {
+        return phpseclib_mcrypt_decrypt($cipher, $key, $data, $mode, $iv);
+    }
+
+    //if (!in_array('mcrypt.*', stream_get_filters()) {
+    stream_filter_register('mcrypt.*', 'phpseclib_mcrypt_filter');
+    stream_filter_register('mdecrypt.*', 'phpseclib_mcrypt_filter');
+    //}
+}
diff --git a/lib/phpseclib/Crypt/AES.php b/lib/phpseclib/Crypt/AES.php
index 3beffa9..7d8cb8b 100644
--- a/lib/phpseclib/Crypt/AES.php
+++ b/lib/phpseclib/Crypt/AES.php
@@ -1,28 +1,31 @@
 <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
  * Pure-PHP implementation of AES.
  *
- * Uses mcrypt, if available, and an internal implementation, otherwise.
+ * Uses mcrypt, if available/possible, and an internal implementation, otherwise.
  *
- * PHP versions 4 and 5
+ * PHP version 5
  *
- * If {@link Crypt_AES::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
- * {@link Crypt_AES::setKey() setKey()}.  ie. if the key is 128-bits, the key length will be 128-bits.  If it's 136-bits
- * it'll be null-padded to 160-bits and 160 bits will be the key length until {@link Crypt_Rijndael::setKey() setKey()}
+ * NOTE: Since AES.php is (for compatibility and phpseclib-historical reasons) virtually
+ * just a wrapper to Rijndael.php you may consider using Rijndael.php instead of
+ * to save one include_once().
+ *
+ * If {@link self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
+ * {@link self::setKey() setKey()}.  ie. if the key is 128-bits, the key length will be 128-bits.  If it's 136-bits
+ * it'll be null-padded to 192-bits and 192 bits will be the key length until {@link self::setKey() setKey()}
  * is called, again, at which point, it'll be recalculated.
  *
- * Since Crypt_AES extends Crypt_Rijndael, some functions are available to be called that, in the context of AES, don't
- * make a whole lot of sense.  {@link Crypt_AES::setBlockLength() setBlockLength()}, for instance.  Calling that function,
+ * Since \phpseclib\Crypt\AES extends \phpseclib\Crypt\Rijndael, some functions are available to be called that, in the context of AES, don't
+ * make a whole lot of sense.  {@link self::setBlockLength() setBlockLength()}, for instance.  Calling that function,
  * however possible, won't do anything (AES has a fixed block length whereas Rijndael has a variable one).
  *
  * Here's a short example of how to use this library:
  * <code>
  * <?php
- *    include('Crypt/AES.php');
+ *    include 'vendor/autoload.php';
  *
- *    $aes = new Crypt_AES();
+ *    $aes = new \phpseclib\Crypt\AES();
  *
  *    $aes->setKey('abcdefghijklmnop');
  *
@@ -36,179 +39,33 @@
  * ?>
  * </code>
  *
- * LICENSE: This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- *
- * @category   Crypt
- * @package    Crypt_AES
- * @author     Jim Wigginton <terrafrost@php.net>
- * @copyright  MMVIII Jim Wigginton
- * @license    http://www.gnu.org/licenses/lgpl.txt
- * @version    $Id: AES.php,v 1.7 2010/02/09 06:10:25 terrafrost Exp $
- * @link       http://phpseclib.sourceforge.net
+ * @category  Crypt
+ * @package   AES
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2008 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
  */
 
-/**
- * Include Crypt_Rijndael
- */
-require_once 'Rijndael.php';
-
-/**#@+
- * @access public
- * @see Crypt_AES::encrypt()
- * @see Crypt_AES::decrypt()
- */
-/**
- * Encrypt / decrypt using the Counter mode.
- *
- * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
- */
-define('CRYPT_AES_MODE_CTR', -1);
-/**
- * Encrypt / decrypt using the Electronic Code Book mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
- */
-define('CRYPT_AES_MODE_ECB', 1);
-/**
- * Encrypt / decrypt using the Code Book Chaining mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
- */
-define('CRYPT_AES_MODE_CBC', 2);
-/**#@-*/
-
-/**#@+
- * @access private
- * @see Crypt_AES::Crypt_AES()
- */
-/**
- * Toggles the internal implementation
- */
-define('CRYPT_AES_MODE_INTERNAL', 1);
-/**
- * Toggles the mcrypt implementation
- */
-define('CRYPT_AES_MODE_MCRYPT', 2);
-/**#@-*/
+namespace phpseclib\Crypt;
 
 /**
  * Pure-PHP implementation of AES.
  *
+ * @package AES
  * @author  Jim Wigginton <terrafrost@php.net>
- * @version 0.1.0
  * @access  public
- * @package Crypt_AES
  */
-class Crypt_AES extends Crypt_Rijndael {
-    /**
-     * mcrypt resource for encryption
-     *
-     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
-     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
-     *
-     * @see Crypt_AES::encrypt()
-     * @var String
-     * @access private
-     */
-    var $enmcrypt;
-
-    /**
-     * mcrypt resource for decryption
-     *
-     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
-     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
-     *
-     * @see Crypt_AES::decrypt()
-     * @var String
-     * @access private
-     */
-    var $demcrypt;
-
-    /**
-     * Default Constructor.
-     *
-     * Determines whether or not the mcrypt extension should be used.  $mode should only, at present, be
-     * CRYPT_AES_MODE_ECB or CRYPT_AES_MODE_CBC.  If not explictly set, CRYPT_AES_MODE_CBC will be used.
-     *
-     * @param optional Integer $mode
-     * @return Crypt_AES
-     * @access public
-     */
-    function Crypt_AES($mode = CRYPT_AES_MODE_CBC)
-    {
-        if ( !defined('CRYPT_AES_MODE') ) {
-            switch (true) {
-                case extension_loaded('mcrypt'):
-                    // i'd check to see if aes was supported, by doing in_array('des', mcrypt_list_algorithms('')),
-                    // but since that can be changed after the object has been created, there doesn't seem to be
-                    // a lot of point...
-                    define('CRYPT_AES_MODE', CRYPT_AES_MODE_MCRYPT);
-                    break;
-                default:
-                    define('CRYPT_AES_MODE', CRYPT_AES_MODE_INTERNAL);
-            }
-        }
-
-        switch ( CRYPT_AES_MODE ) {
-            case CRYPT_AES_MODE_MCRYPT:
-                switch ($mode) {
-                    case CRYPT_AES_MODE_ECB:
-                        $this->mode = MCRYPT_MODE_ECB;
-                        break;
-                    case CRYPT_AES_MODE_CTR:
-                        // ctr doesn't have a constant associated with it even though it appears to be fairly widely
-                        // supported.  in lieu of knowing just how widely supported it is, i've, for now, opted not to
-                        // include a compatibility layer.  the layer has been implemented but, for now, is commented out.
-                        $this->mode = 'ctr';
-                        //$this->mode = in_array('ctr', mcrypt_list_modes()) ? 'ctr' : CRYPT_AES_MODE_CTR;
-                        break;
-                    case CRYPT_AES_MODE_CBC:
-                    default:
-                        $this->mode = MCRYPT_MODE_CBC;
-                }
-
-                break;
-            default:
-                switch ($mode) {
-                    case CRYPT_AES_MODE_ECB:
-                        $this->mode = CRYPT_RIJNDAEL_MODE_ECB;
-                        break;
-                    case CRYPT_AES_MODE_CTR:
-                        $this->mode = CRYPT_RIJNDAEL_MODE_CTR;
-                        break;
-                    case CRYPT_AES_MODE_CBC:
-                    default:
-                        $this->mode = CRYPT_RIJNDAEL_MODE_CBC;
-                }
-        }
-
-        if (CRYPT_AES_MODE == CRYPT_AES_MODE_INTERNAL) {
-            parent::Crypt_Rijndael($this->mode);
-        }
-    }
-
+class AES extends Rijndael
+{
     /**
      * Dummy function
      *
-     * Since Crypt_AES extends Crypt_Rijndael, this function is, technically, available, but it doesn't do anything.
+     * Since \phpseclib\Crypt\AES extends \phpseclib\Crypt\Rijndael, this function is, technically, available, but it doesn't do anything.
      *
+     * @see \phpseclib\Crypt\Rijndael::setBlockLength()
      * @access public
-     * @param Integer $length
+     * @param int $length
      */
     function setBlockLength($length)
     {
@@ -216,264 +73,54 @@ class Crypt_AES extends Crypt_Rijndael {
     }
 
     /**
-     * Encrypts a message.
-     *
-     * $plaintext will be padded with up to 16 additional bytes.  Other AES implementations may or may not pad in the
-     * same manner.  Other common approaches to padding and the reasons why it's necessary are discussed in the following
-     * URL:
-     *
-     * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
+     * Sets the key length
      *
-     * An alternative to padding is to, separately, send the length of the file.  This is what SSH, in fact, does.
-     * strlen($plaintext) will still need to be a multiple of 16, however, arbitrary values can be added to make it that
-     * length.
+     * Valid key lengths are 128, 192, and 256.  If the length is less than 128, it will be rounded up to
+     * 128.  If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
      *
-     * @see Crypt_AES::decrypt()
+     * @see \phpseclib\Crypt\Rijndael:setKeyLength()
      * @access public
-     * @param String $plaintext
+     * @param int $length
      */
-    function encrypt($plaintext)
+    function setKeyLength($length)
     {
-        if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) {
-            $this->_mcryptSetup();
-            /*
-            if ($this->mode == CRYPT_AES_MODE_CTR) {
-                $iv = $this->encryptIV;
-                $xor = mcrypt_generic($this->enmcrypt, $this->_generate_xor(strlen($plaintext), $iv));
-                $ciphertext = $plaintext ^ $xor;
-                if ($this->continuousBuffer) {
-                    $this->encryptIV = $iv;
-                }
-                return $ciphertext;
-            }
-            */
-
-            if ($this->mode != 'ctr') {
-                $plaintext = $this->_pad($plaintext);
-            }
-
-            $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
-
-            if (!$this->continuousBuffer) {
-                mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv);
-            }
-
-            return $ciphertext;
+        switch ($length) {
+            case 160:
+                $length = 192;
+                break;
+            case 224:
+                $length = 256;
         }
-
-        return parent::encrypt($plaintext);
+        parent::setKeyLength($length);
     }
 
     /**
-     * Decrypts a message.
+     * Sets the key.
      *
-     * If strlen($ciphertext) is not a multiple of 16, null bytes will be added to the end of the string until it is.
+     * Rijndael supports five different key lengths, AES only supports three.
      *
-     * @see Crypt_AES::encrypt()
+     * @see \phpseclib\Crypt\Rijndael:setKey()
+     * @see setKeyLength()
      * @access public
-     * @param String $ciphertext
+     * @param string $key
      */
-    function decrypt($ciphertext)
+    function setKey($key)
     {
-        if ( CRYPT_AES_MODE == CRYPT_AES_MODE_MCRYPT ) {
-            $this->_mcryptSetup();
-            /*
-            if ($this->mode == CRYPT_AES_MODE_CTR) {
-                $iv = $this->decryptIV;
-                $xor = mcrypt_generic($this->enmcrypt, $this->_generate_xor(strlen($ciphertext), $iv));
-                $plaintext = $ciphertext ^ $xor;
-                if ($this->continuousBuffer) {
-                    $this->decryptIV = $iv;
-                }
-                return $plaintext;
-            }
-            */
-
-            if ($this->mode != 'ctr') {
-                // we pad with chr(0) since that's what mcrypt_generic does.  to quote from http://php.net/function.mcrypt-generic :
-                // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
-                $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 15) & 0xFFFFFFF0, chr(0));
-            }
-
-            $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
-
-            if (!$this->continuousBuffer) {
-                mcrypt_generic_init($this->demcrypt, $this->key, $this->iv);
-            }
-
-            return $this->mode != 'ctr' ? $this->_unpad($plaintext) : $plaintext;
-        }
-
-        return parent::decrypt($ciphertext);
-    }
-
-    /**
-     * Setup mcrypt
-     *
-     * Validates all the variables.
-     *
-     * @access private
-     */
-    function _mcryptSetup()
-    {
-        if (!$this->changed) {
-            return;
-        }
+        parent::setKey($key);
 
         if (!$this->explicit_key_length) {
-            // this just copied from Crypt_Rijndael::_setup()
-            $length = strlen($this->key) >> 2;
-            if ($length > 8) {
-                $length = 8;
-            } else if ($length < 4) {
-                $length = 4;
+            $length = strlen($key);
+            switch (true) {
+                case $length <= 16:
+                    $this->key_length = 16;
+                    break;
+                case $length <= 24:
+                    $this->key_length = 24;
+                    break;
+                default:
+                    $this->key_length = 32;
             }
-            $this->Nk = $length;
-            $this->key_size = $length << 2;
-        }
-
-        switch ($this->Nk) {
-            case 4: // 128
-                $this->key_size = 16;
-                break;
-            case 5: // 160
-            case 6: // 192
-                $this->key_size = 24;
-                break;
-            case 7: // 224
-            case 8: // 256
-                $this->key_size = 32;
-        }
-
-        $this->key = substr($this->key, 0, $this->key_size);
-        $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($this->iv, 0, 16), 16, chr(0));
-
-        if (!isset($this->enmcrypt)) {
-            $mode = $this->mode;
-            //$mode = $this->mode == CRYPT_AES_MODE_CTR ? MCRYPT_MODE_ECB : $this->mode;
-
-            $this->demcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, '');
-            $this->enmcrypt = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', $mode, '');
-        } // else should mcrypt_generic_deinit be called?
-
-        mcrypt_generic_init($this->demcrypt, $this->key, $this->iv);
-        mcrypt_generic_init($this->enmcrypt, $this->key, $this->iv);
-
-        $this->changed = false;
-    }
-
-    /**
-     * Encrypts a block
-     *
-     * Optimized over Crypt_Rijndael's implementation by means of loop unrolling.
-     *
-     * @see Crypt_Rijndael::_encryptBlock()
-     * @access private
-     * @param String $in
-     * @return String
-     */
-    function _encryptBlock($in)
-    {
-        $state = unpack('N*word', $in);
-
-        $Nr = $this->Nr;
-        $w = $this->w;
-        $t0 = $this->t0;
-        $t1 = $this->t1;
-        $t2 = $this->t2;
-        $t3 = $this->t3;
-
-        // addRoundKey and reindex $state
-        $state = array(
-            $state['word1'] ^ $w[0][0],
-            $state['word2'] ^ $w[0][1],
-            $state['word3'] ^ $w[0][2],
-            $state['word4'] ^ $w[0][3]
-        );
-
-        // shiftRows + subWord + mixColumns + addRoundKey
-        // we could loop unroll this and use if statements to do more rounds as necessary, but, in my tests, that yields
-        // only a marginal improvement.  since that also, imho, hinders the readability of the code, i've opted not to do it.
-        for ($round = 1; $round < $this->Nr; $round++) {
-            $state = array(
-                $t0[$state[0] & 0xFF000000] ^ $t1[$state[1] & 0x00FF0000] ^ $t2[$state[2] & 0x0000FF00] ^ $t3[$state[3] & 0x000000FF] ^ $w[$round][0],
-                $t0[$state[1] & 0xFF000000] ^ $t1[$state[2] & 0x00FF0000] ^ $t2[$state[3] & 0x0000FF00] ^ $t3[$state[0] & 0x000000FF] ^ $w[$round][1],
-                $t0[$state[2] & 0xFF000000] ^ $t1[$state[3] & 0x00FF0000] ^ $t2[$state[0] & 0x0000FF00] ^ $t3[$state[1] & 0x000000FF] ^ $w[$round][2],
-                $t0[$state[3] & 0xFF000000] ^ $t1[$state[0] & 0x00FF0000] ^ $t2[$state[1] & 0x0000FF00] ^ $t3[$state[2] & 0x000000FF] ^ $w[$round][3]
-            );
-
+            $this->_setEngine();
         }
-
-        // subWord
-        $state = array(
-            $this->_subWord($state[0]),
-            $this->_subWord($state[1]),
-            $this->_subWord($state[2]),
-            $this->_subWord($state[3])
-        );
-
-        // shiftRows + addRoundKey
-        $state = array(
-            ($state[0] & 0xFF000000) ^ ($state[1] & 0x00FF0000) ^ ($state[2] & 0x0000FF00) ^ ($state[3] & 0x000000FF) ^ $this->w[$this->Nr][0],
-            ($state[1] & 0xFF000000) ^ ($state[2] & 0x00FF0000) ^ ($state[3] & 0x0000FF00) ^ ($state[0] & 0x000000FF) ^ $this->w[$this->Nr][1],
-            ($state[2] & 0xFF000000) ^ ($state[3] & 0x00FF0000) ^ ($state[0] & 0x0000FF00) ^ ($state[1] & 0x000000FF) ^ $this->w[$this->Nr][2],
-            ($state[3] & 0xFF000000) ^ ($state[0] & 0x00FF0000) ^ ($state[1] & 0x0000FF00) ^ ($state[2] & 0x000000FF) ^ $this->w[$this->Nr][3]
-        );
-
-        return pack('N*', $state[0], $state[1], $state[2], $state[3]);
-    }
-
-    /**
-     * Decrypts a block
-     *
-     * Optimized over Crypt_Rijndael's implementation by means of loop unrolling.
-     *
-     * @see Crypt_Rijndael::_decryptBlock()
-     * @access private
-     * @param String $in
-     * @return String
-     */
-    function _decryptBlock($in)
-    {
-        $state = unpack('N*word', $in);
-
-        $Nr = $this->Nr;
-        $dw = $this->dw;
-        $dt0 = $this->dt0;
-        $dt1 = $this->dt1;
-        $dt2 = $this->dt2;
-        $dt3 = $this->dt3;
-
-        // addRoundKey and reindex $state
-        $state = array(
-            $state['word1'] ^ $dw[$this->Nr][0],
-            $state['word2'] ^ $dw[$this->Nr][1],
-            $state['word3'] ^ $dw[$this->Nr][2],
-            $state['word4'] ^ $dw[$this->Nr][3]
-        );
-
-
-        // invShiftRows + invSubBytes + invMixColumns + addRoundKey
-        for ($round = $this->Nr - 1; $round > 0; $round--) {
-            $state = array(
-                $dt0[$state[0] & 0xFF000000] ^ $dt1[$state[3] & 0x00FF0000] ^ $dt2[$state[2] & 0x0000FF00] ^ $dt3[$state[1] & 0x000000FF] ^ $dw[$round][0],
-                $dt0[$state[1] & 0xFF000000] ^ $dt1[$state[0] & 0x00FF0000] ^ $dt2[$state[3] & 0x0000FF00] ^ $dt3[$state[2] & 0x000000FF] ^ $dw[$round][1],
-                $dt0[$state[2] & 0xFF000000] ^ $dt1[$state[1] & 0x00FF0000] ^ $dt2[$state[0] & 0x0000FF00] ^ $dt3[$state[3] & 0x000000FF] ^ $dw[$round][2],
-                $dt0[$state[3] & 0xFF000000] ^ $dt1[$state[2] & 0x00FF0000] ^ $dt2[$state[1] & 0x0000FF00] ^ $dt3[$state[0] & 0x000000FF] ^ $dw[$round][3]
-            );
-        }
-
-        // invShiftRows + invSubWord + addRoundKey
-        $state = array(
-            $this->_invSubWord(($state[0] & 0xFF000000) ^ ($state[3] & 0x00FF0000) ^ ($state[2] & 0x0000FF00) ^ ($state[1] & 0x000000FF)) ^ $dw[0][0],
-            $this->_invSubWord(($state[1] & 0xFF000000) ^ ($state[0] & 0x00FF0000) ^ ($state[3] & 0x0000FF00) ^ ($state[2] & 0x000000FF)) ^ $dw[0][1],
-            $this->_invSubWord(($state[2] & 0xFF000000) ^ ($state[1] & 0x00FF0000) ^ ($state[0] & 0x0000FF00) ^ ($state[3] & 0x000000FF)) ^ $dw[0][2],
-            $this->_invSubWord(($state[3] & 0xFF000000) ^ ($state[2] & 0x00FF0000) ^ ($state[1] & 0x0000FF00) ^ ($state[0] & 0x000000FF)) ^ $dw[0][3]
-        );
-
-        return pack('N*', $state[0], $state[1], $state[2], $state[3]);
     }
 }
-
-// vim: ts=4:sw=4:et:
-// vim6: fdl=1:
diff --git a/lib/phpseclib/Crypt/Base.php b/lib/phpseclib/Crypt/Base.php
new file mode 100644
index 0000000..7c9032f
--- /dev/null
+++ b/lib/phpseclib/Crypt/Base.php
@@ -0,0 +1,2708 @@
+<?php
+
+/**
+ * Base Class for all \phpseclib\Crypt\* cipher classes
+ *
+ * PHP version 5
+ *
+ * Internally for phpseclib developers:
+ *  If you plan to add a new cipher class, please note following rules:
+ *
+ *  - The new \phpseclib\Crypt\* cipher class should extend \phpseclib\Crypt\Base
+ *
+ *  - Following methods are then required to be overridden/overloaded:
+ *
+ *    - _encryptBlock()
+ *
+ *    - _decryptBlock()
+ *
+ *    - _setupKey()
+ *
+ *  - All other methods are optional to be overridden/overloaded
+ *
+ *  - Look at the source code of the current ciphers how they extend \phpseclib\Crypt\Base
+ *    and take one of them as a start up for the new cipher class.
+ *
+ *  - Please read all the other comments/notes/hints here also for each class var/method
+ *
+ * @category  Crypt
+ * @package   Base
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @author    Hans-Juergen Petrich <petrich@tronic-media.com>
+ * @copyright 2007 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
+ */
+
+namespace phpseclib\Crypt;
+
+/**
+ * Base Class for all \phpseclib\Crypt\* cipher classes
+ *
+ * @package Base
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @author  Hans-Juergen Petrich <petrich@tronic-media.com>
+ */
+abstract class Base
+{
+    /**#@+
+     * @access public
+     * @see \phpseclib\Crypt\Base::encrypt()
+     * @see \phpseclib\Crypt\Base::decrypt()
+     */
+    /**
+     * Encrypt / decrypt using the Counter mode.
+     *
+     * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
+     *
+     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
+     */
+    const MODE_CTR = -1;
+    /**
+     * Encrypt / decrypt using the Electronic Code Book mode.
+     *
+     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
+     */
+    const MODE_ECB = 1;
+    /**
+     * Encrypt / decrypt using the Code Book Chaining mode.
+     *
+     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
+     */
+    const MODE_CBC = 2;
+    /**
+     * Encrypt / decrypt using the Cipher Feedback mode.
+     *
+     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher_feedback_.28CFB.29
+     */
+    const MODE_CFB = 3;
+    /**
+     * Encrypt / decrypt using the Cipher Feedback mode (8bit)
+     */
+    const MODE_CFB8 = 38;
+    /**
+     * Encrypt / decrypt using the Output Feedback mode.
+     *
+     * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Output_feedback_.28OFB.29
+     */
+    const MODE_OFB = 4;
+    /**
+     * Encrypt / decrypt using streaming mode.
+     */
+    const MODE_STREAM = 5;
+    /**#@-*/
+
+    /**
+     * Whirlpool available flag
+     *
+     * @see \phpseclib\Crypt\Base::_hashInlineCryptFunction()
+     * @var bool
+     * @access private
+     */
+    static $WHIRLPOOL_AVAILABLE;
+
+    /**#@+
+     * @access private
+     * @see \phpseclib\Crypt\Base::__construct()
+     */
+    /**
+     * Base value for the internal implementation $engine switch
+     */
+    const ENGINE_INTERNAL = 1;
+    /**
+     * Base value for the mcrypt implementation $engine switch
+     */
+    const ENGINE_MCRYPT = 2;
+    /**
+     * Base value for the mcrypt implementation $engine switch
+     */
+    const ENGINE_OPENSSL = 3;
+    /**#@-*/
+
+    /**
+     * The Encryption Mode
+     *
+     * @see self::__construct()
+     * @var int
+     * @access private
+     */
+    var $mode;
+
+    /**
+     * The Block Length of the block cipher
+     *
+     * @var int
+     * @access private
+     */
+    var $block_size = 16;
+
+    /**
+     * The Key
+     *
+     * @see self::setKey()
+     * @var string
+     * @access private
+     */
+    var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
+
+    /**
+     * The Initialization Vector
+     *
+     * @see self::setIV()
+     * @var string
+     * @access private
+     */
+    var $iv;
+
+    /**
+     * A "sliding" Initialization Vector
+     *
+     * @see self::enableContinuousBuffer()
+     * @see self::_clearBuffers()
+     * @var string
+     * @access private
+     */
+    var $encryptIV;
+
+    /**
+     * A "sliding" Initialization Vector
+     *
+     * @see self::enableContinuousBuffer()
+     * @see self::_clearBuffers()
+     * @var string
+     * @access private
+     */
+    var $decryptIV;
+
+    /**
+     * Continuous Buffer status
+     *
+     * @see self::enableContinuousBuffer()
+     * @var bool
+     * @access private
+     */
+    var $continuousBuffer = false;
+
+    /**
+     * Encryption buffer for CTR, OFB and CFB modes
+     *
+     * @see self::encrypt()
+     * @see self::_clearBuffers()
+     * @var array
+     * @access private
+     */
+    var $enbuffer;
+
+    /**
+     * Decryption buffer for CTR, OFB and CFB modes
+     *
+     * @see self::decrypt()
+     * @see self::_clearBuffers()
+     * @var array
+     * @access private
+     */
+    var $debuffer;
+
+    /**
+     * mcrypt resource for encryption
+     *
+     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+     *
+     * @see self::encrypt()
+     * @var resource
+     * @access private
+     */
+    var $enmcrypt;
+
+    /**
+     * mcrypt resource for decryption
+     *
+     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
+     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+     *
+     * @see self::decrypt()
+     * @var resource
+     * @access private
+     */
+    var $demcrypt;
+
+    /**
+     * Does the enmcrypt resource need to be (re)initialized?
+     *
+     * @see \phpseclib\Crypt\Twofish::setKey()
+     * @see \phpseclib\Crypt\Twofish::setIV()
+     * @var bool
+     * @access private
+     */
+    var $enchanged = true;
+
+    /**
+     * Does the demcrypt resource need to be (re)initialized?
+     *
+     * @see \phpseclib\Crypt\Twofish::setKey()
+     * @see \phpseclib\Crypt\Twofish::setIV()
+     * @var bool
+     * @access private
+     */
+    var $dechanged = true;
+
+    /**
+     * mcrypt resource for CFB mode
+     *
+     * mcrypt's CFB mode, in (and only in) buffered context,
+     * is broken, so phpseclib implements the CFB mode by it self,
+     * even when the mcrypt php extension is available.
+     *
+     * In order to do the CFB-mode work (fast) phpseclib
+     * use a separate ECB-mode mcrypt resource.
+     *
+     * @link http://phpseclib.sourceforge.net/cfb-demo.phps
+     * @see self::encrypt()
+     * @see self::decrypt()
+     * @see self::_setupMcrypt()
+     * @var resource
+     * @access private
+     */
+    var $ecb;
+
+    /**
+     * Optimizing value while CFB-encrypting
+     *
+     * Only relevant if $continuousBuffer enabled
+     * and $engine == self::ENGINE_MCRYPT
+     *
+     * It's faster to re-init $enmcrypt if
+     * $buffer bytes > $cfb_init_len than
+     * using the $ecb resource furthermore.
+     *
+     * This value depends of the chosen cipher
+     * and the time it would be needed for it's
+     * initialization [by mcrypt_generic_init()]
+     * which, typically, depends on the complexity
+     * on its internaly Key-expanding algorithm.
+     *
+     * @see self::encrypt()
+     * @var int
+     * @access private
+     */
+    var $cfb_init_len = 600;
+
+    /**
+     * Does internal cipher state need to be (re)initialized?
+     *
+     * @see self::setKey()
+     * @see self::setIV()
+     * @see self::disableContinuousBuffer()
+     * @var bool
+     * @access private
+     */
+    var $changed = true;
+
+    /**
+     * Padding status
+     *
+     * @see self::enablePadding()
+     * @var bool
+     * @access private
+     */
+    var $padding = true;
+
+    /**
+     * Is the mode one that is paddable?
+     *
+     * @see self::__construct()
+     * @var bool
+     * @access private
+     */
+    var $paddable = false;
+
+    /**
+     * Holds which crypt engine internaly should be use,
+     * which will be determined automatically on __construct()
+     *
+     * Currently available $engines are:
+     * - self::ENGINE_OPENSSL  (very fast, php-extension: openssl, extension_loaded('openssl') required)
+     * - self::ENGINE_MCRYPT   (fast, php-extension: mcrypt, extension_loaded('mcrypt') required)
+     * - self::ENGINE_INTERNAL (slower, pure php-engine, no php-extension required)
+     *
+     * @see self::_setEngine()
+     * @see self::encrypt()
+     * @see self::decrypt()
+     * @var int
+     * @access private
+     */
+    var $engine;
+
+    /**
+     * Holds the preferred crypt engine
+     *
+     * @see self::_setEngine()
+     * @see self::setPreferredEngine()
+     * @var int
+     * @access private
+     */
+    var $preferredEngine;
+
+    /**
+     * The mcrypt specific name of the cipher
+     *
+     * Only used if $engine == self::ENGINE_MCRYPT
+     *
+     * @link http://www.php.net/mcrypt_module_open
+     * @link http://www.php.net/mcrypt_list_algorithms
+     * @see self::_setupMcrypt()
+     * @var string
+     * @access private
+     */
+    var $cipher_name_mcrypt;
+
+    /**
+     * The openssl specific name of the cipher
+     *
+     * Only used if $engine == self::ENGINE_OPENSSL
+     *
+     * @link http://www.php.net/openssl-get-cipher-methods
+     * @var string
+     * @access private
+     */
+    var $cipher_name_openssl;
+
+    /**
+     * The openssl specific name of the cipher in ECB mode
+     *
+     * If OpenSSL does not support the mode we're trying to use (CTR)
+     * it can still be emulated with ECB mode.
+     *
+     * @link http://www.php.net/openssl-get-cipher-methods
+     * @var string
+     * @access private
+     */
+    var $cipher_name_openssl_ecb;
+
+    /**
+     * The default salt used by setPassword()
+     *
+     * @see self::setPassword()
+     * @var string
+     * @access private
+     */
+    var $password_default_salt = 'phpseclib/salt';
+
+    /**
+     * The name of the performance-optimized callback function
+     *
+     * Used by encrypt() / decrypt()
+     * only if $engine == self::ENGINE_INTERNAL
+     *
+     * @see self::encrypt()
+     * @see self::decrypt()
+     * @see self::_setupInlineCrypt()
+     * @see self::$use_inline_crypt
+     * @var Callback
+     * @access private
+     */
+    var $inline_crypt;
+
+    /**
+     * Holds whether performance-optimized $inline_crypt() can/should be used.
+     *
+     * @see self::encrypt()
+     * @see self::decrypt()
+     * @see self::inline_crypt
+     * @var mixed
+     * @access private
+     */
+    var $use_inline_crypt;
+
+    /**
+     * If OpenSSL can be used in ECB but not in CTR we can emulate CTR
+     *
+     * @see self::_openssl_ctr_process()
+     * @var bool
+     * @access private
+     */
+    var $openssl_emulate_ctr = false;
+
+    /**
+     * Determines what options are passed to openssl_encrypt/decrypt
+     *
+     * @see self::isValidEngine()
+     * @var mixed
+     * @access private
+     */
+    var $openssl_options;
+
+    /**
+     * Has the key length explicitly been set or should it be derived from the key, itself?
+     *
+     * @see self::setKeyLength()
+     * @var bool
+     * @access private
+     */
+    var $explicit_key_length = false;
+
+    /**
+     * Don't truncate / null pad key
+     *
+     * @see self::_clearBuffers()
+     * @var bool
+     * @access private
+     */
+    var $skip_key_adjustment = false;
+
+    /**
+     * Default Constructor.
+     *
+     * Determines whether or not the mcrypt extension should be used.
+     *
+     * $mode could be:
+     *
+     * - self::MODE_ECB
+     *
+     * - self::MODE_CBC
+     *
+     * - self::MODE_CTR
+     *
+     * - self::MODE_CFB
+     *
+     * - self::MODE_OFB
+     *
+     * If not explicitly set, self::MODE_CBC will be used.
+     *
+     * @param int $mode
+     * @access public
+     */
+    function __construct($mode = self::MODE_CBC)
+    {
+        // $mode dependent settings
+        switch ($mode) {
+            case self::MODE_ECB:
+                $this->paddable = true;
+                $this->mode = self::MODE_ECB;
+                break;
+            case self::MODE_CTR:
+            case self::MODE_CFB:
+            case self::MODE_CFB8:
+            case self::MODE_OFB:
+            case self::MODE_STREAM:
+                $this->mode = $mode;
+                break;
+            case self::MODE_CBC:
+            default:
+                $this->paddable = true;
+                $this->mode = self::MODE_CBC;
+        }
+
+        $this->_setEngine();
+
+        // Determining whether inline crypting can be used by the cipher
+        if ($this->use_inline_crypt !== false) {
+            $this->use_inline_crypt = version_compare(PHP_VERSION, '5.3.0') >= 0 || function_exists('create_function');
+        }
+    }
+
+    /**
+     * Sets the initialization vector. (optional)
+     *
+     * SetIV is not required when self::MODE_ECB (or ie for AES: \phpseclib\Crypt\AES::MODE_ECB) is being used.  If not explicitly set, it'll be assumed
+     * to be all zero's.
+     *
+     * @access public
+     * @param string $iv
+     * @internal Can be overwritten by a sub class, but does not have to be
+     */
+    function setIV($iv)
+    {
+        if ($this->mode == self::MODE_ECB) {
+            return;
+        }
+
+        $this->iv = $iv;
+        $this->changed = true;
+    }
+
+    /**
+     * Sets the key length.
+     *
+     * Keys with explicitly set lengths need to be treated accordingly
+     *
+     * @access public
+     * @param int $length
+     */
+    function setKeyLength($length)
+    {
+        $this->explicit_key_length = true;
+        $this->changed = true;
+        $this->_setEngine();
+    }
+
+    /**
+     * Returns the current key length in bits
+     *
+     * @access public
+     * @return int
+     */
+    function getKeyLength()
+    {
+        return $this->key_length << 3;
+    }
+
+    /**
+     * Returns the current block length in bits
+     *
+     * @access public
+     * @return int
+     */
+    function getBlockLength()
+    {
+        return $this->block_size << 3;
+    }
+
+    /**
+     * Sets the key.
+     *
+     * The min/max length(s) of the key depends on the cipher which is used.
+     * If the key not fits the length(s) of the cipher it will paded with null bytes
+     * up to the closest valid key length.  If the key is more than max length,
+     * we trim the excess bits.
+     *
+     * If the key is not explicitly set, it'll be assumed to be all null bytes.
+     *
+     * @access public
+     * @param string $key
+     * @internal Could, but not must, extend by the child Crypt_* class
+     */
+    function setKey($key)
+    {
+        if (!$this->explicit_key_length) {
+            $this->setKeyLength(strlen($key) << 3);
+            $this->explicit_key_length = false;
+        }
+
+        $this->key = $key;
+        $this->changed = true;
+        $this->_setEngine();
+    }
+
+    /**
+     * Sets the password.
+     *
+     * Depending on what $method is set to, setPassword()'s (optional) parameters are as follows:
+     *     {@link http://en.wikipedia.org/wiki/PBKDF2 pbkdf2} or pbkdf1:
+     *         $hash, $salt, $count, $dkLen
+     *
+     *         Where $hash (default = sha1) currently supports the following hashes: see: Crypt/Hash.php
+     *
+     * @see Crypt/Hash.php
+     * @param string $password
+     * @param string $method
+     * @return bool
+     * @access public
+     * @internal Could, but not must, extend by the child Crypt_* class
+     */
+    function setPassword($password, $method = 'pbkdf2')
+    {
+        $key = '';
+
+        switch ($method) {
+            default: // 'pbkdf2' or 'pbkdf1'
+                $func_args = func_get_args();
+
+                // Hash function
+                $hash = isset($func_args[2]) ? $func_args[2] : 'sha1';
+
+                // WPA and WPA2 use the SSID as the salt
+                $salt = isset($func_args[3]) ? $func_args[3] : $this->password_default_salt;
+
+                // RFC2898#section-4.2 uses 1,000 iterations by default
+                // WPA and WPA2 use 4,096.
+                $count = isset($func_args[4]) ? $func_args[4] : 1000;
+
+                // Keylength
+                if (isset($func_args[5])) {
+                    $dkLen = $func_args[5];
+                } else {
+                    $dkLen = $method == 'pbkdf1' ? 2 * $this->key_length : $this->key_length;
+                }
+
+                switch (true) {
+                    case $method == 'pbkdf1':
+                        $hashObj = new Hash();
+                        $hashObj->setHash($hash);
+                        if ($dkLen > $hashObj->getLength()) {
+                            user_error('Derived key too long');
+                            return false;
+                        }
+                        $t = $password . $salt;
+                        for ($i = 0; $i < $count; ++$i) {
+                            $t = $hashObj->hash($t);
+                        }
+                        $key = substr($t, 0, $dkLen);
+
+                        $this->setKey(substr($key, 0, $dkLen >> 1));
+                        $this->setIV(substr($key, $dkLen >> 1));
+
+                        return true;
+                    // Determining if php[>=5.5.0]'s hash_pbkdf2() function avail- and useable
+                    case !function_exists('hash_pbkdf2'):
+                    case !function_exists('hash_algos'):
+                    case !in_array($hash, hash_algos()):
+                        $i = 1;
+                        while (strlen($key) < $dkLen) {
+                            $hmac = new Hash();
+                            $hmac->setHash($hash);
+                            $hmac->setKey($password);
+                            $f = $u = $hmac->hash($salt . pack('N', $i++));
+                            for ($j = 2; $j <= $count; ++$j) {
+                                $u = $hmac->hash($u);
+                                $f^= $u;
+                            }
+                            $key.= $f;
+                        }
+                        $key = substr($key, 0, $dkLen);
+                        break;
+                    default:
+                        $key = hash_pbkdf2($hash, $password, $salt, $count, $dkLen, true);
+                }
+        }
+
+        $this->setKey($key);
+
+        return true;
+    }
+
+    /**
+     * Encrypts a message.
+     *
+     * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size. Other cipher
+     * implementations may or may not pad in the same manner.  Other common approaches to padding and the reasons why it's
+     * necessary are discussed in the following
+     * URL:
+     *
+     * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
+     *
+     * An alternative to padding is to, separately, send the length of the file.  This is what SSH, in fact, does.
+     * strlen($plaintext) will still need to be a multiple of the block size, however, arbitrary values can be added to make it that
+     * length.
+     *
+     * @see self::decrypt()
+     * @access public
+     * @param string $plaintext
+     * @return string $ciphertext
+     * @internal Could, but not must, extend by the child Crypt_* class
+     */
+    function encrypt($plaintext)
+    {
+        if ($this->paddable) {
+            $plaintext = $this->_pad($plaintext);
+        }
+
+        if ($this->engine === self::ENGINE_OPENSSL) {
+            if ($this->changed) {
+                $this->_clearBuffers();
+                $this->changed = false;
+            }
+            switch ($this->mode) {
+                case self::MODE_STREAM:
+                    return openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
+                case self::MODE_ECB:
+                    $result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
+                    return !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
+                case self::MODE_CBC:
+                    $result = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->encryptIV);
+                    if (!defined('OPENSSL_RAW_DATA')) {
+                        $result = substr($result, 0, -$this->block_size);
+                    }
+                    if ($this->continuousBuffer) {
+                        $this->encryptIV = substr($result, -$this->block_size);
+                    }
+                    return $result;
+                case self::MODE_CTR:
+                    return $this->_openssl_ctr_process($plaintext, $this->encryptIV, $this->enbuffer);
+                case self::MODE_CFB:
+                    // cfb loosely routines inspired by openssl's:
+                    // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
+                    $ciphertext = '';
+                    if ($this->continuousBuffer) {
+                        $iv = &$this->encryptIV;
+                        $pos = &$this->enbuffer['pos'];
+                    } else {
+                        $iv = $this->encryptIV;
+                        $pos = 0;
+                    }
+                    $len = strlen($plaintext);
+                    $i = 0;
+                    if ($pos) {
+                        $orig_pos = $pos;
+                        $max = $this->block_size - $pos;
+                        if ($len >= $max) {
+                            $i = $max;
+                            $len-= $max;
+                            $pos = 0;
+                        } else {
+                            $i = $len;
+                            $pos+= $len;
+                            $len = 0;
+                        }
+                        // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
+                        $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+                        $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+                        $plaintext = substr($plaintext, $i);
+                    }
+
+                    $overflow = $len % $this->block_size;
+
+                    if ($overflow) {
+                        $ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
+                        $iv = $this->_string_pop($ciphertext, $this->block_size);
+
+                        $size = $len - $overflow;
+                        $block = $iv ^ substr($plaintext, -$overflow);
+                        $iv = substr_replace($iv, $block, 0, $overflow);
+                        $ciphertext.= $block;
+                        $pos = $overflow;
+                    } elseif ($len) {
+                        $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
+                        $iv = substr($ciphertext, -$this->block_size);
+                    }
+
+                    return $ciphertext;
+                case self::MODE_CFB8:
+                    $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->encryptIV);
+                    if ($this->continuousBuffer) {
+                        if (($len = strlen($ciphertext)) >= $this->block_size) {
+                            $this->encryptIV = substr($ciphertext, -$this->block_size);
+                        } else {
+                            $this->encryptIV = substr($this->encryptIV, $len - $this->block_size) . substr($ciphertext, -$len);
+                        }
+                    }
+                    return $ciphertext;
+                case self::MODE_OFB:
+                    return $this->_openssl_ofb_process($plaintext, $this->encryptIV, $this->enbuffer);
+            }
+        }
+
+        if ($this->engine === self::ENGINE_MCRYPT) {
+            if ($this->changed) {
+                $this->_setupMcrypt();
+                $this->changed = false;
+            }
+            if ($this->enchanged) {
+                @mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
+                $this->enchanged = false;
+            }
+
+            // re: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
+            // using mcrypt's default handing of CFB the above would output two different things.  using phpseclib's
+            // rewritten CFB implementation the above outputs the same thing twice.
+            if ($this->mode == self::MODE_CFB && $this->continuousBuffer) {
+                $block_size = $this->block_size;
+                $iv = &$this->encryptIV;
+                $pos = &$this->enbuffer['pos'];
+                $len = strlen($plaintext);
+                $ciphertext = '';
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = $block_size - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+                    $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+                    $this->enbuffer['enmcrypt_init'] = true;
+                }
+                if ($len >= $block_size) {
+                    if ($this->enbuffer['enmcrypt_init'] === false || $len > $this->cfb_init_len) {
+                        if ($this->enbuffer['enmcrypt_init'] === true) {
+                            @mcrypt_generic_init($this->enmcrypt, $this->key, $iv);
+                            $this->enbuffer['enmcrypt_init'] = false;
+                        }
+                        $ciphertext.= @mcrypt_generic($this->enmcrypt, substr($plaintext, $i, $len - $len % $block_size));
+                        $iv = substr($ciphertext, -$block_size);
+                        $len%= $block_size;
+                    } else {
+                        while ($len >= $block_size) {
+                            $iv = @mcrypt_generic($this->ecb, $iv) ^ substr($plaintext, $i, $block_size);
+                            $ciphertext.= $iv;
+                            $len-= $block_size;
+                            $i+= $block_size;
+                        }
+                    }
+                }
+
+                if ($len) {
+                    $iv = @mcrypt_generic($this->ecb, $iv);
+                    $block = $iv ^ substr($plaintext, -$len);
+                    $iv = substr_replace($iv, $block, 0, $len);
+                    $ciphertext.= $block;
+                    $pos = $len;
+                }
+
+                return $ciphertext;
+            }
+
+            $ciphertext = @mcrypt_generic($this->enmcrypt, $plaintext);
+
+            if (!$this->continuousBuffer) {
+                @mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
+            }
+
+            return $ciphertext;
+        }
+
+        if ($this->changed) {
+            $this->_setup();
+            $this->changed = false;
+        }
+        if ($this->use_inline_crypt) {
+            $inline = $this->inline_crypt;
+            return $inline('encrypt', $this, $plaintext);
+        }
+
+        $buffer = &$this->enbuffer;
+        $block_size = $this->block_size;
+        $ciphertext = '';
+        switch ($this->mode) {
+            case self::MODE_ECB:
+                for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                    $ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size));
+                }
+                break;
+            case self::MODE_CBC:
+                $xor = $this->encryptIV;
+                for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                    $block = substr($plaintext, $i, $block_size);
+                    $block = $this->_encryptBlock($block ^ $xor);
+                    $xor = $block;
+                    $ciphertext.= $block;
+                }
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $xor;
+                }
+                break;
+            case self::MODE_CTR:
+                $xor = $this->encryptIV;
+                if (strlen($buffer['ciphertext'])) {
+                    for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                        $block = substr($plaintext, $i, $block_size);
+                        if (strlen($block) > strlen($buffer['ciphertext'])) {
+                            $buffer['ciphertext'].= $this->_encryptBlock($xor);
+                        }
+                        $this->_increment_str($xor);
+                        $key = $this->_string_shift($buffer['ciphertext'], $block_size);
+                        $ciphertext.= $block ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                        $block = substr($plaintext, $i, $block_size);
+                        $key = $this->_encryptBlock($xor);
+                        $this->_increment_str($xor);
+                        $ciphertext.= $block ^ $key;
+                    }
+                }
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $xor;
+                    if ($start = strlen($plaintext) % $block_size) {
+                        $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
+                    }
+                }
+                break;
+            case self::MODE_CFB:
+                // cfb loosely routines inspired by openssl's:
+                // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
+                if ($this->continuousBuffer) {
+                    $iv = &$this->encryptIV;
+                    $pos = &$buffer['pos'];
+                } else {
+                    $iv = $this->encryptIV;
+                    $pos = 0;
+                }
+                $len = strlen($plaintext);
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = $block_size - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
+                    $ciphertext = substr($iv, $orig_pos) ^ $plaintext;
+                    $iv = substr_replace($iv, $ciphertext, $orig_pos, $i);
+                }
+                while ($len >= $block_size) {
+                    $iv = $this->_encryptBlock($iv) ^ substr($plaintext, $i, $block_size);
+                    $ciphertext.= $iv;
+                    $len-= $block_size;
+                    $i+= $block_size;
+                }
+                if ($len) {
+                    $iv = $this->_encryptBlock($iv);
+                    $block = $iv ^ substr($plaintext, $i);
+                    $iv = substr_replace($iv, $block, 0, $len);
+                    $ciphertext.= $block;
+                    $pos = $len;
+                }
+                break;
+            case self::MODE_CFB8:
+                $ciphertext = '';
+                $len = strlen($plaintext);
+                $iv = $this->encryptIV;
+
+                for ($i = 0; $i < $len; ++$i) {
+                    $ciphertext .= ($c = $plaintext[$i] ^ $this->_encryptBlock($iv));
+                    $iv = substr($iv, 1) . $c;
+                }
+
+                if ($this->continuousBuffer) {
+                    if ($len >= $block_size) {
+                        $this->encryptIV = substr($ciphertext, -$block_size);
+                    } else {
+                        $this->encryptIV = substr($this->encryptIV, $len - $block_size) . substr($ciphertext, -$len);
+                    }
+                }
+                break;
+            case self::MODE_OFB:
+                $xor = $this->encryptIV;
+                if (strlen($buffer['xor'])) {
+                    for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                        $block = substr($plaintext, $i, $block_size);
+                        if (strlen($block) > strlen($buffer['xor'])) {
+                            $xor = $this->_encryptBlock($xor);
+                            $buffer['xor'].= $xor;
+                        }
+                        $key = $this->_string_shift($buffer['xor'], $block_size);
+                        $ciphertext.= $block ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                        $xor = $this->_encryptBlock($xor);
+                        $ciphertext.= substr($plaintext, $i, $block_size) ^ $xor;
+                    }
+                    $key = $xor;
+                }
+                if ($this->continuousBuffer) {
+                    $this->encryptIV = $xor;
+                    if ($start = strlen($plaintext) % $block_size) {
+                        $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+                    }
+                }
+                break;
+            case self::MODE_STREAM:
+                $ciphertext = $this->_encryptBlock($plaintext);
+                break;
+        }
+
+        return $ciphertext;
+    }
+
+    /**
+     * Decrypts a message.
+     *
+     * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until
+     * it is.
+     *
+     * @see self::encrypt()
+     * @access public
+     * @param string $ciphertext
+     * @return string $plaintext
+     * @internal Could, but not must, extend by the child Crypt_* class
+     */
+    function decrypt($ciphertext)
+    {
+        if ($this->paddable) {
+            // we pad with chr(0) since that's what mcrypt_generic does.  to quote from {@link http://www.php.net/function.mcrypt-generic}:
+            // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
+            $ciphertext = str_pad($ciphertext, strlen($ciphertext) + ($this->block_size - strlen($ciphertext) % $this->block_size) % $this->block_size, chr(0));
+        }
+
+        if ($this->engine === self::ENGINE_OPENSSL) {
+            if ($this->changed) {
+                $this->_clearBuffers();
+                $this->changed = false;
+            }
+            switch ($this->mode) {
+                case self::MODE_STREAM:
+                    $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
+                    break;
+                case self::MODE_ECB:
+                    if (!defined('OPENSSL_RAW_DATA')) {
+                        $ciphertext.= openssl_encrypt('', $this->cipher_name_openssl_ecb, $this->key, true);
+                    }
+                    $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options);
+                    break;
+                case self::MODE_CBC:
+                    if (!defined('OPENSSL_RAW_DATA')) {
+                        $padding = str_repeat(chr($this->block_size), $this->block_size) ^ substr($ciphertext, -$this->block_size);
+                        $ciphertext.= substr(openssl_encrypt($padding, $this->cipher_name_openssl_ecb, $this->key, true), 0, $this->block_size);
+                        $offset = 2 * $this->block_size;
+                    } else {
+                        $offset = $this->block_size;
+                    }
+                    $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->decryptIV);
+                    if ($this->continuousBuffer) {
+                        $this->decryptIV = substr($ciphertext, -$offset, $this->block_size);
+                    }
+                    break;
+                case self::MODE_CTR:
+                    $plaintext = $this->_openssl_ctr_process($ciphertext, $this->decryptIV, $this->debuffer);
+                    break;
+                case self::MODE_CFB:
+                    // cfb loosely routines inspired by openssl's:
+                    // {@link http://cvs.openssl.org/fileview?f=openssl/crypto/modes/cfb128.c&v=1.3.2.2.2.1}
+                    $plaintext = '';
+                    if ($this->continuousBuffer) {
+                        $iv = &$this->decryptIV;
+                        $pos = &$this->buffer['pos'];
+                    } else {
+                        $iv = $this->decryptIV;
+                        $pos = 0;
+                    }
+                    $len = strlen($ciphertext);
+                    $i = 0;
+                    if ($pos) {
+                        $orig_pos = $pos;
+                        $max = $this->block_size - $pos;
+                        if ($len >= $max) {
+                            $i = $max;
+                            $len-= $max;
+                            $pos = 0;
+                        } else {
+                            $i = $len;
+                            $pos+= $len;
+                            $len = 0;
+                        }
+                        // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $this->blocksize
+                        $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+                        $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+                        $ciphertext = substr($ciphertext, $i);
+                    }
+                    $overflow = $len % $this->block_size;
+                    if ($overflow) {
+                        $plaintext.= openssl_decrypt(substr($ciphertext, 0, -$overflow), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
+                        if ($len - $overflow) {
+                            $iv = substr($ciphertext, -$overflow - $this->block_size, -$overflow);
+                        }
+                        $iv = openssl_encrypt(str_repeat("\0", $this->block_size), $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
+                        $plaintext.= $iv ^ substr($ciphertext, -$overflow);
+                        $iv = substr_replace($iv, substr($ciphertext, -$overflow), 0, $overflow);
+                        $pos = $overflow;
+                    } elseif ($len) {
+                        $plaintext.= openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $iv);
+                        $iv = substr($ciphertext, -$this->block_size);
+                    }
+                    break;
+                case self::MODE_CFB8:
+                    $plaintext = openssl_decrypt($ciphertext, $this->cipher_name_openssl, $this->key, $this->openssl_options, $this->decryptIV);
+                    if ($this->continuousBuffer) {
+                        if (($len = strlen($ciphertext)) >= $this->block_size) {
+                            $this->decryptIV = substr($ciphertext, -$this->block_size);
+                        } else {
+                            $this->decryptIV = substr($this->decryptIV, $len - $this->block_size) . substr($ciphertext, -$len);
+                        }
+                    }
+                    break;
+                case self::MODE_OFB:
+                    $plaintext = $this->_openssl_ofb_process($ciphertext, $this->decryptIV, $this->debuffer);
+            }
+
+            return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+        }
+
+        if ($this->engine === self::ENGINE_MCRYPT) {
+            $block_size = $this->block_size;
+            if ($this->changed) {
+                $this->_setupMcrypt();
+                $this->changed = false;
+            }
+            if ($this->dechanged) {
+                @mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
+                $this->dechanged = false;
+            }
+
+            if ($this->mode == self::MODE_CFB && $this->continuousBuffer) {
+                $iv = &$this->decryptIV;
+                $pos = &$this->debuffer['pos'];
+                $len = strlen($ciphertext);
+                $plaintext = '';
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = $block_size - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
+                    $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+                    $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+                }
+                if ($len >= $block_size) {
+                    $cb = substr($ciphertext, $i, $len - $len % $block_size);
+                    $plaintext.= @mcrypt_generic($this->ecb, $iv . $cb) ^ $cb;
+                    $iv = substr($cb, -$block_size);
+                    $len%= $block_size;
+                }
+                if ($len) {
+                    $iv = @mcrypt_generic($this->ecb, $iv);
+                    $plaintext.= $iv ^ substr($ciphertext, -$len);
+                    $iv = substr_replace($iv, substr($ciphertext, -$len), 0, $len);
+                    $pos = $len;
+                }
+
+                return $plaintext;
+            }
+
+            $plaintext = @mdecrypt_generic($this->demcrypt, $ciphertext);
+
+            if (!$this->continuousBuffer) {
+                @mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
+            }
+
+            return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+        }
+
+        if ($this->changed) {
+            $this->_setup();
+            $this->changed = false;
+        }
+        if ($this->use_inline_crypt) {
+            $inline = $this->inline_crypt;
+            return $inline('decrypt', $this, $ciphertext);
+        }
+
+        $block_size = $this->block_size;
+
+        $buffer = &$this->debuffer;
+        $plaintext = '';
+        switch ($this->mode) {
+            case self::MODE_ECB:
+                for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+                    $plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size));
+                }
+                break;
+            case self::MODE_CBC:
+                $xor = $this->decryptIV;
+                for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+                    $block = substr($ciphertext, $i, $block_size);
+                    $plaintext.= $this->_decryptBlock($block) ^ $xor;
+                    $xor = $block;
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $xor;
+                }
+                break;
+            case self::MODE_CTR:
+                $xor = $this->decryptIV;
+                if (strlen($buffer['ciphertext'])) {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+                        $block = substr($ciphertext, $i, $block_size);
+                        if (strlen($block) > strlen($buffer['ciphertext'])) {
+                            $buffer['ciphertext'].= $this->_encryptBlock($xor);
+                            $this->_increment_str($xor);
+                        }
+                        $key = $this->_string_shift($buffer['ciphertext'], $block_size);
+                        $plaintext.= $block ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+                        $block = substr($ciphertext, $i, $block_size);
+                        $key = $this->_encryptBlock($xor);
+                        $this->_increment_str($xor);
+                        $plaintext.= $block ^ $key;
+                    }
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $xor;
+                    if ($start = strlen($ciphertext) % $block_size) {
+                        $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
+                    }
+                }
+                break;
+            case self::MODE_CFB:
+                if ($this->continuousBuffer) {
+                    $iv = &$this->decryptIV;
+                    $pos = &$buffer['pos'];
+                } else {
+                    $iv = $this->decryptIV;
+                    $pos = 0;
+                }
+                $len = strlen($ciphertext);
+                $i = 0;
+                if ($pos) {
+                    $orig_pos = $pos;
+                    $max = $block_size - $pos;
+                    if ($len >= $max) {
+                        $i = $max;
+                        $len-= $max;
+                        $pos = 0;
+                    } else {
+                        $i = $len;
+                        $pos+= $len;
+                        $len = 0;
+                    }
+                    // ie. $i = min($max, $len), $len-= $i, $pos+= $i, $pos%= $blocksize
+                    $plaintext = substr($iv, $orig_pos) ^ $ciphertext;
+                    $iv = substr_replace($iv, substr($ciphertext, 0, $i), $orig_pos, $i);
+                }
+                while ($len >= $block_size) {
+                    $iv = $this->_encryptBlock($iv);
+                    $cb = substr($ciphertext, $i, $block_size);
+                    $plaintext.= $iv ^ $cb;
+                    $iv = $cb;
+                    $len-= $block_size;
+                    $i+= $block_size;
+                }
+                if ($len) {
+                    $iv = $this->_encryptBlock($iv);
+                    $plaintext.= $iv ^ substr($ciphertext, $i);
+                    $iv = substr_replace($iv, substr($ciphertext, $i), 0, $len);
+                    $pos = $len;
+                }
+                break;
+            case self::MODE_CFB8:
+                $plaintext = '';
+                $len = strlen($ciphertext);
+                $iv = $this->decryptIV;
+
+                for ($i = 0; $i < $len; ++$i) {
+                    $plaintext .= $ciphertext[$i] ^ $this->_encryptBlock($iv);
+                    $iv = substr($iv, 1) . $ciphertext[$i];
+                }
+
+                if ($this->continuousBuffer) {
+                    if ($len >= $block_size) {
+                        $this->decryptIV = substr($ciphertext, -$block_size);
+                    } else {
+                        $this->decryptIV = substr($this->decryptIV, $len - $block_size) . substr($ciphertext, -$len);
+                    }
+                }
+                break;
+            case self::MODE_OFB:
+                $xor = $this->decryptIV;
+                if (strlen($buffer['xor'])) {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+                        $block = substr($ciphertext, $i, $block_size);
+                        if (strlen($block) > strlen($buffer['xor'])) {
+                            $xor = $this->_encryptBlock($xor);
+                            $buffer['xor'].= $xor;
+                        }
+                        $key = $this->_string_shift($buffer['xor'], $block_size);
+                        $plaintext.= $block ^ $key;
+                    }
+                } else {
+                    for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
+                        $xor = $this->_encryptBlock($xor);
+                        $plaintext.= substr($ciphertext, $i, $block_size) ^ $xor;
+                    }
+                    $key = $xor;
+                }
+                if ($this->continuousBuffer) {
+                    $this->decryptIV = $xor;
+                    if ($start = strlen($ciphertext) % $block_size) {
+                        $buffer['xor'] = substr($key, $start) . $buffer['xor'];
+                    }
+                }
+                break;
+            case self::MODE_STREAM:
+                $plaintext = $this->_decryptBlock($ciphertext);
+                break;
+        }
+        return $this->paddable ? $this->_unpad($plaintext) : $plaintext;
+    }
+
+    /**
+     * OpenSSL CTR Processor
+     *
+     * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
+     * for CTR is the same for both encrypting and decrypting this function is re-used by both Base::encrypt()
+     * and Base::decrypt(). Also, OpenSSL doesn't implement CTR for all of it's symmetric ciphers so this
+     * function will emulate CTR with ECB when necessary.
+     *
+     * @see self::encrypt()
+     * @see self::decrypt()
+     * @param string $plaintext
+     * @param string $encryptIV
+     * @param array $buffer
+     * @return string
+     * @access private
+     */
+    function _openssl_ctr_process($plaintext, &$encryptIV, &$buffer)
+    {
+        $ciphertext = '';
+
+        $block_size = $this->block_size;
+        $key = $this->key;
+
+        if ($this->openssl_emulate_ctr) {
+            $xor = $encryptIV;
+            if (strlen($buffer['ciphertext'])) {
+                for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                    $block = substr($plaintext, $i, $block_size);
+                    if (strlen($block) > strlen($buffer['ciphertext'])) {
+                        $result = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
+                        $result = !defined('OPENSSL_RAW_DATA') ? substr($result, 0, -$this->block_size) : $result;
+                        $buffer['ciphertext'].= $result;
+                    }
+                    $this->_increment_str($xor);
+                    $otp = $this->_string_shift($buffer['ciphertext'], $block_size);
+                    $ciphertext.= $block ^ $otp;
+                }
+            } else {
+                for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
+                    $block = substr($plaintext, $i, $block_size);
+                    $otp = openssl_encrypt($xor, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
+                    $otp = !defined('OPENSSL_RAW_DATA') ? substr($otp, 0, -$this->block_size) : $otp;
+                    $this->_increment_str($xor);
+                    $ciphertext.= $block ^ $otp;
+                }
+            }
+            if ($this->continuousBuffer) {
+                $encryptIV = $xor;
+                if ($start = strlen($plaintext) % $block_size) {
+                    $buffer['ciphertext'] = substr($key, $start) . $buffer['ciphertext'];
+                }
+            }
+
+            return $ciphertext;
+        }
+
+        if (strlen($buffer['ciphertext'])) {
+            $ciphertext = $plaintext ^ $this->_string_shift($buffer['ciphertext'], strlen($plaintext));
+            $plaintext = substr($plaintext, strlen($ciphertext));
+
+            if (!strlen($plaintext)) {
+                return $ciphertext;
+            }
+        }
+
+        $overflow = strlen($plaintext) % $block_size;
+        if ($overflow) {
+            $plaintext2 = $this->_string_pop($plaintext, $overflow); // ie. trim $plaintext to a multiple of $block_size and put rest of $plaintext in $plaintext2
+            $encrypted = openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
+            $temp = $this->_string_pop($encrypted, $block_size);
+            $ciphertext.= $encrypted . ($plaintext2 ^ $temp);
+            if ($this->continuousBuffer) {
+                $buffer['ciphertext'] = substr($temp, $overflow);
+                $encryptIV = $temp;
+            }
+        } elseif (!strlen($buffer['ciphertext'])) {
+            $ciphertext.= openssl_encrypt($plaintext . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
+            $temp = $this->_string_pop($ciphertext, $block_size);
+            if ($this->continuousBuffer) {
+                $encryptIV = $temp;
+            }
+        }
+        if ($this->continuousBuffer) {
+            if (!defined('OPENSSL_RAW_DATA')) {
+                $encryptIV.= openssl_encrypt('', $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
+            }
+            $encryptIV = openssl_decrypt($encryptIV, $this->cipher_name_openssl_ecb, $key, $this->openssl_options);
+            if ($overflow) {
+                $this->_increment_str($encryptIV);
+            }
+        }
+
+        return $ciphertext;
+    }
+
+    /**
+     * OpenSSL OFB Processor
+     *
+     * PHP's OpenSSL bindings do not operate in continuous mode so we'll wrap around it. Since the keystream
+     * for OFB is the same for both encrypting and decrypting this function is re-used by both Base::encrypt()
+     * and Base::decrypt().
+     *
+     * @see self::encrypt()
+     * @see self::decrypt()
+     * @param string $plaintext
+     * @param string $encryptIV
+     * @param array $buffer
+     * @return string
+     * @access private
+     */
+    function _openssl_ofb_process($plaintext, &$encryptIV, &$buffer)
+    {
+        if (strlen($buffer['xor'])) {
+            $ciphertext = $plaintext ^ $buffer['xor'];
+            $buffer['xor'] = substr($buffer['xor'], strlen($ciphertext));
+            $plaintext = substr($plaintext, strlen($ciphertext));
+        } else {
+            $ciphertext = '';
+        }
+
+        $block_size = $this->block_size;
+
+        $len = strlen($plaintext);
+        $key = $this->key;
+        $overflow = $len % $block_size;
+
+        if (strlen($plaintext)) {
+            if ($overflow) {
+                $ciphertext.= openssl_encrypt(substr($plaintext, 0, -$overflow) . str_repeat("\0", $block_size), $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
+                $xor = $this->_string_pop($ciphertext, $block_size);
+                if ($this->continuousBuffer) {
+                    $encryptIV = $xor;
+                }
+                $ciphertext.= $this->_string_shift($xor, $overflow) ^ substr($plaintext, -$overflow);
+                if ($this->continuousBuffer) {
+                    $buffer['xor'] = $xor;
+                }
+            } else {
+                $ciphertext = openssl_encrypt($plaintext, $this->cipher_name_openssl, $key, $this->openssl_options, $encryptIV);
+                if ($this->continuousBuffer) {
+                    $encryptIV = substr($ciphertext, -$block_size) ^ substr($plaintext, -$block_size);
+                }
+            }
+        }
+
+        return $ciphertext;
+    }
+
+    /**
+     * phpseclib <-> OpenSSL Mode Mapper
+     *
+     * May need to be overwritten by classes extending this one in some cases
+     *
+     * @return int
+     * @access private
+     */
+    function _openssl_translate_mode()
+    {
+        switch ($this->mode) {
+            case self::MODE_ECB:
+                return 'ecb';
+            case self::MODE_CBC:
+                return 'cbc';
+            case self::MODE_CTR:
+                return 'ctr';
+            case self::MODE_CFB:
+                return 'cfb';
+            case self::MODE_CFB8:
+                return 'cfb8';
+            case self::MODE_OFB:
+                return 'ofb';
+        }
+    }
+
+    /**
+     * Pad "packets".
+     *
+     * Block ciphers working by encrypting between their specified [$this->]block_size at a time
+     * If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to
+     * pad the input so that it is of the proper length.
+     *
+     * Padding is enabled by default.  Sometimes, however, it is undesirable to pad strings.  Such is the case in SSH,
+     * where "packets" are padded with random bytes before being encrypted.  Unpad these packets and you risk stripping
+     * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
+     * transmitted separately)
+     *
+     * @see self::disablePadding()
+     * @access public
+     */
+    function enablePadding()
+    {
+        $this->padding = true;
+    }
+
+    /**
+     * Do not pad packets.
+     *
+     * @see self::enablePadding()
+     * @access public
+     */
+    function disablePadding()
+    {
+        $this->padding = false;
+    }
+
+    /**
+     * Treat consecutive "packets" as if they are a continuous buffer.
+     *
+     * Say you have a 32-byte plaintext $plaintext.  Using the default behavior, the two following code snippets
+     * will yield different outputs:
+     *
+     * <code>
+     *    echo $rijndael->encrypt(substr($plaintext,  0, 16));
+     *    echo $rijndael->encrypt(substr($plaintext, 16, 16));
+     * </code>
+     * <code>
+     *    echo $rijndael->encrypt($plaintext);
+     * </code>
+     *
+     * The solution is to enable the continuous buffer.  Although this will resolve the above discrepancy, it creates
+     * another, as demonstrated with the following:
+     *
+     * <code>
+     *    $rijndael->encrypt(substr($plaintext, 0, 16));
+     *    echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
+     * </code>
+     * <code>
+     *    echo $rijndael->decrypt($rijndael->encrypt(substr($plaintext, 16, 16)));
+     * </code>
+     *
+     * With the continuous buffer disabled, these would yield the same output.  With it enabled, they yield different
+     * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /
+     * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.
+     *
+     * Put another way, when the continuous buffer is enabled, the state of the \phpseclib\Crypt\*() object changes after each
+     * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that
+     * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),
+     * however, they are also less intuitive and more likely to cause you problems.
+     *
+     * @see self::disableContinuousBuffer()
+     * @access public
+     * @internal Could, but not must, extend by the child Crypt_* class
+     */
+    function enableContinuousBuffer()
+    {
+        if ($this->mode == self::MODE_ECB) {
+            return;
+        }
+
+        $this->continuousBuffer = true;
+
+        $this->_setEngine();
+    }
+
+    /**
+     * Treat consecutive packets as if they are a discontinuous buffer.
+     *
+     * The default behavior.
+     *
+     * @see self::enableContinuousBuffer()
+     * @access public
+     * @internal Could, but not must, extend by the child Crypt_* class
+     */
+    function disableContinuousBuffer()
+    {
+        if ($this->mode == self::MODE_ECB) {
+            return;
+        }
+        if (!$this->continuousBuffer) {
+            return;
+        }
+
+        $this->continuousBuffer = false;
+        $this->changed = true;
+
+        $this->_setEngine();
+    }
+
+    /**
+     * Test for engine validity
+     *
+     * @see self::__construct()
+     * @param int $engine
+     * @access public
+     * @return bool
+     */
+    function isValidEngine($engine)
+    {
+        switch ($engine) {
+            case self::ENGINE_OPENSSL:
+                if ($this->mode == self::MODE_STREAM && $this->continuousBuffer) {
+                    return false;
+                }
+                $this->openssl_emulate_ctr = false;
+                $result = $this->cipher_name_openssl &&
+                          extension_loaded('openssl') &&
+                          // PHP 5.3.0 - 5.3.2 did not let you set IV's
+                          version_compare(PHP_VERSION, '5.3.3', '>=');
+                if (!$result) {
+                    return false;
+                }
+
+                // prior to PHP 5.4.0 OPENSSL_RAW_DATA and OPENSSL_ZERO_PADDING were not defined. instead of expecting an integer
+                // $options openssl_encrypt expected a boolean $raw_data.
+                if (!defined('OPENSSL_RAW_DATA')) {
+                    $this->openssl_options = true;
+                } else {
+                    $this->openssl_options = OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING;
+                }
+
+                $methods = openssl_get_cipher_methods();
+                if (in_array($this->cipher_name_openssl, $methods)) {
+                    return true;
+                }
+                // not all of openssl's symmetric cipher's support ctr. for those
+                // that don't we'll emulate it
+                switch ($this->mode) {
+                    case self::MODE_CTR:
+                        if (in_array($this->cipher_name_openssl_ecb, $methods)) {
+                            $this->openssl_emulate_ctr = true;
+                            return true;
+                        }
+                }
+                return false;
+            case self::ENGINE_MCRYPT:
+                return $this->cipher_name_mcrypt &&
+                       extension_loaded('mcrypt') &&
+                       in_array($this->cipher_name_mcrypt, @mcrypt_list_algorithms());
+            case self::ENGINE_INTERNAL:
+                return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Sets the preferred crypt engine
+     *
+     * Currently, $engine could be:
+     *
+     * - \phpseclib\Crypt\Base::ENGINE_OPENSSL  [very fast]
+     *
+     * - \phpseclib\Crypt\Base::ENGINE_MCRYPT   [fast]
+     *
+     * - \phpseclib\Crypt\Base::ENGINE_INTERNAL [slow]
+     *
+     * If the preferred crypt engine is not available the fastest available one will be used
+     *
+     * @see self::__construct()
+     * @param int $engine
+     * @access public
+     */
+    function setPreferredEngine($engine)
+    {
+        switch ($engine) {
+            //case self::ENGINE_OPENSSL;
+            case self::ENGINE_MCRYPT:
+            case self::ENGINE_INTERNAL:
+                $this->preferredEngine = $engine;
+                break;
+            default:
+                $this->preferredEngine = self::ENGINE_OPENSSL;
+        }
+
+        $this->_setEngine();
+    }
+
+    /**
+     * Returns the engine currently being utilized
+     *
+     * @see self::_setEngine()
+     * @access public
+     */
+    function getEngine()
+    {
+        return $this->engine;
+    }
+
+    /**
+     * Sets the engine as appropriate
+     *
+     * @see self::__construct()
+     * @access private
+     */
+    function _setEngine()
+    {
+        $this->engine = null;
+
+        $candidateEngines = array(
+            $this->preferredEngine,
+            self::ENGINE_OPENSSL,
+            self::ENGINE_MCRYPT
+        );
+        foreach ($candidateEngines as $engine) {
+            if ($this->isValidEngine($engine)) {
+                $this->engine = $engine;
+                break;
+            }
+        }
+        if (!$this->engine) {
+            $this->engine = self::ENGINE_INTERNAL;
+        }
+
+        if ($this->engine != self::ENGINE_MCRYPT && $this->enmcrypt) {
+            // Closing the current mcrypt resource(s). _mcryptSetup() will, if needed,
+            // (re)open them with the module named in $this->cipher_name_mcrypt
+            @mcrypt_module_close($this->enmcrypt);
+            @mcrypt_module_close($this->demcrypt);
+            $this->enmcrypt = null;
+            $this->demcrypt = null;
+
+            if ($this->ecb) {
+                @mcrypt_module_close($this->ecb);
+                $this->ecb = null;
+            }
+        }
+
+        $this->changed = true;
+    }
+
+    /**
+     * Encrypts a block
+     *
+     * Note: Must be extended by the child \phpseclib\Crypt\* class
+     *
+     * @access private
+     * @param string $in
+     * @return string
+     */
+    abstract function _encryptBlock($in);
+
+    /**
+     * Decrypts a block
+     *
+     * Note: Must be extended by the child \phpseclib\Crypt\* class
+     *
+     * @access private
+     * @param string $in
+     * @return string
+     */
+    abstract function _decryptBlock($in);
+
+    /**
+     * Setup the key (expansion)
+     *
+     * Only used if $engine == self::ENGINE_INTERNAL
+     *
+     * Note: Must extend by the child \phpseclib\Crypt\* class
+     *
+     * @see self::_setup()
+     * @access private
+     */
+    abstract function _setupKey();
+
+    /**
+     * Setup the self::ENGINE_INTERNAL $engine
+     *
+     * (re)init, if necessary, the internal cipher $engine and flush all $buffers
+     * Used (only) if $engine == self::ENGINE_INTERNAL
+     *
+     * _setup() will be called each time if $changed === true
+     * typically this happens when using one or more of following public methods:
+     *
+     * - setKey()
+     *
+     * - setIV()
+     *
+     * - disableContinuousBuffer()
+     *
+     * - First run of encrypt() / decrypt() with no init-settings
+     *
+     * @see self::setKey()
+     * @see self::setIV()
+     * @see self::disableContinuousBuffer()
+     * @access private
+     * @internal _setup() is always called before en/decryption.
+     * @internal Could, but not must, extend by the child Crypt_* class
+     */
+    function _setup()
+    {
+        $this->_clearBuffers();
+        $this->_setupKey();
+
+        if ($this->use_inline_crypt) {
+            $this->_setupInlineCrypt();
+        }
+    }
+
+    /**
+     * Setup the self::ENGINE_MCRYPT $engine
+     *
+     * (re)init, if necessary, the (ext)mcrypt resources and flush all $buffers
+     * Used (only) if $engine = self::ENGINE_MCRYPT
+     *
+     * _setupMcrypt() will be called each time if $changed === true
+     * typically this happens when using one or more of following public methods:
+     *
+     * - setKey()
+     *
+     * - setIV()
+     *
+     * - disableContinuousBuffer()
+     *
+     * - First run of encrypt() / decrypt()
+     *
+     * @see self::setKey()
+     * @see self::setIV()
+     * @see self::disableContinuousBuffer()
+     * @access private
+     * @internal Could, but not must, extend by the child Crypt_* class
+     */
+    function _setupMcrypt()
+    {
+        $this->_clearBuffers();
+        $this->enchanged = $this->dechanged = true;
+
+        if (!isset($this->enmcrypt)) {
+            static $mcrypt_modes = array(
+                self::MODE_CTR    => 'ctr',
+                self::MODE_ECB    => MCRYPT_MODE_ECB,
+                self::MODE_CBC    => MCRYPT_MODE_CBC,
+                self::MODE_CFB    => 'ncfb',
+                self::MODE_CFB8   => MCRYPT_MODE_CFB,
+                self::MODE_OFB    => MCRYPT_MODE_NOFB,
+                self::MODE_STREAM => MCRYPT_MODE_STREAM,
+            );
+
+            $this->demcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
+            $this->enmcrypt = @mcrypt_module_open($this->cipher_name_mcrypt, '', $mcrypt_modes[$this->mode], '');
+
+            // we need the $ecb mcrypt resource (only) in MODE_CFB with enableContinuousBuffer()
+            // to workaround mcrypt's broken ncfb implementation in buffered mode
+            // see: {@link http://phpseclib.sourceforge.net/cfb-demo.phps}
+            if ($this->mode == self::MODE_CFB) {
+                $this->ecb = @mcrypt_module_open($this->cipher_name_mcrypt, '', MCRYPT_MODE_ECB, '');
+            }
+        } // else should mcrypt_generic_deinit be called?
+
+        if ($this->mode == self::MODE_CFB) {
+            @mcrypt_generic_init($this->ecb, $this->key, str_repeat("\0", $this->block_size));
+        }
+    }
+
+    /**
+     * Pads a string
+     *
+     * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize.
+     * $this->block_size - (strlen($text) % $this->block_size) bytes are added, each of which is equal to
+     * chr($this->block_size - (strlen($text) % $this->block_size)
+     *
+     * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
+     * and padding will, hence forth, be enabled.
+     *
+     * @see self::_unpad()
+     * @param string $text
+     * @access private
+     * @return string
+     */
+    function _pad($text)
+    {
+        $length = strlen($text);
+
+        if (!$this->padding) {
+            if ($length % $this->block_size == 0) {
+                return $text;
+            } else {
+                user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})");
+                $this->padding = true;
+            }
+        }
+
+        $pad = $this->block_size - ($length % $this->block_size);
+
+        return str_pad($text, $length + $pad, chr($pad));
+    }
+
+    /**
+     * Unpads a string.
+     *
+     * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
+     * and false will be returned.
+     *
+     * @see self::_pad()
+     * @param string $text
+     * @access private
+     * @return string
+     */
+    function _unpad($text)
+    {
+        if (!$this->padding) {
+            return $text;
+        }
+
+        $length = ord($text[strlen($text) - 1]);
+
+        if (!$length || $length > $this->block_size) {
+            return false;
+        }
+
+        return substr($text, 0, -$length);
+    }
+
+    /**
+     * Clears internal buffers
+     *
+     * Clearing/resetting the internal buffers is done everytime
+     * after disableContinuousBuffer() or on cipher $engine (re)init
+     * ie after setKey() or setIV()
+     *
+     * @access public
+     * @internal Could, but not must, extend by the child Crypt_* class
+     */
+    function _clearBuffers()
+    {
+        $this->enbuffer = $this->debuffer = array('ciphertext' => '', 'xor' => '', 'pos' => 0, 'enmcrypt_init' => true);
+
+        // mcrypt's handling of invalid's $iv:
+        // $this->encryptIV = $this->decryptIV = strlen($this->iv) == $this->block_size ? $this->iv : str_repeat("\0", $this->block_size);
+        $this->encryptIV = $this->decryptIV = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, "\0");
+
+        if (!$this->skip_key_adjustment) {
+            $this->key = str_pad(substr($this->key, 0, $this->key_length), $this->key_length, "\0");
+        }
+    }
+
+    /**
+     * String Shift
+     *
+     * Inspired by array_shift
+     *
+     * @param string $string
+     * @param int $index
+     * @access private
+     * @return string
+     */
+    function _string_shift(&$string, $index = 1)
+    {
+        $substr = substr($string, 0, $index);
+        $string = substr($string, $index);
+        return $substr;
+    }
+
+    /**
+     * String Pop
+     *
+     * Inspired by array_pop
+     *
+     * @param string $string
+     * @param int $index
+     * @access private
+     * @return string
+     */
+    function _string_pop(&$string, $index = 1)
+    {
+        $substr = substr($string, -$index);
+        $string = substr($string, 0, -$index);
+        return $substr;
+    }
+
+    /**
+     * Increment the current string
+     *
+     * @see self::decrypt()
+     * @see self::encrypt()
+     * @param string $var
+     * @access private
+     */
+    function _increment_str(&$var)
+    {
+        for ($i = 4; $i <= strlen($var); $i+= 4) {
+            $temp = substr($var, -$i, 4);
+            switch ($temp) {
+                case "\xFF\xFF\xFF\xFF":
+                    $var = substr_replace($var, "\x00\x00\x00\x00", -$i, 4);
+                    break;
+                case "\x7F\xFF\xFF\xFF":
+                    $var = substr_replace($var, "\x80\x00\x00\x00", -$i, 4);
+                    return;
+                default:
+                    $temp = unpack('Nnum', $temp);
+                    $var = substr_replace($var, pack('N', $temp['num'] + 1), -$i, 4);
+                    return;
+            }
+        }
+
+        $remainder = strlen($var) % 4;
+
+        if ($remainder == 0) {
+            return;
+        }
+
+        $temp = unpack('Nnum', str_pad(substr($var, 0, $remainder), 4, "\0", STR_PAD_LEFT));
+        $temp = substr(pack('N', $temp['num'] + 1), -$remainder);
+        $var = substr_replace($var, $temp, 0, $remainder);
+    }
+
+    /**
+     * Setup the performance-optimized function for de/encrypt()
+     *
+     * Stores the created (or existing) callback function-name
+     * in $this->inline_crypt
+     *
+     * Internally for phpseclib developers:
+     *
+     *     _setupInlineCrypt() would be called only if:
+     *
+     *     - $engine == self::ENGINE_INTERNAL and
+     *
+     *     - $use_inline_crypt === true
+     *
+     *     - each time on _setup(), after(!) _setupKey()
+     *
+     *
+     *     This ensures that _setupInlineCrypt() has always a
+     *     full ready2go initializated internal cipher $engine state
+     *     where, for example, the keys allready expanded,
+     *     keys/block_size calculated and such.
+     *
+     *     It is, each time if called, the responsibility of _setupInlineCrypt():
+     *
+     *     - to set $this->inline_crypt to a valid and fully working callback function
+     *       as a (faster) replacement for encrypt() / decrypt()
+     *
+     *     - NOT to create unlimited callback functions (for memory reasons!)
+     *       no matter how often _setupInlineCrypt() would be called. At some
+     *       point of amount they must be generic re-useable.
+     *
+     *     - the code of _setupInlineCrypt() it self,
+     *       and the generated callback code,
+     *       must be, in following order:
+     *       - 100% safe
+     *       - 100% compatible to encrypt()/decrypt()
+     *       - using only php5+ features/lang-constructs/php-extensions if
+     *         compatibility (down to php4) or fallback is provided
+     *       - readable/maintainable/understandable/commented and... not-cryptic-styled-code :-)
+     *       - >= 10% faster than encrypt()/decrypt() [which is, by the way,
+     *         the reason for the existence of _setupInlineCrypt() :-)]
+     *       - memory-nice
+     *       - short (as good as possible)
+     *
+     * Note: - _setupInlineCrypt() is using _createInlineCryptFunction() to create the full callback function code.
+     *       - In case of using inline crypting, _setupInlineCrypt() must extend by the child \phpseclib\Crypt\* class.
+     *       - The following variable names are reserved:
+     *         - $_*  (all variable names prefixed with an underscore)
+     *         - $self (object reference to it self. Do not use $this, but $self instead)
+     *         - $in (the content of $in has to en/decrypt by the generated code)
+     *       - The callback function should not use the 'return' statement, but en/decrypt'ing the content of $in only
+     *
+     *
+     * @see self::_setup()
+     * @see self::_createInlineCryptFunction()
+     * @see self::encrypt()
+     * @see self::decrypt()
+     * @access private
+     * @internal If a Crypt_* class providing inline crypting it must extend _setupInlineCrypt()
+     */
+    function _setupInlineCrypt()
+    {
+        // If, for any reason, an extending \phpseclib\Crypt\Base() \phpseclib\Crypt\* class
+        // not using inline crypting then it must be ensured that: $this->use_inline_crypt = false
+        // ie in the class var declaration of $use_inline_crypt in general for the \phpseclib\Crypt\* class,
+        // in the constructor at object instance-time
+        // or, if it's runtime-specific, at runtime
+
+        $this->use_inline_crypt = false;
+    }
+
+    /**
+     * Creates the performance-optimized function for en/decrypt()
+     *
+     * Internally for phpseclib developers:
+     *
+     *    _createInlineCryptFunction():
+     *
+     *    - merge the $cipher_code [setup'ed by _setupInlineCrypt()]
+     *      with the current [$this->]mode of operation code
+     *
+     *    - create the $inline function, which called by encrypt() / decrypt()
+     *      as its replacement to speed up the en/decryption operations.
+     *
+     *    - return the name of the created $inline callback function
+     *
+     *    - used to speed up en/decryption
+     *
+     *
+     *
+     *    The main reason why can speed up things [up to 50%] this way are:
+     *
+     *    - using variables more effective then regular.
+     *      (ie no use of expensive arrays but integers $k_0, $k_1 ...
+     *      or even, for example, the pure $key[] values hardcoded)
+     *
+     *    - avoiding 1000's of function calls of ie _encryptBlock()
+     *      but inlining the crypt operations.
+     *      in the mode of operation for() loop.
+     *
+     *    - full loop unroll the (sometimes key-dependent) rounds
+     *      avoiding this way ++$i counters and runtime-if's etc...
+     *
+     *    The basic code architectur of the generated $inline en/decrypt()
+     *    lambda function, in pseudo php, is:
+     *
+     *    <code>
+     *    +----------------------------------------------------------------------------------------------+
+     *    | callback $inline = create_function:                                                          |
+     *    | lambda_function_0001_crypt_ECB($action, $text)                                               |
+     *    | {                                                                                            |
+     *    |     INSERT PHP CODE OF:                                                                      |
+     *    |     $cipher_code['init_crypt'];                  // general init code.                       |
+     *    |                                                  // ie: $sbox'es declarations used for       |
+     *    |                                                  //     encrypt and decrypt'ing.             |
+     *    |                                                                                              |
+     *    |     switch ($action) {                                                                       |
+     *    |         case 'encrypt':                                                                      |
+     *    |             INSERT PHP CODE OF:                                                              |
+     *    |             $cipher_code['init_encrypt'];       // encrypt sepcific init code.               |
+     *    |                                                    ie: specified $key or $box                |
+     *    |                                                        declarations for encrypt'ing.         |
+     *    |                                                                                              |
+     *    |             foreach ($ciphertext) {                                                          |
+     *    |                 $in = $block_size of $ciphertext;                                            |
+     *    |                                                                                              |
+     *    |                 INSERT PHP CODE OF:                                                          |
+     *    |                 $cipher_code['encrypt_block'];  // encrypt's (string) $in, which is always:  |
+     *    |                                                 // strlen($in) == $this->block_size          |
+     *    |                                                 // here comes the cipher algorithm in action |
+     *    |                                                 // for encryption.                           |
+     *    |                                                 // $cipher_code['encrypt_block'] has to      |
+     *    |                                                 // encrypt the content of the $in variable   |
+     *    |                                                                                              |
+     *    |                 $plaintext .= $in;                                                           |
+     *    |             }                                                                                |
+     *    |             return $plaintext;                                                               |
+     *    |                                                                                              |
+     *    |         case 'decrypt':                                                                      |
+     *    |             INSERT PHP CODE OF:                                                              |
+     *    |             $cipher_code['init_decrypt'];       // decrypt sepcific init code                |
+     *    |                                                    ie: specified $key or $box                |
+     *    |                                                        declarations for decrypt'ing.         |
+     *    |             foreach ($plaintext) {                                                           |
+     *    |                 $in = $block_size of $plaintext;                                             |
+     *    |                                                                                              |
+     *    |                 INSERT PHP CODE OF:                                                          |
+     *    |                 $cipher_code['decrypt_block'];  // decrypt's (string) $in, which is always   |
+     *    |                                                 // strlen($in) == $this->block_size          |
+     *    |                                                 // here comes the cipher algorithm in action |
+     *    |                                                 // for decryption.                           |
+     *    |                                                 // $cipher_code['decrypt_block'] has to      |
+     *    |                                                 // decrypt the content of the $in variable   |
+     *    |                 $ciphertext .= $in;                                                          |
+     *    |             }                                                                                |
+     *    |             return $ciphertext;                                                              |
+     *    |     }                                                                                        |
+     *    | }                                                                                            |
+     *    +----------------------------------------------------------------------------------------------+
+     *    </code>
+     *
+     *    See also the \phpseclib\Crypt\*::_setupInlineCrypt()'s for
+     *    productive inline $cipher_code's how they works.
+     *
+     *    Structure of:
+     *    <code>
+     *    $cipher_code = array(
+     *        'init_crypt'    => (string) '', // optional
+     *        'init_encrypt'  => (string) '', // optional
+     *        'init_decrypt'  => (string) '', // optional
+     *        'encrypt_block' => (string) '', // required
+     *        'decrypt_block' => (string) ''  // required
+     *    );
+     *    </code>
+     *
+     * @see self::_setupInlineCrypt()
+     * @see self::encrypt()
+     * @see self::decrypt()
+     * @param array $cipher_code
+     * @access private
+     * @return string (the name of the created callback function)
+     */
+    function _createInlineCryptFunction($cipher_code)
+    {
+        $block_size = $this->block_size;
+
+        // optional
+        $init_crypt    = isset($cipher_code['init_crypt'])    ? $cipher_code['init_crypt']    : '';
+        $init_encrypt  = isset($cipher_code['init_encrypt'])  ? $cipher_code['init_encrypt']  : '';
+        $init_decrypt  = isset($cipher_code['init_decrypt'])  ? $cipher_code['init_decrypt']  : '';
+        // required
+        $encrypt_block = $cipher_code['encrypt_block'];
+        $decrypt_block = $cipher_code['decrypt_block'];
+
+        // Generating mode of operation inline code,
+        // merged with the $cipher_code algorithm
+        // for encrypt- and decryption.
+        switch ($this->mode) {
+            case self::MODE_ECB:
+                $encrypt = $init_encrypt . '
+                    $_ciphertext = "";
+                    $_plaintext_len = strlen($_text);
+
+                    for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
+                        $in = substr($_text, $_i, '.$block_size.');
+                        '.$encrypt_block.'
+                        $_ciphertext.= $in;
+                    }
+
+                    return $_ciphertext;
+                    ';
+
+                $decrypt = $init_decrypt . '
+                    $_plaintext = "";
+                    $_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0));
+                    $_ciphertext_len = strlen($_text);
+
+                    for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
+                        $in = substr($_text, $_i, '.$block_size.');
+                        '.$decrypt_block.'
+                        $_plaintext.= $in;
+                    }
+
+                    return $self->_unpad($_plaintext);
+                    ';
+                break;
+            case self::MODE_CTR:
+                $encrypt = $init_encrypt . '
+                    $_ciphertext = "";
+                    $_plaintext_len = strlen($_text);
+                    $_xor = $self->encryptIV;
+                    $_buffer = &$self->enbuffer;
+                    if (strlen($_buffer["ciphertext"])) {
+                        for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
+                            $_block = substr($_text, $_i, '.$block_size.');
+                            if (strlen($_block) > strlen($_buffer["ciphertext"])) {
+                                $in = $_xor;
+                                '.$encrypt_block.'
+                                $self->_increment_str($_xor);
+                                $_buffer["ciphertext"].= $in;
+                            }
+                            $_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.');
+                            $_ciphertext.= $_block ^ $_key;
+                        }
+                    } else {
+                        for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
+                            $_block = substr($_text, $_i, '.$block_size.');
+                            $in = $_xor;
+                            '.$encrypt_block.'
+                            $self->_increment_str($_xor);
+                            $_key = $in;
+                            $_ciphertext.= $_block ^ $_key;
+                        }
+                    }
+                    if ($self->continuousBuffer) {
+                        $self->encryptIV = $_xor;
+                        if ($_start = $_plaintext_len % '.$block_size.') {
+                            $_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
+                        }
+                    }
+
+                    return $_ciphertext;
+                ';
+
+                $decrypt = $init_encrypt . '
+                    $_plaintext = "";
+                    $_ciphertext_len = strlen($_text);
+                    $_xor = $self->decryptIV;
+                    $_buffer = &$self->debuffer;
+
+                    if (strlen($_buffer["ciphertext"])) {
+                        for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
+                            $_block = substr($_text, $_i, '.$block_size.');
+                            if (strlen($_block) > strlen($_buffer["ciphertext"])) {
+                                $in = $_xor;
+                                '.$encrypt_block.'
+                                $self->_increment_str($_xor);
+                                $_buffer["ciphertext"].= $in;
+                            }
+                            $_key = $self->_string_shift($_buffer["ciphertext"], '.$block_size.');
+                            $_plaintext.= $_block ^ $_key;
+                        }
+                    } else {
+                        for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
+                            $_block = substr($_text, $_i, '.$block_size.');
+                            $in = $_xor;
+                            '.$encrypt_block.'
+                            $self->_increment_str($_xor);
+                            $_key = $in;
+                            $_plaintext.= $_block ^ $_key;
+                        }
+                    }
+                    if ($self->continuousBuffer) {
+                        $self->decryptIV = $_xor;
+                        if ($_start = $_ciphertext_len % '.$block_size.') {
+                            $_buffer["ciphertext"] = substr($_key, $_start) . $_buffer["ciphertext"];
+                        }
+                    }
+
+                    return $_plaintext;
+                    ';
+                break;
+            case self::MODE_CFB:
+                $encrypt = $init_encrypt . '
+                    $_ciphertext = "";
+                    $_buffer = &$self->enbuffer;
+
+                    if ($self->continuousBuffer) {
+                        $_iv = &$self->encryptIV;
+                        $_pos = &$_buffer["pos"];
+                    } else {
+                        $_iv = $self->encryptIV;
+                        $_pos = 0;
+                    }
+                    $_len = strlen($_text);
+                    $_i = 0;
+                    if ($_pos) {
+                        $_orig_pos = $_pos;
+                        $_max = '.$block_size.' - $_pos;
+                        if ($_len >= $_max) {
+                            $_i = $_max;
+                            $_len-= $_max;
+                            $_pos = 0;
+                        } else {
+                            $_i = $_len;
+                            $_pos+= $_len;
+                            $_len = 0;
+                        }
+                        $_ciphertext = substr($_iv, $_orig_pos) ^ $_text;
+                        $_iv = substr_replace($_iv, $_ciphertext, $_orig_pos, $_i);
+                    }
+                    while ($_len >= '.$block_size.') {
+                        $in = $_iv;
+                        '.$encrypt_block.';
+                        $_iv = $in ^ substr($_text, $_i, '.$block_size.');
+                        $_ciphertext.= $_iv;
+                        $_len-= '.$block_size.';
+                        $_i+= '.$block_size.';
+                    }
+                    if ($_len) {
+                        $in = $_iv;
+                        '.$encrypt_block.'
+                        $_iv = $in;
+                        $_block = $_iv ^ substr($_text, $_i);
+                        $_iv = substr_replace($_iv, $_block, 0, $_len);
+                        $_ciphertext.= $_block;
+                        $_pos = $_len;
+                    }
+                    return $_ciphertext;
+                ';
+
+                $decrypt = $init_encrypt . '
+                    $_plaintext = "";
+                    $_buffer = &$self->debuffer;
+
+                    if ($self->continuousBuffer) {
+                        $_iv = &$self->decryptIV;
+                        $_pos = &$_buffer["pos"];
+                    } else {
+                        $_iv = $self->decryptIV;
+                        $_pos = 0;
+                    }
+                    $_len = strlen($_text);
+                    $_i = 0;
+                    if ($_pos) {
+                        $_orig_pos = $_pos;
+                        $_max = '.$block_size.' - $_pos;
+                        if ($_len >= $_max) {
+                            $_i = $_max;
+                            $_len-= $_max;
+                            $_pos = 0;
+                        } else {
+                            $_i = $_len;
+                            $_pos+= $_len;
+                            $_len = 0;
+                        }
+                        $_plaintext = substr($_iv, $_orig_pos) ^ $_text;
+                        $_iv = substr_replace($_iv, substr($_text, 0, $_i), $_orig_pos, $_i);
+                    }
+                    while ($_len >= '.$block_size.') {
+                        $in = $_iv;
+                        '.$encrypt_block.'
+                        $_iv = $in;
+                        $cb = substr($_text, $_i, '.$block_size.');
+                        $_plaintext.= $_iv ^ $cb;
+                        $_iv = $cb;
+                        $_len-= '.$block_size.';
+                        $_i+= '.$block_size.';
+                    }
+                    if ($_len) {
+                        $in = $_iv;
+                        '.$encrypt_block.'
+                        $_iv = $in;
+                        $_plaintext.= $_iv ^ substr($_text, $_i);
+                        $_iv = substr_replace($_iv, substr($_text, $_i), 0, $_len);
+                        $_pos = $_len;
+                    }
+
+                    return $_plaintext;
+                    ';
+                break;
+            case self::MODE_CFB8:
+                $encrypt = $init_encrypt . '
+                    $_ciphertext = "";
+                    $_len = strlen($_text);
+                    $_iv = $self->encryptIV;
+
+                    for ($_i = 0; $_i < $_len; ++$_i) {
+                        $in = $_iv;
+                        '.$encrypt_block.'
+                        $_ciphertext .= ($_c = $_text[$_i] ^ $in);
+                        $_iv = substr($_iv, 1) . $_c;
+                    }
+
+                    if ($self->continuousBuffer) {
+                        if ($_len >= '.$block_size.') {
+                            $self->encryptIV = substr($_ciphertext, -'.$block_size.');
+                        } else {
+                            $self->encryptIV = substr($self->encryptIV, $_len - '.$block_size.') . substr($_ciphertext, -$_len);
+                        }
+                    }
+
+                    return $_ciphertext;
+                    ';
+                $decrypt = $init_encrypt . '
+                    $_plaintext = "";
+                    $_len = strlen($_text);
+                    $_iv = $self->decryptIV;
+
+                    for ($_i = 0; $_i < $_len; ++$_i) {
+                        $in = $_iv;
+                        '.$encrypt_block.'
+                        $_plaintext .= $_text[$_i] ^ $in;
+                        $_iv = substr($_iv, 1) . $_text[$_i];
+                    }
+
+                    if ($self->continuousBuffer) {
+                        if ($_len >= '.$block_size.') {
+                            $self->decryptIV = substr($_text, -'.$block_size.');
+                        } else {
+                            $self->decryptIV = substr($self->decryptIV, $_len - '.$block_size.') . substr($_text, -$_len);
+                        }
+                    }
+
+                    return $_plaintext;
+                    ';
+                break;
+            case self::MODE_OFB:
+                $encrypt = $init_encrypt . '
+                    $_ciphertext = "";
+                    $_plaintext_len = strlen($_text);
+                    $_xor = $self->encryptIV;
+                    $_buffer = &$self->enbuffer;
+
+                    if (strlen($_buffer["xor"])) {
+                        for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
+                            $_block = substr($_text, $_i, '.$block_size.');
+                            if (strlen($_block) > strlen($_buffer["xor"])) {
+                                $in = $_xor;
+                                '.$encrypt_block.'
+                                $_xor = $in;
+                                $_buffer["xor"].= $_xor;
+                            }
+                            $_key = $self->_string_shift($_buffer["xor"], '.$block_size.');
+                            $_ciphertext.= $_block ^ $_key;
+                        }
+                    } else {
+                        for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
+                            $in = $_xor;
+                            '.$encrypt_block.'
+                            $_xor = $in;
+                            $_ciphertext.= substr($_text, $_i, '.$block_size.') ^ $_xor;
+                        }
+                        $_key = $_xor;
+                    }
+                    if ($self->continuousBuffer) {
+                        $self->encryptIV = $_xor;
+                        if ($_start = $_plaintext_len % '.$block_size.') {
+                             $_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
+                        }
+                    }
+                    return $_ciphertext;
+                    ';
+
+                $decrypt = $init_encrypt . '
+                    $_plaintext = "";
+                    $_ciphertext_len = strlen($_text);
+                    $_xor = $self->decryptIV;
+                    $_buffer = &$self->debuffer;
+
+                    if (strlen($_buffer["xor"])) {
+                        for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
+                            $_block = substr($_text, $_i, '.$block_size.');
+                            if (strlen($_block) > strlen($_buffer["xor"])) {
+                                $in = $_xor;
+                                '.$encrypt_block.'
+                                $_xor = $in;
+                                $_buffer["xor"].= $_xor;
+                            }
+                            $_key = $self->_string_shift($_buffer["xor"], '.$block_size.');
+                            $_plaintext.= $_block ^ $_key;
+                        }
+                    } else {
+                        for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
+                            $in = $_xor;
+                            '.$encrypt_block.'
+                            $_xor = $in;
+                            $_plaintext.= substr($_text, $_i, '.$block_size.') ^ $_xor;
+                        }
+                        $_key = $_xor;
+                    }
+                    if ($self->continuousBuffer) {
+                        $self->decryptIV = $_xor;
+                        if ($_start = $_ciphertext_len % '.$block_size.') {
+                             $_buffer["xor"] = substr($_key, $_start) . $_buffer["xor"];
+                        }
+                    }
+                    return $_plaintext;
+                    ';
+                break;
+            case self::MODE_STREAM:
+                $encrypt = $init_encrypt . '
+                    $_ciphertext = "";
+                    '.$encrypt_block.'
+                    return $_ciphertext;
+                    ';
+                $decrypt = $init_decrypt . '
+                    $_plaintext = "";
+                    '.$decrypt_block.'
+                    return $_plaintext;
+                    ';
+                break;
+            // case self::MODE_CBC:
+            default:
+                $encrypt = $init_encrypt . '
+                    $_ciphertext = "";
+                    $_plaintext_len = strlen($_text);
+
+                    $in = $self->encryptIV;
+
+                    for ($_i = 0; $_i < $_plaintext_len; $_i+= '.$block_size.') {
+                        $in = substr($_text, $_i, '.$block_size.') ^ $in;
+                        '.$encrypt_block.'
+                        $_ciphertext.= $in;
+                    }
+
+                    if ($self->continuousBuffer) {
+                        $self->encryptIV = $in;
+                    }
+
+                    return $_ciphertext;
+                    ';
+
+                $decrypt = $init_decrypt . '
+                    $_plaintext = "";
+                    $_text = str_pad($_text, strlen($_text) + ('.$block_size.' - strlen($_text) % '.$block_size.') % '.$block_size.', chr(0));
+                    $_ciphertext_len = strlen($_text);
+
+                    $_iv = $self->decryptIV;
+
+                    for ($_i = 0; $_i < $_ciphertext_len; $_i+= '.$block_size.') {
+                        $in = $_block = substr($_text, $_i, '.$block_size.');
+                        '.$decrypt_block.'
+                        $_plaintext.= $in ^ $_iv;
+                        $_iv = $_block;
+                    }
+
+                    if ($self->continuousBuffer) {
+                        $self->decryptIV = $_iv;
+                    }
+
+                    return $self->_unpad($_plaintext);
+                    ';
+                break;
+        }
+
+        // Create the $inline function and return its name as string. Ready to run!
+        if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
+            eval('$func = function ($_action, &$self, $_text) { ' . $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' } };');
+            return $func;
+        }
+
+        return create_function('$_action, &$self, $_text', $init_crypt . 'if ($_action == "encrypt") { ' . $encrypt . ' } else { ' . $decrypt . ' }');
+    }
+
+    /**
+     * Holds the lambda_functions table (classwide)
+     *
+     * Each name of the lambda function, created from
+     * _setupInlineCrypt() && _createInlineCryptFunction()
+     * is stored, classwide (!), here for reusing.
+     *
+     * The string-based index of $function is a classwide
+     * unique value representing, at least, the $mode of
+     * operation (or more... depends of the optimizing level)
+     * for which $mode the lambda function was created.
+     *
+     * @access private
+     * @return array &$functions
+     */
+    function &_getLambdaFunctions()
+    {
+        static $functions = array();
+        return $functions;
+    }
+
+    /**
+     * Generates a digest from $bytes
+     *
+     * @see self::_setupInlineCrypt()
+     * @access private
+     * @param $bytes
+     * @return string
+     */
+    function _hashInlineCryptFunction($bytes)
+    {
+        if (!isset(self::$WHIRLPOOL_AVAILABLE)) {
+            self::$WHIRLPOOL_AVAILABLE = extension_loaded('hash') && in_array('whirlpool', hash_algos());
+        }
+
+        $result = '';
+        $hash = $bytes;
+
+        switch (true) {
+            case self::$WHIRLPOOL_AVAILABLE:
+                foreach (str_split($bytes, 64) as $t) {
+                    $hash = hash('whirlpool', $hash, true);
+                    $result .= $t ^ $hash;
+                }
+                return $result . hash('whirlpool', $hash, true);
+            default:
+                $len = strlen($bytes);
+                for ($i = 0; $i < $len; $i+=20) {
+                    $t = substr($bytes, $i, 20);
+                    $hash = pack('H*', sha1($hash));
+                    $result .= $t ^ $hash;
+                }
+                return $result . pack('H*', sha1($hash));
+        }
+    }
+
+    /**
+     * Convert float to int
+     *
+     * On ARM CPUs converting floats to ints doesn't always work
+     *
+     * @access private
+     * @param string $x
+     * @return int
+     */
+    function safe_intval($x)
+    {
+        switch (true) {
+            case is_int($x):
+            // PHP 5.3, per http://php.net/releases/5_3_0.php, introduced "more consistent float rounding"
+            case (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
+                return $x;
+        }
+        return (fmod($x, 0x80000000) & 0x7FFFFFFF) |
+            ((fmod(floor($x / 0x80000000), 2) & 1) << 31);
+    }
+
+    /**
+     * eval()'able string for in-line float to int
+     *
+     * @access private
+     * @return string
+     */
+    function safe_intval_inline()
+    {
+        switch (true) {
+            case defined('PHP_INT_SIZE') && PHP_INT_SIZE == 8:
+            case (php_uname('m') & "\xDF\xDF\xDF") != 'ARM':
+                return '%s';
+                break;
+            default:
+                $safeint = '(is_int($temp = %s) ? $temp : (fmod($temp, 0x80000000) & 0x7FFFFFFF) | ';
+                return $safeint . '((fmod(floor($temp / 0x80000000), 2) & 1) << 31))';
+        }
+    }
+}
diff --git a/lib/phpseclib/Crypt/Blowfish.php b/lib/phpseclib/Crypt/Blowfish.php
new file mode 100644
index 0000000..74cc49d
--- /dev/null
+++ b/lib/phpseclib/Crypt/Blowfish.php
@@ -0,0 +1,571 @@
+<?php
+
+/**
+ * Pure-PHP implementation of Blowfish.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.
+ *
+ * PHP version 5
+ *
+ * Useful resources are as follows:
+ *
+ *  - {@link http://en.wikipedia.org/wiki/Blowfish_(cipher) Wikipedia description of Blowfish}
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include 'vendor/autoload.php';
+ *
+ *    $blowfish = new \phpseclib\Crypt\Blowfish();
+ *
+ *    $blowfish->setKey('12345678901234567890123456789012');
+ *
+ *    $plaintext = str_repeat('a', 1024);
+ *
+ *    echo $blowfish->decrypt($blowfish->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * @category  Crypt
+ * @package   Blowfish
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @author    Hans-Juergen Petrich <petrich@tronic-media.com>
+ * @copyright 2007 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
+ */
+
+namespace phpseclib\Crypt;
+
+/**
+ * Pure-PHP implementation of Blowfish.
+ *
+ * @package Blowfish
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @author  Hans-Juergen Petrich <petrich@tronic-media.com>
+ * @access  public
+ */
+class Blowfish extends Base
+{
+    /**
+     * Block Length of the cipher
+     *
+     * @see \phpseclib\Crypt\Base::block_size
+     * @var int
+     * @access private
+     */
+    var $block_size = 8;
+
+    /**
+     * The mcrypt specific name of the cipher
+     *
+     * @see \phpseclib\Crypt\Base::cipher_name_mcrypt
+     * @var string
+     * @access private
+     */
+    var $cipher_name_mcrypt = 'blowfish';
+
+    /**
+     * Optimizing value while CFB-encrypting
+     *
+     * @see \phpseclib\Crypt\Base::cfb_init_len
+     * @var int
+     * @access private
+     */
+    var $cfb_init_len = 500;
+
+    /**
+     * The fixed subkeys boxes ($sbox0 - $sbox3) with 256 entries each
+     *
+     * S-Box 0
+     *
+     * @access private
+     * @var    array
+     */
+    var $sbox0 = array(
+        0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99,
+        0x24a19947, 0xb3916cf7, 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e,
+        0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, 0x9c30d539, 0x2af26013,
+        0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e,
+        0xd71577c1, 0xbd314b27, 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440,
+        0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, 0xb3ee1411, 0x636fbc2a,
+        0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677,
+        0x3b8f4898, 0x6b4bb9af, 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032,
+        0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, 0x0f6d6ff3, 0x83f44239,
+        0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0,
+        0x6a51a0d2, 0xd8542f68, 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98,
+        0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, 0x7d84a5c3, 0x3b8b5ebe,
+        0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d,
+        0x37d0d724, 0xd00a1248, 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7,
+        0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, 0x5e5c9ec2, 0x196a2463,
+        0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09,
+        0xbee3d004, 0xde334afd, 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb,
+        0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, 0x8ea5e9f8, 0xdb3222f8,
+        0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82,
+        0x9e5c57bb, 0xca6f8ca0, 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573,
+        0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, 0x4afcb56c, 0x2dd1d35b,
+        0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8,
+        0xef20cada, 0x36774c01, 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0,
+        0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, 0x8888b812, 0x900df01c,
+        0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1,
+        0xe5a0cc0f, 0xb56f74e8, 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9,
+        0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, 0xc75442f5, 0xfb9d35cf,
+        0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af,
+        0x2464369b, 0xf009b91e, 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5,
+        0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, 0x1b510052, 0x9a532915,
+        0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915,
+        0xb6636521, 0xe7b9f9b6, 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a
+    );
+
+    /**
+     * S-Box 1
+     *
+     * @access private
+     * @var    array
+     */
+    var $sbox1 = array(
+        0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, 0x9cee60b8, 0x8fedb266,
+        0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e,
+        0x3f54989a, 0x5b429d65, 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1,
+        0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, 0x3c971814, 0x6b6a70a1,
+        0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8,
+        0xb03ada37, 0xf0500c0d, 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd,
+        0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, 0xc8b57634, 0x9af3dda7,
+        0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331,
+        0x4e548b38, 0x4f6db908, 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af,
+        0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, 0x501adde6, 0x9f84cd87,
+        0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2,
+        0xef1c1847, 0x3215d908, 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd,
+        0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, 0x3c11183b, 0x5924a509,
+        0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3,
+        0x771fe71c, 0x4e3d06fa, 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a,
+        0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, 0x1939260f, 0x19c27960,
+        0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28,
+        0xc332ddef, 0xbe6c5aa5, 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84,
+        0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, 0x0334fe1e, 0xaa0363cf,
+        0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e,
+        0x648b1eaf, 0x19bdf0ca, 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7,
+        0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, 0x11ed935f, 0x16681281,
+        0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696,
+        0xcdb30aeb, 0x532e3054, 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73,
+        0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, 0xdb6c4f15, 0xfacb4fd0,
+        0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250,
+        0xcf62a1f2, 0x5b8d2646, 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285,
+        0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, 0x1dadf43e, 0x233f7061,
+        0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e,
+        0xa6078084, 0x19f8509e, 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc,
+        0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, 0x675fda79, 0xe3674340,
+        0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7
+    );
+
+    /**
+     * S-Box 2
+     *
+     * @access private
+     * @var    array
+     */
+    var $sbox2 = array(
+        0xe93d5a68, 0x948140f7, 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068,
+        0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, 0x14214f74, 0xbf8b8840,
+        0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504,
+        0x96eb27b3, 0x55fd3941, 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb,
+        0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, 0xb58ce006, 0x7af4d6b6,
+        0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b,
+        0x1dc9faf7, 0x4b6d1856, 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb,
+        0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, 0xfe6ba9b7, 0xd096954b,
+        0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c,
+        0xfdf8e802, 0x04272f70, 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc,
+        0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, 0xf2bcc18f, 0x41113564,
+        0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115,
+        0x6b2395e0, 0x333e92e1, 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728,
+        0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, 0xc39dfd27, 0xf33e8d1e,
+        0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d,
+        0xc67b5510, 0x6d672c37, 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b,
+        0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, 0x7b9479bf, 0x763bd6eb,
+        0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c,
+        0x6a124237, 0xb79251e7, 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9,
+        0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, 0xbebfe988, 0x64e4c3fe,
+        0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc,
+        0x83426b33, 0xf01eab71, 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61,
+        0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, 0xb475f255, 0x46fcd9b9,
+        0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c,
+        0xb90bace1, 0xbb8205d0, 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633,
+        0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, 0xa186f20f, 0x2868f169,
+        0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027,
+        0x9af88c27, 0x773f8641, 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62,
+        0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, 0xebfc7da1, 0xce591d76,
+        0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc,
+        0xed545578, 0x08fca5b5, 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c,
+        0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, 0x670efa8e, 0x406000e0
+    );
+
+    /**
+     * S-Box 3
+     *
+     * @access private
+     * @var    array
+     */
+    var $sbox3 = array(
+        0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe,
+        0xd5118e9d, 0xbf0f7315, 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4,
+        0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, 0xd5730a1d, 0x4cd04dc6,
+        0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22,
+        0xc089c2b8, 0x43242ef6, 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6,
+        0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, 0x3f046f69, 0x77fa0a59,
+        0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51,
+        0x96d5ac3a, 0x017da67d, 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c,
+        0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, 0xf8d56629, 0x79132e28,
+        0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd,
+        0xc3eb9e15, 0x3c9057a2, 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319,
+        0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, 0xabcc5167, 0xccad925f,
+        0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32,
+        0xa8b6e37e, 0xc3293d46, 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166,
+        0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, 0xccd2017f, 0x6bb4e3bb,
+        0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47,
+        0xd29be463, 0x542f5d9e, 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d,
+        0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, 0x06b89fb4, 0xce6ea048,
+        0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd,
+        0xa08839e1, 0x51ce794b, 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7,
+        0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, 0x8df9317c, 0xe0b12b4f,
+        0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525,
+        0xfae59361, 0xceb69ceb, 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442,
+        0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, 0xd3a0342b, 0x8971f21e,
+        0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d,
+        0xe54cda54, 0x1edad891, 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299,
+        0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, 0x6e163697, 0x88d273cc,
+        0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a,
+        0xc9aa53fd, 0x62a80f00, 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b,
+        0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, 0x77afa1c5, 0x20756060,
+        0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9,
+        0x90d4f869, 0xa65cdea0, 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6
+    );
+
+    /**
+     * P-Array consists of 18 32-bit subkeys
+     *
+     * @var array
+     * @access private
+     */
+    var $parray = array(
+        0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, 0xa4093822, 0x299f31d0,
+        0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, 0xbe5466cf, 0x34e90c6c,
+        0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, 0x9216d5d9, 0x8979fb1b
+    );
+
+    /**
+     * The BCTX-working Array
+     *
+     * Holds the expanded key [p] and the key-depended s-boxes [sb]
+     *
+     * @var array
+     * @access private
+     */
+    var $bctx;
+
+    /**
+     * Holds the last used key
+     *
+     * @var array
+     * @access private
+     */
+    var $kl;
+
+    /**
+     * The Key Length (in bytes)
+     *
+     * @see \phpseclib\Crypt\Base::setKeyLength()
+     * @var int
+     * @access private
+     * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16.  Exists in conjunction with $Nk
+     *    because the encryption / decryption / key schedule creation requires this number and not $key_length.  We could
+     *    derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
+     *    of that, we'll just precompute it once.
+     */
+    var $key_length = 16;
+
+    /**
+     * Sets the key length.
+     *
+     * Key lengths can be between 32 and 448 bits.
+     *
+     * @access public
+     * @param int $length
+     */
+    function setKeyLength($length)
+    {
+        if ($length < 32) {
+            $this->key_length = 4;
+        } elseif ($length > 448) {
+            $this->key_length = 56;
+        } else {
+            $this->key_length = $length >> 3;
+        }
+
+        parent::setKeyLength($length);
+    }
+
+    /**
+     * Test for engine validity
+     *
+     * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine()
+     *
+     * @see \phpseclib\Crypt\Base::isValidEngine()
+     * @param int $engine
+     * @access public
+     * @return bool
+     */
+    function isValidEngine($engine)
+    {
+        if ($engine == self::ENGINE_OPENSSL) {
+            if (version_compare(PHP_VERSION, '5.3.7') < 0 && $this->key_length != 16) {
+                return false;
+            }
+            if ($this->key_length < 16) {
+                return false;
+            }
+            $this->cipher_name_openssl_ecb = 'bf-ecb';
+            $this->cipher_name_openssl = 'bf-' . $this->_openssl_translate_mode();
+        }
+
+        return parent::isValidEngine($engine);
+    }
+
+    /**
+     * Setup the key (expansion)
+     *
+     * @see \phpseclib\Crypt\Base::_setupKey()
+     * @access private
+     */
+    function _setupKey()
+    {
+        if (isset($this->kl['key']) && $this->key === $this->kl['key']) {
+            // already expanded
+            return;
+        }
+        $this->kl = array('key' => $this->key);
+
+        /* key-expanding p[] and S-Box building sb[] */
+        $this->bctx = array(
+            'p'  => array(),
+            'sb' => array(
+                $this->sbox0,
+                $this->sbox1,
+                $this->sbox2,
+                $this->sbox3
+            )
+        );
+
+        // unpack binary string in unsigned chars
+        $key  = array_values(unpack('C*', $this->key));
+        $keyl = count($key);
+        for ($j = 0, $i = 0; $i < 18; ++$i) {
+            // xor P1 with the first 32-bits of the key, xor P2 with the second 32-bits ...
+            for ($data = 0, $k = 0; $k < 4; ++$k) {
+                $data = ($data << 8) | $key[$j];
+                if (++$j >= $keyl) {
+                    $j = 0;
+                }
+            }
+            $this->bctx['p'][] = $this->parray[$i] ^ $data;
+        }
+
+        // encrypt the zero-string, replace P1 and P2 with the encrypted data,
+        // encrypt P3 and P4 with the new P1 and P2, do it with all P-array and subkeys
+        $data = "\0\0\0\0\0\0\0\0";
+        for ($i = 0; $i < 18; $i += 2) {
+            list($l, $r) = array_values(unpack('N*', $data = $this->_encryptBlock($data)));
+            $this->bctx['p'][$i    ] = $l;
+            $this->bctx['p'][$i + 1] = $r;
+        }
+        for ($i = 0; $i < 4; ++$i) {
+            for ($j = 0; $j < 256; $j += 2) {
+                list($l, $r) = array_values(unpack('N*', $data = $this->_encryptBlock($data)));
+                $this->bctx['sb'][$i][$j    ] = $l;
+                $this->bctx['sb'][$i][$j + 1] = $r;
+            }
+        }
+    }
+
+    /**
+     * Encrypts a block
+     *
+     * @access private
+     * @param string $in
+     * @return string
+     */
+    function _encryptBlock($in)
+    {
+        $p = $this->bctx["p"];
+        // extract($this->bctx["sb"], EXTR_PREFIX_ALL, "sb"); // slower
+        $sb_0 = $this->bctx["sb"][0];
+        $sb_1 = $this->bctx["sb"][1];
+        $sb_2 = $this->bctx["sb"][2];
+        $sb_3 = $this->bctx["sb"][3];
+
+        $in = unpack("N*", $in);
+        $l = $in[1];
+        $r = $in[2];
+
+        for ($i = 0; $i < 16; $i+= 2) {
+            $l^= $p[$i];
+            $r^= $this->safe_intval(($this->safe_intval($sb_0[$l >> 24 & 0xff]  + $sb_1[$l >> 16 & 0xff]) ^
+                  $sb_2[$l >>  8 & 0xff]) +
+                  $sb_3[$l       & 0xff]);
+
+            $r^= $p[$i + 1];
+            $l^= $this->safe_intval(($this->safe_intval($sb_0[$r >> 24 & 0xff]  + $sb_1[$r >> 16 & 0xff]) ^
+                  $sb_2[$r >>  8 & 0xff]) +
+                  $sb_3[$r       & 0xff]);
+        }
+        return pack("N*", $r ^ $p[17], $l ^ $p[16]);
+    }
+
+    /**
+     * Decrypts a block
+     *
+     * @access private
+     * @param string $in
+     * @return string
+     */
+    function _decryptBlock($in)
+    {
+        $p = $this->bctx["p"];
+        $sb_0 = $this->bctx["sb"][0];
+        $sb_1 = $this->bctx["sb"][1];
+        $sb_2 = $this->bctx["sb"][2];
+        $sb_3 = $this->bctx["sb"][3];
+
+        $in = unpack("N*", $in);
+        $l = $in[1];
+        $r = $in[2];
+
+        for ($i = 17; $i > 2; $i-= 2) {
+            $l^= $p[$i];
+            $r^= $this->safe_intval(($this->safe_intval($sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]) ^
+                  $sb_2[$l >>  8 & 0xff]) +
+                  $sb_3[$l       & 0xff]);
+
+            $r^= $p[$i - 1];
+            $l^= $this->safe_intval(($this->safe_intval($sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]) ^
+                  $sb_2[$r >>  8 & 0xff]) +
+                  $sb_3[$r       & 0xff]);
+        }
+        return pack("N*", $r ^ $p[0], $l ^ $p[1]);
+    }
+
+    /**
+     * Setup the performance-optimized function for de/encrypt()
+     *
+     * @see \phpseclib\Crypt\Base::_setupInlineCrypt()
+     * @access private
+     */
+    function _setupInlineCrypt()
+    {
+        $lambda_functions =& self::_getLambdaFunctions();
+
+        // We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function.
+        // (Currently, for Blowfish, one generated $lambda_function cost on php5.5@32bit ~100kb unfreeable mem and ~180kb on php5.5@64bit)
+        // After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one.
+        $gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
+
+        // Generation of a unique hash for our generated code
+        $code_hash = "Crypt_Blowfish, {$this->mode}";
+        if ($gen_hi_opt_code) {
+            $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
+        }
+
+        $safeint = $this->safe_intval_inline();
+
+        if (!isset($lambda_functions[$code_hash])) {
+            switch (true) {
+                case $gen_hi_opt_code:
+                    $p = $this->bctx['p'];
+                    $init_crypt = '
+                        static $sb_0, $sb_1, $sb_2, $sb_3;
+                        if (!$sb_0) {
+                            $sb_0 = $self->bctx["sb"][0];
+                            $sb_1 = $self->bctx["sb"][1];
+                            $sb_2 = $self->bctx["sb"][2];
+                            $sb_3 = $self->bctx["sb"][3];
+                        }
+                    ';
+                    break;
+                default:
+                    $p   = array();
+                    for ($i = 0; $i < 18; ++$i) {
+                        $p[] = '$p_' . $i;
+                    }
+                    $init_crypt = '
+                        list($sb_0, $sb_1, $sb_2, $sb_3) = $self->bctx["sb"];
+                        list(' . implode(',', $p) . ') = $self->bctx["p"];
+
+                    ';
+            }
+
+            // Generating encrypt code:
+            $encrypt_block = '
+                $in = unpack("N*", $in);
+                $l = $in[1];
+                $r = $in[2];
+            ';
+            for ($i = 0; $i < 16; $i+= 2) {
+                $encrypt_block.= '
+                    $l^= ' . $p[$i] . ';
+                    $r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]') . ' ^
+                          $sb_2[$l >>  8 & 0xff]) +
+                          $sb_3[$l       & 0xff]') . ';
+
+                    $r^= ' . $p[$i + 1] . ';
+                    $l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]') . '  ^
+                          $sb_2[$r >>  8 & 0xff]) +
+                          $sb_3[$r       & 0xff]') . ';
+                ';
+            }
+            $encrypt_block.= '
+                $in = pack("N*",
+                    $r ^ ' . $p[17] . ',
+                    $l ^ ' . $p[16] . '
+                );
+            ';
+
+            // Generating decrypt code:
+            $decrypt_block = '
+                $in = unpack("N*", $in);
+                $l = $in[1];
+                $r = $in[2];
+            ';
+
+            for ($i = 17; $i > 2; $i-= 2) {
+                $decrypt_block.= '
+                    $l^= ' . $p[$i] . ';
+                    $r^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$l >> 24 & 0xff] + $sb_1[$l >> 16 & 0xff]') . ' ^
+                          $sb_2[$l >>  8 & 0xff]) +
+                          $sb_3[$l       & 0xff]') . ';
+
+                    $r^= ' . $p[$i - 1] . ';
+                    $l^= ' . sprintf($safeint, '(' . sprintf($safeint, '$sb_0[$r >> 24 & 0xff] + $sb_1[$r >> 16 & 0xff]') . ' ^
+                          $sb_2[$r >>  8 & 0xff]) +
+                          $sb_3[$r       & 0xff]') . ';
+                ';
+            }
+
+            $decrypt_block.= '
+                $in = pack("N*",
+                    $r ^ ' . $p[0] . ',
+                    $l ^ ' . $p[1] . '
+                );
+            ';
+
+            $lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
+                array(
+                   'init_crypt'    => $init_crypt,
+                   'init_encrypt'  => '',
+                   'init_decrypt'  => '',
+                   'encrypt_block' => $encrypt_block,
+                   'decrypt_block' => $decrypt_block
+                )
+            );
+        }
+        $this->inline_crypt = $lambda_functions[$code_hash];
+    }
+}
diff --git a/lib/phpseclib/Crypt/DES.php b/lib/phpseclib/Crypt/DES.php
index fe31df8..9a8225f 100644
--- a/lib/phpseclib/Crypt/DES.php
+++ b/lib/phpseclib/Crypt/DES.php
@@ -1,12 +1,11 @@
 <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
  * Pure-PHP implementation of DES.
  *
  * Uses mcrypt, if available, and an internal implementation, otherwise.
  *
- * PHP versions 4 and 5
+ * PHP version 5
  *
  * Useful resources are as follows:
  *
@@ -17,9 +16,9 @@
  * Here's a short example of how to use this library:
  * <code>
  * <?php
- *    include('Crypt/DES.php');
+ *    include 'vendor/autoload.php';
  *
- *    $des = new Crypt_DES();
+ *    $des = new \phpseclib\Crypt\DES();
  *
  *    $des->setKey('abcdefgh');
  *
@@ -33,913 +32,1412 @@
  * ?>
  * </code>
  *
- * LICENSE: This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- *
- * @category   Crypt
- * @package    Crypt_DES
- * @author     Jim Wigginton <terrafrost@php.net>
- * @copyright  MMVII Jim Wigginton
- * @license    http://www.gnu.org/licenses/lgpl.txt
- * @version    $Id: DES.php,v 1.12 2010/02/09 06:10:26 terrafrost Exp $
- * @link       http://phpseclib.sourceforge.net
- */
-
-/**#@+
- * @access private
- * @see Crypt_DES::_prepareKey()
- * @see Crypt_DES::_processBlock()
- */
-/**
- * Contains array_reverse($keys[CRYPT_DES_DECRYPT])
- */
-define('CRYPT_DES_ENCRYPT', 0);
-/**
- * Contains array_reverse($keys[CRYPT_DES_ENCRYPT])
- */
-define('CRYPT_DES_DECRYPT', 1);
-/**#@-*/
-
-/**#@+
- * @access public
- * @see Crypt_DES::encrypt()
- * @see Crypt_DES::decrypt()
- */
-/**
- * Encrypt / decrypt using the Counter mode.
- *
- * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
- */
-define('CRYPT_DES_MODE_CTR', -1);
-/**
- * Encrypt / decrypt using the Electronic Code Book mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
- */
-define('CRYPT_DES_MODE_ECB', 1);
-/**
- * Encrypt / decrypt using the Code Book Chaining mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
+ * @category  Crypt
+ * @package   DES
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2007 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
  */
-define('CRYPT_DES_MODE_CBC', 2);
-/**#@-*/
 
-/**#@+
- * @access private
- * @see Crypt_DES::Crypt_DES()
- */
-/**
- * Toggles the internal implementation
- */
-define('CRYPT_DES_MODE_INTERNAL', 1);
-/**
- * Toggles the mcrypt implementation
- */
-define('CRYPT_DES_MODE_MCRYPT', 2);
-/**#@-*/
+namespace phpseclib\Crypt;
 
 /**
  * Pure-PHP implementation of DES.
  *
+ * @package DES
  * @author  Jim Wigginton <terrafrost@php.net>
- * @version 0.1.0
  * @access  public
- * @package Crypt_DES
  */
-class Crypt_DES {
+class DES extends Base
+{
+    /**#@+
+     * @access private
+     * @see \phpseclib\Crypt\DES::_setupKey()
+     * @see \phpseclib\Crypt\DES::_processBlock()
+     */
     /**
-     * The Key Schedule
+     * Contains $keys[self::ENCRYPT]
+     */
+    const ENCRYPT = 0;
+    /**
+     * Contains $keys[self::DECRYPT]
+     */
+    const DECRYPT = 1;
+    /**#@-*/
+
+    /**
+     * Block Length of the cipher
      *
-     * @see Crypt_DES::setKey()
-     * @var Array
+     * @see \phpseclib\Crypt\Base::block_size
+     * @var int
      * @access private
      */
-    var $keys = "\0\0\0\0\0\0\0\0";
+    var $block_size = 8;
 
     /**
-     * The Encryption Mode
+     * Key Length (in bytes)
      *
-     * @see Crypt_DES::Crypt_DES()
-     * @var Integer
+     * @see \phpseclib\Crypt\Base::setKeyLength()
+     * @var int
      * @access private
      */
-    var $mode;
+    var $key_length = 8;
 
     /**
-     * Continuous Buffer status
+     * The mcrypt specific name of the cipher
      *
-     * @see Crypt_DES::enableContinuousBuffer()
-     * @var Boolean
+     * @see \phpseclib\Crypt\Base::cipher_name_mcrypt
+     * @var string
      * @access private
      */
-    var $continuousBuffer = false;
+    var $cipher_name_mcrypt = 'des';
 
     /**
-     * Padding status
+     * The OpenSSL names of the cipher / modes
      *
-     * @see Crypt_DES::enablePadding()
-     * @var Boolean
+     * @see \phpseclib\Crypt\Base::openssl_mode_names
+     * @var array
      * @access private
      */
-    var $padding = true;
+    var $openssl_mode_names = array(
+        self::MODE_ECB => 'des-ecb',
+        self::MODE_CBC => 'des-cbc',
+        self::MODE_CFB => 'des-cfb',
+        self::MODE_OFB => 'des-ofb'
+        // self::MODE_CTR is undefined for DES
+    );
 
     /**
-     * The Initialization Vector
+     * Optimizing value while CFB-encrypting
      *
-     * @see Crypt_DES::setIV()
-     * @var String
+     * @see \phpseclib\Crypt\Base::cfb_init_len
+     * @var int
      * @access private
      */
-    var $iv = "\0\0\0\0\0\0\0\0";
+    var $cfb_init_len = 500;
 
     /**
-     * A "sliding" Initialization Vector
+     * Switch for DES/3DES encryption
+     *
+     * Used only if $engine == self::ENGINE_INTERNAL
      *
-     * @see Crypt_DES::enableContinuousBuffer()
-     * @var String
+     * @see self::_setupKey()
+     * @see self::_processBlock()
+     * @var int
      * @access private
      */
-    var $encryptIV = "\0\0\0\0\0\0\0\0";
+    var $des_rounds = 1;
 
     /**
-     * A "sliding" Initialization Vector
+     * max possible size of $key
      *
-     * @see Crypt_DES::enableContinuousBuffer()
-     * @var String
+     * @see self::setKey()
+     * @var string
      * @access private
      */
-    var $decryptIV = "\0\0\0\0\0\0\0\0";
+    var $key_length_max = 8;
 
     /**
-     * mcrypt resource for encryption
-     *
-     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
-     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+     * The Key Schedule
      *
-     * @see Crypt_AES::encrypt()
-     * @var String
+     * @see self::_setupKey()
+     * @var array
      * @access private
      */
-    var $enmcrypt;
+    var $keys;
 
     /**
-     * mcrypt resource for decryption
+     * Shuffle table.
      *
-     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
-     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+     * For each byte value index, the entry holds an 8-byte string
+     * with each byte containing all bits in the same state as the
+     * corresponding bit in the index value.
      *
-     * @see Crypt_AES::decrypt()
-     * @var String
+     * @see self::_processBlock()
+     * @see self::_setupKey()
+     * @var array
      * @access private
      */
-    var $demcrypt;
+    var $shuffle = array(
+        "\x00\x00\x00\x00\x00\x00\x00\x00", "\x00\x00\x00\x00\x00\x00\x00\xFF",
+        "\x00\x00\x00\x00\x00\x00\xFF\x00", "\x00\x00\x00\x00\x00\x00\xFF\xFF",
+        "\x00\x00\x00\x00\x00\xFF\x00\x00", "\x00\x00\x00\x00\x00\xFF\x00\xFF",
+        "\x00\x00\x00\x00\x00\xFF\xFF\x00", "\x00\x00\x00\x00\x00\xFF\xFF\xFF",
+        "\x00\x00\x00\x00\xFF\x00\x00\x00", "\x00\x00\x00\x00\xFF\x00\x00\xFF",
+        "\x00\x00\x00\x00\xFF\x00\xFF\x00", "\x00\x00\x00\x00\xFF\x00\xFF\xFF",
+        "\x00\x00\x00\x00\xFF\xFF\x00\x00", "\x00\x00\x00\x00\xFF\xFF\x00\xFF",
+        "\x00\x00\x00\x00\xFF\xFF\xFF\x00", "\x00\x00\x00\x00\xFF\xFF\xFF\xFF",
+        "\x00\x00\x00\xFF\x00\x00\x00\x00", "\x00\x00\x00\xFF\x00\x00\x00\xFF",
+        "\x00\x00\x00\xFF\x00\x00\xFF\x00", "\x00\x00\x00\xFF\x00\x00\xFF\xFF",
+        "\x00\x00\x00\xFF\x00\xFF\x00\x00", "\x00\x00\x00\xFF\x00\xFF\x00\xFF",
+        "\x00\x00\x00\xFF\x00\xFF\xFF\x00", "\x00\x00\x00\xFF\x00\xFF\xFF\xFF",
+        "\x00\x00\x00\xFF\xFF\x00\x00\x00", "\x00\x00\x00\xFF\xFF\x00\x00\xFF",
+        "\x00\x00\x00\xFF\xFF\x00\xFF\x00", "\x00\x00\x00\xFF\xFF\x00\xFF\xFF",
+        "\x00\x00\x00\xFF\xFF\xFF\x00\x00", "\x00\x00\x00\xFF\xFF\xFF\x00\xFF",
+        "\x00\x00\x00\xFF\xFF\xFF\xFF\x00", "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF",
+        "\x00\x00\xFF\x00\x00\x00\x00\x00", "\x00\x00\xFF\x00\x00\x00\x00\xFF",
+        "\x00\x00\xFF\x00\x00\x00\xFF\x00", "\x00\x00\xFF\x00\x00\x00\xFF\xFF",
+        "\x00\x00\xFF\x00\x00\xFF\x00\x00", "\x00\x00\xFF\x00\x00\xFF\x00\xFF",
+        "\x00\x00\xFF\x00\x00\xFF\xFF\x00", "\x00\x00\xFF\x00\x00\xFF\xFF\xFF",
+        "\x00\x00\xFF\x00\xFF\x00\x00\x00", "\x00\x00\xFF\x00\xFF\x00\x00\xFF",
+        "\x00\x00\xFF\x00\xFF\x00\xFF\x00", "\x00\x00\xFF\x00\xFF\x00\xFF\xFF",
+        "\x00\x00\xFF\x00\xFF\xFF\x00\x00", "\x00\x00\xFF\x00\xFF\xFF\x00\xFF",
+        "\x00\x00\xFF\x00\xFF\xFF\xFF\x00", "\x00\x00\xFF\x00\xFF\xFF\xFF\xFF",
+        "\x00\x00\xFF\xFF\x00\x00\x00\x00", "\x00\x00\xFF\xFF\x00\x00\x00\xFF",
+        "\x00\x00\xFF\xFF\x00\x00\xFF\x00", "\x00\x00\xFF\xFF\x00\x00\xFF\xFF",
+        "\x00\x00\xFF\xFF\x00\xFF\x00\x00", "\x00\x00\xFF\xFF\x00\xFF\x00\xFF",
+        "\x00\x00\xFF\xFF\x00\xFF\xFF\x00", "\x00\x00\xFF\xFF\x00\xFF\xFF\xFF",
+        "\x00\x00\xFF\xFF\xFF\x00\x00\x00", "\x00\x00\xFF\xFF\xFF\x00\x00\xFF",
+        "\x00\x00\xFF\xFF\xFF\x00\xFF\x00", "\x00\x00\xFF\xFF\xFF\x00\xFF\xFF",
+        "\x00\x00\xFF\xFF\xFF\xFF\x00\x00", "\x00\x00\xFF\xFF\xFF\xFF\x00\xFF",
+        "\x00\x00\xFF\xFF\xFF\xFF\xFF\x00", "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF",
+        "\x00\xFF\x00\x00\x00\x00\x00\x00", "\x00\xFF\x00\x00\x00\x00\x00\xFF",
+        "\x00\xFF\x00\x00\x00\x00\xFF\x00", "\x00\xFF\x00\x00\x00\x00\xFF\xFF",
+        "\x00\xFF\x00\x00\x00\xFF\x00\x00", "\x00\xFF\x00\x00\x00\xFF\x00\xFF",
+        "\x00\xFF\x00\x00\x00\xFF\xFF\x00", "\x00\xFF\x00\x00\x00\xFF\xFF\xFF",
+        "\x00\xFF\x00\x00\xFF\x00\x00\x00", "\x00\xFF\x00\x00\xFF\x00\x00\xFF",
+        "\x00\xFF\x00\x00\xFF\x00\xFF\x00", "\x00\xFF\x00\x00\xFF\x00\xFF\xFF",
+        "\x00\xFF\x00\x00\xFF\xFF\x00\x00", "\x00\xFF\x00\x00\xFF\xFF\x00\xFF",
+        "\x00\xFF\x00\x00\xFF\xFF\xFF\x00", "\x00\xFF\x00\x00\xFF\xFF\xFF\xFF",
+        "\x00\xFF\x00\xFF\x00\x00\x00\x00", "\x00\xFF\x00\xFF\x00\x00\x00\xFF",
+        "\x00\xFF\x00\xFF\x00\x00\xFF\x00", "\x00\xFF\x00\xFF\x00\x00\xFF\xFF",
+        "\x00\xFF\x00\xFF\x00\xFF\x00\x00", "\x00\xFF\x00\xFF\x00\xFF\x00\xFF",
+        "\x00\xFF\x00\xFF\x00\xFF\xFF\x00", "\x00\xFF\x00\xFF\x00\xFF\xFF\xFF",
+        "\x00\xFF\x00\xFF\xFF\x00\x00\x00", "\x00\xFF\x00\xFF\xFF\x00\x00\xFF",
+        "\x00\xFF\x00\xFF\xFF\x00\xFF\x00", "\x00\xFF\x00\xFF\xFF\x00\xFF\xFF",
+        "\x00\xFF\x00\xFF\xFF\xFF\x00\x00", "\x00\xFF\x00\xFF\xFF\xFF\x00\xFF",
+        "\x00\xFF\x00\xFF\xFF\xFF\xFF\x00", "\x00\xFF\x00\xFF\xFF\xFF\xFF\xFF",
+        "\x00\xFF\xFF\x00\x00\x00\x00\x00", "\x00\xFF\xFF\x00\x00\x00\x00\xFF",
+        "\x00\xFF\xFF\x00\x00\x00\xFF\x00", "\x00\xFF\xFF\x00\x00\x00\xFF\xFF",
+        "\x00\xFF\xFF\x00\x00\xFF\x00\x00", "\x00\xFF\xFF\x00\x00\xFF\x00\xFF",
+        "\x00\xFF\xFF\x00\x00\xFF\xFF\x00", "\x00\xFF\xFF\x00\x00\xFF\xFF\xFF",
+        "\x00\xFF\xFF\x00\xFF\x00\x00\x00", "\x00\xFF\xFF\x00\xFF\x00\x00\xFF",
+        "\x00\xFF\xFF\x00\xFF\x00\xFF\x00", "\x00\xFF\xFF\x00\xFF\x00\xFF\xFF",
+        "\x00\xFF\xFF\x00\xFF\xFF\x00\x00", "\x00\xFF\xFF\x00\xFF\xFF\x00\xFF",
+        "\x00\xFF\xFF\x00\xFF\xFF\xFF\x00", "\x00\xFF\xFF\x00\xFF\xFF\xFF\xFF",
+        "\x00\xFF\xFF\xFF\x00\x00\x00\x00", "\x00\xFF\xFF\xFF\x00\x00\x00\xFF",
+        "\x00\xFF\xFF\xFF\x00\x00\xFF\x00", "\x00\xFF\xFF\xFF\x00\x00\xFF\xFF",
+        "\x00\xFF\xFF\xFF\x00\xFF\x00\x00", "\x00\xFF\xFF\xFF\x00\xFF\x00\xFF",
+        "\x00\xFF\xFF\xFF\x00\xFF\xFF\x00", "\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF",
+        "\x00\xFF\xFF\xFF\xFF\x00\x00\x00", "\x00\xFF\xFF\xFF\xFF\x00\x00\xFF",
+        "\x00\xFF\xFF\xFF\xFF\x00\xFF\x00", "\x00\xFF\xFF\xFF\xFF\x00\xFF\xFF",
+        "\x00\xFF\xFF\xFF\xFF\xFF\x00\x00", "\x00\xFF\xFF\xFF\xFF\xFF\x00\xFF",
+        "\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00", "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF",
+        "\xFF\x00\x00\x00\x00\x00\x00\x00", "\xFF\x00\x00\x00\x00\x00\x00\xFF",
+        "\xFF\x00\x00\x00\x00\x00\xFF\x00", "\xFF\x00\x00\x00\x00\x00\xFF\xFF",
+        "\xFF\x00\x00\x00\x00\xFF\x00\x00", "\xFF\x00\x00\x00\x00\xFF\x00\xFF",
+        "\xFF\x00\x00\x00\x00\xFF\xFF\x00", "\xFF\x00\x00\x00\x00\xFF\xFF\xFF",
+        "\xFF\x00\x00\x00\xFF\x00\x00\x00", "\xFF\x00\x00\x00\xFF\x00\x00\xFF",
+        "\xFF\x00\x00\x00\xFF\x00\xFF\x00", "\xFF\x00\x00\x00\xFF\x00\xFF\xFF",
+        "\xFF\x00\x00\x00\xFF\xFF\x00\x00", "\xFF\x00\x00\x00\xFF\xFF\x00\xFF",
+        "\xFF\x00\x00\x00\xFF\xFF\xFF\x00", "\xFF\x00\x00\x00\xFF\xFF\xFF\xFF",
+        "\xFF\x00\x00\xFF\x00\x00\x00\x00", "\xFF\x00\x00\xFF\x00\x00\x00\xFF",
+        "\xFF\x00\x00\xFF\x00\x00\xFF\x00", "\xFF\x00\x00\xFF\x00\x00\xFF\xFF",
+        "\xFF\x00\x00\xFF\x00\xFF\x00\x00", "\xFF\x00\x00\xFF\x00\xFF\x00\xFF",
+        "\xFF\x00\x00\xFF\x00\xFF\xFF\x00", "\xFF\x00\x00\xFF\x00\xFF\xFF\xFF",
+        "\xFF\x00\x00\xFF\xFF\x00\x00\x00", "\xFF\x00\x00\xFF\xFF\x00\x00\xFF",
+        "\xFF\x00\x00\xFF\xFF\x00\xFF\x00", "\xFF\x00\x00\xFF\xFF\x00\xFF\xFF",
+        "\xFF\x00\x00\xFF\xFF\xFF\x00\x00", "\xFF\x00\x00\xFF\xFF\xFF\x00\xFF",
+        "\xFF\x00\x00\xFF\xFF\xFF\xFF\x00", "\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF",
+        "\xFF\x00\xFF\x00\x00\x00\x00\x00", "\xFF\x00\xFF\x00\x00\x00\x00\xFF",
+        "\xFF\x00\xFF\x00\x00\x00\xFF\x00", "\xFF\x00\xFF\x00\x00\x00\xFF\xFF",
+        "\xFF\x00\xFF\x00\x00\xFF\x00\x00", "\xFF\x00\xFF\x00\x00\xFF\x00\xFF",
+        "\xFF\x00\xFF\x00\x00\xFF\xFF\x00", "\xFF\x00\xFF\x00\x00\xFF\xFF\xFF",
+        "\xFF\x00\xFF\x00\xFF\x00\x00\x00", "\xFF\x00\xFF\x00\xFF\x00\x00\xFF",
+        "\xFF\x00\xFF\x00\xFF\x00\xFF\x00", "\xFF\x00\xFF\x00\xFF\x00\xFF\xFF",
+        "\xFF\x00\xFF\x00\xFF\xFF\x00\x00", "\xFF\x00\xFF\x00\xFF\xFF\x00\xFF",
+        "\xFF\x00\xFF\x00\xFF\xFF\xFF\x00", "\xFF\x00\xFF\x00\xFF\xFF\xFF\xFF",
+        "\xFF\x00\xFF\xFF\x00\x00\x00\x00", "\xFF\x00\xFF\xFF\x00\x00\x00\xFF",
+        "\xFF\x00\xFF\xFF\x00\x00\xFF\x00", "\xFF\x00\xFF\xFF\x00\x00\xFF\xFF",
+        "\xFF\x00\xFF\xFF\x00\xFF\x00\x00", "\xFF\x00\xFF\xFF\x00\xFF\x00\xFF",
+        "\xFF\x00\xFF\xFF\x00\xFF\xFF\x00", "\xFF\x00\xFF\xFF\x00\xFF\xFF\xFF",
+        "\xFF\x00\xFF\xFF\xFF\x00\x00\x00", "\xFF\x00\xFF\xFF\xFF\x00\x00\xFF",
+        "\xFF\x00\xFF\xFF\xFF\x00\xFF\x00", "\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF",
+        "\xFF\x00\xFF\xFF\xFF\xFF\x00\x00", "\xFF\x00\xFF\xFF\xFF\xFF\x00\xFF",
+        "\xFF\x00\xFF\xFF\xFF\xFF\xFF\x00", "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF",
+        "\xFF\xFF\x00\x00\x00\x00\x00\x00", "\xFF\xFF\x00\x00\x00\x00\x00\xFF",
+        "\xFF\xFF\x00\x00\x00\x00\xFF\x00", "\xFF\xFF\x00\x00\x00\x00\xFF\xFF",
+        "\xFF\xFF\x00\x00\x00\xFF\x00\x00", "\xFF\xFF\x00\x00\x00\xFF\x00\xFF",
+        "\xFF\xFF\x00\x00\x00\xFF\xFF\x00", "\xFF\xFF\x00\x00\x00\xFF\xFF\xFF",
+        "\xFF\xFF\x00\x00\xFF\x00\x00\x00", "\xFF\xFF\x00\x00\xFF\x00\x00\xFF",
+        "\xFF\xFF\x00\x00\xFF\x00\xFF\x00", "\xFF\xFF\x00\x00\xFF\x00\xFF\xFF",
+        "\xFF\xFF\x00\x00\xFF\xFF\x00\x00", "\xFF\xFF\x00\x00\xFF\xFF\x00\xFF",
+        "\xFF\xFF\x00\x00\xFF\xFF\xFF\x00", "\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF",
+        "\xFF\xFF\x00\xFF\x00\x00\x00\x00", "\xFF\xFF\x00\xFF\x00\x00\x00\xFF",
+        "\xFF\xFF\x00\xFF\x00\x00\xFF\x00", "\xFF\xFF\x00\xFF\x00\x00\xFF\xFF",
+        "\xFF\xFF\x00\xFF\x00\xFF\x00\x00", "\xFF\xFF\x00\xFF\x00\xFF\x00\xFF",
+        "\xFF\xFF\x00\xFF\x00\xFF\xFF\x00", "\xFF\xFF\x00\xFF\x00\xFF\xFF\xFF",
+        "\xFF\xFF\x00\xFF\xFF\x00\x00\x00", "\xFF\xFF\x00\xFF\xFF\x00\x00\xFF",
+        "\xFF\xFF\x00\xFF\xFF\x00\xFF\x00", "\xFF\xFF\x00\xFF\xFF\x00\xFF\xFF",
+        "\xFF\xFF\x00\xFF\xFF\xFF\x00\x00", "\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF",
+        "\xFF\xFF\x00\xFF\xFF\xFF\xFF\x00", "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF",
+        "\xFF\xFF\xFF\x00\x00\x00\x00\x00", "\xFF\xFF\xFF\x00\x00\x00\x00\xFF",
+        "\xFF\xFF\xFF\x00\x00\x00\xFF\x00", "\xFF\xFF\xFF\x00\x00\x00\xFF\xFF",
+        "\xFF\xFF\xFF\x00\x00\xFF\x00\x00", "\xFF\xFF\xFF\x00\x00\xFF\x00\xFF",
+        "\xFF\xFF\xFF\x00\x00\xFF\xFF\x00", "\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF",
+        "\xFF\xFF\xFF\x00\xFF\x00\x00\x00", "\xFF\xFF\xFF\x00\xFF\x00\x00\xFF",
+        "\xFF\xFF\xFF\x00\xFF\x00\xFF\x00", "\xFF\xFF\xFF\x00\xFF\x00\xFF\xFF",
+        "\xFF\xFF\xFF\x00\xFF\xFF\x00\x00", "\xFF\xFF\xFF\x00\xFF\xFF\x00\xFF",
+        "\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00", "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF",
+        "\xFF\xFF\xFF\xFF\x00\x00\x00\x00", "\xFF\xFF\xFF\xFF\x00\x00\x00\xFF",
+        "\xFF\xFF\xFF\xFF\x00\x00\xFF\x00", "\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF",
+        "\xFF\xFF\xFF\xFF\x00\xFF\x00\x00", "\xFF\xFF\xFF\xFF\x00\xFF\x00\xFF",
+        "\xFF\xFF\xFF\xFF\x00\xFF\xFF\x00", "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF",
+        "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00", "\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF",
+        "\xFF\xFF\xFF\xFF\xFF\x00\xFF\x00", "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF",
+        "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00", "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF",
+        "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00", "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
+    );
 
     /**
-     * Does the (en|de)mcrypt resource need to be (re)initialized?
+     * IP mapping helper table.
      *
-     * @see setKey()
-     * @see setIV()
-     * @var Boolean
+     * Indexing this table with each source byte performs the initial bit permutation.
+     *
+     * @var array
      * @access private
      */
-    var $changed = true;
+    var $ipmap = array(
+        0x00, 0x10, 0x01, 0x11, 0x20, 0x30, 0x21, 0x31,
+        0x02, 0x12, 0x03, 0x13, 0x22, 0x32, 0x23, 0x33,
+        0x40, 0x50, 0x41, 0x51, 0x60, 0x70, 0x61, 0x71,
+        0x42, 0x52, 0x43, 0x53, 0x62, 0x72, 0x63, 0x73,
+        0x04, 0x14, 0x05, 0x15, 0x24, 0x34, 0x25, 0x35,
+        0x06, 0x16, 0x07, 0x17, 0x26, 0x36, 0x27, 0x37,
+        0x44, 0x54, 0x45, 0x55, 0x64, 0x74, 0x65, 0x75,
+        0x46, 0x56, 0x47, 0x57, 0x66, 0x76, 0x67, 0x77,
+        0x80, 0x90, 0x81, 0x91, 0xA0, 0xB0, 0xA1, 0xB1,
+        0x82, 0x92, 0x83, 0x93, 0xA2, 0xB2, 0xA3, 0xB3,
+        0xC0, 0xD0, 0xC1, 0xD1, 0xE0, 0xF0, 0xE1, 0xF1,
+        0xC2, 0xD2, 0xC3, 0xD3, 0xE2, 0xF2, 0xE3, 0xF3,
+        0x84, 0x94, 0x85, 0x95, 0xA4, 0xB4, 0xA5, 0xB5,
+        0x86, 0x96, 0x87, 0x97, 0xA6, 0xB6, 0xA7, 0xB7,
+        0xC4, 0xD4, 0xC5, 0xD5, 0xE4, 0xF4, 0xE5, 0xF5,
+        0xC6, 0xD6, 0xC7, 0xD7, 0xE6, 0xF6, 0xE7, 0xF7,
+        0x08, 0x18, 0x09, 0x19, 0x28, 0x38, 0x29, 0x39,
+        0x0A, 0x1A, 0x0B, 0x1B, 0x2A, 0x3A, 0x2B, 0x3B,
+        0x48, 0x58, 0x49, 0x59, 0x68, 0x78, 0x69, 0x79,
+        0x4A, 0x5A, 0x4B, 0x5B, 0x6A, 0x7A, 0x6B, 0x7B,
+        0x0C, 0x1C, 0x0D, 0x1D, 0x2C, 0x3C, 0x2D, 0x3D,
+        0x0E, 0x1E, 0x0F, 0x1F, 0x2E, 0x3E, 0x2F, 0x3F,
+        0x4C, 0x5C, 0x4D, 0x5D, 0x6C, 0x7C, 0x6D, 0x7D,
+        0x4E, 0x5E, 0x4F, 0x5F, 0x6E, 0x7E, 0x6F, 0x7F,
+        0x88, 0x98, 0x89, 0x99, 0xA8, 0xB8, 0xA9, 0xB9,
+        0x8A, 0x9A, 0x8B, 0x9B, 0xAA, 0xBA, 0xAB, 0xBB,
+        0xC8, 0xD8, 0xC9, 0xD9, 0xE8, 0xF8, 0xE9, 0xF9,
+        0xCA, 0xDA, 0xCB, 0xDB, 0xEA, 0xFA, 0xEB, 0xFB,
+        0x8C, 0x9C, 0x8D, 0x9D, 0xAC, 0xBC, 0xAD, 0xBD,
+        0x8E, 0x9E, 0x8F, 0x9F, 0xAE, 0xBE, 0xAF, 0xBF,
+        0xCC, 0xDC, 0xCD, 0xDD, 0xEC, 0xFC, 0xED, 0xFD,
+        0xCE, 0xDE, 0xCF, 0xDF, 0xEE, 0xFE, 0xEF, 0xFF
+    );
 
     /**
-     * Default Constructor.
-     *
-     * Determines whether or not the mcrypt extension should be used.  $mode should only, at present, be
-     * CRYPT_DES_MODE_ECB or CRYPT_DES_MODE_CBC.  If not explictly set, CRYPT_DES_MODE_CBC will be used.
+     * Inverse IP mapping helper table.
+     * Indexing this table with a byte value reverses the bit order.
      *
-     * @param optional Integer $mode
-     * @return Crypt_DES
-     * @access public
+     * @var array
+     * @access private
      */
-    function Crypt_DES($mode = CRYPT_MODE_DES_CBC)
-    {
-        if ( !defined('CRYPT_DES_MODE') ) {
-            switch (true) {
-                case extension_loaded('mcrypt'):
-                    // i'd check to see if des was supported, by doing in_array('des', mcrypt_list_algorithms('')),
-                    // but since that can be changed after the object has been created, there doesn't seem to be
-                    // a lot of point...
-                    define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT);
-                    break;
-                default:
-                    define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL);
-            }
-        }
-
-        switch ( CRYPT_DES_MODE ) {
-            case CRYPT_DES_MODE_MCRYPT:
-                switch ($mode) {
-                    case CRYPT_DES_MODE_ECB:
-                        $this->mode = MCRYPT_MODE_ECB;
-                        break;
-                    case CRYPT_DES_MODE_CTR:
-                        $this->mode = 'ctr';
-                        //$this->mode = in_array('ctr', mcrypt_list_modes()) ? 'ctr' : CRYPT_DES_MODE_CTR;
-                        break;
-                    case CRYPT_DES_MODE_CBC:
-                    default:
-                        $this->mode = MCRYPT_MODE_CBC;
-                }
-
-                break;
-            default:
-                switch ($mode) {
-                    case CRYPT_DES_MODE_ECB:
-                    case CRYPT_DES_MODE_CTR:
-                    case CRYPT_DES_MODE_CBC:
-                        $this->mode = $mode;
-                        break;
-                    default:
-                        $this->mode = CRYPT_DES_MODE_CBC;
-                }
-        }
-    }
+    var $invipmap = array(
+        0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
+        0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
+        0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
+        0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
+        0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
+        0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
+        0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
+        0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
+        0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
+        0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
+        0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
+        0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
+        0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
+        0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
+        0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
+        0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
+        0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
+        0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
+        0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
+        0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
+        0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
+        0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
+        0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
+        0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
+        0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
+        0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
+        0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
+        0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
+        0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
+        0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
+        0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
+        0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
+    );
 
     /**
-     * Sets the key.
-     *
-     * Keys can be of any length.  DES, itself, uses 64-bit keys (eg. strlen($key) == 8), however, we
-     * only use the first eight, if $key has more then eight characters in it, and pad $key with the
-     * null byte if it is less then eight characters long.
-     *
-     * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
+     * Pre-permuted S-box1
      *
-     * If the key is not explicitly set, it'll be assumed to be all zero's.
+     * Each box ($sbox1-$sbox8) has been vectorized, then each value pre-permuted using the
+     * P table: concatenation can then be replaced by exclusive ORs.
      *
-     * @access public
-     * @param String $key
+     * @var array
+     * @access private
      */
-    function setKey($key)
-    {
-        $this->keys = ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) ? substr($key, 0, 8) : $this->_prepareKey($key);
-        $this->changed = true;
-    }
+    var $sbox1 = array(
+        0x00808200, 0x00000000, 0x00008000, 0x00808202,
+        0x00808002, 0x00008202, 0x00000002, 0x00008000,
+        0x00000200, 0x00808200, 0x00808202, 0x00000200,
+        0x00800202, 0x00808002, 0x00800000, 0x00000002,
+        0x00000202, 0x00800200, 0x00800200, 0x00008200,
+        0x00008200, 0x00808000, 0x00808000, 0x00800202,
+        0x00008002, 0x00800002, 0x00800002, 0x00008002,
+        0x00000000, 0x00000202, 0x00008202, 0x00800000,
+        0x00008000, 0x00808202, 0x00000002, 0x00808000,
+        0x00808200, 0x00800000, 0x00800000, 0x00000200,
+        0x00808002, 0x00008000, 0x00008200, 0x00800002,
+        0x00000200, 0x00000002, 0x00800202, 0x00008202,
+        0x00808202, 0x00008002, 0x00808000, 0x00800202,
+        0x00800002, 0x00000202, 0x00008202, 0x00808200,
+        0x00000202, 0x00800200, 0x00800200, 0x00000000,
+        0x00008002, 0x00008200, 0x00000000, 0x00808002
+    );
 
     /**
-     * Sets the initialization vector. (optional)
-     *
-     * SetIV is not required when CRYPT_DES_MODE_ECB is being used.  If not explictly set, it'll be assumed
-     * to be all zero's.
+     * Pre-permuted S-box2
      *
-     * @access public
-     * @param String $iv
+     * @var array
+     * @access private
      */
-    function setIV($iv)
-    {
-        $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0));
-        $this->changed = true;
-    }
+    var $sbox2 = array(
+        0x40084010, 0x40004000, 0x00004000, 0x00084010,
+        0x00080000, 0x00000010, 0x40080010, 0x40004010,
+        0x40000010, 0x40084010, 0x40084000, 0x40000000,
+        0x40004000, 0x00080000, 0x00000010, 0x40080010,
+        0x00084000, 0x00080010, 0x40004010, 0x00000000,
+        0x40000000, 0x00004000, 0x00084010, 0x40080000,
+        0x00080010, 0x40000010, 0x00000000, 0x00084000,
+        0x00004010, 0x40084000, 0x40080000, 0x00004010,
+        0x00000000, 0x00084010, 0x40080010, 0x00080000,
+        0x40004010, 0x40080000, 0x40084000, 0x00004000,
+        0x40080000, 0x40004000, 0x00000010, 0x40084010,
+        0x00084010, 0x00000010, 0x00004000, 0x40000000,
+        0x00004010, 0x40084000, 0x00080000, 0x40000010,
+        0x00080010, 0x40004010, 0x40000010, 0x00080010,
+        0x00084000, 0x00000000, 0x40004000, 0x00004010,
+        0x40000000, 0x40080010, 0x40084010, 0x00084000
+    );
 
     /**
-     * Generate CTR XOR encryption key
+     * Pre-permuted S-box3
      *
-     * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the
-     * plaintext / ciphertext in CTR mode.
-     *
-     * @see Crypt_DES::decrypt()
-     * @see Crypt_DES::encrypt()
-     * @access public
-     * @param Integer $length
-     * @param String $iv
+     * @var array
+     * @access private
      */
-    function _generate_xor($length, &$iv)
-    {
-        $xor = '';
-        $num_blocks = ($length + 7) >> 3;
-        for ($i = 0; $i < $num_blocks; $i++) {
-            $xor.= $iv;
-            for ($j = 4; $j <= 8; $j+=4) {
-                $temp = substr($iv, -$j, 4);
-                switch ($temp) {
-                    case "\xFF\xFF\xFF\xFF":
-                        $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4);
-                        break;
-                    case "\x7F\xFF\xFF\xFF":
-                        $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4);
-                        break 2;
-                    default:
-                        extract(unpack('Ncount', $temp));
-                        $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4);
-                        break 2;
-                }
-            }
-        }
-
-        return $xor;
-    }
+    var $sbox3 = array(
+        0x00000104, 0x04010100, 0x00000000, 0x04010004,
+        0x04000100, 0x00000000, 0x00010104, 0x04000100,
+        0x00010004, 0x04000004, 0x04000004, 0x00010000,
+        0x04010104, 0x00010004, 0x04010000, 0x00000104,
+        0x04000000, 0x00000004, 0x04010100, 0x00000100,
+        0x00010100, 0x04010000, 0x04010004, 0x00010104,
+        0x04000104, 0x00010100, 0x00010000, 0x04000104,
+        0x00000004, 0x04010104, 0x00000100, 0x04000000,
+        0x04010100, 0x04000000, 0x00010004, 0x00000104,
+        0x00010000, 0x04010100, 0x04000100, 0x00000000,
+        0x00000100, 0x00010004, 0x04010104, 0x04000100,
+        0x04000004, 0x00000100, 0x00000000, 0x04010004,
+        0x04000104, 0x00010000, 0x04000000, 0x04010104,
+        0x00000004, 0x00010104, 0x00010100, 0x04000004,
+        0x04010000, 0x04000104, 0x00000104, 0x04010000,
+        0x00010104, 0x00000004, 0x04010004, 0x00010100
+    );
 
     /**
-     * Encrypts a message.
-     *
-     * $plaintext will be padded with up to 8 additional bytes.  Other DES implementations may or may not pad in the
-     * same manner.  Other common approaches to padding and the reasons why it's necessary are discussed in the following
-     * URL:
+     * Pre-permuted S-box4
      *
-     * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
-     *
-     * An alternative to padding is to, separately, send the length of the file.  This is what SSH, in fact, does.
-     * strlen($plaintext) will still need to be a multiple of 8, however, arbitrary values can be added to make it that
-     * length.
-     *
-     * @see Crypt_DES::decrypt()
-     * @access public
-     * @param String $plaintext
+     * @var array
+     * @access private
      */
-    function encrypt($plaintext)
-    {
-        if ($this->mode != CRYPT_DES_MODE_CTR && $this->mode != 'ctr') {
-            $plaintext = $this->_pad($plaintext);
-        }
-
-        if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
-            if ($this->changed) {
-                if (!isset($this->enmcrypt)) {
-                    $this->enmcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, '');
-                }
-                mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV);
-                $this->changed = false;
-            }
-
-            $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
-
-            if (!$this->continuousBuffer) {
-                mcrypt_generic_init($this->enmcrypt, $this->keys, $this->encryptIV);
-            }
-
-            return $ciphertext;
-        }
-
-        if (!is_array($this->keys)) {
-            $this->keys = $this->_prepareKey("\0\0\0\0\0\0\0\0");
-        }
-
-        $ciphertext = '';
-        switch ($this->mode) {
-            case CRYPT_DES_MODE_ECB:
-                for ($i = 0; $i < strlen($plaintext); $i+=8) {
-                    $ciphertext.= $this->_processBlock(substr($plaintext, $i, 8), CRYPT_DES_ENCRYPT);
-                }
-                break;
-            case CRYPT_DES_MODE_CBC:
-                $xor = $this->encryptIV;
-                for ($i = 0; $i < strlen($plaintext); $i+=8) {
-                    $block = substr($plaintext, $i, 8);
-                    $block = $this->_processBlock($block ^ $xor, CRYPT_DES_ENCRYPT);
-                    $xor = $block;
-                    $ciphertext.= $block;
-                }
-                if ($this->continuousBuffer) {
-                    $this->encryptIV = $xor;
-                }
-                break;
-            case CRYPT_DES_MODE_CTR:
-                $xor = $this->encryptIV;
-                for ($i = 0; $i < strlen($plaintext); $i+=8) {
-                    $block = substr($plaintext, $i, 8);
-                    $key = $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT);
-                    $ciphertext.= $block ^ $key;
-                }
-                if ($this->continuousBuffer) {
-                    $this->encryptIV = $xor;
-                }
-        }
-
-        return $ciphertext;
-    }
+    var $sbox4 = array(
+        0x80401000, 0x80001040, 0x80001040, 0x00000040,
+        0x00401040, 0x80400040, 0x80400000, 0x80001000,
+        0x00000000, 0x00401000, 0x00401000, 0x80401040,
+        0x80000040, 0x00000000, 0x00400040, 0x80400000,
+        0x80000000, 0x00001000, 0x00400000, 0x80401000,
+        0x00000040, 0x00400000, 0x80001000, 0x00001040,
+        0x80400040, 0x80000000, 0x00001040, 0x00400040,
+        0x00001000, 0x00401040, 0x80401040, 0x80000040,
+        0x00400040, 0x80400000, 0x00401000, 0x80401040,
+        0x80000040, 0x00000000, 0x00000000, 0x00401000,
+        0x00001040, 0x00400040, 0x80400040, 0x80000000,
+        0x80401000, 0x80001040, 0x80001040, 0x00000040,
+        0x80401040, 0x80000040, 0x80000000, 0x00001000,
+        0x80400000, 0x80001000, 0x00401040, 0x80400040,
+        0x80001000, 0x00001040, 0x00400000, 0x80401000,
+        0x00000040, 0x00400000, 0x00001000, 0x00401040
+    );
 
     /**
-     * Decrypts a message.
+     * Pre-permuted S-box5
      *
-     * If strlen($ciphertext) is not a multiple of 8, null bytes will be added to the end of the string until it is.
-     *
-     * @see Crypt_DES::encrypt()
-     * @access public
-     * @param String $ciphertext
+     * @var array
+     * @access private
      */
-    function decrypt($ciphertext)
-    {
-        if ($this->mode != CRYPT_DES_MODE_CTR && $this->mode != 'ctr') {
-            // we pad with chr(0) since that's what mcrypt_generic does.  to quote from http://php.net/function.mcrypt-generic :
-            // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
-            $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, chr(0));
-        }
-
-        if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
-            if ($this->changed) {
-                if (!isset($this->demcrypt)) {
-                    $this->demcrypt = mcrypt_module_open(MCRYPT_DES, '', $this->mode, '');
-                }
-                mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV);
-                $this->changed = false;
-            }
-
-            $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
-
-            if (!$this->continuousBuffer) {
-                mcrypt_generic_init($this->demcrypt, $this->keys, $this->decryptIV);
-            }
-
-            return $this->mode != 'ctr' ? $this->_unpad($plaintext) : $plaintext;
-        }
-
-        if (!is_array($this->keys)) {
-            $this->keys = $this->_prepareKey("\0\0\0\0\0\0\0\0");
-        }
+    var $sbox5 = array(
+        0x00000080, 0x01040080, 0x01040000, 0x21000080,
+        0x00040000, 0x00000080, 0x20000000, 0x01040000,
+        0x20040080, 0x00040000, 0x01000080, 0x20040080,
+        0x21000080, 0x21040000, 0x00040080, 0x20000000,
+        0x01000000, 0x20040000, 0x20040000, 0x00000000,
+        0x20000080, 0x21040080, 0x21040080, 0x01000080,
+        0x21040000, 0x20000080, 0x00000000, 0x21000000,
+        0x01040080, 0x01000000, 0x21000000, 0x00040080,
+        0x00040000, 0x21000080, 0x00000080, 0x01000000,
+        0x20000000, 0x01040000, 0x21000080, 0x20040080,
+        0x01000080, 0x20000000, 0x21040000, 0x01040080,
+        0x20040080, 0x00000080, 0x01000000, 0x21040000,
+        0x21040080, 0x00040080, 0x21000000, 0x21040080,
+        0x01040000, 0x00000000, 0x20040000, 0x21000000,
+        0x00040080, 0x01000080, 0x20000080, 0x00040000,
+        0x00000000, 0x20040000, 0x01040080, 0x20000080
+    );
 
-        $plaintext = '';
-        switch ($this->mode) {
-            case CRYPT_DES_MODE_ECB:
-                for ($i = 0; $i < strlen($ciphertext); $i+=8) {
-                    $plaintext.= $this->_processBlock(substr($ciphertext, $i, 8), CRYPT_DES_DECRYPT);
-                }
-                break;
-            case CRYPT_DES_MODE_CBC:
-                $xor = $this->decryptIV;
-                for ($i = 0; $i < strlen($ciphertext); $i+=8) {
-                    $block = substr($ciphertext, $i, 8);
-                    $plaintext.= $this->_processBlock($block, CRYPT_DES_DECRYPT) ^ $xor;
-                    $xor = $block;
-                }
-                if ($this->continuousBuffer) {
-                    $this->decryptIV = $xor;
-                }
-                break;
-            case CRYPT_DES_MODE_CTR:
-                $xor = $this->decryptIV;
-                for ($i = 0; $i < strlen($ciphertext); $i+=8) {
-                    $block = substr($ciphertext, $i, 8);
-                    $key = $this->_processBlock($this->_generate_xor(8, $xor), CRYPT_DES_ENCRYPT);
-                    $plaintext.= $block ^ $key;
-                }
-                if ($this->continuousBuffer) {
-                    $this->decryptIV = $xor;
-                }
-        }
+    /**
+     * Pre-permuted S-box6
+     *
+     * @var array
+     * @access private
+     */
+    var $sbox6 = array(
+        0x10000008, 0x10200000, 0x00002000, 0x10202008,
+        0x10200000, 0x00000008, 0x10202008, 0x00200000,
+        0x10002000, 0x00202008, 0x00200000, 0x10000008,
+        0x00200008, 0x10002000, 0x10000000, 0x00002008,
+        0x00000000, 0x00200008, 0x10002008, 0x00002000,
+        0x00202000, 0x10002008, 0x00000008, 0x10200008,
+        0x10200008, 0x00000000, 0x00202008, 0x10202000,
+        0x00002008, 0x00202000, 0x10202000, 0x10000000,
+        0x10002000, 0x00000008, 0x10200008, 0x00202000,
+        0x10202008, 0x00200000, 0x00002008, 0x10000008,
+        0x00200000, 0x10002000, 0x10000000, 0x00002008,
+        0x10000008, 0x10202008, 0x00202000, 0x10200000,
+        0x00202008, 0x10202000, 0x00000000, 0x10200008,
+        0x00000008, 0x00002000, 0x10200000, 0x00202008,
+        0x00002000, 0x00200008, 0x10002008, 0x00000000,
+        0x10202000, 0x10000000, 0x00200008, 0x10002008
+    );
 
-        return $this->mode != CRYPT_DES_MODE_CTR ? $this->_unpad($plaintext) : $plaintext;
-    }
+    /**
+     * Pre-permuted S-box7
+     *
+     * @var array
+     * @access private
+     */
+    var $sbox7 = array(
+        0x00100000, 0x02100001, 0x02000401, 0x00000000,
+        0x00000400, 0x02000401, 0x00100401, 0x02100400,
+        0x02100401, 0x00100000, 0x00000000, 0x02000001,
+        0x00000001, 0x02000000, 0x02100001, 0x00000401,
+        0x02000400, 0x00100401, 0x00100001, 0x02000400,
+        0x02000001, 0x02100000, 0x02100400, 0x00100001,
+        0x02100000, 0x00000400, 0x00000401, 0x02100401,
+        0x00100400, 0x00000001, 0x02000000, 0x00100400,
+        0x02000000, 0x00100400, 0x00100000, 0x02000401,
+        0x02000401, 0x02100001, 0x02100001, 0x00000001,
+        0x00100001, 0x02000000, 0x02000400, 0x00100000,
+        0x02100400, 0x00000401, 0x00100401, 0x02100400,
+        0x00000401, 0x02000001, 0x02100401, 0x02100000,
+        0x00100400, 0x00000000, 0x00000001, 0x02100401,
+        0x00000000, 0x00100401, 0x02100000, 0x00000400,
+        0x02000001, 0x02000400, 0x00000400, 0x00100001
+    );
 
     /**
-     * Treat consecutive "packets" as if they are a continuous buffer.
-     *
-     * Say you have a 16-byte plaintext $plaintext.  Using the default behavior, the two following code snippets
-     * will yield different outputs:
-     *
-     * <code>
-     *    echo $des->encrypt(substr($plaintext, 0, 8));
-     *    echo $des->encrypt(substr($plaintext, 8, 8));
-     * </code>
-     * <code>
-     *    echo $des->encrypt($plaintext);
-     * </code>
-     *
-     * The solution is to enable the continuous buffer.  Although this will resolve the above discrepancy, it creates
-     * another, as demonstrated with the following:
-     *
-     * <code>
-     *    $des->encrypt(substr($plaintext, 0, 8));
-     *    echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
-     * </code>
-     * <code>
-     *    echo $des->decrypt($des->encrypt(substr($plaintext, 8, 8)));
-     * </code>
-     *
-     * With the continuous buffer disabled, these would yield the same output.  With it enabled, they yield different
-     * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /
-     * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.
-     *
-     * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each
-     * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that
-     * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),
-     * however, they are also less intuitive and more likely to cause you problems.
-     *
-     * @see Crypt_DES::disableContinuousBuffer()
-     * @access public
+     * Pre-permuted S-box8
+     *
+     * @var array
+     * @access private
      */
-    function enableContinuousBuffer()
-    {
-        $this->continuousBuffer = true;
-    }
+    var $sbox8 = array(
+        0x08000820, 0x00000800, 0x00020000, 0x08020820,
+        0x08000000, 0x08000820, 0x00000020, 0x08000000,
+        0x00020020, 0x08020000, 0x08020820, 0x00020800,
+        0x08020800, 0x00020820, 0x00000800, 0x00000020,
+        0x08020000, 0x08000020, 0x08000800, 0x00000820,
+        0x00020800, 0x00020020, 0x08020020, 0x08020800,
+        0x00000820, 0x00000000, 0x00000000, 0x08020020,
+        0x08000020, 0x08000800, 0x00020820, 0x00020000,
+        0x00020820, 0x00020000, 0x08020800, 0x00000800,
+        0x00000020, 0x08020020, 0x00000800, 0x00020820,
+        0x08000800, 0x00000020, 0x08000020, 0x08020000,
+        0x08020020, 0x08000000, 0x00020000, 0x08000820,
+        0x00000000, 0x08020820, 0x00020020, 0x08000020,
+        0x08020000, 0x08000800, 0x08000820, 0x00000000,
+        0x08020820, 0x00020800, 0x00020800, 0x00000820,
+        0x00000820, 0x00020020, 0x08000000, 0x08020800
+    );
 
     /**
-     * Treat consecutive packets as if they are a discontinuous buffer.
+     * Test for engine validity
      *
-     * The default behavior.
+     * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine()
      *
-     * @see Crypt_DES::enableContinuousBuffer()
+     * @see \phpseclib\Crypt\Base::isValidEngine()
+     * @param int $engine
      * @access public
+     * @return bool
      */
-    function disableContinuousBuffer()
+    function isValidEngine($engine)
     {
-        $this->continuousBuffer = false;
-        $this->encryptIV = $this->iv;
-        $this->decryptIV = $this->iv;
+        if ($this->key_length_max == 8) {
+            if ($engine == self::ENGINE_OPENSSL) {
+                $this->cipher_name_openssl_ecb = 'des-ecb';
+                $this->cipher_name_openssl = 'des-' . $this->_openssl_translate_mode();
+            }
+        }
+
+        return parent::isValidEngine($engine);
     }
 
     /**
-     * Pad "packets".
+     * Sets the key.
      *
-     * DES works by encrypting eight bytes at a time.  If you ever need to encrypt or decrypt something that's not
-     * a multiple of eight, it becomes necessary to pad the input so that it's length is a multiple of eight.
+     * Keys can be of any length.  DES, itself, uses 64-bit keys (eg. strlen($key) == 8), however, we
+     * only use the first eight, if $key has more then eight characters in it, and pad $key with the
+     * null byte if it is less then eight characters long.
      *
-     * Padding is enabled by default.  Sometimes, however, it is undesirable to pad strings.  Such is the case in SSH1,
-     * where "packets" are padded with random bytes before being encrypted.  Unpad these packets and you risk stripping
-     * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
-     * transmitted separately)
+     * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
      *
-     * @see Crypt_DES::disablePadding()
+     * If the key is not explicitly set, it'll be assumed to be all zero's.
+     *
+     * @see \phpseclib\Crypt\Base::setKey()
      * @access public
+     * @param string $key
      */
-    function enablePadding()
+    function setKey($key)
     {
-        $this->padding = true;
+        // We check/cut here only up to max length of the key.
+        // Key padding to the proper length will be done in _setupKey()
+        if (strlen($key) > $this->key_length_max) {
+            $key = substr($key, 0, $this->key_length_max);
+        }
+
+        // Sets the key
+        parent::setKey($key);
     }
 
     /**
-     * Do not pad packets.
+     * Encrypts a block
      *
-     * @see Crypt_DES::enablePadding()
-     * @access public
+     * @see \phpseclib\Crypt\Base::_encryptBlock()
+     * @see \phpseclib\Crypt\Base::encrypt()
+     * @see self::encrypt()
+     * @access private
+     * @param string $in
+     * @return string
      */
-    function disablePadding()
+    function _encryptBlock($in)
     {
-        $this->padding = false;
+        return $this->_processBlock($in, self::ENCRYPT);
     }
 
     /**
-     * Pads a string
+     * Decrypts a block
      *
-     * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize (8).
-     * 8 - (strlen($text) & 7) bytes are added, each of which is equal to chr(8 - (strlen($text) & 7)
-     *
-     * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
-     * and padding will, hence forth, be enabled.
-     *
-     * @see Crypt_DES::_unpad()
+     * @see \phpseclib\Crypt\Base::_decryptBlock()
+     * @see \phpseclib\Crypt\Base::decrypt()
+     * @see self::decrypt()
      * @access private
+     * @param string $in
+     * @return string
      */
-    function _pad($text)
+    function _decryptBlock($in)
     {
-        $length = strlen($text);
-
-        if (!$this->padding) {
-            if (($length & 7) == 0) {
-                return $text;
-            } else {
-                user_error("The plaintext's length ($length) is not a multiple of the block size (8)", E_USER_NOTICE);
-                $this->padding = true;
-            }
-        }
-
-        $pad = 8 - ($length & 7);
-        return str_pad($text, $length + $pad, chr($pad));
+        return $this->_processBlock($in, self::DECRYPT);
     }
 
     /**
-     * Unpads a string
+     * Encrypts or decrypts a 64-bit block
      *
-     * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
-     * and false will be returned.
+     * $mode should be either self::ENCRYPT or self::DECRYPT.  See
+     * {@link http://en.wikipedia.org/wiki/Image:Feistel.png Feistel.png} to get a general
+     * idea of what this function does.
      *
-     * @see Crypt_DES::_pad()
+     * @see self::_encryptBlock()
+     * @see self::_decryptBlock()
      * @access private
+     * @param string $block
+     * @param int $mode
+     * @return string
      */
-    function _unpad($text)
+    function _processBlock($block, $mode)
     {
-        if (!$this->padding) {
-            return $text;
+        static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip;
+        if (!$sbox1) {
+            $sbox1 = array_map("intval", $this->sbox1);
+            $sbox2 = array_map("intval", $this->sbox2);
+            $sbox3 = array_map("intval", $this->sbox3);
+            $sbox4 = array_map("intval", $this->sbox4);
+            $sbox5 = array_map("intval", $this->sbox5);
+            $sbox6 = array_map("intval", $this->sbox6);
+            $sbox7 = array_map("intval", $this->sbox7);
+            $sbox8 = array_map("intval", $this->sbox8);
+            /* Merge $shuffle with $[inv]ipmap */
+            for ($i = 0; $i < 256; ++$i) {
+                $shuffleip[]    =  $this->shuffle[$this->ipmap[$i]];
+                $shuffleinvip[] =  $this->shuffle[$this->invipmap[$i]];
+            }
         }
 
-        $length = ord($text[strlen($text) - 1]);
+        $keys  = $this->keys[$mode];
+        $ki    = -1;
+
+        // Do the initial IP permutation.
+        $t = unpack('Nl/Nr', $block);
+        list($l, $r) = array($t['l'], $t['r']);
+        $block = ($shuffleip[ $r        & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
+                 ($shuffleip[($r >>  8) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
+                 ($shuffleip[($r >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
+                 ($shuffleip[($r >> 24) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
+                 ($shuffleip[ $l        & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
+                 ($shuffleip[($l >>  8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
+                 ($shuffleip[($l >> 16) & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
+                 ($shuffleip[($l >> 24) & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01");
+
+        // Extract L0 and R0.
+        $t = unpack('Nl/Nr', $block);
+        list($l, $r) = array($t['l'], $t['r']);
+
+        for ($des_round = 0; $des_round < $this->des_rounds; ++$des_round) {
+            // Perform the 16 steps.
+            for ($i = 0; $i < 16; $i++) {
+                // start of "the Feistel (F) function" - see the following URL:
+                // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png
+                // Merge key schedule.
+                $b1 = (($r >>  3) & 0x1FFFFFFF) ^ ($r << 29) ^ $keys[++$ki];
+                $b2 = (($r >> 31) & 0x00000001) ^ ($r <<  1) ^ $keys[++$ki];
+
+                // S-box indexing.
+                $t = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^
+                     $sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^
+                     $sbox5[($b1 >>  8) & 0x3F] ^ $sbox6[($b2 >>  8) & 0x3F] ^
+                     $sbox7[ $b1        & 0x3F] ^ $sbox8[ $b2        & 0x3F] ^ $l;
+                // end of "the Feistel (F) function"
+
+                $l = $r;
+                $r = $t;
+            }
 
-        if (!$length || $length > 8) {
-            return false;
+            // Last step should not permute L & R.
+            $t = $l;
+            $l = $r;
+            $r = $t;
         }
 
-        return substr($text, 0, -$length);
+        // Perform the inverse IP permutation.
+        return ($shuffleinvip[($r >> 24) & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
+               ($shuffleinvip[($l >> 24) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
+               ($shuffleinvip[($r >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
+               ($shuffleinvip[($l >> 16) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
+               ($shuffleinvip[($r >>  8) & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
+               ($shuffleinvip[($l >>  8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
+               ($shuffleinvip[ $r        & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
+               ($shuffleinvip[ $l        & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01");
     }
 
     /**
-     * Encrypts or decrypts a 64-bit block
-     *
-     * $mode should be either CRYPT_DES_ENCRYPT or CRYPT_DES_DECRYPT.  See
-     * {@link http://en.wikipedia.org/wiki/Image:Feistel.png Feistel.png} to get a general
-     * idea of what this function does.
+     * Creates the key schedule
      *
+     * @see \phpseclib\Crypt\Base::_setupKey()
      * @access private
-     * @param String $block
-     * @param Integer $mode
-     * @return String
      */
-    function _processBlock($block, $mode)
+    function _setupKey()
     {
-        // s-boxes.  in the official DES docs, they're described as being matrices that
-        // one accesses by using the first and last bits to determine the row and the
-        // middle four bits to determine the column.  in this implementation, they've
-        // been converted to vectors
-        static $sbox = array(
-            array(
-                14,  0,  4, 15, 13,  7,  1,  4,  2, 14, 15,  2, 11, 13,  8,  1,
-                 3, 10 ,10,  6,  6, 12, 12, 11,  5,  9,  9,  5,  0,  3,  7,  8,
-                 4, 15,  1, 12, 14,  8,  8,  2, 13,  4,  6,  9,  2,  1, 11,  7,
-                15,  5, 12, 11,  9,  3,  7, 14,  3, 10, 10,  0,  5,  6,  0, 13
-            ),
-            array(
-                15,  3,  1, 13,  8,  4, 14,  7,  6, 15, 11,  2,  3,  8,  4, 14,
-                 9, 12,  7,  0,  2,  1, 13, 10, 12,  6,  0,  9,  5, 11, 10,  5,
-                 0, 13, 14,  8,  7, 10, 11,  1, 10,  3,  4, 15, 13,  4,  1,  2,
-                 5, 11,  8,  6, 12,  7,  6, 12,  9,  0,  3,  5,  2, 14, 15,  9
-            ),
-            array(
-                10, 13,  0,  7,  9,  0, 14,  9,  6,  3,  3,  4, 15,  6,  5, 10,
-                 1,  2, 13,  8, 12,  5,  7, 14, 11, 12,  4, 11,  2, 15,  8,  1,
-                13,  1,  6, 10,  4, 13,  9,  0,  8,  6, 15,  9,  3,  8,  0,  7,
-                11,  4,  1, 15,  2, 14, 12,  3,  5, 11, 10,  5, 14,  2,  7, 12
-            ),
-            array(
-                 7, 13, 13,  8, 14, 11,  3,  5,  0,  6,  6, 15,  9,  0, 10,  3,
-                 1,  4,  2,  7,  8,  2,  5, 12, 11,  1, 12, 10,  4, 14, 15,  9,
-                10,  3,  6, 15,  9,  0,  0,  6, 12, 10, 11,  1,  7, 13, 13,  8,
-                15,  9,  1,  4,  3,  5, 14, 11,  5, 12,  2,  7,  8,  2,  4, 14
-            ),
-            array(
-                 2, 14, 12, 11,  4,  2,  1, 12,  7,  4, 10,  7, 11, 13,  6,  1,
-                 8,  5,  5,  0,  3, 15, 15, 10, 13,  3,  0,  9, 14,  8,  9,  6,
-                 4, 11,  2,  8,  1, 12, 11,  7, 10,  1, 13, 14,  7,  2,  8, 13,
-                15,  6,  9, 15, 12,  0,  5,  9,  6, 10,  3,  4,  0,  5, 14,  3
-            ),
-            array(
-                12, 10,  1, 15, 10,  4, 15,  2,  9,  7,  2, 12,  6,  9,  8,  5,
-                 0,  6, 13,  1,  3, 13,  4, 14, 14,  0,  7, 11,  5,  3, 11,  8,
-                 9,  4, 14,  3, 15,  2,  5, 12,  2,  9,  8,  5, 12, 15,  3, 10,
-                 7, 11,  0, 14,  4,  1, 10,  7,  1,  6, 13,  0, 11,  8,  6, 13
-            ),
-            array(
-                 4, 13, 11,  0,  2, 11, 14,  7, 15,  4,  0,  9,  8,  1, 13, 10,
-                 3, 14, 12,  3,  9,  5,  7, 12,  5,  2, 10, 15,  6,  8,  1,  6,
-                 1,  6,  4, 11, 11, 13, 13,  8, 12,  1,  3,  4,  7, 10, 14,  7,
-                10,  9, 15,  5,  6,  0,  8, 15,  0, 14,  5,  2,  9,  3,  2, 12
-            ),
-            array(
-                13,  1,  2, 15,  8, 13,  4,  8,  6, 10, 15,  3, 11,  7,  1,  4,
-                10, 12,  9,  5,  3,  6, 14, 11,  5,  0,  0, 14, 12,  9,  7,  2,
-                 7,  2, 11,  1,  4, 14,  1,  7,  9,  4, 12, 10, 14,  8,  2, 13,
-                 0, 15,  6, 12, 10,  9, 13,  0, 15,  3,  3,  5,  5,  6,  8, 11
-            )
-        );
+        if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->des_rounds === $this->kl['des_rounds']) {
+            // already expanded
+            return;
+        }
+        $this->kl = array('key' => $this->key, 'des_rounds' => $this->des_rounds);
 
-        $keys = $this->keys;
+        static $shifts = array( // number of key bits shifted per round
+            1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
+        );
 
-        $temp = unpack('Na/Nb', $block);
-        $block = array($temp['a'], $temp['b']);
+        static $pc1map = array(
+            0x00, 0x00, 0x08, 0x08, 0x04, 0x04, 0x0C, 0x0C,
+            0x02, 0x02, 0x0A, 0x0A, 0x06, 0x06, 0x0E, 0x0E,
+            0x10, 0x10, 0x18, 0x18, 0x14, 0x14, 0x1C, 0x1C,
+            0x12, 0x12, 0x1A, 0x1A, 0x16, 0x16, 0x1E, 0x1E,
+            0x20, 0x20, 0x28, 0x28, 0x24, 0x24, 0x2C, 0x2C,
+            0x22, 0x22, 0x2A, 0x2A, 0x26, 0x26, 0x2E, 0x2E,
+            0x30, 0x30, 0x38, 0x38, 0x34, 0x34, 0x3C, 0x3C,
+            0x32, 0x32, 0x3A, 0x3A, 0x36, 0x36, 0x3E, 0x3E,
+            0x40, 0x40, 0x48, 0x48, 0x44, 0x44, 0x4C, 0x4C,
+            0x42, 0x42, 0x4A, 0x4A, 0x46, 0x46, 0x4E, 0x4E,
+            0x50, 0x50, 0x58, 0x58, 0x54, 0x54, 0x5C, 0x5C,
+            0x52, 0x52, 0x5A, 0x5A, 0x56, 0x56, 0x5E, 0x5E,
+            0x60, 0x60, 0x68, 0x68, 0x64, 0x64, 0x6C, 0x6C,
+            0x62, 0x62, 0x6A, 0x6A, 0x66, 0x66, 0x6E, 0x6E,
+            0x70, 0x70, 0x78, 0x78, 0x74, 0x74, 0x7C, 0x7C,
+            0x72, 0x72, 0x7A, 0x7A, 0x76, 0x76, 0x7E, 0x7E,
+            0x80, 0x80, 0x88, 0x88, 0x84, 0x84, 0x8C, 0x8C,
+            0x82, 0x82, 0x8A, 0x8A, 0x86, 0x86, 0x8E, 0x8E,
+            0x90, 0x90, 0x98, 0x98, 0x94, 0x94, 0x9C, 0x9C,
+            0x92, 0x92, 0x9A, 0x9A, 0x96, 0x96, 0x9E, 0x9E,
+            0xA0, 0xA0, 0xA8, 0xA8, 0xA4, 0xA4, 0xAC, 0xAC,
+            0xA2, 0xA2, 0xAA, 0xAA, 0xA6, 0xA6, 0xAE, 0xAE,
+            0xB0, 0xB0, 0xB8, 0xB8, 0xB4, 0xB4, 0xBC, 0xBC,
+            0xB2, 0xB2, 0xBA, 0xBA, 0xB6, 0xB6, 0xBE, 0xBE,
+            0xC0, 0xC0, 0xC8, 0xC8, 0xC4, 0xC4, 0xCC, 0xCC,
+            0xC2, 0xC2, 0xCA, 0xCA, 0xC6, 0xC6, 0xCE, 0xCE,
+            0xD0, 0xD0, 0xD8, 0xD8, 0xD4, 0xD4, 0xDC, 0xDC,
+            0xD2, 0xD2, 0xDA, 0xDA, 0xD6, 0xD6, 0xDE, 0xDE,
+            0xE0, 0xE0, 0xE8, 0xE8, 0xE4, 0xE4, 0xEC, 0xEC,
+            0xE2, 0xE2, 0xEA, 0xEA, 0xE6, 0xE6, 0xEE, 0xEE,
+            0xF0, 0xF0, 0xF8, 0xF8, 0xF4, 0xF4, 0xFC, 0xFC,
+            0xF2, 0xF2, 0xFA, 0xFA, 0xF6, 0xF6, 0xFE, 0xFE
+        );
 
-        // because php does arithmetic right shifts, if the most significant bits are set, right
-        // shifting those into the correct position will add 1's - not 0's.  this will intefere
-        // with the | operation unless a second & is done.  so we isolate these bits and left shift
-        // them into place.  we then & each block with 0x7FFFFFFF to prevennt 1's from being added
-        // for any other shifts.
-        $msb = array(
-            ($block[0] >> 31) & 1,
-            ($block[1] >> 31) & 1
+        // Mapping tables for the PC-2 transformation.
+        static $pc2mapc1 = array(
+            0x00000000, 0x00000400, 0x00200000, 0x00200400,
+            0x00000001, 0x00000401, 0x00200001, 0x00200401,
+            0x02000000, 0x02000400, 0x02200000, 0x02200400,
+            0x02000001, 0x02000401, 0x02200001, 0x02200401
         );
-        $block[0] &= 0x7FFFFFFF;
-        $block[1] &= 0x7FFFFFFF;
-
-        // we isolate the appropriate bit in the appropriate integer and shift as appropriate.  in
-        // some cases, there are going to be multiple bits in the same integer that need to be shifted
-        // in the same way.  we combine those into one shift operation.
-        $block = array(
-            (($block[1] & 0x00000040) << 25) | (($block[1] & 0x00004000) << 16) |
-            (($block[1] & 0x00400001) <<  7) | (($block[1] & 0x40000100) >>  2) |
-            (($block[0] & 0x00000040) << 21) | (($block[0] & 0x00004000) << 12) |
-            (($block[0] & 0x00400001) <<  3) | (($block[0] & 0x40000100) >>  6) |
-            (($block[1] & 0x00000010) << 19) | (($block[1] & 0x00001000) << 10) |
-            (($block[1] & 0x00100000) <<  1) | (($block[1] & 0x10000000) >>  8) |
-            (($block[0] & 0x00000010) << 15) | (($block[0] & 0x00001000) <<  6) |
-            (($block[0] & 0x00100000) >>  3) | (($block[0] & 0x10000000) >> 12) |
-            (($block[1] & 0x00000004) << 13) | (($block[1] & 0x00000400) <<  4) |
-            (($block[1] & 0x00040000) >>  5) | (($block[1] & 0x04000000) >> 14) |
-            (($block[0] & 0x00000004) <<  9) | ( $block[0] & 0x00000400       ) |
-            (($block[0] & 0x00040000) >>  9) | (($block[0] & 0x04000000) >> 18) |
-            (($block[1] & 0x00010000) >> 11) | (($block[1] & 0x01000000) >> 20) |
-            (($block[0] & 0x00010000) >> 15) | (($block[0] & 0x01000000) >> 24)
-        ,
-            (($block[1] & 0x00000080) << 24) | (($block[1] & 0x00008000) << 15) |
-            (($block[1] & 0x00800002) <<  6) | (($block[0] & 0x00000080) << 20) |
-            (($block[0] & 0x00008000) << 11) | (($block[0] & 0x00800002) <<  2) |
-            (($block[1] & 0x00000020) << 18) | (($block[1] & 0x00002000) <<  9) |
-            ( $block[1] & 0x00200000       ) | (($block[1] & 0x20000000) >>  9) |
-            (($block[0] & 0x00000020) << 14) | (($block[0] & 0x00002000) <<  5) |
-            (($block[0] & 0x00200000) >>  4) | (($block[0] & 0x20000000) >> 13) |
-            (($block[1] & 0x00000008) << 12) | (($block[1] & 0x00000800) <<  3) |
-            (($block[1] & 0x00080000) >>  6) | (($block[1] & 0x08000000) >> 15) |
-            (($block[0] & 0x00000008) <<  8) | (($block[0] & 0x00000800) >>  1) |
-            (($block[0] & 0x00080000) >> 10) | (($block[0] & 0x08000000) >> 19) |
-            (($block[1] & 0x00000200) >>  3) | (($block[0] & 0x00000200) >>  7) |
-            (($block[1] & 0x00020000) >> 12) | (($block[1] & 0x02000000) >> 21) |
-            (($block[0] & 0x00020000) >> 16) | (($block[0] & 0x02000000) >> 25) |
-            ($msb[1] << 28) | ($msb[0] << 24)
+        static $pc2mapc2 = array(
+            0x00000000, 0x00000800, 0x08000000, 0x08000800,
+            0x00010000, 0x00010800, 0x08010000, 0x08010800,
+            0x00000000, 0x00000800, 0x08000000, 0x08000800,
+            0x00010000, 0x00010800, 0x08010000, 0x08010800,
+            0x00000100, 0x00000900, 0x08000100, 0x08000900,
+            0x00010100, 0x00010900, 0x08010100, 0x08010900,
+            0x00000100, 0x00000900, 0x08000100, 0x08000900,
+            0x00010100, 0x00010900, 0x08010100, 0x08010900,
+            0x00000010, 0x00000810, 0x08000010, 0x08000810,
+            0x00010010, 0x00010810, 0x08010010, 0x08010810,
+            0x00000010, 0x00000810, 0x08000010, 0x08000810,
+            0x00010010, 0x00010810, 0x08010010, 0x08010810,
+            0x00000110, 0x00000910, 0x08000110, 0x08000910,
+            0x00010110, 0x00010910, 0x08010110, 0x08010910,
+            0x00000110, 0x00000910, 0x08000110, 0x08000910,
+            0x00010110, 0x00010910, 0x08010110, 0x08010910,
+            0x00040000, 0x00040800, 0x08040000, 0x08040800,
+            0x00050000, 0x00050800, 0x08050000, 0x08050800,
+            0x00040000, 0x00040800, 0x08040000, 0x08040800,
+            0x00050000, 0x00050800, 0x08050000, 0x08050800,
+            0x00040100, 0x00040900, 0x08040100, 0x08040900,
+            0x00050100, 0x00050900, 0x08050100, 0x08050900,
+            0x00040100, 0x00040900, 0x08040100, 0x08040900,
+            0x00050100, 0x00050900, 0x08050100, 0x08050900,
+            0x00040010, 0x00040810, 0x08040010, 0x08040810,
+            0x00050010, 0x00050810, 0x08050010, 0x08050810,
+            0x00040010, 0x00040810, 0x08040010, 0x08040810,
+            0x00050010, 0x00050810, 0x08050010, 0x08050810,
+            0x00040110, 0x00040910, 0x08040110, 0x08040910,
+            0x00050110, 0x00050910, 0x08050110, 0x08050910,
+            0x00040110, 0x00040910, 0x08040110, 0x08040910,
+            0x00050110, 0x00050910, 0x08050110, 0x08050910,
+            0x01000000, 0x01000800, 0x09000000, 0x09000800,
+            0x01010000, 0x01010800, 0x09010000, 0x09010800,
+            0x01000000, 0x01000800, 0x09000000, 0x09000800,
+            0x01010000, 0x01010800, 0x09010000, 0x09010800,
+            0x01000100, 0x01000900, 0x09000100, 0x09000900,
+            0x01010100, 0x01010900, 0x09010100, 0x09010900,
+            0x01000100, 0x01000900, 0x09000100, 0x09000900,
+            0x01010100, 0x01010900, 0x09010100, 0x09010900,
+            0x01000010, 0x01000810, 0x09000010, 0x09000810,
+            0x01010010, 0x01010810, 0x09010010, 0x09010810,
+            0x01000010, 0x01000810, 0x09000010, 0x09000810,
+            0x01010010, 0x01010810, 0x09010010, 0x09010810,
+            0x01000110, 0x01000910, 0x09000110, 0x09000910,
+            0x01010110, 0x01010910, 0x09010110, 0x09010910,
+            0x01000110, 0x01000910, 0x09000110, 0x09000910,
+            0x01010110, 0x01010910, 0x09010110, 0x09010910,
+            0x01040000, 0x01040800, 0x09040000, 0x09040800,
+            0x01050000, 0x01050800, 0x09050000, 0x09050800,
+            0x01040000, 0x01040800, 0x09040000, 0x09040800,
+            0x01050000, 0x01050800, 0x09050000, 0x09050800,
+            0x01040100, 0x01040900, 0x09040100, 0x09040900,
+            0x01050100, 0x01050900, 0x09050100, 0x09050900,
+            0x01040100, 0x01040900, 0x09040100, 0x09040900,
+            0x01050100, 0x01050900, 0x09050100, 0x09050900,
+            0x01040010, 0x01040810, 0x09040010, 0x09040810,
+            0x01050010, 0x01050810, 0x09050010, 0x09050810,
+            0x01040010, 0x01040810, 0x09040010, 0x09040810,
+            0x01050010, 0x01050810, 0x09050010, 0x09050810,
+            0x01040110, 0x01040910, 0x09040110, 0x09040910,
+            0x01050110, 0x01050910, 0x09050110, 0x09050910,
+            0x01040110, 0x01040910, 0x09040110, 0x09040910,
+            0x01050110, 0x01050910, 0x09050110, 0x09050910
         );
-
-        for ($i = 0; $i < 16; $i++) {
-            // start of "the Feistel (F) function" - see the following URL:
-            // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png
-            $temp = (($sbox[0][((($block[1] >> 27) & 0x1F) | (($block[1] & 1) << 5)) ^ $keys[$mode][$i][0]]) << 28)
-                  | (($sbox[1][(($block[1] & 0x1F800000) >> 23) ^ $keys[$mode][$i][1]]) << 24)
-                  | (($sbox[2][(($block[1] & 0x01F80000) >> 19) ^ $keys[$mode][$i][2]]) << 20)
-                  | (($sbox[3][(($block[1] & 0x001F8000) >> 15) ^ $keys[$mode][$i][3]]) << 16)
-                  | (($sbox[4][(($block[1] & 0x0001F800) >> 11) ^ $keys[$mode][$i][4]]) << 12)
-                  | (($sbox[5][(($block[1] & 0x00001F80) >>  7) ^ $keys[$mode][$i][5]]) <<  8)
-                  | (($sbox[6][(($block[1] & 0x000001F8) >>  3) ^ $keys[$mode][$i][6]]) <<  4)
-                  | ( $sbox[7][((($block[1] & 0x1F) << 1) | (($block[1] >> 31) & 1)) ^ $keys[$mode][$i][7]]);
-
-            $msb = ($temp >> 31) & 1;
-            $temp &= 0x7FFFFFFF;
-            $newBlock = (($temp & 0x00010000) << 15) | (($temp & 0x02020120) <<  5)
-                      | (($temp & 0x00001800) << 17) | (($temp & 0x01000000) >> 10)
-                      | (($temp & 0x00000008) << 24) | (($temp & 0x00100000) <<  6)
-                      | (($temp & 0x00000010) << 21) | (($temp & 0x00008000) <<  9)
-                      | (($temp & 0x00000200) << 12) | (($temp & 0x10000000) >> 27)
-                      | (($temp & 0x00000040) << 14) | (($temp & 0x08000000) >>  8)
-                      | (($temp & 0x00004000) <<  4) | (($temp & 0x00000002) << 16)
-                      | (($temp & 0x00442000) >>  6) | (($temp & 0x40800000) >> 15)
-                      | (($temp & 0x00000001) << 11) | (($temp & 0x20000000) >> 20)
-                      | (($temp & 0x00080000) >> 13) | (($temp & 0x00000004) <<  3)
-                      | (($temp & 0x04000000) >> 22) | (($temp & 0x00000480) >>  7)
-                      | (($temp & 0x00200000) >> 19) | ($msb << 23);
-            // end of "the Feistel (F) function" - $newBlock is F's output
-
-            $temp = $block[1];
-            $block[1] = $block[0] ^ $newBlock;
-            $block[0] = $temp;
-        }
-
-        $msb = array(
-            ($block[0] >> 31) & 1,
-            ($block[1] >> 31) & 1
+        static $pc2mapc3 = array(
+            0x00000000, 0x00000004, 0x00001000, 0x00001004,
+            0x00000000, 0x00000004, 0x00001000, 0x00001004,
+            0x10000000, 0x10000004, 0x10001000, 0x10001004,
+            0x10000000, 0x10000004, 0x10001000, 0x10001004,
+            0x00000020, 0x00000024, 0x00001020, 0x00001024,
+            0x00000020, 0x00000024, 0x00001020, 0x00001024,
+            0x10000020, 0x10000024, 0x10001020, 0x10001024,
+            0x10000020, 0x10000024, 0x10001020, 0x10001024,
+            0x00080000, 0x00080004, 0x00081000, 0x00081004,
+            0x00080000, 0x00080004, 0x00081000, 0x00081004,
+            0x10080000, 0x10080004, 0x10081000, 0x10081004,
+            0x10080000, 0x10080004, 0x10081000, 0x10081004,
+            0x00080020, 0x00080024, 0x00081020, 0x00081024,
+            0x00080020, 0x00080024, 0x00081020, 0x00081024,
+            0x10080020, 0x10080024, 0x10081020, 0x10081024,
+            0x10080020, 0x10080024, 0x10081020, 0x10081024,
+            0x20000000, 0x20000004, 0x20001000, 0x20001004,
+            0x20000000, 0x20000004, 0x20001000, 0x20001004,
+            0x30000000, 0x30000004, 0x30001000, 0x30001004,
+            0x30000000, 0x30000004, 0x30001000, 0x30001004,
+            0x20000020, 0x20000024, 0x20001020, 0x20001024,
+            0x20000020, 0x20000024, 0x20001020, 0x20001024,
+            0x30000020, 0x30000024, 0x30001020, 0x30001024,
+            0x30000020, 0x30000024, 0x30001020, 0x30001024,
+            0x20080000, 0x20080004, 0x20081000, 0x20081004,
+            0x20080000, 0x20080004, 0x20081000, 0x20081004,
+            0x30080000, 0x30080004, 0x30081000, 0x30081004,
+            0x30080000, 0x30080004, 0x30081000, 0x30081004,
+            0x20080020, 0x20080024, 0x20081020, 0x20081024,
+            0x20080020, 0x20080024, 0x20081020, 0x20081024,
+            0x30080020, 0x30080024, 0x30081020, 0x30081024,
+            0x30080020, 0x30080024, 0x30081020, 0x30081024,
+            0x00000002, 0x00000006, 0x00001002, 0x00001006,
+            0x00000002, 0x00000006, 0x00001002, 0x00001006,
+            0x10000002, 0x10000006, 0x10001002, 0x10001006,
+            0x10000002, 0x10000006, 0x10001002, 0x10001006,
+            0x00000022, 0x00000026, 0x00001022, 0x00001026,
+            0x00000022, 0x00000026, 0x00001022, 0x00001026,
+            0x10000022, 0x10000026, 0x10001022, 0x10001026,
+            0x10000022, 0x10000026, 0x10001022, 0x10001026,
+            0x00080002, 0x00080006, 0x00081002, 0x00081006,
+            0x00080002, 0x00080006, 0x00081002, 0x00081006,
+            0x10080002, 0x10080006, 0x10081002, 0x10081006,
+            0x10080002, 0x10080006, 0x10081002, 0x10081006,
+            0x00080022, 0x00080026, 0x00081022, 0x00081026,
+            0x00080022, 0x00080026, 0x00081022, 0x00081026,
+            0x10080022, 0x10080026, 0x10081022, 0x10081026,
+            0x10080022, 0x10080026, 0x10081022, 0x10081026,
+            0x20000002, 0x20000006, 0x20001002, 0x20001006,
+            0x20000002, 0x20000006, 0x20001002, 0x20001006,
+            0x30000002, 0x30000006, 0x30001002, 0x30001006,
+            0x30000002, 0x30000006, 0x30001002, 0x30001006,
+            0x20000022, 0x20000026, 0x20001022, 0x20001026,
+            0x20000022, 0x20000026, 0x20001022, 0x20001026,
+            0x30000022, 0x30000026, 0x30001022, 0x30001026,
+            0x30000022, 0x30000026, 0x30001022, 0x30001026,
+            0x20080002, 0x20080006, 0x20081002, 0x20081006,
+            0x20080002, 0x20080006, 0x20081002, 0x20081006,
+            0x30080002, 0x30080006, 0x30081002, 0x30081006,
+            0x30080002, 0x30080006, 0x30081002, 0x30081006,
+            0x20080022, 0x20080026, 0x20081022, 0x20081026,
+            0x20080022, 0x20080026, 0x20081022, 0x20081026,
+            0x30080022, 0x30080026, 0x30081022, 0x30081026,
+            0x30080022, 0x30080026, 0x30081022, 0x30081026
+        );
+        static $pc2mapc4 = array(
+            0x00000000, 0x00100000, 0x00000008, 0x00100008,
+            0x00000200, 0x00100200, 0x00000208, 0x00100208,
+            0x00000000, 0x00100000, 0x00000008, 0x00100008,
+            0x00000200, 0x00100200, 0x00000208, 0x00100208,
+            0x04000000, 0x04100000, 0x04000008, 0x04100008,
+            0x04000200, 0x04100200, 0x04000208, 0x04100208,
+            0x04000000, 0x04100000, 0x04000008, 0x04100008,
+            0x04000200, 0x04100200, 0x04000208, 0x04100208,
+            0x00002000, 0x00102000, 0x00002008, 0x00102008,
+            0x00002200, 0x00102200, 0x00002208, 0x00102208,
+            0x00002000, 0x00102000, 0x00002008, 0x00102008,
+            0x00002200, 0x00102200, 0x00002208, 0x00102208,
+            0x04002000, 0x04102000, 0x04002008, 0x04102008,
+            0x04002200, 0x04102200, 0x04002208, 0x04102208,
+            0x04002000, 0x04102000, 0x04002008, 0x04102008,
+            0x04002200, 0x04102200, 0x04002208, 0x04102208,
+            0x00000000, 0x00100000, 0x00000008, 0x00100008,
+            0x00000200, 0x00100200, 0x00000208, 0x00100208,
+            0x00000000, 0x00100000, 0x00000008, 0x00100008,
+            0x00000200, 0x00100200, 0x00000208, 0x00100208,
+            0x04000000, 0x04100000, 0x04000008, 0x04100008,
+            0x04000200, 0x04100200, 0x04000208, 0x04100208,
+            0x04000000, 0x04100000, 0x04000008, 0x04100008,
+            0x04000200, 0x04100200, 0x04000208, 0x04100208,
+            0x00002000, 0x00102000, 0x00002008, 0x00102008,
+            0x00002200, 0x00102200, 0x00002208, 0x00102208,
+            0x00002000, 0x00102000, 0x00002008, 0x00102008,
+            0x00002200, 0x00102200, 0x00002208, 0x00102208,
+            0x04002000, 0x04102000, 0x04002008, 0x04102008,
+            0x04002200, 0x04102200, 0x04002208, 0x04102208,
+            0x04002000, 0x04102000, 0x04002008, 0x04102008,
+            0x04002200, 0x04102200, 0x04002208, 0x04102208,
+            0x00020000, 0x00120000, 0x00020008, 0x00120008,
+            0x00020200, 0x00120200, 0x00020208, 0x00120208,
+            0x00020000, 0x00120000, 0x00020008, 0x00120008,
+            0x00020200, 0x00120200, 0x00020208, 0x00120208,
+            0x04020000, 0x04120000, 0x04020008, 0x04120008,
+            0x04020200, 0x04120200, 0x04020208, 0x04120208,
+            0x04020000, 0x04120000, 0x04020008, 0x04120008,
+            0x04020200, 0x04120200, 0x04020208, 0x04120208,
+            0x00022000, 0x00122000, 0x00022008, 0x00122008,
+            0x00022200, 0x00122200, 0x00022208, 0x00122208,
+            0x00022000, 0x00122000, 0x00022008, 0x00122008,
+            0x00022200, 0x00122200, 0x00022208, 0x00122208,
+            0x04022000, 0x04122000, 0x04022008, 0x04122008,
+            0x04022200, 0x04122200, 0x04022208, 0x04122208,
+            0x04022000, 0x04122000, 0x04022008, 0x04122008,
+            0x04022200, 0x04122200, 0x04022208, 0x04122208,
+            0x00020000, 0x00120000, 0x00020008, 0x00120008,
+            0x00020200, 0x00120200, 0x00020208, 0x00120208,
+            0x00020000, 0x00120000, 0x00020008, 0x00120008,
+            0x00020200, 0x00120200, 0x00020208, 0x00120208,
+            0x04020000, 0x04120000, 0x04020008, 0x04120008,
+            0x04020200, 0x04120200, 0x04020208, 0x04120208,
+            0x04020000, 0x04120000, 0x04020008, 0x04120008,
+            0x04020200, 0x04120200, 0x04020208, 0x04120208,
+            0x00022000, 0x00122000, 0x00022008, 0x00122008,
+            0x00022200, 0x00122200, 0x00022208, 0x00122208,
+            0x00022000, 0x00122000, 0x00022008, 0x00122008,
+            0x00022200, 0x00122200, 0x00022208, 0x00122208,
+            0x04022000, 0x04122000, 0x04022008, 0x04122008,
+            0x04022200, 0x04122200, 0x04022208, 0x04122208,
+            0x04022000, 0x04122000, 0x04022008, 0x04122008,
+            0x04022200, 0x04122200, 0x04022208, 0x04122208
+        );
+        static $pc2mapd1 = array(
+            0x00000000, 0x00000001, 0x08000000, 0x08000001,
+            0x00200000, 0x00200001, 0x08200000, 0x08200001,
+            0x00000002, 0x00000003, 0x08000002, 0x08000003,
+            0x00200002, 0x00200003, 0x08200002, 0x08200003
         );
-        $block[0] &= 0x7FFFFFFF;
-        $block[1] &= 0x7FFFFFFF;
-
-        $block = array(
-            (($block[0] & 0x01000004) <<  7) | (($block[1] & 0x01000004) <<  6) |
-            (($block[0] & 0x00010000) << 13) | (($block[1] & 0x00010000) << 12) |
-            (($block[0] & 0x00000100) << 19) | (($block[1] & 0x00000100) << 18) |
-            (($block[0] & 0x00000001) << 25) | (($block[1] & 0x00000001) << 24) |
-            (($block[0] & 0x02000008) >>  2) | (($block[1] & 0x02000008) >>  3) |
-            (($block[0] & 0x00020000) <<  4) | (($block[1] & 0x00020000) <<  3) |
-            (($block[0] & 0x00000200) << 10) | (($block[1] & 0x00000200) <<  9) |
-            (($block[0] & 0x00000002) << 16) | (($block[1] & 0x00000002) << 15) |
-            (($block[0] & 0x04000000) >> 11) | (($block[1] & 0x04000000) >> 12) |
-            (($block[0] & 0x00040000) >>  5) | (($block[1] & 0x00040000) >>  6) |
-            (($block[0] & 0x00000400) <<  1) | ( $block[1] & 0x00000400       ) |
-            (($block[0] & 0x08000000) >> 20) | (($block[1] & 0x08000000) >> 21) |
-            (($block[0] & 0x00080000) >> 14) | (($block[1] & 0x00080000) >> 15) |
-            (($block[0] & 0x00000800) >>  8) | (($block[1] & 0x00000800) >>  9)
-        ,
-            (($block[0] & 0x10000040) <<  3) | (($block[1] & 0x10000040) <<  2) |
-            (($block[0] & 0x00100000) <<  9) | (($block[1] & 0x00100000) <<  8) |
-            (($block[0] & 0x00001000) << 15) | (($block[1] & 0x00001000) << 14) |
-            (($block[0] & 0x00000010) << 21) | (($block[1] & 0x00000010) << 20) |
-            (($block[0] & 0x20000080) >>  6) | (($block[1] & 0x20000080) >>  7) |
-            ( $block[0] & 0x00200000       ) | (($block[1] & 0x00200000) >>  1) |
-            (($block[0] & 0x00002000) <<  6) | (($block[1] & 0x00002000) <<  5) |
-            (($block[0] & 0x00000020) << 12) | (($block[1] & 0x00000020) << 11) |
-            (($block[0] & 0x40000000) >> 15) | (($block[1] & 0x40000000) >> 16) |
-            (($block[0] & 0x00400000) >>  9) | (($block[1] & 0x00400000) >> 10) |
-            (($block[0] & 0x00004000) >>  3) | (($block[1] & 0x00004000) >>  4) |
-            (($block[0] & 0x00800000) >> 18) | (($block[1] & 0x00800000) >> 19) |
-            (($block[0] & 0x00008000) >> 12) | (($block[1] & 0x00008000) >> 13) |
-            ($msb[0] <<  7) | ($msb[1] <<  6)
+        static $pc2mapd2 = array(
+            0x00000000, 0x00100000, 0x00000800, 0x00100800,
+            0x00000000, 0x00100000, 0x00000800, 0x00100800,
+            0x04000000, 0x04100000, 0x04000800, 0x04100800,
+            0x04000000, 0x04100000, 0x04000800, 0x04100800,
+            0x00000004, 0x00100004, 0x00000804, 0x00100804,
+            0x00000004, 0x00100004, 0x00000804, 0x00100804,
+            0x04000004, 0x04100004, 0x04000804, 0x04100804,
+            0x04000004, 0x04100004, 0x04000804, 0x04100804,
+            0x00000000, 0x00100000, 0x00000800, 0x00100800,
+            0x00000000, 0x00100000, 0x00000800, 0x00100800,
+            0x04000000, 0x04100000, 0x04000800, 0x04100800,
+            0x04000000, 0x04100000, 0x04000800, 0x04100800,
+            0x00000004, 0x00100004, 0x00000804, 0x00100804,
+            0x00000004, 0x00100004, 0x00000804, 0x00100804,
+            0x04000004, 0x04100004, 0x04000804, 0x04100804,
+            0x04000004, 0x04100004, 0x04000804, 0x04100804,
+            0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
+            0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
+            0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
+            0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
+            0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
+            0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
+            0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
+            0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
+            0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
+            0x00000200, 0x00100200, 0x00000A00, 0x00100A00,
+            0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
+            0x04000200, 0x04100200, 0x04000A00, 0x04100A00,
+            0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
+            0x00000204, 0x00100204, 0x00000A04, 0x00100A04,
+            0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
+            0x04000204, 0x04100204, 0x04000A04, 0x04100A04,
+            0x00020000, 0x00120000, 0x00020800, 0x00120800,
+            0x00020000, 0x00120000, 0x00020800, 0x00120800,
+            0x04020000, 0x04120000, 0x04020800, 0x04120800,
+            0x04020000, 0x04120000, 0x04020800, 0x04120800,
+            0x00020004, 0x00120004, 0x00020804, 0x00120804,
+            0x00020004, 0x00120004, 0x00020804, 0x00120804,
+            0x04020004, 0x04120004, 0x04020804, 0x04120804,
+            0x04020004, 0x04120004, 0x04020804, 0x04120804,
+            0x00020000, 0x00120000, 0x00020800, 0x00120800,
+            0x00020000, 0x00120000, 0x00020800, 0x00120800,
+            0x04020000, 0x04120000, 0x04020800, 0x04120800,
+            0x04020000, 0x04120000, 0x04020800, 0x04120800,
+            0x00020004, 0x00120004, 0x00020804, 0x00120804,
+            0x00020004, 0x00120004, 0x00020804, 0x00120804,
+            0x04020004, 0x04120004, 0x04020804, 0x04120804,
+            0x04020004, 0x04120004, 0x04020804, 0x04120804,
+            0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
+            0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
+            0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
+            0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
+            0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
+            0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
+            0x04020204, 0x04120204, 0x04020A04, 0x04120A04,
+            0x04020204, 0x04120204, 0x04020A04, 0x04120A04,
+            0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
+            0x00020200, 0x00120200, 0x00020A00, 0x00120A00,
+            0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
+            0x04020200, 0x04120200, 0x04020A00, 0x04120A00,
+            0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
+            0x00020204, 0x00120204, 0x00020A04, 0x00120A04,
+            0x04020204, 0x04120204, 0x04020A04, 0x04120A04,
+            0x04020204, 0x04120204, 0x04020A04, 0x04120A04
         );
+        static $pc2mapd3 = array(
+            0x00000000, 0x00010000, 0x02000000, 0x02010000,
+            0x00000020, 0x00010020, 0x02000020, 0x02010020,
+            0x00040000, 0x00050000, 0x02040000, 0x02050000,
+            0x00040020, 0x00050020, 0x02040020, 0x02050020,
+            0x00002000, 0x00012000, 0x02002000, 0x02012000,
+            0x00002020, 0x00012020, 0x02002020, 0x02012020,
+            0x00042000, 0x00052000, 0x02042000, 0x02052000,
+            0x00042020, 0x00052020, 0x02042020, 0x02052020,
+            0x00000000, 0x00010000, 0x02000000, 0x02010000,
+            0x00000020, 0x00010020, 0x02000020, 0x02010020,
+            0x00040000, 0x00050000, 0x02040000, 0x02050000,
+            0x00040020, 0x00050020, 0x02040020, 0x02050020,
+            0x00002000, 0x00012000, 0x02002000, 0x02012000,
+            0x00002020, 0x00012020, 0x02002020, 0x02012020,
+            0x00042000, 0x00052000, 0x02042000, 0x02052000,
+            0x00042020, 0x00052020, 0x02042020, 0x02052020,
+            0x00000010, 0x00010010, 0x02000010, 0x02010010,
+            0x00000030, 0x00010030, 0x02000030, 0x02010030,
+            0x00040010, 0x00050010, 0x02040010, 0x02050010,
+            0x00040030, 0x00050030, 0x02040030, 0x02050030,
+            0x00002010, 0x00012010, 0x02002010, 0x02012010,
+            0x00002030, 0x00012030, 0x02002030, 0x02012030,
+            0x00042010, 0x00052010, 0x02042010, 0x02052010,
+            0x00042030, 0x00052030, 0x02042030, 0x02052030,
+            0x00000010, 0x00010010, 0x02000010, 0x02010010,
+            0x00000030, 0x00010030, 0x02000030, 0x02010030,
+            0x00040010, 0x00050010, 0x02040010, 0x02050010,
+            0x00040030, 0x00050030, 0x02040030, 0x02050030,
+            0x00002010, 0x00012010, 0x02002010, 0x02012010,
+            0x00002030, 0x00012030, 0x02002030, 0x02012030,
+            0x00042010, 0x00052010, 0x02042010, 0x02052010,
+            0x00042030, 0x00052030, 0x02042030, 0x02052030,
+            0x20000000, 0x20010000, 0x22000000, 0x22010000,
+            0x20000020, 0x20010020, 0x22000020, 0x22010020,
+            0x20040000, 0x20050000, 0x22040000, 0x22050000,
+            0x20040020, 0x20050020, 0x22040020, 0x22050020,
+            0x20002000, 0x20012000, 0x22002000, 0x22012000,
+            0x20002020, 0x20012020, 0x22002020, 0x22012020,
+            0x20042000, 0x20052000, 0x22042000, 0x22052000,
+            0x20042020, 0x20052020, 0x22042020, 0x22052020,
+            0x20000000, 0x20010000, 0x22000000, 0x22010000,
+            0x20000020, 0x20010020, 0x22000020, 0x22010020,
+            0x20040000, 0x20050000, 0x22040000, 0x22050000,
+            0x20040020, 0x20050020, 0x22040020, 0x22050020,
+            0x20002000, 0x20012000, 0x22002000, 0x22012000,
+            0x20002020, 0x20012020, 0x22002020, 0x22012020,
+            0x20042000, 0x20052000, 0x22042000, 0x22052000,
+            0x20042020, 0x20052020, 0x22042020, 0x22052020,
+            0x20000010, 0x20010010, 0x22000010, 0x22010010,
+            0x20000030, 0x20010030, 0x22000030, 0x22010030,
+            0x20040010, 0x20050010, 0x22040010, 0x22050010,
+            0x20040030, 0x20050030, 0x22040030, 0x22050030,
+            0x20002010, 0x20012010, 0x22002010, 0x22012010,
+            0x20002030, 0x20012030, 0x22002030, 0x22012030,
+            0x20042010, 0x20052010, 0x22042010, 0x22052010,
+            0x20042030, 0x20052030, 0x22042030, 0x22052030,
+            0x20000010, 0x20010010, 0x22000010, 0x22010010,
+            0x20000030, 0x20010030, 0x22000030, 0x22010030,
+            0x20040010, 0x20050010, 0x22040010, 0x22050010,
+            0x20040030, 0x20050030, 0x22040030, 0x22050030,
+            0x20002010, 0x20012010, 0x22002010, 0x22012010,
+            0x20002030, 0x20012030, 0x22002030, 0x22012030,
+            0x20042010, 0x20052010, 0x22042010, 0x22052010,
+            0x20042030, 0x20052030, 0x22042030, 0x22052030
+        );
+        static $pc2mapd4 = array(
+            0x00000000, 0x00000400, 0x01000000, 0x01000400,
+            0x00000000, 0x00000400, 0x01000000, 0x01000400,
+            0x00000100, 0x00000500, 0x01000100, 0x01000500,
+            0x00000100, 0x00000500, 0x01000100, 0x01000500,
+            0x10000000, 0x10000400, 0x11000000, 0x11000400,
+            0x10000000, 0x10000400, 0x11000000, 0x11000400,
+            0x10000100, 0x10000500, 0x11000100, 0x11000500,
+            0x10000100, 0x10000500, 0x11000100, 0x11000500,
+            0x00080000, 0x00080400, 0x01080000, 0x01080400,
+            0x00080000, 0x00080400, 0x01080000, 0x01080400,
+            0x00080100, 0x00080500, 0x01080100, 0x01080500,
+            0x00080100, 0x00080500, 0x01080100, 0x01080500,
+            0x10080000, 0x10080400, 0x11080000, 0x11080400,
+            0x10080000, 0x10080400, 0x11080000, 0x11080400,
+            0x10080100, 0x10080500, 0x11080100, 0x11080500,
+            0x10080100, 0x10080500, 0x11080100, 0x11080500,
+            0x00000008, 0x00000408, 0x01000008, 0x01000408,
+            0x00000008, 0x00000408, 0x01000008, 0x01000408,
+            0x00000108, 0x00000508, 0x01000108, 0x01000508,
+            0x00000108, 0x00000508, 0x01000108, 0x01000508,
+            0x10000008, 0x10000408, 0x11000008, 0x11000408,
+            0x10000008, 0x10000408, 0x11000008, 0x11000408,
+            0x10000108, 0x10000508, 0x11000108, 0x11000508,
+            0x10000108, 0x10000508, 0x11000108, 0x11000508,
+            0x00080008, 0x00080408, 0x01080008, 0x01080408,
+            0x00080008, 0x00080408, 0x01080008, 0x01080408,
+            0x00080108, 0x00080508, 0x01080108, 0x01080508,
+            0x00080108, 0x00080508, 0x01080108, 0x01080508,
+            0x10080008, 0x10080408, 0x11080008, 0x11080408,
+            0x10080008, 0x10080408, 0x11080008, 0x11080408,
+            0x10080108, 0x10080508, 0x11080108, 0x11080508,
+            0x10080108, 0x10080508, 0x11080108, 0x11080508,
+            0x00001000, 0x00001400, 0x01001000, 0x01001400,
+            0x00001000, 0x00001400, 0x01001000, 0x01001400,
+            0x00001100, 0x00001500, 0x01001100, 0x01001500,
+            0x00001100, 0x00001500, 0x01001100, 0x01001500,
+            0x10001000, 0x10001400, 0x11001000, 0x11001400,
+            0x10001000, 0x10001400, 0x11001000, 0x11001400,
+            0x10001100, 0x10001500, 0x11001100, 0x11001500,
+            0x10001100, 0x10001500, 0x11001100, 0x11001500,
+            0x00081000, 0x00081400, 0x01081000, 0x01081400,
+            0x00081000, 0x00081400, 0x01081000, 0x01081400,
+            0x00081100, 0x00081500, 0x01081100, 0x01081500,
+            0x00081100, 0x00081500, 0x01081100, 0x01081500,
+            0x10081000, 0x10081400, 0x11081000, 0x11081400,
+            0x10081000, 0x10081400, 0x11081000, 0x11081400,
+            0x10081100, 0x10081500, 0x11081100, 0x11081500,
+            0x10081100, 0x10081500, 0x11081100, 0x11081500,
+            0x00001008, 0x00001408, 0x01001008, 0x01001408,
+            0x00001008, 0x00001408, 0x01001008, 0x01001408,
+            0x00001108, 0x00001508, 0x01001108, 0x01001508,
+            0x00001108, 0x00001508, 0x01001108, 0x01001508,
+            0x10001008, 0x10001408, 0x11001008, 0x11001408,
+            0x10001008, 0x10001408, 0x11001008, 0x11001408,
+            0x10001108, 0x10001508, 0x11001108, 0x11001508,
+            0x10001108, 0x10001508, 0x11001108, 0x11001508,
+            0x00081008, 0x00081408, 0x01081008, 0x01081408,
+            0x00081008, 0x00081408, 0x01081008, 0x01081408,
+            0x00081108, 0x00081508, 0x01081108, 0x01081508,
+            0x00081108, 0x00081508, 0x01081108, 0x01081508,
+            0x10081008, 0x10081408, 0x11081008, 0x11081408,
+            0x10081008, 0x10081408, 0x11081008, 0x11081408,
+            0x10081108, 0x10081508, 0x11081108, 0x11081508,
+            0x10081108, 0x10081508, 0x11081108, 0x11081508
+        );
+
+        $keys = array();
+        for ($des_round = 0; $des_round < $this->des_rounds; ++$des_round) {
+            // pad the key and remove extra characters as appropriate.
+            $key = str_pad(substr($this->key, $des_round * 8, 8), 8, "\0");
+
+            // Perform the PC/1 transformation and compute C and D.
+            $t = unpack('Nl/Nr', $key);
+            list($l, $r) = array($t['l'], $t['r']);
+            $key = ($this->shuffle[$pc1map[ $r        & 0xFF]] & "\x80\x80\x80\x80\x80\x80\x80\x00") |
+                   ($this->shuffle[$pc1map[($r >>  8) & 0xFF]] & "\x40\x40\x40\x40\x40\x40\x40\x00") |
+                   ($this->shuffle[$pc1map[($r >> 16) & 0xFF]] & "\x20\x20\x20\x20\x20\x20\x20\x00") |
+                   ($this->shuffle[$pc1map[($r >> 24) & 0xFF]] & "\x10\x10\x10\x10\x10\x10\x10\x00") |
+                   ($this->shuffle[$pc1map[ $l        & 0xFF]] & "\x08\x08\x08\x08\x08\x08\x08\x00") |
+                   ($this->shuffle[$pc1map[($l >>  8) & 0xFF]] & "\x04\x04\x04\x04\x04\x04\x04\x00") |
+                   ($this->shuffle[$pc1map[($l >> 16) & 0xFF]] & "\x02\x02\x02\x02\x02\x02\x02\x00") |
+                   ($this->shuffle[$pc1map[($l >> 24) & 0xFF]] & "\x01\x01\x01\x01\x01\x01\x01\x00");
+            $key = unpack('Nc/Nd', $key);
+            $c = ( $key['c'] >> 4) & 0x0FFFFFFF;
+            $d = (($key['d'] >> 4) & 0x0FFFFFF0) | ($key['c'] & 0x0F);
+
+            $keys[$des_round] = array(
+                self::ENCRYPT => array(),
+                self::DECRYPT => array_fill(0, 32, 0)
+            );
+            for ($i = 0, $ki = 31; $i < 16; ++$i, $ki-= 2) {
+                $c <<= $shifts[$i];
+                $c = ($c | ($c >> 28)) & 0x0FFFFFFF;
+                $d <<= $shifts[$i];
+                $d = ($d | ($d >> 28)) & 0x0FFFFFFF;
+
+                // Perform the PC-2 transformation.
+                $cp = $pc2mapc1[ $c >> 24        ] | $pc2mapc2[($c >> 16) & 0xFF] |
+                      $pc2mapc3[($c >>  8) & 0xFF] | $pc2mapc4[ $c        & 0xFF];
+                $dp = $pc2mapd1[ $d >> 24        ] | $pc2mapd2[($d >> 16) & 0xFF] |
+                      $pc2mapd3[($d >>  8) & 0xFF] | $pc2mapd4[ $d        & 0xFF];
+
+                // Reorder: odd bytes/even bytes. Push the result in key schedule.
+                $val1 = ( $cp        & 0xFF000000) | (($cp <<  8) & 0x00FF0000) |
+                        (($dp >> 16) & 0x0000FF00) | (($dp >>  8) & 0x000000FF);
+                $val2 = (($cp <<  8) & 0xFF000000) | (($cp << 16) & 0x00FF0000) |
+                        (($dp >>  8) & 0x0000FF00) | ( $dp        & 0x000000FF);
+                $keys[$des_round][self::ENCRYPT][       ] = $val1;
+                $keys[$des_round][self::DECRYPT][$ki - 1] = $val1;
+                $keys[$des_round][self::ENCRYPT][       ] = $val2;
+                $keys[$des_round][self::DECRYPT][$ki    ] = $val2;
+            }
+        }
 
-        return pack('NN', $block[0], $block[1]);
+        switch ($this->des_rounds) {
+            case 3: // 3DES keys
+                $this->keys = array(
+                    self::ENCRYPT => array_merge(
+                        $keys[0][self::ENCRYPT],
+                        $keys[1][self::DECRYPT],
+                        $keys[2][self::ENCRYPT]
+                    ),
+                    self::DECRYPT => array_merge(
+                        $keys[2][self::DECRYPT],
+                        $keys[1][self::ENCRYPT],
+                        $keys[0][self::DECRYPT]
+                    )
+                );
+                break;
+            // case 1: // DES keys
+            default:
+                $this->keys = array(
+                    self::ENCRYPT => $keys[0][self::ENCRYPT],
+                    self::DECRYPT => $keys[0][self::DECRYPT]
+                );
+        }
     }
 
     /**
-     * Creates the key schedule.
+     * Setup the performance-optimized function for de/encrypt()
      *
+     * @see \phpseclib\Crypt\Base::_setupInlineCrypt()
      * @access private
-     * @param String $key
-     * @return Array
      */
-    function _prepareKey($key)
+    function _setupInlineCrypt()
     {
-        static $shifts = array( // number of key bits shifted per round
-            1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
-        );
+        $lambda_functions =& self::_getLambdaFunctions();
+
+        // Engine configuration for:
+        // -  DES ($des_rounds == 1) or
+        // - 3DES ($des_rounds == 3)
+        $des_rounds = $this->des_rounds;
+
+        // We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function.
+        // (Currently, for DES, one generated $lambda_function cost on php5.5@32bit ~135kb unfreeable mem and ~230kb on php5.5@64bit)
+        // (Currently, for TripleDES, one generated $lambda_function cost on php5.5@32bit ~240kb unfreeable mem and ~340kb on php5.5@64bit)
+        // After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one
+        $gen_hi_opt_code = (bool)( count($lambda_functions) < 10 );
+
+        // Generation of a unique hash for our generated code
+        $code_hash = "Crypt_DES, $des_rounds, {$this->mode}";
+        if ($gen_hi_opt_code) {
+            // For hi-optimized code, we create for each combination of
+            // $mode, $des_rounds and $this->key its own encrypt/decrypt function.
+            // After max 10 hi-optimized functions, we create generic
+            // (still very fast.. but not ultra) functions for each $mode/$des_rounds
+            // Currently 2 * 5 generic functions will be then max. possible.
+            $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
+        }
 
-        // pad the key and remove extra characters as appropriate.
-        $key = str_pad(substr($key, 0, 8), 8, chr(0));
+        // Is there a re-usable $lambda_functions in there? If not, we have to create it.
+        if (!isset($lambda_functions[$code_hash])) {
+            // Init code for both, encrypt and decrypt.
+            $init_crypt = 'static $sbox1, $sbox2, $sbox3, $sbox4, $sbox5, $sbox6, $sbox7, $sbox8, $shuffleip, $shuffleinvip;
+                if (!$sbox1) {
+                    $sbox1 = array_map("intval", $self->sbox1);
+                    $sbox2 = array_map("intval", $self->sbox2);
+                    $sbox3 = array_map("intval", $self->sbox3);
+                    $sbox4 = array_map("intval", $self->sbox4);
+                    $sbox5 = array_map("intval", $self->sbox5);
+                    $sbox6 = array_map("intval", $self->sbox6);
+                    $sbox7 = array_map("intval", $self->sbox7);
+                    $sbox8 = array_map("intval", $self->sbox8);'
+                    /* Merge $shuffle with $[inv]ipmap */ . '
+                    for ($i = 0; $i < 256; ++$i) {
+                        $shuffleip[]    =  $self->shuffle[$self->ipmap[$i]];
+                        $shuffleinvip[] =  $self->shuffle[$self->invipmap[$i]];
+                    }
+                }
+            ';
 
-        $temp = unpack('Na/Nb', $key);
-        $key = array($temp['a'], $temp['b']);
-        $msb = array(
-            ($key[0] >> 31) & 1,
-            ($key[1] >> 31) & 1
-        );
-        $key[0] &= 0x7FFFFFFF;
-        $key[1] &= 0x7FFFFFFF;
-
-        $key = array(
-            (($key[1] & 0x00000002) << 26) | (($key[1] & 0x00000204) << 17) |
-            (($key[1] & 0x00020408) <<  8) | (($key[1] & 0x02040800) >>  1) |
-            (($key[0] & 0x00000002) << 22) | (($key[0] & 0x00000204) << 13) |
-            (($key[0] & 0x00020408) <<  4) | (($key[0] & 0x02040800) >>  5) |
-            (($key[1] & 0x04080000) >> 10) | (($key[0] & 0x04080000) >> 14) |
-            (($key[1] & 0x08000000) >> 19) | (($key[0] & 0x08000000) >> 23) |
-            (($key[0] & 0x00000010) >>  1) | (($key[0] & 0x00001000) >> 10) |
-            (($key[0] & 0x00100000) >> 19) | (($key[0] & 0x10000000) >> 28)
-        ,
-            (($key[1] & 0x00000080) << 20) | (($key[1] & 0x00008000) << 11) |
-            (($key[1] & 0x00800000) <<  2) | (($key[0] & 0x00000080) << 16) |
-            (($key[0] & 0x00008000) <<  7) | (($key[0] & 0x00800000) >>  2) |
-            (($key[1] & 0x00000040) << 13) | (($key[1] & 0x00004000) <<  4) |
-            (($key[1] & 0x00400000) >>  5) | (($key[1] & 0x40000000) >> 14) |
-            (($key[0] & 0x00000040) <<  9) | ( $key[0] & 0x00004000       ) |
-            (($key[0] & 0x00400000) >>  9) | (($key[0] & 0x40000000) >> 18) |
-            (($key[1] & 0x00000020) <<  6) | (($key[1] & 0x00002000) >>  3) |
-            (($key[1] & 0x00200000) >> 12) | (($key[1] & 0x20000000) >> 21) |
-            (($key[0] & 0x00000020) <<  2) | (($key[0] & 0x00002000) >>  7) |
-            (($key[0] & 0x00200000) >> 16) | (($key[0] & 0x20000000) >> 25) |
-            (($key[1] & 0x00000010) >>  1) | (($key[1] & 0x00001000) >> 10) |
-            (($key[1] & 0x00100000) >> 19) | (($key[1] & 0x10000000) >> 28) |
-            ($msb[1] << 24) | ($msb[0] << 20)
-        ); 
+            switch (true) {
+                case $gen_hi_opt_code:
+                    // In Hi-optimized code mode, we use our [3]DES key schedule as hardcoded integers.
+                    // No futher initialisation of the $keys schedule is necessary.
+                    // That is the extra performance boost.
+                    $k = array(
+                        self::ENCRYPT => $this->keys[self::ENCRYPT],
+                        self::DECRYPT => $this->keys[self::DECRYPT]
+                    );
+                    $init_encrypt = '';
+                    $init_decrypt = '';
+                    break;
+                default:
+                    // In generic optimized code mode, we have to use, as the best compromise [currently],
+                    // our key schedule as $ke/$kd arrays. (with hardcoded indexes...)
+                    $k = array(
+                        self::ENCRYPT => array(),
+                        self::DECRYPT => array()
+                    );
+                    for ($i = 0, $c = count($this->keys[self::ENCRYPT]); $i < $c; ++$i) {
+                        $k[self::ENCRYPT][$i] = '$ke[' . $i . ']';
+                        $k[self::DECRYPT][$i] = '$kd[' . $i . ']';
+                    }
+                    $init_encrypt = '$ke = $self->keys[$self::ENCRYPT];';
+                    $init_decrypt = '$kd = $self->keys[$self::DECRYPT];';
+                    break;
+            }
 
-        $keys = array();
-        for ($i = 0; $i < 16; $i++) {
-            $key[0] <<= $shifts[$i];
-            $temp = ($key[0] & 0xF0000000) >> 28;
-            $key[0] = ($key[0] | $temp) & 0x0FFFFFFF;
-
-            $key[1] <<= $shifts[$i];
-            $temp = ($key[1] & 0xF0000000) >> 28;
-            $key[1] = ($key[1] | $temp) & 0x0FFFFFFF;
-
-            $temp = array(
-                (($key[1] & 0x00004000) >>  9) | (($key[1] & 0x00000800) >>  7) |
-                (($key[1] & 0x00020000) >> 14) | (($key[1] & 0x00000010) >>  2) |
-                (($key[1] & 0x08000000) >> 26) | (($key[1] & 0x00800000) >> 23)
-            ,
-                (($key[1] & 0x02400000) >> 20) | (($key[1] & 0x00000001) <<  4) |
-                (($key[1] & 0x00002000) >> 10) | (($key[1] & 0x00040000) >> 18) |
-                (($key[1] & 0x00000080) >>  6)
-            ,
-                ( $key[1] & 0x00000020       ) | (($key[1] & 0x00000200) >>  5) |
-                (($key[1] & 0x00010000) >> 13) | (($key[1] & 0x01000000) >> 22) |
-                (($key[1] & 0x00000004) >>  1) | (($key[1] & 0x00100000) >> 20)
-            ,
-                (($key[1] & 0x00001000) >>  7) | (($key[1] & 0x00200000) >> 17) |
-                (($key[1] & 0x00000002) <<  2) | (($key[1] & 0x00000100) >>  6) |
-                (($key[1] & 0x00008000) >> 14) | (($key[1] & 0x04000000) >> 26)
-            ,
-                (($key[0] & 0x00008000) >> 10) | ( $key[0] & 0x00000010       ) |
-                (($key[0] & 0x02000000) >> 22) | (($key[0] & 0x00080000) >> 17) |
-                (($key[0] & 0x00000200) >>  8) | (($key[0] & 0x00000002) >>  1)
-            ,
-                (($key[0] & 0x04000000) >> 21) | (($key[0] & 0x00010000) >> 12) |
-                (($key[0] & 0x00000020) >>  2) | (($key[0] & 0x00000800) >>  9) |
-                (($key[0] & 0x00800000) >> 22) | (($key[0] & 0x00000100) >>  8)
-            ,
-                (($key[0] & 0x00001000) >>  7) | (($key[0] & 0x00000088) >>  3) |
-                (($key[0] & 0x00020000) >> 14) | (($key[0] & 0x00000001) <<  2) |
-                (($key[0] & 0x00400000) >> 21)
-            ,
-                (($key[0] & 0x00000400) >>  5) | (($key[0] & 0x00004000) >> 10) |
-                (($key[0] & 0x00000040) >>  3) | (($key[0] & 0x00100000) >> 18) |
-                (($key[0] & 0x08000000) >> 26) | (($key[0] & 0x01000000) >> 24)
-            );
+            // Creating code for en- and decryption.
+            $crypt_block = array();
+            foreach (array(self::ENCRYPT, self::DECRYPT) as $c) {
+                /* Do the initial IP permutation. */
+                $crypt_block[$c] = '
+                    $in = unpack("N*", $in);
+                    $l  = $in[1];
+                    $r  = $in[2];
+                    $in = unpack("N*",
+                        ($shuffleip[ $r        & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
+                        ($shuffleip[($r >>  8) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
+                        ($shuffleip[($r >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
+                        ($shuffleip[($r >> 24) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
+                        ($shuffleip[ $l        & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
+                        ($shuffleip[($l >>  8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
+                        ($shuffleip[($l >> 16) & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
+                        ($shuffleip[($l >> 24) & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01")
+                    );
+                    ' . /* Extract L0 and R0 */ '
+                    $l = $in[1];
+                    $r = $in[2];
+                ';
+
+                $l = '$l';
+                $r = '$r';
+
+                // Perform DES or 3DES.
+                for ($ki = -1, $des_round = 0; $des_round < $des_rounds; ++$des_round) {
+                    // Perform the 16 steps.
+                    for ($i = 0; $i < 16; ++$i) {
+                        // start of "the Feistel (F) function" - see the following URL:
+                        // http://en.wikipedia.org/wiki/Image:Data_Encryption_Standard_InfoBox_Diagram.png
+                        // Merge key schedule.
+                        $crypt_block[$c].= '
+                            $b1 = ((' . $r . ' >>  3) & 0x1FFFFFFF)  ^ (' . $r . ' << 29) ^ ' . $k[$c][++$ki] . ';
+                            $b2 = ((' . $r . ' >> 31) & 0x00000001)  ^ (' . $r . ' <<  1) ^ ' . $k[$c][++$ki] . ';' .
+                            /* S-box indexing. */
+                            $l . ' = $sbox1[($b1 >> 24) & 0x3F] ^ $sbox2[($b2 >> 24) & 0x3F] ^
+                                     $sbox3[($b1 >> 16) & 0x3F] ^ $sbox4[($b2 >> 16) & 0x3F] ^
+                                     $sbox5[($b1 >>  8) & 0x3F] ^ $sbox6[($b2 >>  8) & 0x3F] ^
+                                     $sbox7[ $b1        & 0x3F] ^ $sbox8[ $b2        & 0x3F] ^ ' . $l . ';
+                        ';
+                        // end of "the Feistel (F) function"
+
+                        // swap L & R
+                        list($l, $r) = array($r, $l);
+                    }
+                    list($l, $r) = array($r, $l);
+                }
 
-            $keys[] = $temp;
-        }
+                // Perform the inverse IP permutation.
+                $crypt_block[$c].= '$in =
+                    ($shuffleinvip[($l >> 24) & 0xFF] & "\x80\x80\x80\x80\x80\x80\x80\x80") |
+                    ($shuffleinvip[($r >> 24) & 0xFF] & "\x40\x40\x40\x40\x40\x40\x40\x40") |
+                    ($shuffleinvip[($l >> 16) & 0xFF] & "\x20\x20\x20\x20\x20\x20\x20\x20") |
+                    ($shuffleinvip[($r >> 16) & 0xFF] & "\x10\x10\x10\x10\x10\x10\x10\x10") |
+                    ($shuffleinvip[($l >>  8) & 0xFF] & "\x08\x08\x08\x08\x08\x08\x08\x08") |
+                    ($shuffleinvip[($r >>  8) & 0xFF] & "\x04\x04\x04\x04\x04\x04\x04\x04") |
+                    ($shuffleinvip[ $l        & 0xFF] & "\x02\x02\x02\x02\x02\x02\x02\x02") |
+                    ($shuffleinvip[ $r        & 0xFF] & "\x01\x01\x01\x01\x01\x01\x01\x01");
+                ';
+            }
 
-        $temp = array(
-            CRYPT_DES_ENCRYPT => $keys,
-            CRYPT_DES_DECRYPT => array_reverse($keys)
-        );
+            // Creates the inline-crypt function
+            $lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
+                array(
+                   'init_crypt'    => $init_crypt,
+                   'init_encrypt'  => $init_encrypt,
+                   'init_decrypt'  => $init_decrypt,
+                   'encrypt_block' => $crypt_block[self::ENCRYPT],
+                   'decrypt_block' => $crypt_block[self::DECRYPT]
+                )
+            );
+        }
 
-        return $temp;
+        // Set the inline-crypt function as callback in: $this->inline_crypt
+        $this->inline_crypt = $lambda_functions[$code_hash];
     }
 }
-
-// vim: ts=4:sw=4:et:
-// vim6: fdl=1:
diff --git a/lib/phpseclib/Crypt/Hash.php b/lib/phpseclib/Crypt/Hash.php
index 1a878e2..6ae0132 100644
--- a/lib/phpseclib/Crypt/Hash.php
+++ b/lib/phpseclib/Crypt/Hash.php
@@ -1,27 +1,26 @@
 <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
  * Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic hashing functions.
  *
  * Uses hash() or mhash() if available and an internal implementation, otherwise.  Currently supports the following:
  *
- * md2, md5, md5-96, sha1, sha1-96, sha256, sha384, and sha512
+ * md2, md5, md5-96, sha1, sha1-96, sha256, sha256-96, sha384, and sha512, sha512-96
  *
- * If {@link Crypt_Hash::setKey() setKey()} is called, {@link Crypt_Hash::hash() hash()} will return the HMAC as opposed to
+ * If {@link self::setKey() setKey()} is called, {@link self::hash() hash()} will return the HMAC as opposed to
  * the hash.  If no valid algorithm is provided, sha1 will be used.
  *
- * PHP versions 4 and 5
+ * PHP version 5
  *
- * {@internal The variable names are the same as those in 
+ * {@internal The variable names are the same as those in
  * {@link http://tools.ietf.org/html/rfc2104#section-2 RFC2104}.}}
  *
  * Here's a short example of how to use this library:
  * <code>
  * <?php
- *    include('Crypt/Hash.php');
+ *    include 'vendor/autoload.php';
  *
- *    $hash = new Crypt_Hash('sha1');
+ *    $hash = new \phpseclib\Crypt\Hash('sha1');
  *
  *    $hash->setKey('abcdefg');
  *
@@ -29,62 +28,59 @@
  * ?>
  * </code>
  *
- * LICENSE: This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- *
- * @category   Crypt
- * @package    Crypt_Hash
- * @author     Jim Wigginton <terrafrost@php.net>
- * @copyright  MMVII Jim Wigginton
- * @license    http://www.gnu.org/licenses/lgpl.txt
- * @version    $Id: Hash.php,v 1.6 2009/11/23 23:37:07 terrafrost Exp $
- * @link       http://phpseclib.sourceforge.net
+ * @category  Crypt
+ * @package   Hash
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2007 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
  */
 
-/**#@+
- * @access private
- * @see Crypt_Hash::Crypt_Hash()
- */
-/**
- * Toggles the internal implementation
- */
-define('CRYPT_HASH_MODE_INTERNAL', 1);
-/**
- * Toggles the mhash() implementation, which has been deprecated on PHP 5.3.0+.
- */
-define('CRYPT_HASH_MODE_MHASH',    2);
-/**
- * Toggles the hash() implementation, which works on PHP 5.1.2+.
- */
-define('CRYPT_HASH_MODE_HASH',     3);
-/**#@-*/
+namespace phpseclib\Crypt;
+
+use phpseclib\Math\BigInteger;
 
 /**
  * Pure-PHP implementations of keyed-hash message authentication codes (HMACs) and various cryptographic hashing functions.
  *
+ * @package Hash
  * @author  Jim Wigginton <terrafrost@php.net>
- * @version 0.1.0
  * @access  public
- * @package Crypt_Hash
  */
-class Crypt_Hash {
+class Hash
+{
+    /**#@+
+     * @access private
+     * @see \phpseclib\Crypt\Hash::__construct()
+     */
+    /**
+     * Toggles the internal implementation
+     */
+    const MODE_INTERNAL = 1;
+    /**
+     * Toggles the mhash() implementation, which has been deprecated on PHP 5.3.0+.
+     */
+    const MODE_MHASH = 2;
+    /**
+     * Toggles the hash() implementation, which works on PHP 5.1.2+.
+     */
+    const MODE_HASH = 3;
+    /**#@-*/
+
+    /**
+     * Hash Parameter
+     *
+     * @see self::setHash()
+     * @var int
+     * @access private
+     */
+    var $hashParam;
+
     /**
      * Byte-length of compression blocks / key (Internal HMAC)
      *
-     * @see Crypt_Hash::setAlgorithm()
-     * @var Integer
+     * @see self::setAlgorithm()
+     * @var int
      * @access private
      */
     var $b;
@@ -92,8 +88,8 @@ class Crypt_Hash {
     /**
      * Byte-length of hash output (Internal HMAC)
      *
-     * @see Crypt_Hash::setHash()
-     * @var Integer
+     * @see self::setHash()
+     * @var int
      * @access private
      */
     var $l = false;
@@ -101,8 +97,8 @@ class Crypt_Hash {
     /**
      * Hash Algorithm
      *
-     * @see Crypt_Hash::setHash()
-     * @var String
+     * @see self::setHash()
+     * @var string
      * @access private
      */
     var $hash;
@@ -110,17 +106,17 @@ class Crypt_Hash {
     /**
      * Key
      *
-     * @see Crypt_Hash::setKey()
-     * @var String
+     * @see self::setKey()
+     * @var string
      * @access private
      */
-    var $key = '';
+    var $key = false;
 
     /**
      * Outer XOR (Internal HMAC)
      *
-     * @see Crypt_Hash::setKey()
-     * @var String
+     * @see self::setKey()
+     * @var string
      * @access private
      */
     var $opad;
@@ -128,8 +124,8 @@ class Crypt_Hash {
     /**
      * Inner XOR (Internal HMAC)
      *
-     * @see Crypt_Hash::setKey()
-     * @var String
+     * @see self::setKey()
+     * @var string
      * @access private
      */
     var $ipad;
@@ -137,22 +133,22 @@ class Crypt_Hash {
     /**
      * Default Constructor.
      *
-     * @param optional String $hash
-     * @return Crypt_Hash
+     * @param string $hash
+     * @return \phpseclib\Crypt\Hash
      * @access public
      */
-    function Crypt_Hash($hash = 'sha1')
+    function __construct($hash = 'sha1')
     {
-        if ( !defined('CRYPT_HASH_MODE') ) {
+        if (!defined('CRYPT_HASH_MODE')) {
             switch (true) {
                 case extension_loaded('hash'):
-                    define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_HASH);
+                    define('CRYPT_HASH_MODE', self::MODE_HASH);
                     break;
                 case extension_loaded('mhash'):
-                    define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_MHASH);
+                    define('CRYPT_HASH_MODE', self::MODE_MHASH);
                     break;
                 default:
-                    define('CRYPT_HASH_MODE', CRYPT_HASH_MODE_INTERNAL);
+                    define('CRYPT_HASH_MODE', self::MODE_INTERNAL);
             }
         }
 
@@ -165,24 +161,41 @@ class Crypt_Hash {
      * Keys can be of any length.
      *
      * @access public
-     * @param String $key
+     * @param string $key
      */
-    function setKey($key)
+    function setKey($key = false)
     {
         $this->key = $key;
     }
 
     /**
+     * Gets the hash function.
+     *
+     * As set by the constructor or by the setHash() method.
+     *
+     * @access public
+     * @return string
+     */
+    function getHash()
+    {
+        return $this->hashParam;
+    }
+
+    /**
      * Sets the hash function.
      *
      * @access public
-     * @param String $hash
+     * @param string $hash
      */
     function setHash($hash)
     {
+        $this->hashParam = $hash = strtolower($hash);
         switch ($hash) {
             case 'md5-96':
             case 'sha1-96':
+            case 'sha256-96':
+            case 'sha512-96':
+                $hash = substr($hash, 0, -3);
                 $this->l = 12; // 96 / 8 = 12
                 break;
             case 'md2':
@@ -204,45 +217,43 @@ class Crypt_Hash {
 
         switch ($hash) {
             case 'md2':
-                $mode = CRYPT_HASH_MODE_INTERNAL;
+                $mode = CRYPT_HASH_MODE == self::MODE_HASH && in_array('md2', hash_algos()) ?
+                    self::MODE_HASH : self::MODE_INTERNAL;
                 break;
             case 'sha384':
             case 'sha512':
-                $mode = CRYPT_HASH_MODE == CRYPT_HASH_MODE_MHASH ? CRYPT_HASH_MODE_INTERNAL : CRYPT_HASH_MODE;
+                $mode = CRYPT_HASH_MODE == self::MODE_MHASH ? self::MODE_INTERNAL : CRYPT_HASH_MODE;
                 break;
             default:
                 $mode = CRYPT_HASH_MODE;
         }
 
-        switch ( $mode ) {
-            case CRYPT_HASH_MODE_MHASH:
+        switch ($mode) {
+            case self::MODE_MHASH:
                 switch ($hash) {
                     case 'md5':
-                    case 'md5-96':
                         $this->hash = MHASH_MD5;
                         break;
                     case 'sha256':
                         $this->hash = MHASH_SHA256;
                         break;
                     case 'sha1':
-                    case 'sha1-96':
                     default:
                         $this->hash = MHASH_SHA1;
                 }
                 return;
-            case CRYPT_HASH_MODE_HASH:
+            case self::MODE_HASH:
                 switch ($hash) {
                     case 'md5':
-                    case 'md5-96':
                         $this->hash = 'md5';
                         return;
+                    case 'md2':
                     case 'sha256':
                     case 'sha384':
                     case 'sha512':
                         $this->hash = $hash;
                         return;
                     case 'sha1':
-                    case 'sha1-96':
                     default:
                         $this->hash = 'sha1';
                 }
@@ -251,28 +262,26 @@ class Crypt_Hash {
 
         switch ($hash) {
             case 'md2':
-                 $this->b = 16;
-                 $this->hash = array($this, '_md2');
-                 break;
+                $this->b = 16;
+                $this->hash = array($this, '_md2');
+                break;
             case 'md5':
-            case 'md5-96':
-                 $this->b = 64;
-                 $this->hash = array($this, '_md5');
-                 break;
+                $this->b = 64;
+                $this->hash = array($this, '_md5');
+                break;
             case 'sha256':
-                 $this->b = 64;
-                 $this->hash = array($this, '_sha256');
-                 break;
+                $this->b = 64;
+                $this->hash = array($this, '_sha256');
+                break;
             case 'sha384':
             case 'sha512':
-                 $this->b = 128;
-                 $this->hash = array($this, '_sha512');
-                 break;
+                $this->b = 128;
+                $this->hash = array($this, '_sha512');
+                break;
             case 'sha1':
-            case 'sha1-96':
             default:
-                 $this->b = 64;
-                 $this->hash = array($this, '_sha1');
+                $this->b = 64;
+                $this->hash = array($this, '_sha1');
         }
 
         $this->ipad = str_repeat(chr(0x36), $this->b);
@@ -283,27 +292,27 @@ class Crypt_Hash {
      * Compute the HMAC.
      *
      * @access public
-     * @param String $text
-     * @return String
+     * @param string $text
+     * @return string
      */
     function hash($text)
     {
-        $mode = is_array($this->hash) ? CRYPT_HASH_MODE_INTERNAL : CRYPT_HASH_MODE;
+        $mode = is_array($this->hash) ? self::MODE_INTERNAL : CRYPT_HASH_MODE;
 
-        if (!empty($this->key)) {
-            switch ( $mode ) {
-                case CRYPT_HASH_MODE_MHASH:
+        if (!empty($this->key) || is_string($this->key)) {
+            switch ($mode) {
+                case self::MODE_MHASH:
                     $output = mhash($this->hash, $text, $this->key);
                     break;
-                case CRYPT_HASH_MODE_HASH:
+                case self::MODE_HASH:
                     $output = hash_hmac($this->hash, $text, $this->key, true);
                     break;
-                case CRYPT_HASH_MODE_INTERNAL:
+                case self::MODE_INTERNAL:
                     /* "Applications that use keys longer than B bytes will first hash the key using H and then use the
                         resultant L byte string as the actual key to HMAC."
 
                         -- http://tools.ietf.org/html/rfc2104#section-2 */
-                    $key = strlen($this->key) > $this->b ? call_user_func($this->$hash, $this->key) : $this->key;
+                    $key = strlen($this->key) > $this->b ? call_user_func($this->hash, $this->key) : $this->key;
 
                     $key    = str_pad($key, $this->b, chr(0));      // step 1
                     $temp   = $this->ipad ^ $key;                   // step 2
@@ -314,14 +323,14 @@ class Crypt_Hash {
                     $output = call_user_func($this->hash, $output); // step 7
             }
         } else {
-            switch ( $mode ) {
-                case CRYPT_HASH_MODE_MHASH:
+            switch ($mode) {
+                case self::MODE_MHASH:
                     $output = mhash($this->hash, $text);
                     break;
-                case CRYPT_HASH_MODE_HASH:
+                case self::MODE_HASH:
                     $output = hash($this->hash, $text, true);
                     break;
-                case CRYPT_HASH_MODE_INTERNAL:
+                case self::MODE_INTERNAL:
                     $output = call_user_func($this->hash, $text);
             }
         }
@@ -332,8 +341,8 @@ class Crypt_Hash {
     /**
      * Returns the hash length (in bytes)
      *
-     * @access private
-     * @return Integer
+     * @access public
+     * @return int
      */
     function getLength()
     {
@@ -344,7 +353,7 @@ class Crypt_Hash {
      * Wrapper for MD5
      *
      * @access private
-     * @param String $text
+     * @param string $m
      */
     function _md5($m)
     {
@@ -355,7 +364,7 @@ class Crypt_Hash {
      * Wrapper for SHA1
      *
      * @access private
-     * @param String $text
+     * @param string $m
      */
     function _sha1($m)
     {
@@ -368,7 +377,7 @@ class Crypt_Hash {
      * See {@link http://tools.ietf.org/html/rfc1319 RFC1319}.
      *
      * @access private
-     * @param String $text
+     * @param string $m
      */
     function _md2($m)
     {
@@ -404,7 +413,10 @@ class Crypt_Hash {
         $l = chr(0);
         for ($i = 0; $i < $length; $i+= 16) {
             for ($j = 0; $j < 16; $j++) {
-                $c[$j] = chr($s[ord($m[$i + $j] ^ $l)]);
+                // RFC1319 incorrectly states that C[j] should be set to S[c xor L]
+                //$c[$j] = chr($s[ord($m[$i + $j] ^ $l)]);
+                // per <http://www.rfc-editor.org/errata_search.php?rfc=1319>, however, C[j] should be set to S[c xor L] xor C[j]
+                $c[$j] = chr($s[ord($m[$i + $j] ^ $l)] ^ ord($c[$j]));
                 $l = $c[$j];
             }
         }
@@ -441,7 +453,7 @@ class Crypt_Hash {
      * See {@link http://en.wikipedia.org/wiki/SHA_hash_functions#SHA-256_.28a_SHA-2_variant.29_pseudocode SHA-256 (a SHA-2 variant) pseudocode - Wikipedia}.
      *
      * @access private
-     * @param String $text
+     * @param string $m
      */
     function _sha256($m)
     {
@@ -485,14 +497,15 @@ class Crypt_Hash {
 
             // Extend the sixteen 32-bit words into sixty-four 32-bit words
             for ($i = 16; $i < 64; $i++) {
+                // @codingStandardsIgnoreStart
                 $s0 = $this->_rightRotate($w[$i - 15],  7) ^
                       $this->_rightRotate($w[$i - 15], 18) ^
                       $this->_rightShift( $w[$i - 15],  3);
                 $s1 = $this->_rightRotate($w[$i - 2], 17) ^
                       $this->_rightRotate($w[$i - 2], 19) ^
                       $this->_rightShift( $w[$i - 2], 10);
+                // @codingStandardsIgnoreEnd
                 $w[$i] = $this->_add($w[$i - 16], $s0, $w[$i - 7], $s1);
-
             }
 
             // Initialize hash value for this chunk
@@ -546,31 +559,27 @@ class Crypt_Hash {
      * Pure-PHP implementation of SHA384 and SHA512
      *
      * @access private
-     * @param String $text
+     * @param string $m
      */
     function _sha512($m)
     {
-        if (!class_exists('Math_BigInteger')) {
-            require_once('Math/BigInteger.php');
-        }
-
         static $init384, $init512, $k;
 
         if (!isset($k)) {
             // Initialize variables
             $init384 = array( // initial values for SHA384
-                'cbbb9d5dc1059ed8', '629a292a367cd507', '9159015a3070dd17', '152fecd8f70e5939', 
+                'cbbb9d5dc1059ed8', '629a292a367cd507', '9159015a3070dd17', '152fecd8f70e5939',
                 '67332667ffc00b31', '8eb44a8768581511', 'db0c2e0d64f98fa7', '47b5481dbefa4fa4'
             );
             $init512 = array( // initial values for SHA512
-                '6a09e667f3bcc908', 'bb67ae8584caa73b', '3c6ef372fe94f82b', 'a54ff53a5f1d36f1', 
+                '6a09e667f3bcc908', 'bb67ae8584caa73b', '3c6ef372fe94f82b', 'a54ff53a5f1d36f1',
                 '510e527fade682d1', '9b05688c2b3e6c1f', '1f83d9abfb41bd6b', '5be0cd19137e2179'
             );
 
             for ($i = 0; $i < 8; $i++) {
-                $init384[$i] = new Math_BigInteger($init384[$i], 16);
+                $init384[$i] = new BigInteger($init384[$i], 16);
                 $init384[$i]->setPrecision(64);
-                $init512[$i] = new Math_BigInteger($init512[$i], 16);
+                $init512[$i] = new BigInteger($init512[$i], 16);
                 $init512[$i]->setPrecision(64);
             }
 
@@ -600,7 +609,7 @@ class Crypt_Hash {
             );
 
             for ($i = 0; $i < 80; $i++) {
-                $k[$i] = new Math_BigInteger($k[$i], 16);
+                $k[$i] = new BigInteger($k[$i], 16);
             }
         }
 
@@ -619,7 +628,7 @@ class Crypt_Hash {
         foreach ($chunks as $chunk) {
             $w = array();
             for ($i = 0; $i < 16; $i++) {
-                $temp = new Math_BigInteger($this->_string_shift($chunk, 8), 256);
+                $temp = new BigInteger($this->_string_shift($chunk, 8), 256);
                 $temp->setPrecision(64);
                 $w[] = $temp;
             }
@@ -715,7 +724,7 @@ class Crypt_Hash {
         }
 
         // Produce the final hash value (big-endian)
-        // (Crypt_Hash::hash() trims the output for hashes but not for HMACs.  as such, we trim the output here)
+        // (\phpseclib\Crypt\Hash::hash() trims the output for hashes but not for HMACs.  as such, we trim the output here)
         $temp = $hash[0]->toBytes() . $hash[1]->toBytes() . $hash[2]->toBytes() . $hash[3]->toBytes() .
                 $hash[4]->toBytes() . $hash[5]->toBytes();
         if ($this->l != 48) {
@@ -729,10 +738,10 @@ class Crypt_Hash {
      * Right Rotate
      *
      * @access private
-     * @param Integer $int
-     * @param Integer $amt
-     * @see _sha256()
-     * @return Integer
+     * @param int $int
+     * @param int $amt
+     * @see self::_sha256()
+     * @return int
      */
     function _rightRotate($int, $amt)
     {
@@ -745,10 +754,10 @@ class Crypt_Hash {
      * Right Shift
      *
      * @access private
-     * @param Integer $int
-     * @param Integer $amt
-     * @see _sha256()
-     * @return Integer
+     * @param int $int
+     * @param int $amt
+     * @see self::_sha256()
+     * @return int
      */
     function _rightShift($int, $amt)
     {
@@ -760,9 +769,9 @@ class Crypt_Hash {
      * Not
      *
      * @access private
-     * @param Integer $int
-     * @see _sha256()
-     * @return Integer
+     * @param int $int
+     * @see self::_sha256()
+     * @return int
      */
     function _not($int)
     {
@@ -773,12 +782,11 @@ class Crypt_Hash {
      * Add
      *
      * _sha256() adds multiple unsigned 32-bit integers.  Since PHP doesn't support unsigned integers and since the
-     * possibility of overflow exists, care has to be taken.  Math_BigInteger() could be used but this should be faster.
+     * possibility of overflow exists, care has to be taken.  BigInteger could be used but this should be faster.
      *
-     * @param String $string
-     * @param optional Integer $index
-     * @return String
-     * @see _sha256()
+     * @param int $...
+     * @return int
+     * @see self::_sha256()
      * @access private
      */
     function _add()
@@ -794,7 +802,12 @@ class Crypt_Hash {
             $result+= $argument < 0 ? ($argument & 0x7FFFFFFF) + 0x80000000 : $argument;
         }
 
-        return fmod($result, $mod);
+        if ((php_uname('m') & "\xDF\xDF\xDF") != 'ARM') {
+            return fmod($result, $mod);
+        }
+
+        return (fmod($result, 0x80000000) & 0x7FFFFFFF) |
+            ((fmod(floor($result / 0x80000000), 2) & 1) << 31);
     }
 
     /**
@@ -802,9 +815,9 @@ class Crypt_Hash {
      *
      * Inspired by array_shift
      *
-     * @param String $string
-     * @param optional Integer $index
-     * @return String
+     * @param string $string
+     * @param int $index
+     * @return string
      * @access private
      */
     function _string_shift(&$string, $index = 1)
diff --git a/lib/phpseclib/Crypt/RC2.php b/lib/phpseclib/Crypt/RC2.php
new file mode 100644
index 0000000..b2b9d48
--- /dev/null
+++ b/lib/phpseclib/Crypt/RC2.php
@@ -0,0 +1,688 @@
+<?php
+
+/**
+ * Pure-PHP implementation of RC2.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.
+ *
+ * PHP version 5
+ *
+ * Useful resources are as follows:
+ *
+ *  - {@link http://tools.ietf.org/html/rfc2268}
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include 'vendor/autoload.php';
+ *
+ *    $rc2 = new \phpseclib\Crypt\RC2();
+ *
+ *    $rc2->setKey('abcdefgh');
+ *
+ *    $plaintext = str_repeat('a', 1024);
+ *
+ *    echo $rc2->decrypt($rc2->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * @category Crypt
+ * @package  RC2
+ * @author   Patrick Monnerat <pm@datasphere.ch>
+ * @license  http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link     http://phpseclib.sourceforge.net
+ */
+
+namespace phpseclib\Crypt;
+
+/**
+ * Pure-PHP implementation of RC2.
+ *
+ * @package RC2
+ * @access  public
+ */
+class RC2 extends Base
+{
+    /**
+     * Block Length of the cipher
+     *
+     * @see \phpseclib\Crypt\Base::block_size
+     * @var int
+     * @access private
+     */
+    var $block_size = 8;
+
+    /**
+     * The Key
+     *
+     * @see \phpseclib\Crypt\Base::key
+     * @see self::setKey()
+     * @var string
+     * @access private
+     */
+    var $key;
+
+    /**
+     * The Original (unpadded) Key
+     *
+     * @see \phpseclib\Crypt\Base::key
+     * @see self::setKey()
+     * @see self::encrypt()
+     * @see self::decrypt()
+     * @var string
+     * @access private
+     */
+    var $orig_key;
+
+    /**
+     * Don't truncate / null pad key
+     *
+     * @see \phpseclib\Crypt\Base::_clearBuffers()
+     * @var bool
+     * @access private
+     */
+    var $skip_key_adjustment = true;
+
+    /**
+     * Key Length (in bytes)
+     *
+     * @see \phpseclib\Crypt\RC2::setKeyLength()
+     * @var int
+     * @access private
+     */
+    var $key_length = 16; // = 128 bits
+
+    /**
+     * The mcrypt specific name of the cipher
+     *
+     * @see \phpseclib\Crypt\Base::cipher_name_mcrypt
+     * @var string
+     * @access private
+     */
+    var $cipher_name_mcrypt = 'rc2';
+
+    /**
+     * Optimizing value while CFB-encrypting
+     *
+     * @see \phpseclib\Crypt\Base::cfb_init_len
+     * @var int
+     * @access private
+     */
+    var $cfb_init_len = 500;
+
+    /**
+     * The key length in bits.
+     *
+     * @see self::setKeyLength()
+     * @see self::setKey()
+     * @var int
+     * @access private
+     * @internal Should be in range [1..1024].
+     * @internal Changing this value after setting the key has no effect.
+     */
+    var $default_key_length = 1024;
+
+    /**
+     * The key length in bits.
+     *
+     * @see self::isValidEnine()
+     * @see self::setKey()
+     * @var int
+     * @access private
+     * @internal Should be in range [1..1024].
+     */
+    var $current_key_length;
+
+    /**
+     * The Key Schedule
+     *
+     * @see self::_setupKey()
+     * @var array
+     * @access private
+     */
+    var $keys;
+
+    /**
+     * Key expansion randomization table.
+     * Twice the same 256-value sequence to save a modulus in key expansion.
+     *
+     * @see self::setKey()
+     * @var array
+     * @access private
+     */
+    var $pitable = array(
+        0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED,
+        0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D,
+        0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E,
+        0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2,
+        0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13,
+        0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32,
+        0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B,
+        0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82,
+        0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C,
+        0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC,
+        0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1,
+        0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26,
+        0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57,
+        0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03,
+        0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7,
+        0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7,
+        0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7,
+        0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A,
+        0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74,
+        0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC,
+        0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC,
+        0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39,
+        0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A,
+        0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31,
+        0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE,
+        0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9,
+        0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C,
+        0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9,
+        0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0,
+        0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E,
+        0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77,
+        0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD,
+        0xD9, 0x78, 0xF9, 0xC4, 0x19, 0xDD, 0xB5, 0xED,
+        0x28, 0xE9, 0xFD, 0x79, 0x4A, 0xA0, 0xD8, 0x9D,
+        0xC6, 0x7E, 0x37, 0x83, 0x2B, 0x76, 0x53, 0x8E,
+        0x62, 0x4C, 0x64, 0x88, 0x44, 0x8B, 0xFB, 0xA2,
+        0x17, 0x9A, 0x59, 0xF5, 0x87, 0xB3, 0x4F, 0x13,
+        0x61, 0x45, 0x6D, 0x8D, 0x09, 0x81, 0x7D, 0x32,
+        0xBD, 0x8F, 0x40, 0xEB, 0x86, 0xB7, 0x7B, 0x0B,
+        0xF0, 0x95, 0x21, 0x22, 0x5C, 0x6B, 0x4E, 0x82,
+        0x54, 0xD6, 0x65, 0x93, 0xCE, 0x60, 0xB2, 0x1C,
+        0x73, 0x56, 0xC0, 0x14, 0xA7, 0x8C, 0xF1, 0xDC,
+        0x12, 0x75, 0xCA, 0x1F, 0x3B, 0xBE, 0xE4, 0xD1,
+        0x42, 0x3D, 0xD4, 0x30, 0xA3, 0x3C, 0xB6, 0x26,
+        0x6F, 0xBF, 0x0E, 0xDA, 0x46, 0x69, 0x07, 0x57,
+        0x27, 0xF2, 0x1D, 0x9B, 0xBC, 0x94, 0x43, 0x03,
+        0xF8, 0x11, 0xC7, 0xF6, 0x90, 0xEF, 0x3E, 0xE7,
+        0x06, 0xC3, 0xD5, 0x2F, 0xC8, 0x66, 0x1E, 0xD7,
+        0x08, 0xE8, 0xEA, 0xDE, 0x80, 0x52, 0xEE, 0xF7,
+        0x84, 0xAA, 0x72, 0xAC, 0x35, 0x4D, 0x6A, 0x2A,
+        0x96, 0x1A, 0xD2, 0x71, 0x5A, 0x15, 0x49, 0x74,
+        0x4B, 0x9F, 0xD0, 0x5E, 0x04, 0x18, 0xA4, 0xEC,
+        0xC2, 0xE0, 0x41, 0x6E, 0x0F, 0x51, 0xCB, 0xCC,
+        0x24, 0x91, 0xAF, 0x50, 0xA1, 0xF4, 0x70, 0x39,
+        0x99, 0x7C, 0x3A, 0x85, 0x23, 0xB8, 0xB4, 0x7A,
+        0xFC, 0x02, 0x36, 0x5B, 0x25, 0x55, 0x97, 0x31,
+        0x2D, 0x5D, 0xFA, 0x98, 0xE3, 0x8A, 0x92, 0xAE,
+        0x05, 0xDF, 0x29, 0x10, 0x67, 0x6C, 0xBA, 0xC9,
+        0xD3, 0x00, 0xE6, 0xCF, 0xE1, 0x9E, 0xA8, 0x2C,
+        0x63, 0x16, 0x01, 0x3F, 0x58, 0xE2, 0x89, 0xA9,
+        0x0D, 0x38, 0x34, 0x1B, 0xAB, 0x33, 0xFF, 0xB0,
+        0xBB, 0x48, 0x0C, 0x5F, 0xB9, 0xB1, 0xCD, 0x2E,
+        0xC5, 0xF3, 0xDB, 0x47, 0xE5, 0xA5, 0x9C, 0x77,
+        0x0A, 0xA6, 0x20, 0x68, 0xFE, 0x7F, 0xC1, 0xAD
+    );
+
+    /**
+     * Inverse key expansion randomization table.
+     *
+     * @see self::setKey()
+     * @var array
+     * @access private
+     */
+    var $invpitable = array(
+        0xD1, 0xDA, 0xB9, 0x6F, 0x9C, 0xC8, 0x78, 0x66,
+        0x80, 0x2C, 0xF8, 0x37, 0xEA, 0xE0, 0x62, 0xA4,
+        0xCB, 0x71, 0x50, 0x27, 0x4B, 0x95, 0xD9, 0x20,
+        0x9D, 0x04, 0x91, 0xE3, 0x47, 0x6A, 0x7E, 0x53,
+        0xFA, 0x3A, 0x3B, 0xB4, 0xA8, 0xBC, 0x5F, 0x68,
+        0x08, 0xCA, 0x8F, 0x14, 0xD7, 0xC0, 0xEF, 0x7B,
+        0x5B, 0xBF, 0x2F, 0xE5, 0xE2, 0x8C, 0xBA, 0x12,
+        0xE1, 0xAF, 0xB2, 0x54, 0x5D, 0x59, 0x76, 0xDB,
+        0x32, 0xA2, 0x58, 0x6E, 0x1C, 0x29, 0x64, 0xF3,
+        0xE9, 0x96, 0x0C, 0x98, 0x19, 0x8D, 0x3E, 0x26,
+        0xAB, 0xA5, 0x85, 0x16, 0x40, 0xBD, 0x49, 0x67,
+        0xDC, 0x22, 0x94, 0xBB, 0x3C, 0xC1, 0x9B, 0xEB,
+        0x45, 0x28, 0x18, 0xD8, 0x1A, 0x42, 0x7D, 0xCC,
+        0xFB, 0x65, 0x8E, 0x3D, 0xCD, 0x2A, 0xA3, 0x60,
+        0xAE, 0x93, 0x8A, 0x48, 0x97, 0x51, 0x15, 0xF7,
+        0x01, 0x0B, 0xB7, 0x36, 0xB1, 0x2E, 0x11, 0xFD,
+        0x84, 0x2D, 0x3F, 0x13, 0x88, 0xB3, 0x34, 0x24,
+        0x1B, 0xDE, 0xC5, 0x1D, 0x4D, 0x2B, 0x17, 0x31,
+        0x74, 0xA9, 0xC6, 0x43, 0x6D, 0x39, 0x90, 0xBE,
+        0xC3, 0xB0, 0x21, 0x6B, 0xF6, 0x0F, 0xD5, 0x99,
+        0x0D, 0xAC, 0x1F, 0x5C, 0x9E, 0xF5, 0xF9, 0x4C,
+        0xD6, 0xDF, 0x89, 0xE4, 0x8B, 0xFF, 0xC7, 0xAA,
+        0xE7, 0xED, 0x46, 0x25, 0xB6, 0x06, 0x5E, 0x35,
+        0xB5, 0xEC, 0xCE, 0xE8, 0x6C, 0x30, 0x55, 0x61,
+        0x4A, 0xFE, 0xA0, 0x79, 0x03, 0xF0, 0x10, 0x72,
+        0x7C, 0xCF, 0x52, 0xA6, 0xA7, 0xEE, 0x44, 0xD3,
+        0x9A, 0x57, 0x92, 0xD0, 0x5A, 0x7A, 0x41, 0x7F,
+        0x0E, 0x00, 0x63, 0xF2, 0x4F, 0x05, 0x83, 0xC9,
+        0xA1, 0xD4, 0xDD, 0xC4, 0x56, 0xF4, 0xD2, 0x77,
+        0x81, 0x09, 0x82, 0x33, 0x9F, 0x07, 0x86, 0x75,
+        0x38, 0x4E, 0x69, 0xF1, 0xAD, 0x23, 0x73, 0x87,
+        0x70, 0x02, 0xC2, 0x1E, 0xB8, 0x0A, 0xFC, 0xE6
+    );
+
+    /**
+     * Test for engine validity
+     *
+     * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine()
+     *
+     * @see \phpseclib\Crypt\Base::__construct()
+     * @param int $engine
+     * @access public
+     * @return bool
+     */
+    function isValidEngine($engine)
+    {
+        switch ($engine) {
+            case self::ENGINE_OPENSSL:
+                if ($this->current_key_length != 128 || strlen($this->orig_key) < 16) {
+                    return false;
+                }
+                $this->cipher_name_openssl_ecb = 'rc2-ecb';
+                $this->cipher_name_openssl = 'rc2-' . $this->_openssl_translate_mode();
+        }
+
+        return parent::isValidEngine($engine);
+    }
+
+    /**
+     * Sets the key length.
+     *
+     * Valid key lengths are 8 to 1024.
+     * Calling this function after setting the key has no effect until the next
+     *  \phpseclib\Crypt\RC2::setKey() call.
+     *
+     * @access public
+     * @param int $length in bits
+     */
+    function setKeyLength($length)
+    {
+        if ($length < 8) {
+            $this->default_key_length = 1;
+        } elseif ($length > 1024) {
+            $this->default_key_length = 128;
+        } else {
+            $this->default_key_length = $length;
+        }
+        $this->current_key_length = $this->default_key_length;
+
+        parent::setKeyLength($length);
+    }
+
+    /**
+     * Returns the current key length
+     *
+     * @access public
+     * @return int
+     */
+    function getKeyLength()
+    {
+        return $this->current_key_length;
+    }
+
+    /**
+     * Sets the key.
+     *
+     * Keys can be of any length. RC2, itself, uses 8 to 1024 bit keys (eg.
+     * strlen($key) <= 128), however, we only use the first 128 bytes if $key
+     * has more then 128 bytes in it, and set $key to a single null byte if
+     * it is empty.
+     *
+     * If the key is not explicitly set, it'll be assumed to be a single
+     * null byte.
+     *
+     * @see \phpseclib\Crypt\Base::setKey()
+     * @access public
+     * @param string $key
+     * @param int $t1 optional Effective key length in bits.
+     */
+    function setKey($key, $t1 = 0)
+    {
+        $this->orig_key = $key;
+
+        if ($t1 <= 0) {
+            $t1 = $this->default_key_length;
+        } elseif ($t1 > 1024) {
+            $t1 = 1024;
+        }
+        $this->current_key_length = $t1;
+        // Key byte count should be 1..128.
+        $key = strlen($key) ? substr($key, 0, 128) : "\x00";
+        $t = strlen($key);
+
+        // The mcrypt RC2 implementation only supports effective key length
+        // of 1024 bits. It is however possible to handle effective key
+        // lengths in range 1..1024 by expanding the key and applying
+        // inverse pitable mapping to the first byte before submitting it
+        // to mcrypt.
+
+        // Key expansion.
+        $l = array_values(unpack('C*', $key));
+        $t8 = ($t1 + 7) >> 3;
+        $tm = 0xFF >> (8 * $t8 - $t1);
+
+        // Expand key.
+        $pitable = $this->pitable;
+        for ($i = $t; $i < 128; $i++) {
+            $l[$i] = $pitable[$l[$i - 1] + $l[$i - $t]];
+        }
+        $i = 128 - $t8;
+        $l[$i] = $pitable[$l[$i] & $tm];
+        while ($i--) {
+            $l[$i] = $pitable[$l[$i + 1] ^ $l[$i + $t8]];
+        }
+
+        // Prepare the key for mcrypt.
+        $l[0] = $this->invpitable[$l[0]];
+        array_unshift($l, 'C*');
+
+        parent::setKey(call_user_func_array('pack', $l));
+    }
+
+    /**
+     * Encrypts a message.
+     *
+     * Mostly a wrapper for \phpseclib\Crypt\Base::encrypt, with some additional OpenSSL handling code
+     *
+     * @see self::decrypt()
+     * @access public
+     * @param string $plaintext
+     * @return string $ciphertext
+     */
+    function encrypt($plaintext)
+    {
+        if ($this->engine == self::ENGINE_OPENSSL) {
+            $temp = $this->key;
+            $this->key = $this->orig_key;
+            $result = parent::encrypt($plaintext);
+            $this->key = $temp;
+            return $result;
+        }
+
+        return parent::encrypt($plaintext);
+    }
+
+    /**
+     * Decrypts a message.
+     *
+     * Mostly a wrapper for \phpseclib\Crypt\Base::decrypt, with some additional OpenSSL handling code
+     *
+     * @see self::encrypt()
+     * @access public
+     * @param string $ciphertext
+     * @return string $plaintext
+     */
+    function decrypt($ciphertext)
+    {
+        if ($this->engine == self::ENGINE_OPENSSL) {
+            $temp = $this->key;
+            $this->key = $this->orig_key;
+            $result = parent::decrypt($ciphertext);
+            $this->key = $temp;
+            return $result;
+        }
+
+        return parent::decrypt($ciphertext);
+    }
+
+    /**
+     * Encrypts a block
+     *
+     * @see \phpseclib\Crypt\Base::_encryptBlock()
+     * @see \phpseclib\Crypt\Base::encrypt()
+     * @access private
+     * @param string $in
+     * @return string
+     */
+    function _encryptBlock($in)
+    {
+        list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));
+        $keys = $this->keys;
+        $limit = 20;
+        $actions = array($limit => 44, 44 => 64);
+        $j = 0;
+
+        for (;;) {
+            // Mixing round.
+            $r0 = (($r0 + $keys[$j++] + ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1;
+            $r0 |= $r0 >> 16;
+            $r1 = (($r1 + $keys[$j++] + ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2;
+            $r1 |= $r1 >> 16;
+            $r2 = (($r2 + $keys[$j++] + ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3;
+            $r2 |= $r2 >> 16;
+            $r3 = (($r3 + $keys[$j++] + ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5;
+            $r3 |= $r3 >> 16;
+
+            if ($j === $limit) {
+                if ($limit === 64) {
+                    break;
+                }
+
+                // Mashing round.
+                $r0 += $keys[$r3 & 0x3F];
+                $r1 += $keys[$r0 & 0x3F];
+                $r2 += $keys[$r1 & 0x3F];
+                $r3 += $keys[$r2 & 0x3F];
+                $limit = $actions[$limit];
+            }
+        }
+
+        return pack('vvvv', $r0, $r1, $r2, $r3);
+    }
+
+    /**
+     * Decrypts a block
+     *
+     * @see \phpseclib\Crypt\Base::_decryptBlock()
+     * @see \phpseclib\Crypt\Base::decrypt()
+     * @access private
+     * @param string $in
+     * @return string
+     */
+    function _decryptBlock($in)
+    {
+        list($r0, $r1, $r2, $r3) = array_values(unpack('v*', $in));
+        $keys = $this->keys;
+        $limit = 44;
+        $actions = array($limit => 20, 20 => 0);
+        $j = 64;
+
+        for (;;) {
+            // R-mixing round.
+            $r3 = ($r3 | ($r3 << 16)) >> 5;
+            $r3 = ($r3 - $keys[--$j] - ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF;
+            $r2 = ($r2 | ($r2 << 16)) >> 3;
+            $r2 = ($r2 - $keys[--$j] - ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF;
+            $r1 = ($r1 | ($r1 << 16)) >> 2;
+            $r1 = ($r1 - $keys[--$j] - ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF;
+            $r0 = ($r0 | ($r0 << 16)) >> 1;
+            $r0 = ($r0 - $keys[--$j] - ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF;
+
+            if ($j === $limit) {
+                if ($limit === 0) {
+                    break;
+                }
+
+                // R-mashing round.
+                $r3 = ($r3 - $keys[$r2 & 0x3F]) & 0xFFFF;
+                $r2 = ($r2 - $keys[$r1 & 0x3F]) & 0xFFFF;
+                $r1 = ($r1 - $keys[$r0 & 0x3F]) & 0xFFFF;
+                $r0 = ($r0 - $keys[$r3 & 0x3F]) & 0xFFFF;
+                $limit = $actions[$limit];
+            }
+        }
+
+        return pack('vvvv', $r0, $r1, $r2, $r3);
+    }
+
+    /**
+     * Setup the \phpseclib\Crypt\Base::ENGINE_MCRYPT $engine
+     *
+     * @see \phpseclib\Crypt\Base::_setupMcrypt()
+     * @access private
+     */
+    function _setupMcrypt()
+    {
+        if (!isset($this->key)) {
+            $this->setKey('');
+        }
+
+        parent::_setupMcrypt();
+    }
+
+    /**
+     * Creates the key schedule
+     *
+     * @see \phpseclib\Crypt\Base::_setupKey()
+     * @access private
+     */
+    function _setupKey()
+    {
+        if (!isset($this->key)) {
+            $this->setKey('');
+        }
+
+        // Key has already been expanded in \phpseclib\Crypt\RC2::setKey():
+        // Only the first value must be altered.
+        $l = unpack('Ca/Cb/v*', $this->key);
+        array_unshift($l, $this->pitable[$l['a']] | ($l['b'] << 8));
+        unset($l['a']);
+        unset($l['b']);
+        $this->keys = $l;
+    }
+
+    /**
+     * Setup the performance-optimized function for de/encrypt()
+     *
+     * @see \phpseclib\Crypt\Base::_setupInlineCrypt()
+     * @access private
+     */
+    function _setupInlineCrypt()
+    {
+        $lambda_functions =& self::_getLambdaFunctions();
+
+        // The first 10 generated $lambda_functions will use the $keys hardcoded as integers
+        // for the mixing rounds, for better inline crypt performance [~20% faster].
+        // But for memory reason we have to limit those ultra-optimized $lambda_functions to an amount of 10.
+        // (Currently, for Crypt_RC2, one generated $lambda_function cost on php5.5@32bit ~60kb unfreeable mem and ~100kb on php5.5@64bit)
+        $gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
+
+        // Generation of a unique hash for our generated code
+        $code_hash = "Crypt_RC2, {$this->mode}";
+        if ($gen_hi_opt_code) {
+            $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
+        }
+
+        // Is there a re-usable $lambda_functions in there?
+        // If not, we have to create it.
+        if (!isset($lambda_functions[$code_hash])) {
+            // Init code for both, encrypt and decrypt.
+            $init_crypt = '$keys = $self->keys;';
+
+            switch (true) {
+                case $gen_hi_opt_code:
+                    $keys = $this->keys;
+                default:
+                    $keys = array();
+                    foreach ($this->keys as $k => $v) {
+                        $keys[$k] = '$keys[' . $k . ']';
+                    }
+            }
+
+            // $in is the current 8 bytes block which has to be en/decrypt
+            $encrypt_block = $decrypt_block = '
+                $in = unpack("v4", $in);
+                $r0 = $in[1];
+                $r1 = $in[2];
+                $r2 = $in[3];
+                $r3 = $in[4];
+            ';
+
+            // Create code for encryption.
+            $limit = 20;
+            $actions = array($limit => 44, 44 => 64);
+            $j = 0;
+
+            for (;;) {
+                // Mixing round.
+                $encrypt_block .= '
+                    $r0 = (($r0 + ' . $keys[$j++] . ' +
+                           ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF) << 1;
+                    $r0 |= $r0 >> 16;
+                    $r1 = (($r1 + ' . $keys[$j++] . ' +
+                           ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF) << 2;
+                    $r1 |= $r1 >> 16;
+                    $r2 = (($r2 + ' . $keys[$j++] . ' +
+                           ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF) << 3;
+                    $r2 |= $r2 >> 16;
+                    $r3 = (($r3 + ' . $keys[$j++] . ' +
+                           ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF) << 5;
+                    $r3 |= $r3 >> 16;';
+
+                if ($j === $limit) {
+                    if ($limit === 64) {
+                        break;
+                    }
+
+                    // Mashing round.
+                    $encrypt_block .= '
+                        $r0 += $keys[$r3 & 0x3F];
+                        $r1 += $keys[$r0 & 0x3F];
+                        $r2 += $keys[$r1 & 0x3F];
+                        $r3 += $keys[$r2 & 0x3F];';
+                    $limit = $actions[$limit];
+                }
+            }
+
+            $encrypt_block .= '$in = pack("v4", $r0, $r1, $r2, $r3);';
+
+            // Create code for decryption.
+            $limit = 44;
+            $actions = array($limit => 20, 20 => 0);
+            $j = 64;
+
+            for (;;) {
+                // R-mixing round.
+                $decrypt_block .= '
+                    $r3 = ($r3 | ($r3 << 16)) >> 5;
+                    $r3 = ($r3 - ' . $keys[--$j] . ' -
+                           ((($r0 ^ $r1) & $r2) ^ $r0)) & 0xFFFF;
+                    $r2 = ($r2 | ($r2 << 16)) >> 3;
+                    $r2 = ($r2 - ' . $keys[--$j] . ' -
+                           ((($r3 ^ $r0) & $r1) ^ $r3)) & 0xFFFF;
+                    $r1 = ($r1 | ($r1 << 16)) >> 2;
+                    $r1 = ($r1 - ' . $keys[--$j] . ' -
+                           ((($r2 ^ $r3) & $r0) ^ $r2)) & 0xFFFF;
+                    $r0 = ($r0 | ($r0 << 16)) >> 1;
+                    $r0 = ($r0 - ' . $keys[--$j] . ' -
+                           ((($r1 ^ $r2) & $r3) ^ $r1)) & 0xFFFF;';
+
+                if ($j === $limit) {
+                    if ($limit === 0) {
+                        break;
+                    }
+
+                    // R-mashing round.
+                    $decrypt_block .= '
+                        $r3 = ($r3 - $keys[$r2 & 0x3F]) & 0xFFFF;
+                        $r2 = ($r2 - $keys[$r1 & 0x3F]) & 0xFFFF;
+                        $r1 = ($r1 - $keys[$r0 & 0x3F]) & 0xFFFF;
+                        $r0 = ($r0 - $keys[$r3 & 0x3F]) & 0xFFFF;';
+                    $limit = $actions[$limit];
+                }
+            }
+
+            $decrypt_block .= '$in = pack("v4", $r0, $r1, $r2, $r3);';
+
+            // Creates the inline-crypt function
+            $lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
+                array(
+                   'init_crypt'    => $init_crypt,
+                   'encrypt_block' => $encrypt_block,
+                   'decrypt_block' => $decrypt_block
+                )
+            );
+        }
+
+        // Set the inline-crypt function as callback in: $this->inline_crypt
+        $this->inline_crypt = $lambda_functions[$code_hash];
+    }
+}
diff --git a/lib/phpseclib/Crypt/RC4.php b/lib/phpseclib/Crypt/RC4.php
index c67cb96..25e4ff8 100644
--- a/lib/phpseclib/Crypt/RC4.php
+++ b/lib/phpseclib/Crypt/RC4.php
@@ -1,12 +1,11 @@
 <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
  * Pure-PHP implementation of RC4.
  *
  * Uses mcrypt, if available, and an internal implementation, otherwise.
  *
- * PHP versions 4 and 5
+ * PHP version 5
  *
  * Useful resources are as follows:
  *
@@ -14,14 +13,14 @@
  *  - {@link http://en.wikipedia.org/wiki/RC4 - Wikipedia: RC4}
  *
  * RC4 is also known as ARCFOUR or ARC4.  The reason is elaborated upon at Wikipedia.  This class is named RC4 and not
- * ARCFOUR or ARC4 because RC4 is how it is refered to in the SSH1 specification.
+ * ARCFOUR or ARC4 because RC4 is how it is referred to in the SSH1 specification.
  *
  * Here's a short example of how to use this library:
  * <code>
  * <?php
- *    include('Crypt/RC4.php');
+ *    include 'vendor/autoload.php';
  *
- *    $rc4 = new Crypt_RC4();
+ *    $rc4 = new \phpseclib\Crypt\RC4();
  *
  *    $rc4->setKey('abcdefgh');
  *
@@ -35,198 +34,137 @@
  * ?>
  * </code>
  *
- * LICENSE: This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- *
- * @category   Crypt
- * @package    Crypt_RC4
- * @author     Jim Wigginton <terrafrost@php.net>
- * @copyright  MMVII Jim Wigginton
- * @license    http://www.gnu.org/licenses/lgpl.txt
- * @version    $Id: RC4.php,v 1.8 2009/06/09 04:00:38 terrafrost Exp $
- * @link       http://phpseclib.sourceforge.net
+ * @category  Crypt
+ * @package   RC4
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2007 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
  */
 
-/**#@+
- * @access private
- * @see Crypt_RC4::Crypt_RC4()
- */
-/**
- * Toggles the internal implementation
- */
-define('CRYPT_RC4_MODE_INTERNAL', 1);
-/**
- * Toggles the mcrypt implementation
- */
-define('CRYPT_RC4_MODE_MCRYPT', 2);
-/**#@-*/
-
-/**#@+
- * @access private
- * @see Crypt_RC4::_crypt()
- */
-define('CRYPT_RC4_ENCRYPT', 0);
-define('CRYPT_RC4_DECRYPT', 1);
-/**#@-*/
+namespace phpseclib\Crypt;
 
 /**
  * Pure-PHP implementation of RC4.
  *
+ * @package RC4
  * @author  Jim Wigginton <terrafrost@php.net>
- * @version 0.1.0
  * @access  public
- * @package Crypt_RC4
  */
-class Crypt_RC4 {
-    /**
-     * The Key
-     *
-     * @see Crypt_RC4::setKey()
-     * @var String
+class RC4 extends Base
+{
+    /**#@+
      * @access private
-     */
-    var $key = "\0";
+     * @see \phpseclib\Crypt\RC4::_crypt()
+    */
+    const ENCRYPT = 0;
+    const DECRYPT = 1;
+    /**#@-*/
 
     /**
-     * The Key Stream for encryption
+     * Block Length of the cipher
      *
-     * If CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT, this will be equal to the mcrypt object
+     * RC4 is a stream cipher
+     * so we the block_size to 0
      *
-     * @see Crypt_RC4::setKey()
-     * @var Array
+     * @see \phpseclib\Crypt\Base::block_size
+     * @var int
      * @access private
      */
-    var $encryptStream = false;
+    var $block_size = 0;
 
     /**
-     * The Key Stream for decryption
-     *
-     * If CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT, this will be equal to the mcrypt object
+     * Key Length (in bytes)
      *
-     * @see Crypt_RC4::setKey()
-     * @var Array
+     * @see \phpseclib\Crypt\RC4::setKeyLength()
+     * @var int
      * @access private
      */
-    var $decryptStream = false;
+    var $key_length = 128; // = 1024 bits
 
     /**
-     * The $i and $j indexes for encryption
+     * The mcrypt specific name of the cipher
      *
-     * @see Crypt_RC4::_crypt()
-     * @var Integer
+     * @see \phpseclib\Crypt\Base::cipher_name_mcrypt
+     * @var string
      * @access private
      */
-    var $encryptIndex = 0;
+    var $cipher_name_mcrypt = 'arcfour';
 
     /**
-     * The $i and $j indexes for decryption
+     * Holds whether performance-optimized $inline_crypt() can/should be used.
      *
-     * @see Crypt_RC4::_crypt()
-     * @var Integer
+     * @see \phpseclib\Crypt\Base::inline_crypt
+     * @var mixed
      * @access private
      */
-    var $decryptIndex = 0;
+    var $use_inline_crypt = false; // currently not available
 
     /**
-     * MCrypt parameters
+     * The Key
      *
-     * @see Crypt_RC4::setMCrypt()
-     * @var Array
+     * @see self::setKey()
+     * @var string
      * @access private
      */
-    var $mcrypt = array('', '');
+    var $key;
 
     /**
-     * The Encryption Algorithm
-     *
-     * Only used if CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT.  Only possible values are MCRYPT_RC4 or MCRYPT_ARCFOUR.
+     * The Key Stream for decryption and encryption
      *
-     * @see Crypt_RC4::Crypt_RC4()
-     * @var Integer
+     * @see self::setKey()
+     * @var array
      * @access private
      */
-    var $mode;
+    var $stream;
 
     /**
      * Default Constructor.
      *
      * Determines whether or not the mcrypt extension should be used.
      *
-     * @param optional Integer $mode
-     * @return Crypt_RC4
+     * @see \phpseclib\Crypt\Base::__construct()
+     * @return \phpseclib\Crypt\RC4
      * @access public
      */
-    function Crypt_RC4()
+    function __construct()
     {
-        if ( !defined('CRYPT_RC4_MODE') ) {
-            switch (true) {
-                case extension_loaded('mcrypt') && (defined('MCRYPT_ARCFOUR') || defined('MCRYPT_RC4')):
-                    // i'd check to see if rc4 was supported, by doing in_array('arcfour', mcrypt_list_algorithms('')),
-                    // but since that can be changed after the object has been created, there doesn't seem to be
-                    // a lot of point...
-                    define('CRYPT_RC4_MODE', CRYPT_RC4_MODE_MCRYPT);
-                    break;
-                default:
-                    define('CRYPT_RC4_MODE', CRYPT_RC4_MODE_INTERNAL);
-            }
-        }
-
-        switch ( CRYPT_RC4_MODE ) {
-            case CRYPT_RC4_MODE_MCRYPT:
-                switch (true) {
-                    case defined('MCRYPT_ARCFOUR'):
-                        $this->mode = MCRYPT_ARCFOUR;
-                        break;
-                    case defined('MCRYPT_RC4');
-                        $this->mode = MCRYPT_RC4;
-                }
-        }
+        parent::__construct(Base::MODE_STREAM);
     }
 
     /**
-     * Sets the key.
+     * Test for engine validity
      *
-     * Keys can be between 1 and 256 bytes long.  If they are longer then 256 bytes, the first 256 bytes will
-     * be used.  If no key is explicitly set, it'll be assumed to be a single null byte.
+     * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine()
      *
+     * @see \phpseclib\Crypt\Base::__construct()
+     * @param int $engine
      * @access public
-     * @param String $key
+     * @return bool
      */
-    function setKey($key)
+    function isValidEngine($engine)
     {
-        $this->key = $key;
-
-        if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
-            return;
-        }
-
-        $keyLength = strlen($key);
-        $keyStream = array();
-        for ($i = 0; $i < 256; $i++) {
-            $keyStream[$i] = $i;
-        }
-        $j = 0;
-        for ($i = 0; $i < 256; $i++) {
-            $j = ($j + $keyStream[$i] + ord($key[$i % $keyLength])) & 255;
-            $temp = $keyStream[$i];
-            $keyStream[$i] = $keyStream[$j];
-            $keyStream[$j] = $temp;
+        if ($engine == Base::ENGINE_OPENSSL) {
+            if (version_compare(PHP_VERSION, '5.3.7') >= 0) {
+                $this->cipher_name_openssl = 'rc4-40';
+            } else {
+                switch (strlen($this->key)) {
+                    case 5:
+                        $this->cipher_name_openssl = 'rc4-40';
+                        break;
+                    case 8:
+                        $this->cipher_name_openssl = 'rc4-64';
+                        break;
+                    case 16:
+                        $this->cipher_name_openssl = 'rc4';
+                        break;
+                    default:
+                        return false;
+                }
+            }
         }
 
-        $this->encryptIndex = $this->decryptIndex = array(0, 0);
-        $this->encryptStream = $this->decryptStream = $keyStream;
+        return parent::isValidEngine($engine);
     }
 
     /**
@@ -244,8 +182,8 @@ class Crypt_RC4 {
      * {@link http://www.rsa.com/rsalabs/node.asp?id=2009 http://www.rsa.com/rsalabs/node.asp?id=2009}
      * {@link http://en.wikipedia.org/wiki/Related_key_attack http://en.wikipedia.org/wiki/Related_key_attack}
      *
-     * @param String $iv
-     * @see Crypt_RC4::setKey()
+     * @param string $iv
+     * @see self::setKey()
      * @access public
      */
     function setIV($iv)
@@ -253,241 +191,152 @@ class Crypt_RC4 {
     }
 
     /**
-     * Sets MCrypt parameters. (optional)
+     * Sets the key length
      *
-     * If MCrypt is being used, empty strings will be used, unless otherwise specified.
+     * Keys can be between 1 and 256 bytes long.
      *
-     * @link http://php.net/function.mcrypt-module-open#function.mcrypt-module-open
      * @access public
-     * @param optional Integer $algorithm_directory
-     * @param optional Integer $mode_directory
+     * @param int $length
      */
-    function setMCrypt($algorithm_directory = '', $mode_directory = '')
+    function setKeyLength($length)
     {
-        if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
-            $this->mcrypt = array($algorithm_directory, $mode_directory);
-            $this->_closeMCrypt();
+        if ($length < 8) {
+            $this->key_length = 1;
+        } elseif ($length > 2048) {
+            $this->key_length = 256;
+        } else {
+            $this->key_length = $length >> 3;
         }
+
+        parent::setKeyLength($length);
     }
 
     /**
      * Encrypts a message.
      *
-     * @see Crypt_RC4::_crypt()
+     * @see \phpseclib\Crypt\Base::decrypt()
+     * @see self::_crypt()
      * @access public
-     * @param String $plaintext
+     * @param string $plaintext
+     * @return string $ciphertext
      */
     function encrypt($plaintext)
     {
-        return $this->_crypt($plaintext, CRYPT_RC4_ENCRYPT);
+        if ($this->engine != Base::ENGINE_INTERNAL) {
+            return parent::encrypt($plaintext);
+        }
+        return $this->_crypt($plaintext, self::ENCRYPT);
     }
 
     /**
      * Decrypts a message.
      *
      * $this->decrypt($this->encrypt($plaintext)) == $this->encrypt($this->encrypt($plaintext)).
-     * Atleast if the continuous buffer is disabled.
+     * At least if the continuous buffer is disabled.
      *
-     * @see Crypt_RC4::_crypt()
+     * @see \phpseclib\Crypt\Base::encrypt()
+     * @see self::_crypt()
      * @access public
-     * @param String $ciphertext
+     * @param string $ciphertext
+     * @return string $plaintext
      */
     function decrypt($ciphertext)
     {
-        return $this->_crypt($ciphertext, CRYPT_RC4_DECRYPT);
+        if ($this->engine != Base::ENGINE_INTERNAL) {
+            return parent::decrypt($ciphertext);
+        }
+        return $this->_crypt($ciphertext, self::DECRYPT);
     }
 
     /**
-     * Encrypts or decrypts a message.
+     * Encrypts a block
      *
-     * @see Crypt_RC4::encrypt()
-     * @see Crypt_RC4::decrypt()
      * @access private
-     * @param String $text
-     * @param Integer $mode
+     * @param string $in
      */
-    function _crypt($text, $mode)
+    function _encryptBlock($in)
     {
-        if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
-            $keyStream = $mode == CRYPT_RC4_ENCRYPT ? 'encryptStream' : 'decryptStream';
-
-            if ($this->$keyStream === false) {
-                $this->$keyStream = mcrypt_module_open($this->mode, $this->mcrypt[0], MCRYPT_MODE_STREAM, $this->mcrypt[1]);
-                mcrypt_generic_init($this->$keyStream, $this->key, '');
-            } else if (!$this->continuousBuffer) {
-                mcrypt_generic_init($this->$keyStream, $this->key, '');
-            }
-            $newText = mcrypt_generic($this->$keyStream, $text);
-            if (!$this->continuousBuffer) {
-                mcrypt_generic_deinit($this->$keyStream);
-            }
-
-            return $newText;
-        }
-
-        if ($this->encryptStream === false) {
-            $this->setKey($this->key);
-        }
-
-        switch ($mode) {
-            case CRYPT_RC4_ENCRYPT:
-                $keyStream = $this->encryptStream;
-                list($i, $j) = $this->encryptIndex;
-                break;
-            case CRYPT_RC4_DECRYPT:
-                $keyStream = $this->decryptStream;
-                list($i, $j) = $this->decryptIndex;
-        }
-
-        $newText = '';
-        for ($k = 0; $k < strlen($text); $k++) {
-            $i = ($i + 1) & 255;
-            $j = ($j + $keyStream[$i]) & 255;
-            $temp = $keyStream[$i];
-            $keyStream[$i] = $keyStream[$j];
-            $keyStream[$j] = $temp;
-            $temp = $keyStream[($keyStream[$i] + $keyStream[$j]) & 255];
-            $newText.= chr(ord($text[$k]) ^ $temp);
-        }
-
-        if ($this->continuousBuffer) {
-            switch ($mode) {
-                case CRYPT_RC4_ENCRYPT:
-                    $this->encryptStream = $keyStream;
-                    $this->encryptIndex = array($i, $j);
-                    break;
-                case CRYPT_RC4_DECRYPT:
-                    $this->decryptStream = $keyStream;
-                    $this->decryptIndex = array($i, $j);
-            }
-        }
-
-        return $newText;
+        // RC4 does not utilize this method
     }
 
     /**
-     * Treat consecutive "packets" as if they are a continuous buffer.
-     *
-     * Say you have a 16-byte plaintext $plaintext.  Using the default behavior, the two following code snippets
-     * will yield different outputs:
-     *
-     * <code>
-     *    echo $rc4->encrypt(substr($plaintext, 0, 8));
-     *    echo $rc4->encrypt(substr($plaintext, 8, 8));
-     * </code>
-     * <code>
-     *    echo $rc4->encrypt($plaintext);
-     * </code>
+     * Decrypts a block
      *
-     * The solution is to enable the continuous buffer.  Although this will resolve the above discrepancy, it creates
-     * another, as demonstrated with the following:
-     *
-     * <code>
-     *    $rc4->encrypt(substr($plaintext, 0, 8));
-     *    echo $rc4->decrypt($des->encrypt(substr($plaintext, 8, 8)));
-     * </code>
-     * <code>
-     *    echo $rc4->decrypt($des->encrypt(substr($plaintext, 8, 8)));
-     * </code>
-     *
-     * With the continuous buffer disabled, these would yield the same output.  With it enabled, they yield different
-     * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /
-     * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.
-     *
-     * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each
-     * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that
-     * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),
-     * however, they are also less intuitive and more likely to cause you problems.
-     *
-     * @see Crypt_RC4::disableContinuousBuffer()
-     * @access public
+     * @access private
+     * @param string $in
      */
-    function enableContinuousBuffer()
+    function _decryptBlock($in)
     {
-        $this->continuousBuffer = true;
+        // RC4 does not utilize this method
     }
 
     /**
-     * Treat consecutive packets as if they are a discontinuous buffer.
-     *
-     * The default behavior.
+     * Setup the key (expansion)
      *
-     * @see Crypt_RC4::enableContinuousBuffer()
-     * @access public
+     * @see \phpseclib\Crypt\Base::_setupKey()
+     * @access private
      */
-    function disableContinuousBuffer()
+    function _setupKey()
     {
-        if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_INTERNAL ) {
-            $this->encryptIndex = $this->decryptIndex = array(0, 0);
-            $this->setKey($this->key);
+        $key = $this->key;
+        $keyLength = strlen($key);
+        $keyStream = range(0, 255);
+        $j = 0;
+        for ($i = 0; $i < 256; $i++) {
+            $j = ($j + $keyStream[$i] + ord($key[$i % $keyLength])) & 255;
+            $temp = $keyStream[$i];
+            $keyStream[$i] = $keyStream[$j];
+            $keyStream[$j] = $temp;
         }
 
-        $this->continuousBuffer = false;
+        $this->stream = array();
+        $this->stream[self::DECRYPT] = $this->stream[self::ENCRYPT] = array(
+            0, // index $i
+            0, // index $j
+            $keyStream
+        );
     }
 
     /**
-     * Dummy function.
-     *
-     * Since RC4 is a stream cipher and not a block cipher, no padding is necessary.  The only reason this function is
-     * included is so that you can switch between a block cipher and a stream cipher transparently.
-     *
-     * @see Crypt_RC4::disablePadding()
-     * @access public
-     */
-    function enablePadding()
-    {
-    }
-
-    /**
-     * Dummy function.
-     *
-     * @see Crypt_RC4::enablePadding()
-     * @access public
-     */
-    function disablePadding()
-    {
-    }
-
-    /**
-     * Class destructor.
-     *
-     * Will be called, automatically, if you're using PHP5.  If you're using PHP4, call it yourself.  Only really
-     * needs to be called if mcrypt is being used.
+     * Encrypts or decrypts a message.
      *
-     * @access public
+     * @see self::encrypt()
+     * @see self::decrypt()
+     * @access private
+     * @param string $text
+     * @param int $mode
+     * @return string $text
      */
-    function __destruct()
+    function _crypt($text, $mode)
     {
-        if ( CRYPT_RC4_MODE == CRYPT_RC4_MODE_MCRYPT ) {
-            $this->_closeMCrypt();
+        if ($this->changed) {
+            $this->_setup();
+            $this->changed = false;
         }
-    }
-
-    /**
-     * Properly close the MCrypt objects.
-     *
-     * @access prviate
-     */
-    function _closeMCrypt()
-    {
-        if ( $this->encryptStream !== false ) {
-            if ( $this->continuousBuffer ) {
-                mcrypt_generic_deinit($this->encryptStream);
-            }
-
-            mcrypt_module_close($this->encryptStream);
 
-            $this->encryptStream = false;
+        $stream = &$this->stream[$mode];
+        if ($this->continuousBuffer) {
+            $i = &$stream[0];
+            $j = &$stream[1];
+            $keyStream = &$stream[2];
+        } else {
+            $i = $stream[0];
+            $j = $stream[1];
+            $keyStream = $stream[2];
         }
 
-        if ( $this->decryptStream !== false ) {
-            if ( $this->continuousBuffer ) {
-                mcrypt_generic_deinit($this->decryptStream);
-            }
-
-            mcrypt_module_close($this->decryptStream);
+        $len = strlen($text);
+        for ($k = 0; $k < $len; ++$k) {
+            $i = ($i + 1) & 255;
+            $ksi = $keyStream[$i];
+            $j = ($j + $ksi) & 255;
+            $ksj = $keyStream[$j];
 
-            $this->decryptStream = false;
+            $keyStream[$i] = $ksj;
+            $keyStream[$j] = $ksi;
+            $text[$k] = $text[$k] ^ chr($keyStream[($ksj + $ksi) & 255]);
         }
+
+        return $text;
     }
 }
diff --git a/lib/phpseclib/Crypt/RSA.php b/lib/phpseclib/Crypt/RSA.php
index 4d352ca..c15e86d 100644
--- a/lib/phpseclib/Crypt/RSA.php
+++ b/lib/phpseclib/Crypt/RSA.php
@@ -1,17 +1,16 @@
 <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
  * Pure-PHP PKCS#1 (v2.1) compliant implementation of RSA.
  *
- * PHP versions 4 and 5
+ * PHP version 5
  *
  * Here's an example of how to encrypt and decrypt text with this library:
  * <code>
  * <?php
- *    include('Crypt/RSA.php');
+ *    include 'vendor/autoload.php';
  *
- *    $rsa = new Crypt_RSA();
+ *    $rsa = new \phpseclib\Crypt\RSA();
  *    extract($rsa->createKey());
  *
  *    $plaintext = 'terrafrost';
@@ -27,9 +26,9 @@
  * Here's an example of how to create signatures and verify signatures with this library:
  * <code>
  * <?php
- *    include('Crypt/RSA.php');
+ *    include 'vendor/autoload.php';
  *
- *    $rsa = new Crypt_RSA();
+ *    $rsa = new \phpseclib\Crypt\RSA();
  *    extract($rsa->createKey());
  *
  *    $plaintext = 'terrafrost';
@@ -42,180 +41,211 @@
  * ?>
  * </code>
  *
- * LICENSE: This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- *
- * @category   Crypt
- * @package    Crypt_RSA
- * @author     Jim Wigginton <terrafrost@php.net>
- * @copyright  MMIX Jim Wigginton
- * @license    http://www.gnu.org/licenses/lgpl.txt
- * @version    $Id: RSA.php,v 1.15 2010/04/10 15:57:02 terrafrost Exp $
- * @link       http://phpseclib.sourceforge.net
+ * @category  Crypt
+ * @package   RSA
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2009 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
  */
 
-/**
- * Include Math_BigInteger
- */
-require_once('Math/BigInteger.php');
+namespace phpseclib\Crypt;
 
-/**
- * Include Crypt_Random
- */
-require_once('Crypt/Random.php');
-
-/**
- * Include Crypt_Hash
- */
-require_once('Crypt/Hash.php');
+use phpseclib\Math\BigInteger;
 
-/**#@+
- * @access public
- * @see Crypt_RSA::encrypt()
- * @see Crypt_RSA::decrypt()
- */
-/**
- * Use {@link http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding Optimal Asymmetric Encryption Padding}
- * (OAEP) for encryption / decryption.
- *
- * Uses sha1 by default.
- *
- * @see Crypt_RSA::setHash()
- * @see Crypt_RSA::setMGFHash()
- */
-define('CRYPT_RSA_ENCRYPTION_OAEP',  1);
-/**
- * Use PKCS#1 padding.
- *
- * Although CRYPT_RSA_ENCRYPTION_OAEP offers more security, including PKCS#1 padding is necessary for purposes of backwards
- * compatability with protocols (like SSH-1) written before OAEP's introduction.
- */
-define('CRYPT_RSA_ENCRYPTION_PKCS1', 2);
-/**#@-*/
-
-/**#@+
- * @access public
- * @see Crypt_RSA::sign()
- * @see Crypt_RSA::verify()
- * @see Crypt_RSA::setHash()
- */
-/**
- * Use the Probabilistic Signature Scheme for signing
- *
- * Uses sha1 by default.
- *
- * @see Crypt_RSA::setSaltLength()
- * @see Crypt_RSA::setMGFHash()
- */
-define('CRYPT_RSA_SIGNATURE_PSS',  1);
 /**
- * Use the PKCS#1 scheme by default.
+ * Pure-PHP PKCS#1 compliant implementation of RSA.
  *
- * Although CRYPT_RSA_SIGNATURE_PSS offers more security, including PKCS#1 signing is necessary for purposes of backwards
- * compatability with protocols (like SSH-2) written before PSS's introduction.
+ * @package RSA
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @access  public
  */
-define('CRYPT_RSA_SIGNATURE_PKCS1', 2);
-/**#@-*/
+class RSA
+{
+    /**#@+
+     * @access public
+     * @see self::encrypt()
+     * @see self::decrypt()
+     */
+    /**
+     * Use {@link http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding Optimal Asymmetric Encryption Padding}
+     * (OAEP) for encryption / decryption.
+     *
+     * Uses sha1 by default.
+     *
+     * @see self::setHash()
+     * @see self::setMGFHash()
+     */
+    const ENCRYPTION_OAEP = 1;
+    /**
+     * Use PKCS#1 padding.
+     *
+     * Although self::ENCRYPTION_OAEP offers more security, including PKCS#1 padding is necessary for purposes of backwards
+     * compatibility with protocols (like SSH-1) written before OAEP's introduction.
+     */
+    const ENCRYPTION_PKCS1 = 2;
+    /**
+     * Do not use any padding
+     *
+     * Although this method is not recommended it can none-the-less sometimes be useful if you're trying to decrypt some legacy
+     * stuff, if you're trying to diagnose why an encrypted message isn't decrypting, etc.
+     */
+    const ENCRYPTION_NONE = 3;
+    /**#@-*/
 
-/**#@+
- * @access private
- * @see Crypt_RSA::createKey()
- */
-/**
- * ASN1 Integer
- */
-define('CRYPT_RSA_ASN1_INTEGER',   2);
-/**
- * ASN1 Sequence (with the constucted bit set)
- */
-define('CRYPT_RSA_ASN1_SEQUENCE', 48);
-/**#@-*/
+    /**#@+
+     * @access public
+     * @see self::sign()
+     * @see self::verify()
+     * @see self::setHash()
+    */
+    /**
+     * Use the Probabilistic Signature Scheme for signing
+     *
+     * Uses sha1 by default.
+     *
+     * @see self::setSaltLength()
+     * @see self::setMGFHash()
+     */
+    const SIGNATURE_PSS = 1;
+    /**
+     * Use the PKCS#1 scheme by default.
+     *
+     * Although self::SIGNATURE_PSS offers more security, including PKCS#1 signing is necessary for purposes of backwards
+     * compatibility with protocols (like SSH-2) written before PSS's introduction.
+     */
+    const SIGNATURE_PKCS1 = 2;
+    /**#@-*/
 
-/**#@+
- * @access private
- * @see Crypt_RSA::Crypt_RSA()
- */
-/**
- * To use the pure-PHP implementation
- */
-define('CRYPT_RSA_MODE_INTERNAL', 1);
-/**
- * To use the OpenSSL library
- *
- * (if enabled; otherwise, the internal implementation will be used)
- */
-define('CRYPT_RSA_MODE_OPENSSL', 2);
-/**#@-*/
+    /**#@+
+     * @access private
+     * @see \phpseclib\Crypt\RSA::createKey()
+    */
+    /**
+     * ASN1 Integer
+     */
+    const ASN1_INTEGER = 2;
+    /**
+     * ASN1 Bit String
+     */
+    const ASN1_BITSTRING = 3;
+    /**
+     * ASN1 Octet String
+     */
+    const ASN1_OCTETSTRING = 4;
+    /**
+     * ASN1 Object Identifier
+     */
+    const ASN1_OBJECT = 6;
+    /**
+     * ASN1 Sequence (with the constucted bit set)
+     */
+    const ASN1_SEQUENCE = 48;
+    /**#@-*/
 
-/**#@+
- * @access public
- * @see Crypt_RSA::createKey()
- * @see Crypt_RSA::setPrivateKeyFormat()
- */
-/**
- * PKCS#1 formatted private key
- *
- * Used by OpenSSH
- */
-define('CRYPT_RSA_PRIVATE_FORMAT_PKCS1', 0);
-/**#@-*/
+    /**#@+
+     * @access private
+     * @see \phpseclib\Crypt\RSA::__construct()
+    */
+    /**
+     * To use the pure-PHP implementation
+     */
+    const MODE_INTERNAL = 1;
+    /**
+     * To use the OpenSSL library
+     *
+     * (if enabled; otherwise, the internal implementation will be used)
+     */
+    const MODE_OPENSSL = 2;
+    /**#@-*/
 
-/**#@+
- * @access public
- * @see Crypt_RSA::createKey()
- * @see Crypt_RSA::setPublicKeyFormat()
- */
-/**
- * Raw public key
- *
- * An array containing two Math_BigInteger objects.
- *
- * The exponent can be indexed with any of the following:
- *
- * 0, e, exponent, publicExponent
- *
- * The modulus can be indexed with any of the following:
- *
- * 1, n, modulo, modulus
- */
-define('CRYPT_RSA_PUBLIC_FORMAT_RAW', 1);
-/**
- * PKCS#1 formatted public key
- */
-define('CRYPT_RSA_PUBLIC_FORMAT_PKCS1', 2);
-/**
- * OpenSSH formatted public key
- *
- * Place in $HOME/.ssh/authorized_keys
- */
-define('CRYPT_RSA_PUBLIC_FORMAT_OPENSSH', 3);
-/**#@-*/
+    /**#@+
+     * @access public
+     * @see \phpseclib\Crypt\RSA::createKey()
+     * @see \phpseclib\Crypt\RSA::setPrivateKeyFormat()
+    */
+    /**
+     * PKCS#1 formatted private key
+     *
+     * Used by OpenSSH
+     */
+    const PRIVATE_FORMAT_PKCS1 = 0;
+    /**
+     * PuTTY formatted private key
+     */
+    const PRIVATE_FORMAT_PUTTY = 1;
+    /**
+     * XML formatted private key
+     */
+    const PRIVATE_FORMAT_XML = 2;
+    /**
+     * PKCS#8 formatted private key
+     */
+    const PRIVATE_FORMAT_PKCS8 = 8;
+    /**#@-*/
+
+    /**#@+
+     * @access public
+     * @see \phpseclib\Crypt\RSA::createKey()
+     * @see \phpseclib\Crypt\RSA::setPublicKeyFormat()
+    */
+    /**
+     * Raw public key
+     *
+     * An array containing two \phpseclib\Math\BigInteger objects.
+     *
+     * The exponent can be indexed with any of the following:
+     *
+     * 0, e, exponent, publicExponent
+     *
+     * The modulus can be indexed with any of the following:
+     *
+     * 1, n, modulo, modulus
+     */
+    const PUBLIC_FORMAT_RAW = 3;
+    /**
+     * PKCS#1 formatted public key (raw)
+     *
+     * Used by File/X509.php
+     *
+     * Has the following header:
+     *
+     * -----BEGIN RSA PUBLIC KEY-----
+     *
+     * Analogous to ssh-keygen's pem format (as specified by -m)
+     */
+    const PUBLIC_FORMAT_PKCS1 = 4;
+    const PUBLIC_FORMAT_PKCS1_RAW = 4;
+    /**
+     * XML formatted public key
+     */
+    const PUBLIC_FORMAT_XML = 5;
+    /**
+     * OpenSSH formatted public key
+     *
+     * Place in $HOME/.ssh/authorized_keys
+     */
+    const PUBLIC_FORMAT_OPENSSH = 6;
+    /**
+     * PKCS#1 formatted public key (encapsulated)
+     *
+     * Used by PHP's openssl_public_encrypt() and openssl's rsautl (when -pubin is set)
+     *
+     * Has the following header:
+     *
+     * -----BEGIN PUBLIC KEY-----
+     *
+     * Analogous to ssh-keygen's pkcs8 format (as specified by -m). Although PKCS8
+     * is specific to private keys it's basically creating a DER-encoded wrapper
+     * for keys. This just extends that same concept to public keys (much like ssh-keygen)
+     */
+    const PUBLIC_FORMAT_PKCS8 = 7;
+    /**#@-*/
 
-/**
- * Pure-PHP PKCS#1 compliant implementation of RSA.
- *
- * @author  Jim Wigginton <terrafrost@php.net>
- * @version 0.1.0
- * @access  public
- * @package Crypt_RSA
- */
-class Crypt_RSA {
     /**
      * Precomputed Zero
      *
-     * @var Array
+     * @var \phpseclib\Math\BigInteger
      * @access private
      */
     var $zero;
@@ -223,7 +253,7 @@ class Crypt_RSA {
     /**
      * Precomputed One
      *
-     * @var Array
+     * @var \phpseclib\Math\BigInteger
      * @access private
      */
     var $one;
@@ -231,23 +261,23 @@ class Crypt_RSA {
     /**
      * Private Key Format
      *
-     * @var Integer
+     * @var int
      * @access private
      */
-    var $privateKeyFormat = CRYPT_RSA_PRIVATE_FORMAT_PKCS1;
+    var $privateKeyFormat = self::PRIVATE_FORMAT_PKCS1;
 
     /**
      * Public Key Format
      *
-     * @var Integer
+     * @var int
      * @access public
      */
-    var $publicKeyFormat = CRYPT_RSA_PUBLIC_FORMAT_PKCS1;
+    var $publicKeyFormat = self::PUBLIC_FORMAT_PKCS8;
 
     /**
      * Modulus (ie. n)
      *
-     * @var Math_BigInteger
+     * @var \phpseclib\Math\BigInteger
      * @access private
      */
     var $modulus;
@@ -255,7 +285,7 @@ class Crypt_RSA {
     /**
      * Modulus length
      *
-     * @var Math_BigInteger
+     * @var \phpseclib\Math\BigInteger
      * @access private
      */
     var $k;
@@ -263,7 +293,7 @@ class Crypt_RSA {
     /**
      * Exponent (ie. e or d)
      *
-     * @var Math_BigInteger
+     * @var \phpseclib\Math\BigInteger
      * @access private
      */
     var $exponent;
@@ -271,7 +301,7 @@ class Crypt_RSA {
     /**
      * Primes for Chinese Remainder Theorem (ie. p and q)
      *
-     * @var Array
+     * @var array
      * @access private
      */
     var $primes;
@@ -279,7 +309,7 @@ class Crypt_RSA {
     /**
      * Exponents for Chinese Remainder Theorem (ie. dP and dQ)
      *
-     * @var Array
+     * @var array
      * @access private
      */
     var $exponents;
@@ -287,7 +317,7 @@ class Crypt_RSA {
     /**
      * Coefficients for Chinese Remainder Theorem (ie. qInv)
      *
-     * @var Array
+     * @var array
      * @access private
      */
     var $coefficients;
@@ -295,7 +325,7 @@ class Crypt_RSA {
     /**
      * Hash name
      *
-     * @var String
+     * @var string
      * @access private
      */
     var $hashName;
@@ -303,7 +333,7 @@ class Crypt_RSA {
     /**
      * Hash function
      *
-     * @var Crypt_Hash
+     * @var \phpseclib\Crypt\Hash
      * @access private
      */
     var $hash;
@@ -311,7 +341,7 @@ class Crypt_RSA {
     /**
      * Length of hash function output
      *
-     * @var Integer
+     * @var int
      * @access private
      */
     var $hLen;
@@ -319,7 +349,7 @@ class Crypt_RSA {
     /**
      * Length of salt
      *
-     * @var Integer
+     * @var int
      * @access private
      */
     var $sLen;
@@ -327,7 +357,7 @@ class Crypt_RSA {
     /**
      * Hash function for the Mask Generation Function
      *
-     * @var Crypt_Hash
+     * @var \phpseclib\Crypt\Hash
      * @access private
      */
     var $mgfHash;
@@ -335,7 +365,7 @@ class Crypt_RSA {
     /**
      * Length of MGF hash function output
      *
-     * @var Integer
+     * @var int
      * @access private
      */
     var $mgfHLen;
@@ -343,23 +373,23 @@ class Crypt_RSA {
     /**
      * Encryption mode
      *
-     * @var Integer
+     * @var int
      * @access private
      */
-    var $encryptionMode = CRYPT_RSA_ENCRYPTION_OAEP;
+    var $encryptionMode = self::ENCRYPTION_OAEP;
 
     /**
      * Signature mode
      *
-     * @var Integer
+     * @var int
      * @access private
      */
-    var $signatureMode = CRYPT_RSA_SIGNATURE_PSS;
+    var $signatureMode = self::SIGNATURE_PSS;
 
     /**
      * Public Exponent
      *
-     * @var Mixed
+     * @var mixed
      * @access private
      */
     var $publicExponent = false;
@@ -367,40 +397,127 @@ class Crypt_RSA {
     /**
      * Password
      *
-     * @var String
+     * @var string
+     * @access private
+     */
+    var $password = false;
+
+    /**
+     * Components
+     *
+     * For use with parsing XML formatted keys.  PHP's XML Parser functions use utilized - instead of PHP's DOM functions -
+     * because PHP's XML Parser functions work on PHP4 whereas PHP's DOM functions - although surperior - don't.
+     *
+     * @see self::_start_element_handler()
+     * @var array
+     * @access private
+     */
+    var $components = array();
+
+    /**
+     * Current String
+     *
+     * For use with parsing XML formatted keys.
+     *
+     * @see self::_character_handler()
+     * @see self::_stop_element_handler()
+     * @var mixed
+     * @access private
+     */
+    var $current;
+
+    /**
+     * OpenSSL configuration file name.
+     *
+     * Set to null to use system configuration file.
+     * @see self::createKey()
+     * @var mixed
+     * @Access public
+     */
+    var $configFile;
+
+    /**
+     * Public key comment field.
+     *
+     * @var string
      * @access private
      */
-    var $password = '';
+    var $comment = 'phpseclib-generated-key';
 
     /**
      * The constructor
      *
      * If you want to make use of the openssl extension, you'll need to set the mode manually, yourself.  The reason
-     * Crypt_RSA doesn't do it is because OpenSSL doesn't fail gracefully.  openssl_pkey_new(), in particular, requires
+     * \phpseclib\Crypt\RSA doesn't do it is because OpenSSL doesn't fail gracefully.  openssl_pkey_new(), in particular, requires
      * openssl.cnf be present somewhere and, unfortunately, the only real way to find out is too late.
      *
-     * @return Crypt_RSA
+     * @return \phpseclib\Crypt\RSA
      * @access public
      */
-    function Crypt_RSA()
+    function __construct()
     {
-        if ( !defined('CRYPT_RSA_MODE') ) {
+        $this->configFile = dirname(__FILE__) . '/../openssl.cnf';
+
+        if (!defined('CRYPT_RSA_MODE')) {
             switch (true) {
-                //case extension_loaded('openssl') && version_compare(PHP_VERSION, '4.2.0', '>='):
-                //    define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_OPENSSL);
-                //    break;
+                // Math/BigInteger's openssl requirements are a little less stringent than Crypt/RSA's. in particular,
+                // Math/BigInteger doesn't require an openssl.cfg file whereas Crypt/RSA does. so if Math/BigInteger
+                // can't use OpenSSL it can be pretty trivially assumed, then, that Crypt/RSA can't either.
+                case defined('MATH_BIGINTEGER_OPENSSL_DISABLE'):
+                    define('CRYPT_RSA_MODE', self::MODE_INTERNAL);
+                    break;
+                case extension_loaded('openssl') && file_exists($this->configFile):
+                    // some versions of XAMPP have mismatched versions of OpenSSL which causes it not to work
+                    $versions = array();
+
+                    // avoid generating errors (even with suppression) when phpinfo() is disabled (common in production systems)
+                    if (strpos(ini_get('disable_functions'), 'phpinfo') === false) {
+                        ob_start();
+                        @phpinfo();
+                        $content = ob_get_contents();
+                        ob_end_clean();
+
+                        preg_match_all('#OpenSSL (Header|Library) Version(.*)#im', $content, $matches);
+
+                        if (!empty($matches[1])) {
+                            for ($i = 0; $i < count($matches[1]); $i++) {
+                                $fullVersion = trim(str_replace('=>', '', strip_tags($matches[2][$i])));
+
+                                // Remove letter part in OpenSSL version
+                                if (!preg_match('/(\d+\.\d+\.\d+)/i', $fullVersion, $m)) {
+                                    $versions[$matches[1][$i]] = $fullVersion;
+                                } else {
+                                    $versions[$matches[1][$i]] = $m[0];
+                                }
+                            }
+                        }
+                    }
+
+                    // it doesn't appear that OpenSSL versions were reported upon until PHP 5.3+
+                    switch (true) {
+                        case !isset($versions['Header']):
+                        case !isset($versions['Library']):
+                        case $versions['Header'] == $versions['Library']:
+                        case version_compare($versions['Header'], '1.0.0') >= 0 && version_compare($versions['Library'], '1.0.0') >= 0:
+                            define('CRYPT_RSA_MODE', self::MODE_OPENSSL);
+                            break;
+                        default:
+                            define('CRYPT_RSA_MODE', self::MODE_INTERNAL);
+                            define('MATH_BIGINTEGER_OPENSSL_DISABLE', true);
+                    }
+                    break;
                 default:
-                    define('CRYPT_RSA_MODE', CRYPT_RSA_MODE_INTERNAL);
+                    define('CRYPT_RSA_MODE', self::MODE_INTERNAL);
             }
         }
 
-        $this->zero = new Math_BigInteger();
-        $this->one = new Math_BigInteger(1);
+        $this->zero = new BigInteger();
+        $this->one = new BigInteger(1);
 
-        $this->hash = new Crypt_Hash('sha1');
+        $this->hash = new Hash('sha1');
         $this->hLen = $this->hash->getLength();
         $this->hashName = 'sha1';
-        $this->mgfHash = new Crypt_Hash('sha1');
+        $this->mgfHash = new Hash('sha1');
         $this->mgfHLen = $this->mgfHash->getLength();
     }
 
@@ -411,24 +528,45 @@ class Crypt_RSA {
      *  - 'privatekey': The private key.
      *  - 'publickey':  The public key.
      *  - 'partialkey': A partially computed key (if the execution time exceeded $timeout).
-     *                  Will need to be passed back to Crypt_RSA::createKey() as the third parameter for further processing.
+     *                  Will need to be passed back to \phpseclib\Crypt\RSA::createKey() as the third parameter for further processing.
      *
      * @access public
-     * @param optional Integer $bits
-     * @param optional Integer $timeout
-     * @param optional Math_BigInteger $p
+     * @param int $bits
+     * @param int $timeout
+     * @param array $p
      */
     function createKey($bits = 1024, $timeout = false, $partial = array())
     {
-        if ( CRYPT_RSA_MODE == CRYPT_RSA_MODE_OPENSSL ) {
-            $rsa = openssl_pkey_new(array('private_key_bits' => $bits));
-            openssl_pkey_export($rsa, $privatekey);
+        if (!defined('CRYPT_RSA_EXPONENT')) {
+            // http://en.wikipedia.org/wiki/65537_%28number%29
+            define('CRYPT_RSA_EXPONENT', '65537');
+        }
+        // per <http://cseweb.ucsd.edu/~hovav/dist/survey.pdf#page=5>, this number ought not result in primes smaller
+        // than 256 bits. as a consequence if the key you're trying to create is 1024 bits and you've set CRYPT_RSA_SMALLEST_PRIME
+        // to 384 bits then you're going to get a 384 bit prime and a 640 bit prime (384 + 1024 % 384). at least if
+        // CRYPT_RSA_MODE is set to self::MODE_INTERNAL. if CRYPT_RSA_MODE is set to self::MODE_OPENSSL then
+        // CRYPT_RSA_SMALLEST_PRIME is ignored (ie. multi-prime RSA support is more intended as a way to speed up RSA key
+        // generation when there's a chance neither gmp nor OpenSSL are installed)
+        if (!defined('CRYPT_RSA_SMALLEST_PRIME')) {
+            define('CRYPT_RSA_SMALLEST_PRIME', 4096);
+        }
+
+        // OpenSSL uses 65537 as the exponent and requires RSA keys be 384 bits minimum
+        if (CRYPT_RSA_MODE == self::MODE_OPENSSL && $bits >= 384 && CRYPT_RSA_EXPONENT == 65537) {
+            $config = array();
+            if (isset($this->configFile)) {
+                $config['config'] = $this->configFile;
+            }
+            $rsa = openssl_pkey_new(array('private_key_bits' => $bits) + $config);
+            openssl_pkey_export($rsa, $privatekey, null, $config);
             $publickey = openssl_pkey_get_details($rsa);
             $publickey = $publickey['key'];
 
-            if ($this->privateKeyFormat != CRYPT_RSA_PRIVATE_FORMAT_PKCS1) {
-                $privatekey = call_user_func_array(array($this, '_convertPrivateKey'), array_values($this->_parseKey($privatekey, CRYPT_RSA_PRIVATE_FORMAT_PKCS1)));
-                $publickey = call_user_func_array(array($this, '_convertPublicKey'), array_values($this->_parseKey($publickey, CRYPT_RSA_PUBLIC_FORMAT_PKCS1)));
+            $privatekey = call_user_func_array(array($this, '_convertPrivateKey'), array_values($this->_parseKey($privatekey, self::PRIVATE_FORMAT_PKCS1)));
+            $publickey = call_user_func_array(array($this, '_convertPublicKey'), array_values($this->_parseKey($publickey, self::PUBLIC_FORMAT_PKCS1)));
+
+            // clear the buffer of error strings stemming from a minimalistic openssl.cnf
+            while (openssl_error_string() !== false) {
             }
 
             return array(
@@ -440,25 +578,12 @@ class Crypt_RSA {
 
         static $e;
         if (!isset($e)) {
-            if (!defined('CRYPT_RSA_EXPONENT')) {
-                // http://en.wikipedia.org/wiki/65537_%28number%29
-                define('CRYPT_RSA_EXPONENT', '65537');
-            }
-            if (!defined('CRYPT_RSA_COMMENT')) {
-                define('CRYPT_RSA_COMMENT', 'phpseclib-generated-key');
-            }
-            // per <http://cseweb.ucsd.edu/~hovav/dist/survey.pdf#page=5>, this number ought not result in primes smaller
-            // than 256 bits.
-            if (!defined('CRYPT_RSA_SMALLEST_PRIME')) {
-                define('CRYPT_RSA_SMALLEST_PRIME', 4096);
-            }
-
-            $e = new Math_BigInteger(CRYPT_RSA_EXPONENT);
+            $e = new BigInteger(CRYPT_RSA_EXPONENT);
         }
 
         extract($this->_generateMinMax($bits));
         $absoluteMin = $min;
-        $temp = $bits >> 1;
+        $temp = $bits >> 1; // divide by two to see how many bits P and Q would be
         if ($temp > CRYPT_RSA_SMALLEST_PRIME) {
             $num_primes = floor($bits / CRYPT_RSA_SMALLEST_PRIME);
             $temp = CRYPT_RSA_SMALLEST_PRIME;
@@ -469,8 +594,7 @@ class Crypt_RSA {
         $finalMax = $max;
         extract($this->_generateMinMax($temp));
 
-        $generator = new Math_BigInteger();
-        $generator->setRandomGenerator('crypt_random');
+        $generator = new BigInteger();
 
         $n = $this->one->copy();
         if (!empty($partial)) {
@@ -492,16 +616,16 @@ class Crypt_RSA {
                     $timeout-= time() - $start;
                     $start = time();
                     if ($timeout <= 0) {
-                        return serialize(array(
+                        return array(
                             'privatekey' => '',
                             'publickey'  => '',
-                            'partialkey' => array(
+                            'partialkey' => serialize(array(
                                 'primes' => $primes,
                                 'coefficients' => $coefficients,
                                 'lcm' => $lcm,
                                 'exponents' => $exponents
-                            )
-                        ));
+                            ))
+                        );
                     }
                 }
 
@@ -516,15 +640,22 @@ class Crypt_RSA {
                 }
 
                 if ($primes[$i] === false) { // if we've reached the timeout
-                    return array(
-                        'privatekey' => '',
-                        'publickey'  => '',
-                        'partialkey' => empty($primes) ? '' : serialize(array(
-                            'primes' => array_slice($primes, 0, $i - 1),
+                    if (count($primes) > 1) {
+                        $partialkey = '';
+                    } else {
+                        array_pop($primes);
+                        $partialkey = serialize(array(
+                            'primes' => $primes,
                             'coefficients' => $coefficients,
                             'lcm' => $lcm,
                             'exponents' => $exponents
-                        ))
+                        ));
+                    }
+
+                    return array(
+                        'privatekey' => '',
+                        'publickey'  => '',
+                        'partialkey' => $partialkey
                     );
                 }
 
@@ -546,12 +677,12 @@ class Crypt_RSA {
                 $exponents[$i] = $e->modInverse($temp);
             }
 
-            list($lcm) = $lcm['top']->divide($lcm['bottom']);
-            $gcd = $lcm->gcd($e);
+            list($temp) = $lcm['top']->divide($lcm['bottom']);
+            $gcd = $temp->gcd($e);
             $i0 = 1;
         } while (!$gcd->equals($this->one));
 
-        $d = $e->modInverse($lcm);
+        $d = $e->modInverse($temp);
 
         $coefficients[2] = $primes[2]->modInverse($primes[1]);
 
@@ -580,32 +711,119 @@ class Crypt_RSA {
      * Convert a private key to the appropriate format.
      *
      * @access private
-     * @see setPrivateKeyFormat()
-     * @param String $RSAPrivateKey
-     * @return String
+     * @see self::setPrivateKeyFormat()
+     * @param string $RSAPrivateKey
+     * @return string
      */
     function _convertPrivateKey($n, $e, $d, $primes, $exponents, $coefficients)
     {
+        $signed = $this->privateKeyFormat != self::PRIVATE_FORMAT_XML;
         $num_primes = count($primes);
         $raw = array(
             'version' => $num_primes == 2 ? chr(0) : chr(1), // two-prime vs. multi
-            'modulus' => $n->toBytes(true),
-            'publicExponent' => $e->toBytes(true),
-            'privateExponent' => $d->toBytes(true),
-            'prime1' => $primes[1]->toBytes(true),
-            'prime2' => $primes[2]->toBytes(true),
-            'exponent1' => $exponents[1]->toBytes(true),
-            'exponent2' => $exponents[2]->toBytes(true),
-            'coefficient' => $coefficients[2]->toBytes(true)
+            'modulus' => $n->toBytes($signed),
+            'publicExponent' => $e->toBytes($signed),
+            'privateExponent' => $d->toBytes($signed),
+            'prime1' => $primes[1]->toBytes($signed),
+            'prime2' => $primes[2]->toBytes($signed),
+            'exponent1' => $exponents[1]->toBytes($signed),
+            'exponent2' => $exponents[2]->toBytes($signed),
+            'coefficient' => $coefficients[2]->toBytes($signed)
         );
 
         // if the format in question does not support multi-prime rsa and multi-prime rsa was used,
         // call _convertPublicKey() instead.
         switch ($this->privateKeyFormat) {
-            default: // eg. CRYPT_RSA_PRIVATE_FORMAT_PKCS1
+            case self::PRIVATE_FORMAT_XML:
+                if ($num_primes != 2) {
+                    return false;
+                }
+                return "<RSAKeyValue>\r\n" .
+                       '  <Modulus>' . base64_encode($raw['modulus']) . "</Modulus>\r\n" .
+                       '  <Exponent>' . base64_encode($raw['publicExponent']) . "</Exponent>\r\n" .
+                       '  <P>' . base64_encode($raw['prime1']) . "</P>\r\n" .
+                       '  <Q>' . base64_encode($raw['prime2']) . "</Q>\r\n" .
+                       '  <DP>' . base64_encode($raw['exponent1']) . "</DP>\r\n" .
+                       '  <DQ>' . base64_encode($raw['exponent2']) . "</DQ>\r\n" .
+                       '  <InverseQ>' . base64_encode($raw['coefficient']) . "</InverseQ>\r\n" .
+                       '  <D>' . base64_encode($raw['privateExponent']) . "</D>\r\n" .
+                       '</RSAKeyValue>';
+                break;
+            case self::PRIVATE_FORMAT_PUTTY:
+                if ($num_primes != 2) {
+                    return false;
+                }
+                $key = "PuTTY-User-Key-File-2: ssh-rsa\r\nEncryption: ";
+                $encryption = (!empty($this->password) || is_string($this->password)) ? 'aes256-cbc' : 'none';
+                $key.= $encryption;
+                $key.= "\r\nComment: " . $this->comment . "\r\n";
+                $public = pack(
+                    'Na*Na*Na*',
+                    strlen('ssh-rsa'),
+                    'ssh-rsa',
+                    strlen($raw['publicExponent']),
+                    $raw['publicExponent'],
+                    strlen($raw['modulus']),
+                    $raw['modulus']
+                );
+                $source = pack(
+                    'Na*Na*Na*Na*',
+                    strlen('ssh-rsa'),
+                    'ssh-rsa',
+                    strlen($encryption),
+                    $encryption,
+                    strlen($this->comment),
+                    $this->comment,
+                    strlen($public),
+                    $public
+                );
+                $public = base64_encode($public);
+                $key.= "Public-Lines: " . ((strlen($public) + 63) >> 6) . "\r\n";
+                $key.= chunk_split($public, 64);
+                $private = pack(
+                    'Na*Na*Na*Na*',
+                    strlen($raw['privateExponent']),
+                    $raw['privateExponent'],
+                    strlen($raw['prime1']),
+                    $raw['prime1'],
+                    strlen($raw['prime2']),
+                    $raw['prime2'],
+                    strlen($raw['coefficient']),
+                    $raw['coefficient']
+                );
+                if (empty($this->password) && !is_string($this->password)) {
+                    $source.= pack('Na*', strlen($private), $private);
+                    $hashkey = 'putty-private-key-file-mac-key';
+                } else {
+                    $private.= Random::string(16 - (strlen($private) & 15));
+                    $source.= pack('Na*', strlen($private), $private);
+                    $sequence = 0;
+                    $symkey = '';
+                    while (strlen($symkey) < 32) {
+                        $temp = pack('Na*', $sequence++, $this->password);
+                        $symkey.= pack('H*', sha1($temp));
+                    }
+                    $symkey = substr($symkey, 0, 32);
+                    $crypto = new AES();
+
+                    $crypto->setKey($symkey);
+                    $crypto->disablePadding();
+                    $private = $crypto->encrypt($private);
+                    $hashkey = 'putty-private-key-file-mac-key' . $this->password;
+                }
+
+                $private = base64_encode($private);
+                $key.= 'Private-Lines: ' . ((strlen($private) + 63) >> 6) . "\r\n";
+                $key.= chunk_split($private, 64);
+                $hash = new Hash('sha1');
+                $hash->setKey(pack('H*', sha1($hashkey)));
+                $key.= 'Private-MAC: ' . bin2hex($hash->hash($source)) . "\r\n";
+
+                return $key;
+            default: // eg. self::PRIVATE_FORMAT_PKCS1
                 $components = array();
                 foreach ($raw as $name => $value) {
-                    $components[$name] = pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($value)), $value);
+                    $components[$name] = pack('Ca*a*', self::ASN1_INTEGER, $this->_encodeLength(strlen($value)), $value);
                 }
 
                 $RSAPrivateKey = implode('', $components);
@@ -620,24 +838,85 @@ class Crypt_RSA {
                         //     exponent          INTEGER,  -- di
                         //     coefficient       INTEGER   -- ti
                         // }
-                        $OtherPrimeInfo = pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($primes[$i]->toBytes(true))), $primes[$i]->toBytes(true));
-                        $OtherPrimeInfo.= pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($exponents[$i]->toBytes(true))), $exponents[$i]->toBytes(true));
-                        $OtherPrimeInfo.= pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($coefficients[$i]->toBytes(true))), $coefficients[$i]->toBytes(true));
-                        $OtherPrimeInfos.= pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfo)), $OtherPrimeInfo);
+                        $OtherPrimeInfo = pack('Ca*a*', self::ASN1_INTEGER, $this->_encodeLength(strlen($primes[$i]->toBytes(true))), $primes[$i]->toBytes(true));
+                        $OtherPrimeInfo.= pack('Ca*a*', self::ASN1_INTEGER, $this->_encodeLength(strlen($exponents[$i]->toBytes(true))), $exponents[$i]->toBytes(true));
+                        $OtherPrimeInfo.= pack('Ca*a*', self::ASN1_INTEGER, $this->_encodeLength(strlen($coefficients[$i]->toBytes(true))), $coefficients[$i]->toBytes(true));
+                        $OtherPrimeInfos.= pack('Ca*a*', self::ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfo)), $OtherPrimeInfo);
                     }
-                    $RSAPrivateKey.= pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfos)), $OtherPrimeInfos);
+                    $RSAPrivateKey.= pack('Ca*a*', self::ASN1_SEQUENCE, $this->_encodeLength(strlen($OtherPrimeInfos)), $OtherPrimeInfos);
                 }
 
-                $RSAPrivateKey = pack('Ca*a*', CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey);
+                $RSAPrivateKey = pack('Ca*a*', self::ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey);
+
+                if ($this->privateKeyFormat == self::PRIVATE_FORMAT_PKCS8) {
+                    $rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA
+                    $RSAPrivateKey = pack(
+                        'Ca*a*Ca*a*',
+                        self::ASN1_INTEGER,
+                        "\01\00",
+                        $rsaOID,
+                        4,
+                        $this->_encodeLength(strlen($RSAPrivateKey)),
+                        $RSAPrivateKey
+                    );
+                    $RSAPrivateKey = pack('Ca*a*', self::ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey);
+                    if (!empty($this->password) || is_string($this->password)) {
+                        $salt = Random::string(8);
+                        $iterationCount = 2048;
+
+                        $crypto = new DES();
+                        $crypto->setPassword($this->password, 'pbkdf1', 'md5', $salt, $iterationCount);
+                        $RSAPrivateKey = $crypto->encrypt($RSAPrivateKey);
+
+                        $parameters = pack(
+                            'Ca*a*Ca*N',
+                            self::ASN1_OCTETSTRING,
+                            $this->_encodeLength(strlen($salt)),
+                            $salt,
+                            self::ASN1_INTEGER,
+                            $this->_encodeLength(4),
+                            $iterationCount
+                        );
+                        $pbeWithMD5AndDES_CBC = "\x2a\x86\x48\x86\xf7\x0d\x01\x05\x03";
+
+                        $encryptionAlgorithm = pack(
+                            'Ca*a*Ca*a*',
+                            self::ASN1_OBJECT,
+                            $this->_encodeLength(strlen($pbeWithMD5AndDES_CBC)),
+                            $pbeWithMD5AndDES_CBC,
+                            self::ASN1_SEQUENCE,
+                            $this->_encodeLength(strlen($parameters)),
+                            $parameters
+                        );
+
+                        $RSAPrivateKey = pack(
+                            'Ca*a*Ca*a*',
+                            self::ASN1_SEQUENCE,
+                            $this->_encodeLength(strlen($encryptionAlgorithm)),
+                            $encryptionAlgorithm,
+                            self::ASN1_OCTETSTRING,
+                            $this->_encodeLength(strlen($RSAPrivateKey)),
+                            $RSAPrivateKey
+                        );
+
+                        $RSAPrivateKey = pack('Ca*a*', self::ASN1_SEQUENCE, $this->_encodeLength(strlen($RSAPrivateKey)), $RSAPrivateKey);
+
+                        $RSAPrivateKey = "-----BEGIN ENCRYPTED PRIVATE KEY-----\r\n" .
+                                         chunk_split(base64_encode($RSAPrivateKey), 64) .
+                                         '-----END ENCRYPTED PRIVATE KEY-----';
+                    } else {
+                        $RSAPrivateKey = "-----BEGIN PRIVATE KEY-----\r\n" .
+                                         chunk_split(base64_encode($RSAPrivateKey), 64) .
+                                         '-----END PRIVATE KEY-----';
+                    }
+                    return $RSAPrivateKey;
+                }
 
-                if (!empty($this->password)) {
-                    $iv = $this->_random(8);
+                if (!empty($this->password) || is_string($this->password)) {
+                    $iv = Random::string(8);
                     $symkey = pack('H*', md5($this->password . $iv)); // symkey is short for symmetric key
                     $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8);
-                    if (!class_exists('Crypt_TripleDES')) {
-                        require_once('Crypt/TripleDES.php');
-                    }
-                    $des = new Crypt_TripleDES();
+                    $des = new TripleDES();
                     $des->setKey($symkey);
                     $des->setIV($iv);
                     $iv = strtoupper(bin2hex($iv));
@@ -645,11 +924,11 @@ class Crypt_RSA {
                                      "Proc-Type: 4,ENCRYPTED\r\n" .
                                      "DEK-Info: DES-EDE3-CBC,$iv\r\n" .
                                      "\r\n" .
-                                     chunk_split(base64_encode($des->encrypt($RSAPrivateKey))) .
+                                     chunk_split(base64_encode($des->encrypt($RSAPrivateKey)), 64) .
                                      '-----END RSA PRIVATE KEY-----';
                 } else {
                     $RSAPrivateKey = "-----BEGIN RSA PRIVATE KEY-----\r\n" .
-                                     chunk_split(base64_encode($RSAPrivateKey)) .
+                                     chunk_split(base64_encode($RSAPrivateKey), 64) .
                                      '-----END RSA PRIVATE KEY-----';
                 }
 
@@ -661,46 +940,75 @@ class Crypt_RSA {
      * Convert a public key to the appropriate format
      *
      * @access private
-     * @see setPublicKeyFormat()
-     * @param String $RSAPrivateKey
-     * @return String
+     * @see self::setPublicKeyFormat()
+     * @param string $RSAPrivateKey
+     * @return string
      */
     function _convertPublicKey($n, $e)
     {
-        $modulus = $n->toBytes(true);
-        $publicExponent = $e->toBytes(true);
+        $signed = $this->publicKeyFormat != self::PUBLIC_FORMAT_XML;
+
+        $modulus = $n->toBytes($signed);
+        $publicExponent = $e->toBytes($signed);
 
         switch ($this->publicKeyFormat) {
-            case CRYPT_RSA_PUBLIC_FORMAT_RAW:
+            case self::PUBLIC_FORMAT_RAW:
                 return array('e' => $e->copy(), 'n' => $n->copy());
-            case CRYPT_RSA_PUBLIC_FORMAT_OPENSSH:
+            case self::PUBLIC_FORMAT_XML:
+                return "<RSAKeyValue>\r\n" .
+                       '  <Modulus>' . base64_encode($modulus) . "</Modulus>\r\n" .
+                       '  <Exponent>' . base64_encode($publicExponent) . "</Exponent>\r\n" .
+                       '</RSAKeyValue>';
+                break;
+            case self::PUBLIC_FORMAT_OPENSSH:
                 // from <http://tools.ietf.org/html/rfc4253#page-15>:
                 // string    "ssh-rsa"
                 // mpint     e
                 // mpint     n
                 $RSAPublicKey = pack('Na*Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publicExponent), $publicExponent, strlen($modulus), $modulus);
-                $RSAPublicKey = 'ssh-rsa ' . base64_encode($RSAPublicKey) . ' ' . CRYPT_RSA_COMMENT;
+                $RSAPublicKey = 'ssh-rsa ' . base64_encode($RSAPublicKey) . ' ' . $this->comment;
 
                 return $RSAPublicKey;
-            default: // eg. CRYPT_RSA_PUBLIC_FORMAT_PKCS1
+            default: // eg. self::PUBLIC_FORMAT_PKCS1_RAW or self::PUBLIC_FORMAT_PKCS1
                 // from <http://tools.ietf.org/html/rfc3447#appendix-A.1.1>:
                 // RSAPublicKey ::= SEQUENCE {
                 //     modulus           INTEGER,  -- n
                 //     publicExponent    INTEGER   -- e
                 // }
                 $components = array(
-                    'modulus' => pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($modulus)), $modulus),
-                    'publicExponent' => pack('Ca*a*', CRYPT_RSA_ASN1_INTEGER, $this->_encodeLength(strlen($publicExponent)), $publicExponent)
+                    'modulus' => pack('Ca*a*', self::ASN1_INTEGER, $this->_encodeLength(strlen($modulus)), $modulus),
+                    'publicExponent' => pack('Ca*a*', self::ASN1_INTEGER, $this->_encodeLength(strlen($publicExponent)), $publicExponent)
                 );
 
-                $RSAPublicKey = pack('Ca*a*a*',
-                    CRYPT_RSA_ASN1_SEQUENCE, $this->_encodeLength(strlen($components['modulus']) + strlen($components['publicExponent'])),
-                    $components['modulus'], $components['publicExponent']
+                $RSAPublicKey = pack(
+                    'Ca*a*a*',
+                    self::ASN1_SEQUENCE,
+                    $this->_encodeLength(strlen($components['modulus']) + strlen($components['publicExponent'])),
+                    $components['modulus'],
+                    $components['publicExponent']
                 );
 
-                $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" .
-                                 chunk_split(base64_encode($RSAPublicKey)) .
-                                 '-----END PUBLIC KEY-----';
+                if ($this->publicKeyFormat == self::PUBLIC_FORMAT_PKCS1_RAW) {
+                    $RSAPublicKey = "-----BEGIN RSA PUBLIC KEY-----\r\n" .
+                                    chunk_split(base64_encode($RSAPublicKey), 64) .
+                                    '-----END RSA PUBLIC KEY-----';
+                } else {
+                    // sequence(oid(1.2.840.113549.1.1.1), null)) = rsaEncryption.
+                    $rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA
+                    $RSAPublicKey = chr(0) . $RSAPublicKey;
+                    $RSAPublicKey = chr(3) . $this->_encodeLength(strlen($RSAPublicKey)) . $RSAPublicKey;
+
+                    $RSAPublicKey = pack(
+                        'Ca*a*',
+                        self::ASN1_SEQUENCE,
+                        $this->_encodeLength(strlen($rsaOID . $RSAPublicKey)),
+                        $rsaOID . $RSAPublicKey
+                    );
+
+                    $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" .
+                                     chunk_split(base64_encode($RSAPublicKey), 64) .
+                                     '-----END PUBLIC KEY-----';
+                }
 
                 return $RSAPublicKey;
         }
@@ -710,16 +1018,20 @@ class Crypt_RSA {
      * Break a public or private key down into its constituant components
      *
      * @access private
-     * @see _convertPublicKey()
-     * @see _convertPrivateKey()
-     * @param String $key
-     * @param Integer $type
-     * @return Array
+     * @see self::_convertPublicKey()
+     * @see self::_convertPrivateKey()
+     * @param string $key
+     * @param int $type
+     * @return array
      */
     function _parseKey($key, $type)
     {
+        if ($type != self::PUBLIC_FORMAT_RAW && !is_string($key)) {
+            return false;
+        }
+
         switch ($type) {
-            case CRYPT_RSA_PUBLIC_FORMAT_RAW:
+            case self::PUBLIC_FORMAT_RAW:
                 if (!is_array($key)) {
                     return false;
                 }
@@ -750,9 +1062,10 @@ class Crypt_RSA {
                     case isset($key[1]):
                         $components['modulus'] = $key[1]->copy();
                 }
-                return $components;
-            case CRYPT_RSA_PRIVATE_FORMAT_PKCS1:
-            case CRYPT_RSA_PUBLIC_FORMAT_PKCS1:
+                return isset($components['modulus']) && isset($components['publicExponent']) ? $components : false;
+            case self::PRIVATE_FORMAT_PKCS1:
+            case self::PRIVATE_FORMAT_PKCS8:
+            case self::PUBLIC_FORMAT_PKCS1:
                 /* Although PKCS#1 proposes a format that public and private keys can use, encrypting them is
                    "outside the scope" of PKCS#1.  PKCS#1 then refers you to PKCS#12 and PKCS#15 if you're wanting to
                    protect private keys, however, that's not what OpenSSL* does.  OpenSSL protects private keys by adding
@@ -764,31 +1077,37 @@ class Crypt_RSA {
                    DES-EDE3-CBC as an algorithm, however, is not discussed anywhere, near as I can tell.
                    DES-CBC and DES-EDE are discussed in RFC1423, however, DES-EDE3-CBC isn't, nor is its key derivation
                    function.  As is, the definitive authority on this encoding scheme isn't the IETF but rather OpenSSL's
-                   own implementation.  ie. the implementation *is* the standard and any bugs that may exist in that 
+                   own implementation.  ie. the implementation *is* the standard and any bugs that may exist in that
                    implementation are part of the standard, as well.
 
                    * OpenSSL is the de facto standard.  It's utilized by OpenSSH and other projects */
                 if (preg_match('#DEK-Info: (.+),(.+)#', $key, $matches)) {
                     $iv = pack('H*', trim($matches[2]));
-                    $symkey = pack('H*', md5($this->password . $iv)); // symkey is short for symmetric key
-                    $symkey.= substr(pack('H*', md5($symkey . $this->password . $iv)), 0, 8);
-                    $ciphertext = preg_replace('#.+(\r|\n|\r\n)\1|[\r\n]|-.+-#s', '', $key);
-                    $ciphertext = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $ciphertext) ? base64_decode($ciphertext) : false;
+                    $symkey = pack('H*', md5($this->password . substr($iv, 0, 8))); // symkey is short for symmetric key
+                    $symkey.= pack('H*', md5($symkey . $this->password . substr($iv, 0, 8)));
+                    // remove the Proc-Type / DEK-Info sections as they're no longer needed
+                    $key = preg_replace('#^(?:Proc-Type|DEK-Info): .*#m', '', $key);
+                    $ciphertext = $this->_extractBER($key);
                     if ($ciphertext === false) {
                         $ciphertext = $key;
                     }
                     switch ($matches[1]) {
+                        case 'AES-256-CBC':
+                            $crypto = new AES();
+                            break;
+                        case 'AES-128-CBC':
+                            $symkey = substr($symkey, 0, 16);
+                            $crypto = new AES();
+                            break;
+                        case 'DES-EDE3-CFB':
+                            $crypto = new TripleDES(Base::MODE_CFB);
+                            break;
                         case 'DES-EDE3-CBC':
-                            if (!class_exists('Crypt_TripleDES')) {
-                                require_once('Crypt/TripleDES.php');
-                            }
-                            $crypto = new Crypt_TripleDES();
+                            $symkey = substr($symkey, 0, 24);
+                            $crypto = new TripleDES();
                             break;
                         case 'DES-CBC':
-                            if (!class_exists('Crypt_DES')) {
-                                require_once('Crypt/DES.php');
-                            }
-                            $crypto = new Crypt_DES();
+                            $crypto = new DES();
                             break;
                         default:
                             return false;
@@ -797,8 +1116,7 @@ class Crypt_RSA {
                     $crypto->setIV($iv);
                     $decoded = $crypto->decrypt($ciphertext);
                 } else {
-                    $decoded = preg_replace('#-.+-|[\r\n]#', '', $key);
-                    $decoded = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $decoded) ? base64_decode($decoded) : false;
+                    $decoded = $this->_extractBER($key);
                 }
 
                 if ($decoded !== false) {
@@ -807,7 +1125,7 @@ class Crypt_RSA {
 
                 $components = array();
 
-                if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+                if (ord($this->_string_shift($key)) != self::ASN1_SEQUENCE) {
                     return false;
                 }
                 if ($this->_decodeLength($key) != strlen($key)) {
@@ -815,7 +1133,66 @@ class Crypt_RSA {
                 }
 
                 $tag = ord($this->_string_shift($key));
-                if ($tag == CRYPT_RSA_ASN1_SEQUENCE) {
+                /* intended for keys for which OpenSSL's asn1parse returns the following:
+
+                    0:d=0  hl=4 l= 631 cons: SEQUENCE
+                    4:d=1  hl=2 l=   1 prim:  INTEGER           :00
+                    7:d=1  hl=2 l=  13 cons:  SEQUENCE
+                    9:d=2  hl=2 l=   9 prim:   OBJECT            :rsaEncryption
+                   20:d=2  hl=2 l=   0 prim:   NULL
+                   22:d=1  hl=4 l= 609 prim:  OCTET STRING
+
+                   ie. PKCS8 keys*/
+
+                if ($tag == self::ASN1_INTEGER && substr($key, 0, 3) == "\x01\x00\x30") {
+                    $this->_string_shift($key, 3);
+                    $tag = self::ASN1_SEQUENCE;
+                }
+
+                if ($tag == self::ASN1_SEQUENCE) {
+                    $temp = $this->_string_shift($key, $this->_decodeLength($key));
+                    if (ord($this->_string_shift($temp)) != self::ASN1_OBJECT) {
+                        return false;
+                    }
+                    $length = $this->_decodeLength($temp);
+                    switch ($this->_string_shift($temp, $length)) {
+                        case "\x2a\x86\x48\x86\xf7\x0d\x01\x01\x01": // rsaEncryption
+                            break;
+                        case "\x2a\x86\x48\x86\xf7\x0d\x01\x05\x03": // pbeWithMD5AndDES-CBC
+                            /*
+                               PBEParameter ::= SEQUENCE {
+                                   salt OCTET STRING (SIZE(8)),
+                                   iterationCount INTEGER }
+                            */
+                            if (ord($this->_string_shift($temp)) != self::ASN1_SEQUENCE) {
+                                return false;
+                            }
+                            if ($this->_decodeLength($temp) != strlen($temp)) {
+                                return false;
+                            }
+                            $this->_string_shift($temp); // assume it's an octet string
+                            $salt = $this->_string_shift($temp, $this->_decodeLength($temp));
+                            if (ord($this->_string_shift($temp)) != self::ASN1_INTEGER) {
+                                return false;
+                            }
+                            $this->_decodeLength($temp);
+                            list(, $iterationCount) = unpack('N', str_pad($temp, 4, chr(0), STR_PAD_LEFT));
+                            $this->_string_shift($key); // assume it's an octet string
+                            $length = $this->_decodeLength($key);
+                            if (strlen($key) != $length) {
+                                return false;
+                            }
+
+                            $crypto = new DES();
+                            $crypto->setPassword($this->password, 'pbkdf1', 'md5', $salt, $iterationCount);
+                            $key = $crypto->decrypt($key);
+                            if ($key === false) {
+                                return false;
+                            }
+                            return $this->_parseKey($key, self::PRIVATE_FORMAT_PKCS1);
+                        default:
+                            return false;
+                    }
                     /* intended for keys for which OpenSSL's asn1parse returns the following:
 
                         0:d=0  hl=4 l= 290 cons: SEQUENCE
@@ -823,14 +1200,15 @@ class Crypt_RSA {
                         6:d=2  hl=2 l=   9 prim:   OBJECT            :rsaEncryption
                        17:d=2  hl=2 l=   0 prim:   NULL
                        19:d=1  hl=4 l= 271 prim:  BIT STRING */
-                    $this->_string_shift($key, $this->_decodeLength($key));
-                    $this->_string_shift($key); // skip over the BIT STRING tag
-                    $this->_decodeLength($key); // skip over the BIT STRING length
+                    $tag = ord($this->_string_shift($key)); // skip over the BIT STRING / OCTET STRING tag
+                    $this->_decodeLength($key); // skip over the BIT STRING / OCTET STRING length
                     // "The initial octet shall encode, as an unsigned binary integer wtih bit 1 as the least significant bit, the number of
-                    //  unused bits in teh final subsequent octet. The number shall be in the range zero to seven."
+                    //  unused bits in the final subsequent octet. The number shall be in the range zero to seven."
                     //  -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf (section 8.6.2.2)
-                    $this->_string_shift($key);
-                    if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+                    if ($tag == self::ASN1_BITSTRING) {
+                        $this->_string_shift($key);
+                    }
+                    if (ord($this->_string_shift($key)) != self::ASN1_SEQUENCE) {
                         return false;
                     }
                     if ($this->_decodeLength($key) != strlen($key)) {
@@ -838,114 +1216,381 @@ class Crypt_RSA {
                     }
                     $tag = ord($this->_string_shift($key));
                 }
-                if ($tag != CRYPT_RSA_ASN1_INTEGER) {
+                if ($tag != self::ASN1_INTEGER) {
                     return false;
                 }
 
                 $length = $this->_decodeLength($key);
                 $temp = $this->_string_shift($key, $length);
                 if (strlen($temp) != 1 || ord($temp) > 2) {
-                    $components['modulus'] = new Math_BigInteger($temp, -256);
-                    $this->_string_shift($key); // skip over CRYPT_RSA_ASN1_INTEGER
+                    $components['modulus'] = new BigInteger($temp, 256);
+                    $this->_string_shift($key); // skip over self::ASN1_INTEGER
                     $length = $this->_decodeLength($key);
-                    $components[$type == CRYPT_RSA_PUBLIC_FORMAT_PKCS1 ? 'publicExponent' : 'privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+                    $components[$type == self::PUBLIC_FORMAT_PKCS1 ? 'publicExponent' : 'privateExponent'] = new BigInteger($this->_string_shift($key, $length), 256);
 
                     return $components;
                 }
-                if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_INTEGER) {
+                if (ord($this->_string_shift($key)) != self::ASN1_INTEGER) {
                     return false;
                 }
                 $length = $this->_decodeLength($key);
-                $components['modulus'] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+                $components['modulus'] = new BigInteger($this->_string_shift($key, $length), 256);
                 $this->_string_shift($key);
                 $length = $this->_decodeLength($key);
-                $components['publicExponent'] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+                $components['publicExponent'] = new BigInteger($this->_string_shift($key, $length), 256);
                 $this->_string_shift($key);
                 $length = $this->_decodeLength($key);
-                $components['privateExponent'] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+                $components['privateExponent'] = new BigInteger($this->_string_shift($key, $length), 256);
                 $this->_string_shift($key);
                 $length = $this->_decodeLength($key);
-                $components['primes'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), -256));
+                $components['primes'] = array(1 => new BigInteger($this->_string_shift($key, $length), 256));
                 $this->_string_shift($key);
                 $length = $this->_decodeLength($key);
-                $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+                $components['primes'][] = new BigInteger($this->_string_shift($key, $length), 256);
                 $this->_string_shift($key);
                 $length = $this->_decodeLength($key);
-                $components['exponents'] = array(1 => new Math_BigInteger($this->_string_shift($key, $length), -256));
+                $components['exponents'] = array(1 => new BigInteger($this->_string_shift($key, $length), 256));
                 $this->_string_shift($key);
                 $length = $this->_decodeLength($key);
-                $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+                $components['exponents'][] = new BigInteger($this->_string_shift($key, $length), 256);
                 $this->_string_shift($key);
                 $length = $this->_decodeLength($key);
-                $components['coefficients'] = array(2 => new Math_BigInteger($this->_string_shift($key, $length), -256));
+                $components['coefficients'] = array(2 => new BigInteger($this->_string_shift($key, $length), 256));
 
                 if (!empty($key)) {
-                    if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+                    if (ord($this->_string_shift($key)) != self::ASN1_SEQUENCE) {
                         return false;
                     }
                     $this->_decodeLength($key);
                     while (!empty($key)) {
-                        if (ord($this->_string_shift($key)) != CRYPT_RSA_ASN1_SEQUENCE) {
+                        if (ord($this->_string_shift($key)) != self::ASN1_SEQUENCE) {
                             return false;
                         }
                         $this->_decodeLength($key);
                         $key = substr($key, 1);
                         $length = $this->_decodeLength($key);
-                        $components['primes'][] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+                        $components['primes'][] = new BigInteger($this->_string_shift($key, $length), 256);
                         $this->_string_shift($key);
                         $length = $this->_decodeLength($key);
-                        $components['exponents'][] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+                        $components['exponents'][] = new BigInteger($this->_string_shift($key, $length), 256);
                         $this->_string_shift($key);
                         $length = $this->_decodeLength($key);
-                        $components['coefficients'][] = new Math_BigInteger($this->_string_shift($key, $length), -256);
+                        $components['coefficients'][] = new BigInteger($this->_string_shift($key, $length), 256);
+                    }
+                }
+
+                return $components;
+            case self::PUBLIC_FORMAT_OPENSSH:
+                $parts = explode(' ', $key, 3);
+
+                $key = isset($parts[1]) ? base64_decode($parts[1]) : false;
+                if ($key === false) {
+                    return false;
+                }
+
+                $comment = isset($parts[2]) ? $parts[2] : false;
+
+                $cleanup = substr($key, 0, 11) == "\0\0\0\7ssh-rsa";
+
+                if (strlen($key) <= 4) {
+                    return false;
+                }
+                extract(unpack('Nlength', $this->_string_shift($key, 4)));
+                $publicExponent = new BigInteger($this->_string_shift($key, $length), -256);
+                if (strlen($key) <= 4) {
+                    return false;
+                }
+                extract(unpack('Nlength', $this->_string_shift($key, 4)));
+                $modulus = new BigInteger($this->_string_shift($key, $length), -256);
+
+                if ($cleanup && strlen($key)) {
+                    if (strlen($key) <= 4) {
+                        return false;
                     }
+                    extract(unpack('Nlength', $this->_string_shift($key, 4)));
+                    $realModulus = new BigInteger($this->_string_shift($key, $length), -256);
+                    return strlen($key) ? false : array(
+                        'modulus' => $realModulus,
+                        'publicExponent' => $modulus,
+                        'comment' => $comment
+                    );
+                } else {
+                    return strlen($key) ? false : array(
+                        'modulus' => $modulus,
+                        'publicExponent' => $publicExponent,
+                        'comment' => $comment
+                    );
+                }
+            // http://www.w3.org/TR/xmldsig-core/#sec-RSAKeyValue
+            // http://en.wikipedia.org/wiki/XML_Signature
+            case self::PRIVATE_FORMAT_XML:
+            case self::PUBLIC_FORMAT_XML:
+                $this->components = array();
+
+                $xml = xml_parser_create('UTF-8');
+                xml_set_object($xml, $this);
+                xml_set_element_handler($xml, '_start_element_handler', '_stop_element_handler');
+                xml_set_character_data_handler($xml, '_data_handler');
+                // add <xml></xml> to account for "dangling" tags like <BitStrength>...</BitStrength> that are sometimes added
+                if (!xml_parse($xml, '<xml>' . $key . '</xml>')) {
+                    return false;
+                }
+
+                return isset($this->components['modulus']) && isset($this->components['publicExponent']) ? $this->components : false;
+            // from PuTTY's SSHPUBK.C
+            case self::PRIVATE_FORMAT_PUTTY:
+                $components = array();
+                $key = preg_split('#\r\n|\r|\n#', $key);
+                $type = trim(preg_replace('#PuTTY-User-Key-File-2: (.+)#', '$1', $key[0]));
+                if ($type != 'ssh-rsa') {
+                    return false;
+                }
+                $encryption = trim(preg_replace('#Encryption: (.+)#', '$1', $key[1]));
+                $comment = trim(preg_replace('#Comment: (.+)#', '$1', $key[2]));
+
+                $publicLength = trim(preg_replace('#Public-Lines: (\d+)#', '$1', $key[3]));
+                $public = base64_decode(implode('', array_map('trim', array_slice($key, 4, $publicLength))));
+                $public = substr($public, 11);
+                extract(unpack('Nlength', $this->_string_shift($public, 4)));
+                $components['publicExponent'] = new BigInteger($this->_string_shift($public, $length), -256);
+                extract(unpack('Nlength', $this->_string_shift($public, 4)));
+                $components['modulus'] = new BigInteger($this->_string_shift($public, $length), -256);
+
+                $privateLength = trim(preg_replace('#Private-Lines: (\d+)#', '$1', $key[$publicLength + 4]));
+                $private = base64_decode(implode('', array_map('trim', array_slice($key, $publicLength + 5, $privateLength))));
+
+                switch ($encryption) {
+                    case 'aes256-cbc':
+                        $symkey = '';
+                        $sequence = 0;
+                        while (strlen($symkey) < 32) {
+                            $temp = pack('Na*', $sequence++, $this->password);
+                            $symkey.= pack('H*', sha1($temp));
+                        }
+                        $symkey = substr($symkey, 0, 32);
+                        $crypto = new AES();
+                }
+
+                if ($encryption != 'none') {
+                    $crypto->setKey($symkey);
+                    $crypto->disablePadding();
+                    $private = $crypto->decrypt($private);
+                    if ($private === false) {
+                        return false;
+                    }
+                }
+
+                extract(unpack('Nlength', $this->_string_shift($private, 4)));
+                if (strlen($private) < $length) {
+                    return false;
+                }
+                $components['privateExponent'] = new BigInteger($this->_string_shift($private, $length), -256);
+                extract(unpack('Nlength', $this->_string_shift($private, 4)));
+                if (strlen($private) < $length) {
+                    return false;
+                }
+                $components['primes'] = array(1 => new BigInteger($this->_string_shift($private, $length), -256));
+                extract(unpack('Nlength', $this->_string_shift($private, 4)));
+                if (strlen($private) < $length) {
+                    return false;
                 }
+                $components['primes'][] = new BigInteger($this->_string_shift($private, $length), -256);
 
-                return $components;
-            case CRYPT_RSA_PUBLIC_FORMAT_OPENSSH:
-                $key = base64_decode(preg_replace('#^ssh-rsa | .+$#', '', $key));
-                if ($key === false) {
+                $temp = $components['primes'][1]->subtract($this->one);
+                $components['exponents'] = array(1 => $components['publicExponent']->modInverse($temp));
+                $temp = $components['primes'][2]->subtract($this->one);
+                $components['exponents'][] = $components['publicExponent']->modInverse($temp);
+
+                extract(unpack('Nlength', $this->_string_shift($private, 4)));
+                if (strlen($private) < $length) {
                     return false;
                 }
+                $components['coefficients'] = array(2 => new BigInteger($this->_string_shift($private, $length), -256));
 
-                $cleanup = substr($key, 0, 11) == "\0\0\0\7ssh-rsa";
+                return $components;
+        }
+    }
 
-                extract(unpack('Nlength', $this->_string_shift($key, 4)));
-                $publicExponent = new Math_BigInteger($this->_string_shift($key, $length), -256);
-                extract(unpack('Nlength', $this->_string_shift($key, 4)));
-                $modulus = new Math_BigInteger($this->_string_shift($key, $length), -256);
+    /**
+     * Returns the key size
+     *
+     * More specifically, this returns the size of the modulo in bits.
+     *
+     * @access public
+     * @return int
+     */
+    function getSize()
+    {
+        return !isset($this->modulus) ? 0 : strlen($this->modulus->toBits());
+    }
 
-                if ($cleanup && strlen($key)) {
-                    extract(unpack('Nlength', $this->_string_shift($key, 4)));
-                    return array(
-                        'modulus' => new Math_BigInteger($this->_string_shift($key, $length), -256),
-                        'publicExponent' => $modulus
-                    );
-                } else {
-                    return array(
-                        'modulus' => $modulus,
-                        'publicExponent' => $publicExponent
-                    );
-                }
+    /**
+     * Start Element Handler
+     *
+     * Called by xml_set_element_handler()
+     *
+     * @access private
+     * @param resource $parser
+     * @param string $name
+     * @param array $attribs
+     */
+    function _start_element_handler($parser, $name, $attribs)
+    {
+        //$name = strtoupper($name);
+        switch ($name) {
+            case 'MODULUS':
+                $this->current = &$this->components['modulus'];
+                break;
+            case 'EXPONENT':
+                $this->current = &$this->components['publicExponent'];
+                break;
+            case 'P':
+                $this->current = &$this->components['primes'][1];
+                break;
+            case 'Q':
+                $this->current = &$this->components['primes'][2];
+                break;
+            case 'DP':
+                $this->current = &$this->components['exponents'][1];
+                break;
+            case 'DQ':
+                $this->current = &$this->components['exponents'][2];
+                break;
+            case 'INVERSEQ':
+                $this->current = &$this->components['coefficients'][2];
+                break;
+            case 'D':
+                $this->current = &$this->components['privateExponent'];
+        }
+        $this->current = '';
+    }
+
+    /**
+     * Stop Element Handler
+     *
+     * Called by xml_set_element_handler()
+     *
+     * @access private
+     * @param resource $parser
+     * @param string $name
+     */
+    function _stop_element_handler($parser, $name)
+    {
+        if (isset($this->current)) {
+            $this->current = new BigInteger(base64_decode($this->current), 256);
+            unset($this->current);
         }
     }
 
     /**
+     * Data Handler
+     *
+     * Called by xml_set_character_data_handler()
+     *
+     * @access private
+     * @param resource $parser
+     * @param string $data
+     */
+    function _data_handler($parser, $data)
+    {
+        if (!isset($this->current) || is_object($this->current)) {
+            return;
+        }
+        $this->current.= trim($data);
+    }
+
+    /**
      * Loads a public or private key
      *
      * Returns true on success and false on failure (ie. an incorrect password was provided or the key was malformed)
      *
      * @access public
-     * @param String $key
-     * @param Integer $type optional
+     * @param string $key
+     * @param int $type optional
      */
-    function loadKey($key, $type = CRYPT_RSA_PRIVATE_FORMAT_PKCS1)
+    function loadKey($key, $type = false)
     {
-        $components = $this->_parseKey($key, $type);
+        if ($key instanceof RSA) {
+            $this->privateKeyFormat = $key->privateKeyFormat;
+            $this->publicKeyFormat = $key->publicKeyFormat;
+            $this->k = $key->k;
+            $this->hLen = $key->hLen;
+            $this->sLen = $key->sLen;
+            $this->mgfHLen = $key->mgfHLen;
+            $this->encryptionMode = $key->encryptionMode;
+            $this->signatureMode = $key->signatureMode;
+            $this->password = $key->password;
+            $this->configFile = $key->configFile;
+            $this->comment = $key->comment;
+
+            if (is_object($key->hash)) {
+                $this->hash = new Hash($key->hash->getHash());
+            }
+            if (is_object($key->mgfHash)) {
+                $this->mgfHash = new Hash($key->mgfHash->getHash());
+            }
+
+            if (is_object($key->modulus)) {
+                $this->modulus = $key->modulus->copy();
+            }
+            if (is_object($key->exponent)) {
+                $this->exponent = $key->exponent->copy();
+            }
+            if (is_object($key->publicExponent)) {
+                $this->publicExponent = $key->publicExponent->copy();
+            }
+
+            $this->primes = array();
+            $this->exponents = array();
+            $this->coefficients = array();
+
+            foreach ($this->primes as $prime) {
+                $this->primes[] = $prime->copy();
+            }
+            foreach ($this->exponents as $exponent) {
+                $this->exponents[] = $exponent->copy();
+            }
+            foreach ($this->coefficients as $coefficient) {
+                $this->coefficients[] = $coefficient->copy();
+            }
+
+            return true;
+        }
+
+        if ($type === false) {
+            $types = array(
+                self::PUBLIC_FORMAT_RAW,
+                self::PRIVATE_FORMAT_PKCS1,
+                self::PRIVATE_FORMAT_XML,
+                self::PRIVATE_FORMAT_PUTTY,
+                self::PUBLIC_FORMAT_OPENSSH
+            );
+            foreach ($types as $type) {
+                $components = $this->_parseKey($key, $type);
+                if ($components !== false) {
+                    break;
+                }
+            }
+        } else {
+            $components = $this->_parseKey($key, $type);
+        }
+
         if ($components === false) {
+            $this->comment = null;
+            $this->modulus = null;
+            $this->k = null;
+            $this->exponent = null;
+            $this->primes = null;
+            $this->exponents = null;
+            $this->coefficients = null;
+            $this->publicExponent = null;
+
             return false;
         }
 
+        if (isset($components['comment']) && $components['comment'] !== false) {
+            $this->comment = $components['comment'];
+        }
         $this->modulus = $components['modulus'];
         $this->k = strlen($this->modulus->toBytes());
         $this->exponent = isset($components['privateExponent']) ? $components['privateExponent'] : $components['publicExponent'];
@@ -961,6 +1606,19 @@ class Crypt_RSA {
             $this->publicExponent = false;
         }
 
+        switch ($type) {
+            case self::PUBLIC_FORMAT_OPENSSH:
+            case self::PUBLIC_FORMAT_RAW:
+                $this->setPublicKey();
+                break;
+            case self::PRIVATE_FORMAT_PKCS1:
+                switch (true) {
+                    case strpos($key, '-BEGIN PUBLIC KEY-') !== false:
+                    case strpos($key, '-BEGIN RSA PUBLIC KEY-') !== false:
+                        $this->setPublicKey();
+                }
+        }
+
         return true;
     }
 
@@ -968,14 +1626,14 @@ class Crypt_RSA {
      * Sets the password
      *
      * Private keys can be encrypted with a password.  To unset the password, pass in the empty string or false.
-     * Or rather, pass in $password such that empty($password) is true.
+     * Or rather, pass in $password such that empty($password) && !is_string($password) is true.
      *
-     * @see createKey()
-     * @see loadKey()
+     * @see self::createKey()
+     * @see self::loadKey()
      * @access public
-     * @param String $password
+     * @param string $password
      */
-    function setPassword($password)
+    function setPassword($password = false)
     {
         $this->password = $password;
     }
@@ -987,25 +1645,96 @@ class Crypt_RSA {
      * used in certain contexts.  For example, in SSH-2, RSA authentication works by sending the public key along with a
      * message signed by the private key to the server.  The SSH-2 server looks the public key up in an index of public keys
      * and if it's present then proceeds to verify the signature.  Problem is, if your private key doesn't include the public
-     * exponent this won't work unless you manually add the public exponent.
+     * exponent this won't work unless you manually add the public exponent. phpseclib tries to guess if the key being used
+     * is the public key but in the event that it guesses incorrectly you might still want to explicitly set the key as being
+     * public.
      *
      * Do note that when a new key is loaded the index will be cleared.
      *
      * Returns true on success, false on failure
      *
-     * @see getPublicKey()
+     * @see self::getPublicKey()
      * @access public
-     * @param String $key
-     * @param Integer $type optional
-     * @return Boolean
+     * @param string $key optional
+     * @param int $type optional
+     * @return bool
      */
-    function setPublicKey($key, $type = CRYPT_RSA_PUBLIC_FORMAT_PKCS1)
+    function setPublicKey($key = false, $type = false)
     {
-        $components = $this->_parseKey($key, $type);
-        if (empty($this->modulus) || !$this->modulus->equals($components['modulus'])) {
+        // if a public key has already been loaded return false
+        if (!empty($this->publicExponent)) {
+            return false;
+        }
+
+        if ($key === false && !empty($this->modulus)) {
+            $this->publicExponent = $this->exponent;
+            return true;
+        }
+
+        if ($type === false) {
+            $types = array(
+                self::PUBLIC_FORMAT_RAW,
+                self::PUBLIC_FORMAT_PKCS1,
+                self::PUBLIC_FORMAT_XML,
+                self::PUBLIC_FORMAT_OPENSSH
+            );
+            foreach ($types as $type) {
+                $components = $this->_parseKey($key, $type);
+                if ($components !== false) {
+                    break;
+                }
+            }
+        } else {
+            $components = $this->_parseKey($key, $type);
+        }
+
+        if ($components === false) {
             return false;
         }
+
+        if (empty($this->modulus) || !$this->modulus->equals($components['modulus'])) {
+            $this->modulus = $components['modulus'];
+            $this->exponent = $this->publicExponent = $components['publicExponent'];
+            return true;
+        }
+
         $this->publicExponent = $components['publicExponent'];
+
+        return true;
+    }
+
+    /**
+     * Defines the private key
+     *
+     * If phpseclib guessed a private key was a public key and loaded it as such it might be desirable to force
+     * phpseclib to treat the key as a private key. This function will do that.
+     *
+     * Do note that when a new key is loaded the index will be cleared.
+     *
+     * Returns true on success, false on failure
+     *
+     * @see self::getPublicKey()
+     * @access public
+     * @param string $key optional
+     * @param int $type optional
+     * @return bool
+     */
+    function setPrivateKey($key = false, $type = false)
+    {
+        if ($key === false && !empty($this->publicExponent)) {
+            $this->publicExponent = false;
+            return true;
+        }
+
+        $rsa = new RSA();
+        if (!$rsa->loadKey($key, $type)) {
+            return false;
+        }
+        $rsa->publicExponent = false;
+
+        // don't overwrite the old key if the new key is invalid
+        $this->loadKey($rsa);
+        return true;
     }
 
     /**
@@ -1015,12 +1744,12 @@ class Crypt_RSA {
      * or if the public key was set via setPublicKey().  If the currently loaded key is supposed to be the public key this
      * function won't return it since this library, for the most part, doesn't distinguish between public and private keys.
      *
-     * @see getPublicKey()
+     * @see self::getPublicKey()
      * @access public
-     * @param String $key
-     * @param Integer $type optional
+     * @param string $key
+     * @param int $type optional
      */
-    function getPublicKey($type = CRYPT_RSA_PUBLIC_FORMAT_PKCS1)
+    function getPublicKey($type = self::PUBLIC_FORMAT_PKCS8)
     {
         if (empty($this->modulus) || empty($this->publicExponent)) {
             return false;
@@ -1034,11 +1763,123 @@ class Crypt_RSA {
     }
 
     /**
+     * Returns the public key's fingerprint
+     *
+     * The public key's fingerprint is returned, which is equivalent to running `ssh-keygen -lf rsa.pub`. If there is
+     * no public key currently loaded, false is returned.
+     * Example output (md5): "c1:b1:30:29:d7:b8:de:6c:97:77:10:d7:46:41:63:87" (as specified by RFC 4716)
+     *
+     * @access public
+     * @param string $algorithm The hashing algorithm to be used. Valid options are 'md5' and 'sha256'. False is returned
+     * for invalid values.
+     * @return mixed
+     */
+    function getPublicKeyFingerprint($algorithm = 'md5')
+    {
+        if (empty($this->modulus) || empty($this->publicExponent)) {
+            return false;
+        }
+
+        $modulus = $this->modulus->toBytes(true);
+        $publicExponent = $this->publicExponent->toBytes(true);
+
+        $RSAPublicKey = pack('Na*Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publicExponent), $publicExponent, strlen($modulus), $modulus);
+
+        switch ($algorithm) {
+            case 'sha256':
+                $hash = new Hash('sha256');
+                $base = base64_encode($hash->hash($RSAPublicKey));
+                return substr($base, 0, strlen($base) - 1);
+            case 'md5':
+                return substr(chunk_split(md5($RSAPublicKey), 2, ':'), 0, -1);
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Returns the private key
+     *
+     * The private key is only returned if the currently loaded key contains the constituent prime numbers.
+     *
+     * @see self::getPublicKey()
+     * @access public
+     * @param string $key
+     * @param int $type optional
+     * @return mixed
+     */
+    function getPrivateKey($type = self::PUBLIC_FORMAT_PKCS1)
+    {
+        if (empty($this->primes)) {
+            return false;
+        }
+
+        $oldFormat = $this->privateKeyFormat;
+        $this->privateKeyFormat = $type;
+        $temp = $this->_convertPrivateKey($this->modulus, $this->publicExponent, $this->exponent, $this->primes, $this->exponents, $this->coefficients);
+        $this->privateKeyFormat = $oldFormat;
+        return $temp;
+    }
+
+    /**
+     * Returns a minimalistic private key
+     *
+     * Returns the private key without the prime number constituants.  Structurally identical to a public key that
+     * hasn't been set as the public key
+     *
+     * @see self::getPrivateKey()
+     * @access private
+     * @param string $key
+     * @param int $type optional
+     */
+    function _getPrivatePublicKey($mode = self::PUBLIC_FORMAT_PKCS8)
+    {
+        if (empty($this->modulus) || empty($this->exponent)) {
+            return false;
+        }
+
+        $oldFormat = $this->publicKeyFormat;
+        $this->publicKeyFormat = $mode;
+        $temp = $this->_convertPublicKey($this->modulus, $this->exponent);
+        $this->publicKeyFormat = $oldFormat;
+        return $temp;
+    }
+
+    /**
+     *  __toString() magic method
+     *
+     * @access public
+     * @return string
+     */
+    function __toString()
+    {
+        $key = $this->getPrivateKey($this->privateKeyFormat);
+        if ($key !== false) {
+            return $key;
+        }
+        $key = $this->_getPrivatePublicKey($this->publicKeyFormat);
+        return $key !== false ? $key : '';
+    }
+
+    /**
+     *  __clone() magic method
+     *
+     * @access public
+     * @return Crypt_RSA
+     */
+    function __clone()
+    {
+        $key = new RSA();
+        $key->loadKey($this);
+        return $key;
+    }
+
+    /**
      * Generates the smallest and largest numbers requiring $bits bits
      *
      * @access private
-     * @param Integer $bits
-     * @return Array
+     * @param int $bits
+     * @return array
      */
     function _generateMinMax($bits)
     {
@@ -1054,8 +1895,8 @@ class Crypt_RSA {
         }
 
         return array(
-            'min' => new Math_BigInteger($min, 256),
-            'max' => new Math_BigInteger($max, 256)
+            'min' => new BigInteger($min, 256),
+            'max' => new BigInteger($max, 256)
         );
     }
 
@@ -1063,16 +1904,16 @@ class Crypt_RSA {
      * DER-decode the length
      *
      * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See
-     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 � 8.1.3} for more information.
+     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.
      *
      * @access private
-     * @param String $string
-     * @return Integer
+     * @param string $string
+     * @return int
      */
     function _decodeLength(&$string)
     {
         $length = ord($this->_string_shift($string));
-        if ( $length & 0x80 ) { // definite length, long form
+        if ($length & 0x80) { // definite length, long form
             $length&= 0x7F;
             $temp = $this->_string_shift($string, $length);
             list(, $length) = unpack('N', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4));
@@ -1084,11 +1925,11 @@ class Crypt_RSA {
      * DER-encode the length
      *
      * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See
-     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 � 8.1.3} for more information.
+     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.
      *
      * @access private
-     * @param Integer $length
-     * @return String
+     * @param int $length
+     * @return string
      */
     function _encodeLength($length)
     {
@@ -1105,9 +1946,9 @@ class Crypt_RSA {
      *
      * Inspired by array_shift
      *
-     * @param String $string
-     * @param optional Integer $index
-     * @return String
+     * @param string $string
+     * @param int $index
+     * @return string
      * @access private
      */
     function _string_shift(&$string, $index = 1)
@@ -1120,9 +1961,9 @@ class Crypt_RSA {
     /**
      * Determines the private key format
      *
-     * @see createKey()
+     * @see self::createKey()
      * @access public
-     * @param Integer $format
+     * @param int $format
      */
     function setPrivateKeyFormat($format)
     {
@@ -1132,9 +1973,9 @@ class Crypt_RSA {
     /**
      * Determines the public key format
      *
-     * @see createKey()
+     * @see self::createKey()
      * @access public
-     * @param Integer $format
+     * @param int $format
      */
     function setPublicKeyFormat($format)
     {
@@ -1144,15 +1985,15 @@ class Crypt_RSA {
     /**
      * Determines which hashing function should be used
      *
-     * Used with signature production / verification and (if the encryption mode is CRYPT_RSA_ENCRYPTION_OAEP) encryption and
+     * Used with signature production / verification and (if the encryption mode is self::ENCRYPTION_OAEP) encryption and
      * decryption.  If $hash isn't supported, sha1 is used.
      *
      * @access public
-     * @param String $hash
+     * @param string $hash
      */
     function setHash($hash)
     {
-        // Crypt_Hash supports algorithms that PKCS#1 doesn't support.  md5-96 and sha1-96, for example.
+        // \phpseclib\Crypt\Hash supports algorithms that PKCS#1 doesn't support.  md5-96 and sha1-96, for example.
         switch ($hash) {
             case 'md2':
             case 'md5':
@@ -1160,11 +2001,11 @@ class Crypt_RSA {
             case 'sha256':
             case 'sha384':
             case 'sha512':
-                $this->hash = new Crypt_Hash($hash);
+                $this->hash = new Hash($hash);
                 $this->hashName = $hash;
                 break;
             default:
-                $this->hash = new Crypt_Hash('sha1');
+                $this->hash = new Hash('sha1');
                 $this->hashName = 'sha1';
         }
         $this->hLen = $this->hash->getLength();
@@ -1173,15 +2014,15 @@ class Crypt_RSA {
     /**
      * Determines which hashing function should be used for the mask generation function
      *
-     * The mask generation function is used by CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_SIGNATURE_PSS and although it's
+     * The mask generation function is used by self::ENCRYPTION_OAEP and self::SIGNATURE_PSS and although it's
      * best if Hash and MGFHash are set to the same thing this is not a requirement.
      *
      * @access public
-     * @param String $hash
+     * @param string $hash
      */
     function setMGFHash($hash)
     {
-        // Crypt_Hash supports algorithms that PKCS#1 doesn't support.  md5-96 and sha1-96, for example.
+        // \phpseclib\Crypt\Hash supports algorithms that PKCS#1 doesn't support.  md5-96 and sha1-96, for example.
         switch ($hash) {
             case 'md2':
             case 'md5':
@@ -1189,10 +2030,10 @@ class Crypt_RSA {
             case 'sha256':
             case 'sha384':
             case 'sha512':
-                $this->mgfHash = new Crypt_Hash($hash);
+                $this->mgfHash = new Hash($hash);
                 break;
             default:
-                $this->mgfHash = new Crypt_Hash('sha1');
+                $this->mgfHash = new Hash('sha1');
         }
         $this->mgfHLen = $this->mgfHash->getLength();
     }
@@ -1206,7 +2047,7 @@ class Crypt_RSA {
      *    of the hash function Hash) and 0.
      *
      * @access public
-     * @param Integer $format
+     * @param int $format
      */
     function setSaltLength($sLen)
     {
@@ -1214,45 +2055,20 @@ class Crypt_RSA {
     }
 
     /**
-     * Generates a random string x bytes long
-     *
-     * @access public
-     * @param Integer $bytes
-     * @param optional Integer $nonzero
-     * @return String
-     */
-    function _random($bytes, $nonzero = false)
-    {
-        $temp = '';
-        if ($nonzero) {
-            for ($i = 0; $i < $bytes; $i++) {
-                $temp.= chr(crypt_random(1, 255));
-            }
-        } else {
-            $ints = ($bytes + 1) >> 2;
-            for ($i = 0; $i < $ints; $i++) {
-                $temp.= pack('N', crypt_random());
-            }
-            $temp = substr($temp, 0, $bytes);
-        }
-        return $temp;
-    }
-
-    /**
      * Integer-to-Octet-String primitive
      *
      * See {@link http://tools.ietf.org/html/rfc3447#section-4.1 RFC3447#section-4.1}.
      *
      * @access private
-     * @param Math_BigInteger $x
-     * @param Integer $xLen
-     * @return String
+     * @param \phpseclib\Math\BigInteger $x
+     * @param int $xLen
+     * @return string
      */
     function _i2osp($x, $xLen)
     {
         $x = $x->toBytes();
         if (strlen($x) > $xLen) {
-            user_error('Integer too large', E_USER_NOTICE);
+            user_error('Integer too large');
             return false;
         }
         return str_pad($x, $xLen, chr(0), STR_PAD_LEFT);
@@ -1264,12 +2080,12 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#section-4.2 RFC3447#section-4.2}.
      *
      * @access private
-     * @param String $x
-     * @return Math_BigInteger
+     * @param string $x
+     * @return \phpseclib\Math\BigInteger
      */
     function _os2ip($x)
     {
-        return new Math_BigInteger($x, 256);
+        return new BigInteger($x, 256);
     }
 
     /**
@@ -1278,13 +2094,19 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.2}.
      *
      * @access private
-     * @param Math_BigInteger $x
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $x
+     * @return \phpseclib\Math\BigInteger
      */
     function _exponentiate($x)
     {
-        if (empty($this->primes) || empty($this->coefficients) || empty($this->exponents)) {
-            return $x->modPow($this->exponent, $this->modulus);
+        switch (true) {
+            case empty($this->primes):
+            case $this->primes[1]->equals($this->zero):
+            case empty($this->coefficients):
+            case $this->coefficients[2]->equals($this->zero):
+            case empty($this->exponents):
+            case $this->exponents[1]->equals($this->zero):
+                return $x->modPow($this->exponent, $this->modulus);
         }
 
         $num_primes = count($this->primes);
@@ -1319,8 +2141,7 @@ class Crypt_RSA {
                 }
             }
 
-            $one = new Math_BigInteger(1);
-            $one->setRandomGenerator('crypt_random');
+            $one = new BigInteger(1);
 
             $r = $one->random($one, $smallest->subtract($one));
 
@@ -1357,15 +2178,14 @@ class Crypt_RSA {
      * Returns $x->modPow($this->exponents[$i], $this->primes[$i])
      *
      * @access private
-     * @param Math_BigInteger $x
-     * @param Math_BigInteger $r
-     * @param Integer $i
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $x
+     * @param \phpseclib\Math\BigInteger $r
+     * @param int $i
+     * @return \phpseclib\Math\BigInteger
      */
     function _blind($x, $r, $i)
     {
         $x = $x->multiply($r->modPow($this->publicExponent, $this->primes[$i]));
-
         $x = $x->modPow($this->exponents[$i], $this->primes[$i]);
 
         $r = $r->modInverse($this->primes[$i]);
@@ -1376,18 +2196,46 @@ class Crypt_RSA {
     }
 
     /**
+     * Performs blinded RSA equality testing
+     *
+     * Protects against a particular type of timing attack described.
+     *
+     * See {@link http://codahale.com/a-lesson-in-timing-attacks/ A Lesson In Timing Attacks (or, Don't use MessageDigest.isEquals)}
+     *
+     * Thanks for the heads up singpolyma!
+     *
+     * @access private
+     * @param string $x
+     * @param string $y
+     * @return bool
+     */
+    function _equals($x, $y)
+    {
+        if (strlen($x) != strlen($y)) {
+            return false;
+        }
+
+        $result = 0;
+        for ($i = 0; $i < strlen($x); $i++) {
+            $result |= ord($x[$i]) ^ ord($y[$i]);
+        }
+
+        return $result == 0;
+    }
+
+    /**
      * RSAEP
      *
      * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.1 RFC3447#section-5.1.1}.
      *
      * @access private
-     * @param Math_BigInteger $m
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $m
+     * @return \phpseclib\Math\BigInteger
      */
     function _rsaep($m)
     {
         if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) {
-            user_error('Message representative out of range', E_USER_NOTICE);
+            user_error('Message representative out of range');
             return false;
         }
         return $this->_exponentiate($m);
@@ -1399,13 +2247,13 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#section-5.1.2 RFC3447#section-5.1.2}.
      *
      * @access private
-     * @param Math_BigInteger $c
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $c
+     * @return \phpseclib\Math\BigInteger
      */
     function _rsadp($c)
     {
         if ($c->compare($this->zero) < 0 || $c->compare($this->modulus) > 0) {
-            user_error('Ciphertext representative out of range', E_USER_NOTICE);
+            user_error('Ciphertext representative out of range');
             return false;
         }
         return $this->_exponentiate($c);
@@ -1417,13 +2265,13 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.1 RFC3447#section-5.2.1}.
      *
      * @access private
-     * @param Math_BigInteger $m
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $m
+     * @return \phpseclib\Math\BigInteger
      */
     function _rsasp1($m)
     {
         if ($m->compare($this->zero) < 0 || $m->compare($this->modulus) > 0) {
-            user_error('Message representative out of range', E_USER_NOTICE);
+            user_error('Message representative out of range');
             return false;
         }
         return $this->_exponentiate($m);
@@ -1435,13 +2283,13 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#section-5.2.2 RFC3447#section-5.2.2}.
      *
      * @access private
-     * @param Math_BigInteger $s
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $s
+     * @return \phpseclib\Math\BigInteger
      */
     function _rsavp1($s)
     {
         if ($s->compare($this->zero) < 0 || $s->compare($this->modulus) > 0) {
-            user_error('Signature representative out of range', E_USER_NOTICE);
+            user_error('Signature representative out of range');
             return false;
         }
         return $this->_exponentiate($s);
@@ -1453,9 +2301,9 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#appendix-B.2.1 RFC3447#appendix-B.2.1}.
      *
      * @access private
-     * @param String $mgfSeed
-     * @param Integer $mgfLen
-     * @return String
+     * @param string $mgfSeed
+     * @param int $mgfLen
+     * @return string
      */
     function _mgf1($mgfSeed, $maskLen)
     {
@@ -1478,9 +2326,9 @@ class Crypt_RSA {
      * {http://en.wikipedia.org/wiki/Optimal_Asymmetric_Encryption_Padding OAES}.
      *
      * @access private
-     * @param String $m
-     * @param String $l
-     * @return String
+     * @param string $m
+     * @param string $l
+     * @return string
      */
     function _rsaes_oaep_encrypt($m, $l = '')
     {
@@ -1492,7 +2340,7 @@ class Crypt_RSA {
         // be output.
 
         if ($mLen > $this->k - 2 * $this->hLen - 2) {
-            user_error('Message too long', E_USER_NOTICE);
+            user_error('Message too long');
             return false;
         }
 
@@ -1501,7 +2349,7 @@ class Crypt_RSA {
         $lHash = $this->hash->hash($l);
         $ps = str_repeat(chr(0), $this->k - $mLen - 2 * $this->hLen - 2);
         $db = $lHash . $ps . chr(1) . $m;
-        $seed = $this->_random($this->hLen);
+        $seed = Random::string($this->hLen);
         $dbMask = $this->_mgf1($seed, $this->k - $this->hLen - 1);
         $maskedDB = $db ^ $dbMask;
         $seedMask = $this->_mgf1($maskedDB, $this->hLen);
@@ -1524,7 +2372,7 @@ class Crypt_RSA {
      *
      * See {@link http://tools.ietf.org/html/rfc3447#section-7.1.2 RFC3447#section-7.1.2}.  The fact that the error
      * messages aren't distinguishable from one another hinders debugging, but, to quote from RFC3447#section-7.1.2:
-     * 
+     *
      *    Note.  Care must be taken to ensure that an opponent cannot
      *    distinguish the different error conditions in Step 3.g, whether by
      *    error message or timing, or, more generally, learn partial
@@ -1541,9 +2389,9 @@ class Crypt_RSA {
      *    this document.
      *
      * @access private
-     * @param String $c
-     * @param String $l
-     * @return String
+     * @param string $c
+     * @param string $l
+     * @return string
      */
     function _rsaes_oaep_decrypt($c, $l = '')
     {
@@ -1553,7 +2401,7 @@ class Crypt_RSA {
         // be output.
 
         if (strlen($c) != $this->k || $this->k < 2 * $this->hLen + 2) {
-            user_error('Decryption error', E_USER_NOTICE);
+            user_error('Decryption error');
             return false;
         }
 
@@ -1562,7 +2410,7 @@ class Crypt_RSA {
         $c = $this->_os2ip($c);
         $m = $this->_rsadp($c);
         if ($m === false) {
-            user_error('Decryption error', E_USER_NOTICE);
+            user_error('Decryption error');
             return false;
         }
         $em = $this->_i2osp($m, $this->k);
@@ -1579,13 +2427,13 @@ class Crypt_RSA {
         $db = $maskedDB ^ $dbMask;
         $lHash2 = substr($db, 0, $this->hLen);
         $m = substr($db, $this->hLen);
-        if ($lHash != $lHash2) {
-            user_error('Decryption error', E_USER_NOTICE);
+        if (!$this->_equals($lHash, $lHash2)) {
+            user_error('Decryption error');
             return false;
         }
         $m = ltrim($m, chr(0));
         if (ord($m[0]) != 1) {
-            user_error('Decryption error', E_USER_NOTICE);
+            user_error('Decryption error');
             return false;
         }
 
@@ -1595,13 +2443,29 @@ class Crypt_RSA {
     }
 
     /**
+     * Raw Encryption / Decryption
+     *
+     * Doesn't use padding and is not recommended.
+     *
+     * @access private
+     * @param string $m
+     * @return string
+     */
+    function _raw_encrypt($m)
+    {
+        $temp = $this->_os2ip($m);
+        $temp = $this->_rsaep($temp);
+        return  $this->_i2osp($temp, $this->k);
+    }
+
+    /**
      * RSAES-PKCS1-V1_5-ENCRYPT
      *
      * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.1 RFC3447#section-7.2.1}.
      *
      * @access private
-     * @param String $m
-     * @return String
+     * @param string $m
+     * @return string
      */
     function _rsaes_pkcs1_v1_5_encrypt($m)
     {
@@ -1610,14 +2474,27 @@ class Crypt_RSA {
         // Length checking
 
         if ($mLen > $this->k - 11) {
-            user_error('Message too long', E_USER_NOTICE);
+            user_error('Message too long');
             return false;
         }
 
         // EME-PKCS1-v1_5 encoding
 
-        $ps = $this->_random($this->k - $mLen - 3, true);
-        $em = chr(0) . chr(2) . $ps . chr(0) . $m;
+        $psLen = $this->k - $mLen - 3;
+        $ps = '';
+        while (strlen($ps) != $psLen) {
+            $temp = Random::string($psLen - strlen($ps));
+            $temp = str_replace("\x00", '', $temp);
+            $ps.= $temp;
+        }
+        $type = 2;
+        // see the comments of _rsaes_pkcs1_v1_5_decrypt() to understand why this is being done
+        if (defined('CRYPT_RSA_PKCS15_COMPAT') && (!isset($this->publicExponent) || $this->exponent !== $this->publicExponent)) {
+            $type = 1;
+            // "The padding string PS shall consist of k-3-||D|| octets. ... for block type 01, they shall have value FF"
+            $ps = str_repeat("\xFF", $psLen);
+        }
+        $em = chr(0) . chr($type) . $ps . chr(0) . $m;
 
         // RSA encryption
         $m = $this->_os2ip($em);
@@ -1634,27 +2511,27 @@ class Crypt_RSA {
      *
      * See {@link http://tools.ietf.org/html/rfc3447#section-7.2.2 RFC3447#section-7.2.2}.
      *
-     * For compatability purposes, this function departs slightly from the description given in RFC3447.
+     * For compatibility purposes, this function departs slightly from the description given in RFC3447.
      * The reason being that RFC2313#section-8.1 (PKCS#1 v1.5) states that ciphertext's encrypted by the
      * private key should have the second byte set to either 0 or 1 and that ciphertext's encrypted by the
      * public key should have the second byte set to 2.  In RFC3447 (PKCS#1 v2.1), the second byte is supposed
-     * to be 2 regardless of which key is used.  for compatability purposes, we'll just check to make sure the
+     * to be 2 regardless of which key is used.  For compatibility purposes, we'll just check to make sure the
      * second byte is 2 or less.  If it is, we'll accept the decrypted string as valid.
      *
-     * As a consequence of this, a private key encrypted ciphertext produced with Crypt_RSA may not decrypt
+     * As a consequence of this, a private key encrypted ciphertext produced with \phpseclib\Crypt\RSA may not decrypt
      * with a strictly PKCS#1 v1.5 compliant RSA implementation.  Public key encrypted ciphertext's should but
      * not private key encrypted ciphertext's.
      *
      * @access private
-     * @param String $c
-     * @return String
+     * @param string $c
+     * @return string
      */
     function _rsaes_pkcs1_v1_5_decrypt($c)
     {
         // Length checking
 
         if (strlen($c) != $this->k) { // or if k < 11
-            user_error('Decryption error', E_USER_NOTICE);
+            user_error('Decryption error');
             return false;
         }
 
@@ -1662,8 +2539,9 @@ class Crypt_RSA {
 
         $c = $this->_os2ip($c);
         $m = $this->_rsadp($c);
+
         if ($m === false) {
-            user_error('Decryption error', E_USER_NOTICE);
+            user_error('Decryption error');
             return false;
         }
         $em = $this->_i2osp($m, $this->k);
@@ -1671,7 +2549,7 @@ class Crypt_RSA {
         // EME-PKCS1-v1_5 decoding
 
         if (ord($em[0]) != 0 || ord($em[1]) > 2) {
-            user_error('Decryption error', E_USER_NOTICE);
+            user_error('Decryption error');
             return false;
         }
 
@@ -1679,7 +2557,7 @@ class Crypt_RSA {
         $m = substr($em, strlen($ps) + 3);
 
         if (strlen($ps) < 8) {
-            user_error('Decryption error', E_USER_NOTICE);
+            user_error('Decryption error');
             return false;
         }
 
@@ -1694,8 +2572,8 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.1 RFC3447#section-9.1.1}.
      *
      * @access private
-     * @param String $m
-     * @param Integer $emBits
+     * @param string $m
+     * @param int $emBits
      */
     function _emsa_pss_encode($m, $emBits)
     {
@@ -1703,15 +2581,15 @@ class Crypt_RSA {
         // be output.
 
         $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8)
-        $sLen = $this->sLen == false ? $this->hLen : $this->sLen;
+        $sLen = $this->sLen !== null ? $this->sLen : $this->hLen;
 
         $mHash = $this->hash->hash($m);
         if ($emLen < $this->hLen + $sLen + 2) {
-            user_error('Encoding error', E_USER_NOTICE);
+            user_error('Encoding error');
             return false;
         }
 
-        $salt = $this->_random($sLen);
+        $salt = Random::string($sLen);
         $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
         $h = $this->hash->hash($m2);
         $ps = str_repeat(chr(0), $emLen - $sLen - $this->hLen - 2);
@@ -1730,10 +2608,10 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#section-9.1.2 RFC3447#section-9.1.2}.
      *
      * @access private
-     * @param String $m
-     * @param String $em
-     * @param Integer $emBits
-     * @return String
+     * @param string $m
+     * @param string $em
+     * @param int $emBits
+     * @return string
      */
     function _emsa_pss_verify($m, $em, $emBits)
     {
@@ -1741,7 +2619,7 @@ class Crypt_RSA {
         // be output.
 
         $emLen = ($emBits + 1) >> 3; // ie. ceil($emBits / 8);
-        $sLen = $this->sLen == false ? $this->hLen : $this->sLen;
+        $sLen = $this->sLen !== null ? $this->sLen : $this->hLen;
 
         $mHash = $this->hash->hash($m);
         if ($emLen < $this->hLen + $sLen + 2) {
@@ -1752,8 +2630,8 @@ class Crypt_RSA {
             return false;
         }
 
-        $maskedDB = substr($em, 0, $em - $this->hLen - 1);
-        $h = substr($em, $em - $this->hLen - 1, $this->hLen);
+        $maskedDB = substr($em, 0, -$this->hLen - 1);
+        $h = substr($em, -$this->hLen - 1, $this->hLen);
         $temp = chr(0xFF << ($emBits & 7));
         if ((~$maskedDB[0] & $temp) != $temp) {
             return false;
@@ -1768,7 +2646,7 @@ class Crypt_RSA {
         $salt = substr($db, $temp + 1); // should be $sLen long
         $m2 = "\0\0\0\0\0\0\0\0" . $mHash . $salt;
         $h2 = $this->hash->hash($m2);
-        return $h == $h2;
+        return $this->_equals($h, $h2);
     }
 
     /**
@@ -1777,8 +2655,8 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.1 RFC3447#section-8.1.1}.
      *
      * @access private
-     * @param String $m
-     * @return String
+     * @param string $m
+     * @return string
      */
     function _rsassa_pss_sign($m)
     {
@@ -1803,16 +2681,16 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#section-8.1.2 RFC3447#section-8.1.2}.
      *
      * @access private
-     * @param String $m
-     * @param String $s
-     * @return String
+     * @param string $m
+     * @param string $s
+     * @return string
      */
     function _rsassa_pss_verify($m, $s)
     {
         // Length checking
 
         if (strlen($s) != $this->k) {
-            user_error('Invalid signature', E_USER_NOTICE);
+            user_error('Invalid signature');
             return false;
         }
 
@@ -1823,12 +2701,12 @@ class Crypt_RSA {
         $s2 = $this->_os2ip($s);
         $m2 = $this->_rsavp1($s2);
         if ($m2 === false) {
-            user_error('Invalid signature', E_USER_NOTICE);
+            user_error('Invalid signature');
             return false;
         }
         $em = $this->_i2osp($m2, $modBits >> 3);
         if ($em === false) {
-            user_error('Invalid signature', E_USER_NOTICE);
+            user_error('Invalid signature');
             return false;
         }
 
@@ -1843,9 +2721,9 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#section-9.2 RFC3447#section-9.2}.
      *
      * @access private
-     * @param String $m
-     * @param Integer $emLen
-     * @return String
+     * @param string $m
+     * @param int $emLen
+     * @return string
      */
     function _emsa_pkcs1_v1_5_encode($m, $emLen)
     {
@@ -1878,7 +2756,7 @@ class Crypt_RSA {
         $tLen = strlen($t);
 
         if ($emLen < $tLen + 11) {
-            user_error('Intended encoded message length too short', E_USER_NOTICE);
+            user_error('Intended encoded message length too short');
             return false;
         }
 
@@ -1895,8 +2773,8 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.1 RFC3447#section-8.2.1}.
      *
      * @access private
-     * @param String $m
-     * @return String
+     * @param string $m
+     * @return string
      */
     function _rsassa_pkcs1_v1_5_sign($m)
     {
@@ -1904,7 +2782,7 @@ class Crypt_RSA {
 
         $em = $this->_emsa_pkcs1_v1_5_encode($m, $this->k);
         if ($em === false) {
-            user_error('RSA modulus too short', E_USER_NOTICE);
+            user_error('RSA modulus too short');
             return false;
         }
 
@@ -1925,15 +2803,15 @@ class Crypt_RSA {
      * See {@link http://tools.ietf.org/html/rfc3447#section-8.2.2 RFC3447#section-8.2.2}.
      *
      * @access private
-     * @param String $m
-     * @return String
+     * @param string $m
+     * @return string
      */
     function _rsassa_pkcs1_v1_5_verify($m, $s)
     {
         // Length checking
 
         if (strlen($s) != $this->k) {
-            user_error('Invalid signature', E_USER_NOTICE);
+            user_error('Invalid signature');
             return false;
         }
 
@@ -1942,12 +2820,12 @@ class Crypt_RSA {
         $s = $this->_os2ip($s);
         $m2 = $this->_rsavp1($s);
         if ($m2 === false) {
-            user_error('Invalid signature', E_USER_NOTICE);
+            user_error('Invalid signature');
             return false;
         }
         $em = $this->_i2osp($m2, $this->k);
         if ($em === false) {
-            user_error('Invalid signature', E_USER_NOTICE);
+            user_error('Invalid signature');
             return false;
         }
 
@@ -1955,22 +2833,21 @@ class Crypt_RSA {
 
         $em2 = $this->_emsa_pkcs1_v1_5_encode($m, $this->k);
         if ($em2 === false) {
-            user_error('RSA modulus too short', E_USER_NOTICE);
+            user_error('RSA modulus too short');
             return false;
         }
 
         // Compare
-
-        return $em === $em2;
+        return $this->_equals($em, $em2);
     }
 
     /**
      * Set Encryption Mode
      *
-     * Valid values include CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_ENCRYPTION_PKCS1.
+     * Valid values include self::ENCRYPTION_OAEP and self::ENCRYPTION_PKCS1.
      *
      * @access public
-     * @param Integer $mode
+     * @param int $mode
      */
     function setEncryptionMode($mode)
     {
@@ -1980,10 +2857,10 @@ class Crypt_RSA {
     /**
      * Set Signature Mode
      *
-     * Valid values include CRYPT_RSA_SIGNATURE_PSS and CRYPT_RSA_SIGNATURE_PKCS1
+     * Valid values include self::SIGNATURE_PSS and self::SIGNATURE_PKCS1
      *
      * @access public
-     * @param Integer $mode
+     * @param int $mode
      */
     function setSignatureMode($mode)
     {
@@ -1991,21 +2868,50 @@ class Crypt_RSA {
     }
 
     /**
+     * Set public key comment.
+     *
+     * @access public
+     * @param string $comment
+     */
+    function setComment($comment)
+    {
+        $this->comment = $comment;
+    }
+
+    /**
+     * Get public key comment.
+     *
+     * @access public
+     * @return string
+     */
+    function getComment()
+    {
+        return $this->comment;
+    }
+
+    /**
      * Encryption
      *
-     * Both CRYPT_RSA_ENCRYPTION_OAEP and CRYPT_RSA_ENCRYPTION_PKCS1 both place limits on how long $plaintext can be.
+     * Both self::ENCRYPTION_OAEP and self::ENCRYPTION_PKCS1 both place limits on how long $plaintext can be.
      * If $plaintext exceeds those limits it will be broken up so that it does and the resultant ciphertext's will
      * be concatenated together.
      *
-     * @see decrypt()
+     * @see self::decrypt()
      * @access public
-     * @param String $plaintext
-     * @return String
+     * @param string $plaintext
+     * @return string
      */
     function encrypt($plaintext)
     {
         switch ($this->encryptionMode) {
-            case CRYPT_RSA_ENCRYPTION_PKCS1:
+            case self::ENCRYPTION_NONE:
+                $plaintext = str_split($plaintext, $this->k);
+                $ciphertext = '';
+                foreach ($plaintext as $m) {
+                    $ciphertext.= $this->_raw_encrypt($m);
+                }
+                return $ciphertext;
+            case self::ENCRYPTION_PKCS1:
                 $length = $this->k - 11;
                 if ($length <= 0) {
                     return false;
@@ -2017,7 +2923,7 @@ class Crypt_RSA {
                     $ciphertext.= $this->_rsaes_pkcs1_v1_5_encrypt($m);
                 }
                 return $ciphertext;
-            //case CRYPT_RSA_ENCRYPTION_OAEP:
+            //case self::ENCRYPTION_OAEP:
             default:
                 $length = $this->k - 2 * $this->hLen - 2;
                 if ($length <= 0) {
@@ -2036,10 +2942,10 @@ class Crypt_RSA {
     /**
      * Decryption
      *
-     * @see encrypt()
+     * @see self::encrypt()
      * @access public
-     * @param String $plaintext
-     * @return String
+     * @param string $plaintext
+     * @return string
      */
     function decrypt($ciphertext)
     {
@@ -2048,13 +2954,18 @@ class Crypt_RSA {
         }
 
         $ciphertext = str_split($ciphertext, $this->k);
+        $ciphertext[count($ciphertext) - 1] = str_pad($ciphertext[count($ciphertext) - 1], $this->k, chr(0), STR_PAD_LEFT);
+
         $plaintext = '';
 
         switch ($this->encryptionMode) {
-            case CRYPT_RSA_ENCRYPTION_PKCS1:
+            case self::ENCRYPTION_NONE:
+                $decrypt = '_raw_encrypt';
+                break;
+            case self::ENCRYPTION_PKCS1:
                 $decrypt = '_rsaes_pkcs1_v1_5_decrypt';
                 break;
-            //case CRYPT_RSA_ENCRYPTION_OAEP:
+            //case self::ENCRYPTION_OAEP:
             default:
                 $decrypt = '_rsaes_oaep_decrypt';
         }
@@ -2073,10 +2984,10 @@ class Crypt_RSA {
     /**
      * Create a signature
      *
-     * @see verify()
+     * @see self::verify()
      * @access public
-     * @param String $message
-     * @return String
+     * @param string $message
+     * @return string
      */
     function sign($message)
     {
@@ -2085,9 +2996,9 @@ class Crypt_RSA {
         }
 
         switch ($this->signatureMode) {
-            case CRYPT_RSA_SIGNATURE_PKCS1:
+            case self::SIGNATURE_PKCS1:
                 return $this->_rsassa_pkcs1_v1_5_sign($message);
-            //case CRYPT_RSA_SIGNATURE_PSS:
+            //case self::SIGNATURE_PSS:
             default:
                 return $this->_rsassa_pss_sign($message);
         }
@@ -2096,11 +3007,11 @@ class Crypt_RSA {
     /**
      * Verifies a signature
      *
-     * @see sign()
+     * @see self::sign()
      * @access public
-     * @param String $message
-     * @param String $signature
-     * @return Boolean
+     * @param string $message
+     * @param string $signature
+     * @return bool
      */
     function verify($message, $signature)
     {
@@ -2109,11 +3020,38 @@ class Crypt_RSA {
         }
 
         switch ($this->signatureMode) {
-            case CRYPT_RSA_SIGNATURE_PKCS1:
+            case self::SIGNATURE_PKCS1:
                 return $this->_rsassa_pkcs1_v1_5_verify($message, $signature);
-            //case CRYPT_RSA_SIGNATURE_PSS:
+            //case self::SIGNATURE_PSS:
             default:
                 return $this->_rsassa_pss_verify($message, $signature);
         }
     }
+
+    /**
+     * Extract raw BER from Base64 encoding
+     *
+     * @access private
+     * @param string $str
+     * @return string
+     */
+    function _extractBER($str)
+    {
+        /* X.509 certs are assumed to be base64 encoded but sometimes they'll have additional things in them
+         * above and beyond the ceritificate.
+         * ie. some may have the following preceding the -----BEGIN CERTIFICATE----- line:
+         *
+         * Bag Attributes
+         *     localKeyID: 01 00 00 00
+         * subject=/O=organization/OU=org unit/CN=common name
+         * issuer=/O=organization/CN=common name
+         */
+        $temp = preg_replace('#.*?^-+[^-]+-+[\r\n ]*$#ms', '', $str, 1);
+        // remove the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- stuff
+        $temp = preg_replace('#-+[^-]+-+#', '', $temp);
+        // remove new lines
+        $temp = str_replace(array("\r", "\n", ' '), '', $temp);
+        $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false;
+        return $temp != false ? $temp : $str;
+    }
 }
diff --git a/lib/phpseclib/Crypt/Random.php b/lib/phpseclib/Crypt/Random.php
index e8902d9..01e34cc 100644
--- a/lib/phpseclib/Crypt/Random.php
+++ b/lib/phpseclib/Crypt/Random.php
@@ -1,129 +1,274 @@
 <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
  * Random Number Generator
  *
- * PHP versions 4 and 5
+ * PHP version 5
  *
  * Here's a short example of how to use this library:
  * <code>
  * <?php
- *    include('Crypt/Random.php');
+ *    include 'vendor/autoload.php';
  *
- *    echo crypt_random();
+ *    echo bin2hex(\phpseclib\Crypt\Random::string(8));
  * ?>
  * </code>
  *
- * LICENSE: This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- *
- * @category   Crypt
- * @package    Crypt_Random
- * @author     Jim Wigginton <terrafrost@php.net>
- * @copyright  MMVII Jim Wigginton
- * @license    http://www.gnu.org/licenses/lgpl.txt
- * @version    $Id: Random.php,v 1.9 2010/04/24 06:40:48 terrafrost Exp $
- * @link       http://phpseclib.sourceforge.net
+ * @category  Crypt
+ * @package   Random
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2007 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
  */
 
+namespace phpseclib\Crypt;
+
 /**
- * Generate a random value.
- *
- * On 32-bit machines, the largest distance that can exist between $min and $max is 2**31.
- * If $min and $max are farther apart than that then the last ($max - range) numbers.
- *
- * Depending on how this is being used, it may be worth while to write a replacement.  For example,
- * a PHP-based web app that stores its data in an SQL database can collect more entropy than this function
- * can.
+ * Pure-PHP Random Number Generator
  *
- * @param optional Integer $min
- * @param optional Integer $max
- * @return Integer
- * @access public
+ * @package Random
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @access  public
  */
-function crypt_random($min = 0, $max = 0x7FFFFFFF)
+class Random
 {
-    if ($min == $max) {
-        return $min;
-    }
+    /**
+     * Generate a random string.
+     *
+     * Although microoptimizations are generally discouraged as they impair readability this function is ripe with
+     * microoptimizations because this function has the potential of being called a huge number of times.
+     * eg. for RSA key generation.
+     *
+     * @param int $length
+     * @return string
+     */
+    static function string($length)
+    {
+        if (!$length) {
+            return '';
+        }
 
-    // see http://en.wikipedia.org/wiki//dev/random
-    // if open_basedir is enabled file_exists() will ouput an "open_basedir restriction in effect" warning,
-    // so we suppress it.
-    if (@file_exists('/dev/urandom')) {
-        static $fp;
-        if (!$fp) {
-            $fp = fopen('/dev/urandom', 'rb');
+        if (version_compare(PHP_VERSION, '7.0.0', '>=')) {
+            try {
+                return \random_bytes($length);
+            } catch (\Throwable $e) {
+                // If a sufficient source of randomness is unavailable, random_bytes() will throw an
+                // object that implements the Throwable interface (Exception, TypeError, Error).
+                // We don't actually need to do anything here. The string() method should just continue
+                // as normal. Note, however, that if we don't have a sufficient source of randomness for
+                // random_bytes(), most of the other calls here will fail too, so we'll end up using
+                // the PHP implementation.
+            }
         }
-        extract(unpack('Nrandom', fread($fp, 4)));
 
-        // say $min = 0 and $max = 3.  if we didn't do abs() then we could have stuff like this:
-        // -4 % 3 + 0 = -1, even though -1 < $min
-        return abs($random) % ($max - $min) + $min;
-    }
+        if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
+            // method 1. prior to PHP 5.3 this would call rand() on windows hence the function_exists('class_alias') call.
+            // ie. class_alias is a function that was introduced in PHP 5.3
+            if (extension_loaded('mcrypt') && function_exists('class_alias')) {
+                return @mcrypt_create_iv($length);
+            }
+            // method 2. openssl_random_pseudo_bytes was introduced in PHP 5.3.0 but prior to PHP 5.3.4 there was,
+            // to quote <http://php.net/ChangeLog-5.php#5.3.4>, "possible blocking behavior". as of 5.3.4
+            // openssl_random_pseudo_bytes and mcrypt_create_iv do the exact same thing on Windows. ie. they both
+            // call php_win32_get_random_bytes():
+            //
+            // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/openssl/openssl.c#L5008
+            // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1392
+            //
+            // php_win32_get_random_bytes() is defined thusly:
+            //
+            // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/win32/winutil.c#L80
+            //
+            // we're calling it, all the same, in the off chance that the mcrypt extension is not available
+            if (extension_loaded('openssl') && version_compare(PHP_VERSION, '5.3.4', '>=')) {
+                return openssl_random_pseudo_bytes($length);
+            }
+        } else {
+            // method 1. the fastest
+            if (extension_loaded('openssl')) {
+                return openssl_random_pseudo_bytes($length);
+            }
+            // method 2
+            static $fp = true;
+            if ($fp === true) {
+                // warning's will be output unles the error suppression operator is used. errors such as
+                // "open_basedir restriction in effect", "Permission denied", "No such file or directory", etc.
+                $fp = @fopen('/dev/urandom', 'rb');
+            }
+            if ($fp !== true && $fp !== false) { // surprisingly faster than !is_bool() or is_resource()
+                return fread($fp, $length);
+            }
+            // method 3. pretty much does the same thing as method 2 per the following url:
+            // https://github.com/php/php-src/blob/7014a0eb6d1611151a286c0ff4f2238f92c120d6/ext/mcrypt/mcrypt.c#L1391
+            // surprisingly slower than method 2. maybe that's because mcrypt_create_iv does a bunch of error checking that we're
+            // not doing. regardless, this'll only be called if this PHP script couldn't open /dev/urandom due to open_basedir
+            // restrictions or some such
+            if (extension_loaded('mcrypt')) {
+                return @mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
+            }
+        }
+        // at this point we have no choice but to use a pure-PHP CSPRNG
 
-    /* Prior to PHP 4.2.0, mt_srand() had to be called before mt_rand() could be called.
-       Prior to PHP 5.2.6, mt_rand()'s automatic seeding was subpar, as elaborated here:
+        // cascade entropy across multiple PHP instances by fixing the session and collecting all
+        // environmental variables, including the previous session data and the current session
+        // data.
+        //
+        // mt_rand seeds itself by looking at the PID and the time, both of which are (relatively)
+        // easy to guess at. linux uses mouse clicks, keyboard timings, etc, as entropy sources, but
+        // PHP isn't low level to be able to use those as sources and on a web server there's not likely
+        // going to be a ton of keyboard or mouse action. web servers do have one thing that we can use
+        // however, a ton of people visiting the website. obviously you don't want to base your seeding
+        // soley on parameters a potential attacker sends but (1) not everything in $_SERVER is controlled
+        // by the user and (2) this isn't just looking at the data sent by the current user - it's based
+        // on the data sent by all users. one user requests the page and a hash of their info is saved.
+        // another user visits the page and the serialization of their data is utilized along with the
+        // server envirnment stuff and a hash of the previous http request data (which itself utilizes
+        // a hash of the session data before that). certainly an attacker should be assumed to have
+        // full control over his own http requests. he, however, is not going to have control over
+        // everyone's http requests.
+        static $crypto = false, $v;
+        if ($crypto === false) {
+            // save old session data
+            $old_session_id = session_id();
+            $old_use_cookies = ini_get('session.use_cookies');
+            $old_session_cache_limiter = session_cache_limiter();
+            $_OLD_SESSION = isset($_SESSION) ? $_SESSION : false;
+            if ($old_session_id != '') {
+                session_write_close();
+            }
 
-       http://www.suspekt.org/2008/08/17/mt_srand-and-not-so-random-numbers/
+            session_id(1);
+            ini_set('session.use_cookies', 0);
+            session_cache_limiter('');
+            session_start();
 
-       The seeding routine is pretty much ripped from PHP's own internal GENERATE_SEED() macro:
+            $v = $seed = $_SESSION['seed'] = pack('H*', sha1(
+                (isset($_SERVER) ? phpseclib_safe_serialize($_SERVER) : '') .
+                (isset($_POST) ? phpseclib_safe_serialize($_POST) : '') .
+                (isset($_GET) ? phpseclib_safe_serialize($_GET) : '') .
+                (isset($_COOKIE) ? phpseclib_safe_serialize($_COOKIE) : '') .
+                phpseclib_safe_serialize($GLOBALS) .
+                phpseclib_safe_serialize($_SESSION) .
+                phpseclib_safe_serialize($_OLD_SESSION)
+            ));
+            if (!isset($_SESSION['count'])) {
+                $_SESSION['count'] = 0;
+            }
+            $_SESSION['count']++;
 
-       http://svn.php.net/viewvc/php/php-src/branches/PHP_5_3_2/ext/standard/php_rand.h?view=markup */
-    if (version_compare(PHP_VERSION, '5.2.5', '<=')) { 
-        static $seeded;
-        if (!isset($seeded)) {
-            $seeded = true;
-            mt_srand(fmod(time() * getmypid(), 0x7FFFFFFF) ^ fmod(1000000 * lcg_value(), 0x7FFFFFFF));
-        }
-    }
+            session_write_close();
+
+            // restore old session data
+            if ($old_session_id != '') {
+                session_id($old_session_id);
+                session_start();
+                ini_set('session.use_cookies', $old_use_cookies);
+                session_cache_limiter($old_session_cache_limiter);
+            } else {
+                if ($_OLD_SESSION !== false) {
+                    $_SESSION = $_OLD_SESSION;
+                    unset($_OLD_SESSION);
+                } else {
+                    unset($_SESSION);
+                }
+            }
 
-    static $crypto;
+            // in SSH2 a shared secret and an exchange hash are generated through the key exchange process.
+            // the IV client to server is the hash of that "nonce" with the letter A and for the encryption key it's the letter C.
+            // if the hash doesn't produce enough a key or an IV that's long enough concat successive hashes of the
+            // original hash and the current hash. we'll be emulating that. for more info see the following URL:
+            //
+            // http://tools.ietf.org/html/rfc4253#section-7.2
+            //
+            // see the is_string($crypto) part for an example of how to expand the keys
+            $key = pack('H*', sha1($seed . 'A'));
+            $iv = pack('H*', sha1($seed . 'C'));
 
-    // The CSPRNG's Yarrow and Fortuna periodically reseed.  This function can be reseeded by hitting F5
-    // in the browser and reloading the page.
+            // ciphers are used as per the nist.gov link below. also, see this link:
+            //
+            // http://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator#Designs_based_on_cryptographic_primitives
+            switch (true) {
+                case class_exists('\phpseclib\Crypt\AES'):
+                    $crypto = new AES(Base::MODE_CTR);
+                    break;
+                case class_exists('\phpseclib\Crypt\Twofish'):
+                    $crypto = new Twofish(Base::MODE_CTR);
+                    break;
+                case class_exists('\phpseclib\Crypt\Blowfish'):
+                    $crypto = new Blowfish(Base::MODE_CTR);
+                    break;
+                case class_exists('\phpseclib\Crypt\TripleDES'):
+                    $crypto = new TripleDES(Base::MODE_CTR);
+                    break;
+                case class_exists('\phpseclib\Crypt\DES'):
+                    $crypto = new DES(Base::MODE_CTR);
+                    break;
+                case class_exists('\phpseclib\Crypt\RC4'):
+                    $crypto = new RC4();
+                    break;
+                default:
+                    user_error(__CLASS__ . ' requires at least one symmetric cipher be loaded');
+                    return false;
+            }
 
-    if (!isset($crypto)) {
-        $key = $iv = '';
-        for ($i = 0; $i < 8; $i++) {
-            $key.= pack('n', mt_rand(0, 0xFFFF));
-            $iv .= pack('n', mt_rand(0, 0xFFFF));
+            $crypto->setKey($key);
+            $crypto->setIV($iv);
+            $crypto->enableContinuousBuffer();
         }
-        switch (true) {
-            case class_exists('Crypt_AES'):
-                $crypto = new Crypt_AES(CRYPT_AES_MODE_CTR);
-                break;
-            case class_exists('Crypt_TripleDES'):
-                $crypto = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
-                break;
-            case class_exists('Crypt_DES'):
-                $crypto = new Crypt_DES(CRYPT_DES_MODE_CTR);
-                break;
-            case class_exists('Crypt_RC4'):
-                $crypto = new Crypt_RC4();
-                break;
-            default:
-                extract(unpack('Nrandom', pack('H*', sha1(mt_rand(0, 0x7FFFFFFF)))));
-                return abs($random) % ($max - $min) + $min;
+
+        //return $crypto->encrypt(str_repeat("\0", $length));
+
+        // the following is based off of ANSI X9.31:
+        //
+        // http://csrc.nist.gov/groups/STM/cavp/documents/rng/931rngext.pdf
+        //
+        // OpenSSL uses that same standard for it's random numbers:
+        //
+        // http://www.opensource.apple.com/source/OpenSSL/OpenSSL-38/openssl/fips-1.0/rand/fips_rand.c
+        // (do a search for "ANS X9.31 A.2.4")
+        $result = '';
+        while (strlen($result) < $length) {
+            $i = $crypto->encrypt(microtime()); // strlen(microtime()) == 21
+            $r = $crypto->encrypt($i ^ $v); // strlen($v) == 20
+            $v = $crypto->encrypt($r ^ $i); // strlen($r) == 20
+            $result.= $r;
         }
-        $crypto->setKey($key);
-        $crypto->setIV($iv);
-        $crypto->enableContinuousBuffer();
+        return substr($result, 0, $length);
     }
+}
 
-    extract(unpack('Nrandom', $crypto->encrypt("\0\0\0\0")));
-    return abs($random) % ($max - $min) + $min;
+if (!function_exists('phpseclib_safe_serialize')) {
+    /**
+     * Safely serialize variables
+     *
+     * If a class has a private __sleep() method it'll give a fatal error on PHP 5.2 and earlier.
+     * PHP 5.3 will emit a warning.
+     *
+     * @param mixed $arr
+     * @access public
+     */
+    function phpseclib_safe_serialize(&$arr)
+    {
+        if (is_object($arr)) {
+            return '';
+        }
+        if (!is_array($arr)) {
+            return serialize($arr);
+        }
+        // prevent circular array recursion
+        if (isset($arr['__phpseclib_marker'])) {
+            return '';
+        }
+        $safearr = array();
+        $arr['__phpseclib_marker'] = true;
+        foreach (array_keys($arr) as $key) {
+            // do not recurse on the '__phpseclib_marker' key itself, for smaller memory usage
+            if ($key !== '__phpseclib_marker') {
+                $safearr[$key] = phpseclib_safe_serialize($arr[$key]);
+            }
+        }
+        unset($arr['__phpseclib_marker']);
+        return serialize($safearr);
+    }
 }
diff --git a/lib/phpseclib/Crypt/Rijndael.php b/lib/phpseclib/Crypt/Rijndael.php
index 922fd12..3648a19 100644
--- a/lib/phpseclib/Crypt/Rijndael.php
+++ b/lib/phpseclib/Crypt/Rijndael.php
@@ -1,36 +1,36 @@
 <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
  * Pure-PHP implementation of Rijndael.
  *
- * Does not use mcrypt, even when available, for reasons that are explained below.
+ * Uses mcrypt, if available/possible, and an internal implementation, otherwise.
  *
- * PHP versions 4 and 5
+ * PHP version 5
  *
- * If {@link Crypt_Rijndael::setBlockLength() setBlockLength()} isn't called, it'll be assumed to be 128 bits.  If 
- * {@link Crypt_Rijndael::setKeyLength() setKeyLength()} isn't called, it'll be calculated from 
- * {@link Crypt_Rijndael::setKey() setKey()}.  ie. if the key is 128-bits, the key length will be 128-bits.  If it's 
- * 136-bits it'll be null-padded to 160-bits and 160 bits will be the key length until 
- * {@link Crypt_Rijndael::setKey() setKey()} is called, again, at which point, it'll be recalculated.
+ * If {@link self::setBlockLength() setBlockLength()} isn't called, it'll be assumed to be 128 bits.  If
+ * {@link self::setKeyLength() setKeyLength()} isn't called, it'll be calculated from
+ * {@link self::setKey() setKey()}.  ie. if the key is 128-bits, the key length will be 128-bits.  If it's
+ * 136-bits it'll be null-padded to 192-bits and 192 bits will be the key length until
+ * {@link self::setKey() setKey()} is called, again, at which point, it'll be recalculated.
  *
  * Not all Rijndael implementations may support 160-bits or 224-bits as the block length / key length.  mcrypt, for example,
  * does not.  AES, itself, only supports block lengths of 128 and key lengths of 128, 192, and 256.
  * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=10 Rijndael-ammended.pdf#page=10} defines the
  * algorithm for block lengths of 192 and 256 but not for block lengths / key lengths of 160 and 224.  Indeed, 160 and 224
- * are first defined as valid key / block lengths in 
- * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=44 Rijndael-ammended.pdf#page=44}: 
+ * are first defined as valid key / block lengths in
+ * {@link http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=44 Rijndael-ammended.pdf#page=44}:
  * Extensions: Other block and Cipher Key lengths.
+ * Note: Use of 160/224-bit Keys must be explicitly set by setKeyLength(160) respectively setKeyLength(224).
  *
- * {@internal The variable names are the same as those in 
+ * {@internal The variable names are the same as those in
  * {@link http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf#page=10 fips-197.pdf#page=10}.}}
  *
  * Here's a short example of how to use this library:
  * <code>
  * <?php
- *    include('Crypt/Rijndael.php');
+ *    include 'vendor/autoload.php';
  *
- *    $rijndael = new Crypt_Rijndael();
+ *    $rijndael = new \phpseclib\Crypt\Rijndael();
  *
  *    $rijndael->setKey('abcdefghijklmnop');
  *
@@ -44,168 +44,56 @@
  * ?>
  * </code>
  *
- * LICENSE: This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- *
- * @category   Crypt
- * @package    Crypt_Rijndael
- * @author     Jim Wigginton <terrafrost@php.net>
- * @copyright  MMVIII Jim Wigginton
- * @license    http://www.gnu.org/licenses/lgpl.txt
- * @version    $Id: Rijndael.php,v 1.12 2010/02/09 06:10:26 terrafrost Exp $
- * @link       http://phpseclib.sourceforge.net
+ * @category  Crypt
+ * @package   Rijndael
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2008 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
  */
 
-/**#@+
- * @access public
- * @see Crypt_Rijndael::encrypt()
- * @see Crypt_Rijndael::decrypt()
- */
-/**
- * Encrypt / decrypt using the Counter mode.
- *
- * Set to -1 since that's what Crypt/Random.php uses to index the CTR mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29
- */
-define('CRYPT_RIJNDAEL_MODE_CTR', -1);
-/**
- * Encrypt / decrypt using the Electronic Code Book mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Electronic_codebook_.28ECB.29
- */
-define('CRYPT_RIJNDAEL_MODE_ECB', 1);
-/**
- * Encrypt / decrypt using the Code Book Chaining mode.
- *
- * @link http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Cipher-block_chaining_.28CBC.29
- */
-define('CRYPT_RIJNDAEL_MODE_CBC', 2);
-/**#@-*/
-
-/**#@+
- * @access private
- * @see Crypt_Rijndael::Crypt_Rijndael()
- */
-/**
- * Toggles the internal implementation
- */
-define('CRYPT_RIJNDAEL_MODE_INTERNAL', 1);
-/**
- * Toggles the mcrypt implementation
- */
-define('CRYPT_RIJNDAEL_MODE_MCRYPT', 2);
-/**#@-*/
+namespace phpseclib\Crypt;
 
 /**
  * Pure-PHP implementation of Rijndael.
  *
+ * @package Rijndael
  * @author  Jim Wigginton <terrafrost@php.net>
- * @version 0.1.0
  * @access  public
- * @package Crypt_Rijndael
  */
-class Crypt_Rijndael {
-    /**
-     * The Encryption Mode
-     *
-     * @see Crypt_Rijndael::Crypt_Rijndael()
-     * @var Integer
-     * @access private
-     */
-    var $mode;
-
-    /**
-     * The Key
-     *
-     * @see Crypt_Rijndael::setKey()
-     * @var String
-     * @access private
-     */
-    var $key = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
-
-    /**
-     * The Initialization Vector
-     *
-     * @see Crypt_Rijndael::setIV()
-     * @var String
-     * @access private
-     */
-    var $iv = '';
-
-    /**
-     * A "sliding" Initialization Vector
-     *
-     * @see Crypt_Rijndael::enableContinuousBuffer()
-     * @var String
-     * @access private
-     */
-    var $encryptIV = '';
-
+class Rijndael extends Base
+{
     /**
-     * A "sliding" Initialization Vector
+     * The mcrypt specific name of the cipher
      *
-     * @see Crypt_Rijndael::enableContinuousBuffer()
-     * @var String
-     * @access private
-     */
-    var $decryptIV = '';
-
-    /**
-     * Continuous Buffer status
+     * Mcrypt is useable for 128/192/256-bit $block_size/$key_length. For 160/224 not.
+     * \phpseclib\Crypt\Rijndael determines automatically whether mcrypt is useable
+     * or not for the current $block_size/$key_length.
+     * In case of, $cipher_name_mcrypt will be set dynamically at run time accordingly.
      *
-     * @see Crypt_Rijndael::enableContinuousBuffer()
-     * @var Boolean
+     * @see \phpseclib\Crypt\Base::cipher_name_mcrypt
+     * @see \phpseclib\Crypt\Base::engine
+     * @see self::isValidEngine()
+     * @var string
      * @access private
      */
-    var $continuousBuffer = false;
+    var $cipher_name_mcrypt = 'rijndael-128';
 
     /**
-     * Padding status
+     * The default salt used by setPassword()
      *
-     * @see Crypt_Rijndael::enablePadding()
-     * @var Boolean
+     * @see \phpseclib\Crypt\Base::password_default_salt
+     * @see \phpseclib\Crypt\Base::setPassword()
+     * @var string
      * @access private
      */
-    var $padding = true;
-
-    /**
-     * Does the key schedule need to be (re)calculated?
-     *
-     * @see setKey()
-     * @see setBlockLength()
-     * @see setKeyLength()
-     * @var Boolean
-     * @access private
-     */
-    var $changed = true;
-
-    /**
-     * Has the key length explicitly been set or should it be derived from the key, itself?
-     *
-     * @see setKeyLength()
-     * @var Boolean
-     * @access private
-     */
-    var $explicit_key_length = false;
+    var $password_default_salt = 'phpseclib';
 
     /**
      * The Key Schedule
      *
-     * @see _setup()
-     * @var Array
+     * @see self::_setup()
+     * @var array
      * @access private
      */
     var $w;
@@ -213,55 +101,43 @@ class Crypt_Rijndael {
     /**
      * The Inverse Key Schedule
      *
-     * @see _setup()
-     * @var Array
+     * @see self::_setup()
+     * @var array
      * @access private
      */
     var $dw;
 
     /**
-     * The Block Length
-     *
-     * @see setBlockLength()
-     * @var Integer
-     * @access private
-     * @internal The max value is 32, the min value is 16.  All valid values are multiples of 4.  Exists in conjunction with
-     *     $Nb because we need this value and not $Nb to pad strings appropriately.  
-     */
-    var $block_size = 16;
-
-    /**
      * The Block Length divided by 32
      *
-     * @see setBlockLength()
-     * @var Integer
+     * @see self::setBlockLength()
+     * @var int
      * @access private
-     * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4.  Exists in conjunction with $block_size 
-     *    because the encryption / decryption / key schedule creation requires this number and not $block_size.  We could 
+     * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4.  Exists in conjunction with $block_size
+     *    because the encryption / decryption / key schedule creation requires this number and not $block_size.  We could
      *    derive this from $block_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
      *    of that, we'll just precompute it once.
-     *
      */
     var $Nb = 4;
 
     /**
-     * The Key Length
+     * The Key Length (in bytes)
      *
-     * @see setKeyLength()
-     * @var Integer
+     * @see self::setKeyLength()
+     * @var int
      * @access private
-     * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16.  Exists in conjunction with $key_size
-     *    because the encryption / decryption / key schedule creation requires this number and not $key_size.  We could 
-     *    derive this from $key_size or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
+     * @internal The max value is 256 / 8 = 32, the min value is 128 / 8 = 16.  Exists in conjunction with $Nk
+     *    because the encryption / decryption / key schedule creation requires this number and not $key_length.  We could
+     *    derive this from $key_length or vice versa, but that'd mean we'd have to do multiple shift operations, so in lieu
      *    of that, we'll just precompute it once.
      */
-    var $key_size = 16;
+    var $key_length = 16;
 
     /**
      * The Key Length divided by 32
      *
-     * @see setKeyLength()
-     * @var Integer
+     * @see self::setKeyLength()
+     * @var int
      * @access private
      * @internal The max value is 256 / 32 = 8, the min value is 128 / 32 = 4
      */
@@ -270,7 +146,7 @@ class Crypt_Rijndael {
     /**
      * The Number of Rounds
      *
-     * @var Integer
+     * @var int
      * @access private
      * @internal The max value is 14, the min value is 10.
      */
@@ -279,493 +155,183 @@ class Crypt_Rijndael {
     /**
      * Shift offsets
      *
-     * @var Array
+     * @var array
      * @access private
      */
     var $c;
 
     /**
-     * Precomputed mixColumns table
-     *
-     * @see Crypt_Rijndael()
-     * @var Array
-     * @access private
-     */
-    var $t0;
-
-    /**
-     * Precomputed mixColumns table
-     *
-     * @see Crypt_Rijndael()
-     * @var Array
-     * @access private
-     */
-    var $t1;
-
-    /**
-     * Precomputed mixColumns table
-     *
-     * @see Crypt_Rijndael()
-     * @var Array
-     * @access private
-     */
-    var $t2;
-
-    /**
-     * Precomputed mixColumns table
-     *
-     * @see Crypt_Rijndael()
-     * @var Array
-     * @access private
-     */
-    var $t3;
-
-    /**
-     * Precomputed invMixColumns table
+     * Holds the last used key- and block_size information
      *
-     * @see Crypt_Rijndael()
-     * @var Array
+     * @var array
      * @access private
      */
-    var $dt0;
+    var $kl;
 
     /**
-     * Precomputed invMixColumns table
+     * Sets the key length.
      *
-     * @see Crypt_Rijndael()
-     * @var Array
-     * @access private
-     */
-    var $dt1;
-
-    /**
-     * Precomputed invMixColumns table
+     * Valid key lengths are 128, 160, 192, 224, and 256.  If the length is less than 128, it will be rounded up to
+     * 128.  If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
      *
-     * @see Crypt_Rijndael()
-     * @var Array
-     * @access private
-     */
-    var $dt2;
-
-    /**
-     * Precomputed invMixColumns table
+     * Note: phpseclib extends Rijndael (and AES) for using 160- and 224-bit keys but they are officially not defined
+     *       and the most (if not all) implementations are not able using 160/224-bit keys but round/pad them up to
+     *       192/256 bits as, for example, mcrypt will do.
      *
-     * @see Crypt_Rijndael()
-     * @var Array
-     * @access private
-     */
-    var $dt3;
-
-    /**
-     * Default Constructor.
+     *       That said, if you want be compatible with other Rijndael and AES implementations,
+     *       you should not setKeyLength(160) or setKeyLength(224).
      *
-     * Determines whether or not the mcrypt extension should be used.  $mode should only, at present, be
-     * CRYPT_RIJNDAEL_MODE_ECB or CRYPT_RIJNDAEL_MODE_CBC.  If not explictly set, CRYPT_RIJNDAEL_MODE_CBC will be used.
+     * Additional: In case of 160- and 224-bit keys, phpseclib will/can, for that reason, not use
+     *             the mcrypt php extension, even if available.
+     *             This results then in slower encryption.
      *
-     * @param optional Integer $mode
-     * @return Crypt_Rijndael
      * @access public
+     * @param int $length
      */
-    function Crypt_Rijndael($mode = CRYPT_RIJNDAEL_MODE_CBC)
+    function setKeyLength($length)
     {
-        switch ($mode) {
-            case CRYPT_RIJNDAEL_MODE_ECB:
-            case CRYPT_RIJNDAEL_MODE_CBC:
-            case CRYPT_RIJNDAEL_MODE_CTR:
-                $this->mode = $mode;
+        switch (true) {
+            case $length <= 128:
+                $this->key_length = 16;
+                break;
+            case $length <= 160:
+                $this->key_length = 20;
+                break;
+            case $length <= 192:
+                $this->key_length = 24;
+                break;
+            case $length <= 224:
+                $this->key_length = 28;
                 break;
             default:
-                $this->mode = CRYPT_RIJNDAEL_MODE_CBC;
-        }
-
-        $t3 = &$this->t3;
-        $t2 = &$this->t2;
-        $t1 = &$this->t1;
-        $t0 = &$this->t0;
-
-        $dt3 = &$this->dt3;
-        $dt2 = &$this->dt2;
-        $dt1 = &$this->dt1;
-        $dt0 = &$this->dt0;
-
-        // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=19> (section 5.2.1), 
-        // precomputed tables can be used in the mixColumns phase.  in that example, they're assigned t0...t3, so
-        // those are the names we'll use.
-        $t3 = array(
-            0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491, 
-            0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC, 
-            0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB, 
-            0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B, 
-            0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83, 
-            0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A, 
-            0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F, 
-            0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA, 
-            0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B, 
-            0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713, 
-            0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6, 
-            0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85, 
-            0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411, 
-            0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B, 
-            0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1, 
-            0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF, 
-            0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E, 
-            0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6, 
-            0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B, 
-            0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD, 
-            0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8, 
-            0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2, 
-            0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049, 
-            0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810, 
-            0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197, 
-            0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F, 
-            0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C, 
-            0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927, 
-            0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733, 
-            0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5, 
-            0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0, 
-            0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C
-        );
-
-        $dt3 = array(
-            0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B, 
-            0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5, 
-            0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B, 
-            0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E, 
-            0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D, 
-            0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9, 
-            0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66, 
-            0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED, 
-            0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4, 
-            0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD, 
-            0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60, 
-            0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79, 
-            0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C, 
-            0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24, 
-            0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C, 
-            0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814, 
-            0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B, 
-            0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084, 
-            0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077, 
-            0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22, 
-            0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F, 
-            0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582, 
-            0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB, 
-            0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF, 
-            0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035, 
-            0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17, 
-            0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46, 
-            0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D, 
-            0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A, 
-            0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678, 
-            0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF, 
-            0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0
-        );
-
-        for ($i = 0; $i < 256; $i++) {
-            $t2[$i <<  8] = (($t3[$i] <<  8) & 0xFFFFFF00) | (($t3[$i] >> 24) & 0x000000FF);
-            $t1[$i << 16] = (($t3[$i] << 16) & 0xFFFF0000) | (($t3[$i] >> 16) & 0x0000FFFF);
-            $t0[$i << 24] = (($t3[$i] << 24) & 0xFF000000) | (($t3[$i] >>  8) & 0x00FFFFFF);
-
-            $dt2[$i <<  8] = (($this->dt3[$i] <<  8) & 0xFFFFFF00) | (($dt3[$i] >> 24) & 0x000000FF);
-            $dt1[$i << 16] = (($this->dt3[$i] << 16) & 0xFFFF0000) | (($dt3[$i] >> 16) & 0x0000FFFF);
-            $dt0[$i << 24] = (($this->dt3[$i] << 24) & 0xFF000000) | (($dt3[$i] >>  8) & 0x00FFFFFF);
-        }
-    }
-
-    /**
-     * Sets the key.
-     *
-     * Keys can be of any length.  Rijndael, itself, requires the use of a key that's between 128-bits and 256-bits long and
-     * whose length is a multiple of 32.  If the key is less than 256-bits and the key length isn't set, we round the length
-     * up to the closest valid key length, padding $key with null bytes.  If the key is more than 256-bits, we trim the
-     * excess bits.
-     *
-     * If the key is not explicitly set, it'll be assumed to be all null bytes.
-     *
-     * @access public
-     * @param String $key
-     */
-    function setKey($key)
-    {
-        $this->key = $key;
-        $this->changed = true;
-    }
-
-    /**
-     * Sets the initialization vector. (optional)
-     *
-     * SetIV is not required when CRYPT_RIJNDAEL_MODE_ECB is being used.  If not explictly set, it'll be assumed
-     * to be all zero's.
-     *
-     * @access public
-     * @param String $iv
-     */
-    function setIV($iv)
-    {
-        $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, $this->block_size), $this->block_size, chr(0));;
-    }
-
-    /**
-     * Sets the key length
-     *
-     * Valid key lengths are 128, 160, 192, 224, and 256.  If the length is less than 128, it will be rounded up to
-     * 128.  If the length is greater then 128 and invalid, it will be rounded down to the closest valid amount.
-     *
-     * @access public
-     * @param Integer $length
-     */
-    function setKeyLength($length)
-    {
-        $length >>= 5;
-        if ($length > 8) {
-            $length = 8;
-        } else if ($length < 4) {
-            $length = 4;
+                $this->key_length = 32;
         }
-        $this->Nk = $length;
-        $this->key_size = $length << 2;
 
-        $this->explicit_key_length = true;
-        $this->changed = true;
+        parent::setKeyLength($length);
     }
 
     /**
      * Sets the block length
      *
      * Valid block lengths are 128, 160, 192, 224, and 256.  If the length is less than 128, it will be rounded up to
-     * 128.  If the length is greater then 128 and invalid, it will be rounded down to the closest valid amount.
+     * 128.  If the length is greater than 128 and invalid, it will be rounded down to the closest valid amount.
      *
      * @access public
-     * @param Integer $length
+     * @param int $length
      */
     function setBlockLength($length)
     {
         $length >>= 5;
         if ($length > 8) {
             $length = 8;
-        } else if ($length < 4) {
+        } elseif ($length < 4) {
             $length = 4;
         }
         $this->Nb = $length;
         $this->block_size = $length << 2;
         $this->changed = true;
+        $this->_setEngine();
     }
 
     /**
-     * Generate CTR XOR encryption key
+     * Test for engine validity
      *
-     * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the
-     * plaintext / ciphertext in CTR mode.
+     * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine()
      *
-     * @see Crypt_Rijndael::decrypt()
-     * @see Crypt_Rijndael::encrypt()
+     * @see \phpseclib\Crypt\Base::__construct()
+     * @param int $engine
      * @access public
-     * @param Integer $length
-     * @param String $iv
+     * @return bool
      */
-    function _generate_xor($length, &$iv)
+    function isValidEngine($engine)
     {
-        $xor = '';
-        $block_size = $this->block_size;
-        $num_blocks = floor(($length + ($block_size - 1)) / $block_size);
-        for ($i = 0; $i < $num_blocks; $i++) {
-            $xor.= $iv;
-            for ($j = 4; $j <= $block_size; $j+=4) {
-                $temp = substr($iv, -$j, 4);
-                switch ($temp) {
-                    case "\xFF\xFF\xFF\xFF":
-                        $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4);
-                        break;
-                    case "\x7F\xFF\xFF\xFF":
-                        $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4);
-                        break 2;
-                    default:
-                        extract(unpack('Ncount', $temp));
-                        $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4);
-                        break 2;
-                }
-            }
-        }
-
-        return $xor;
-    }
-
-    /**
-     * Encrypts a message.
-     *
-     * $plaintext will be padded with additional bytes such that it's length is a multiple of the block size.  Other Rjindael
-     * implementations may or may not pad in the same manner.  Other common approaches to padding and the reasons why it's
-     * necessary are discussed in the following
-     * URL:
-     *
-     * {@link http://www.di-mgt.com.au/cryptopad.html http://www.di-mgt.com.au/cryptopad.html}
-     *
-     * An alternative to padding is to, separately, send the length of the file.  This is what SSH, in fact, does.
-     * strlen($plaintext) will still need to be a multiple of 8, however, arbitrary values can be added to make it that
-     * length.
-     *
-     * @see Crypt_Rijndael::decrypt()
-     * @access public
-     * @param String $plaintext
-     */
-    function encrypt($plaintext)
-    {
-        $this->_setup();
-        if ($this->mode != CRYPT_RIJNDAEL_MODE_CTR) {
-            $plaintext = $this->_pad($plaintext);
-        }
-
-        $block_size = $this->block_size;
-        $ciphertext = '';
-        switch ($this->mode) {
-            case CRYPT_RIJNDAEL_MODE_ECB:
-                for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
-                    $ciphertext.= $this->_encryptBlock(substr($plaintext, $i, $block_size));
+        switch ($engine) {
+            case self::ENGINE_OPENSSL:
+                if ($this->block_size != 16) {
+                    return false;
                 }
+                $this->cipher_name_openssl_ecb = 'aes-' . ($this->key_length << 3) . '-ecb';
+                $this->cipher_name_openssl = 'aes-' . ($this->key_length << 3) . '-' . $this->_openssl_translate_mode();
                 break;
-            case CRYPT_RIJNDAEL_MODE_CBC:
-                $xor = $this->encryptIV;
-                for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
-                    $block = substr($plaintext, $i, $block_size);
-                    $block = $this->_encryptBlock($block ^ $xor);
-                    $xor = $block;
-                    $ciphertext.= $block;
-                }
-                if ($this->continuousBuffer) {
-                    $this->encryptIV = $xor;
-                }
-                break;
-            case CRYPT_RIJNDAEL_MODE_CTR:
-                $xor = $this->encryptIV;
-                for ($i = 0; $i < strlen($plaintext); $i+=$block_size) {
-                    $block = substr($plaintext, $i, $block_size);
-                    $key = $this->_encryptBlock($this->_generate_xor($block_size, $xor));
-                    $ciphertext.= $block ^ $key;
-                }
-                if ($this->continuousBuffer) {
-                    $this->encryptIV = $xor;
+            case self::ENGINE_MCRYPT:
+                $this->cipher_name_mcrypt = 'rijndael-' . ($this->block_size << 3);
+                if ($this->key_length % 8) { // is it a 160/224-bit key?
+                    // mcrypt is not usable for them, only for 128/192/256-bit keys
+                    return false;
                 }
         }
 
-        return $ciphertext;
-    }
-
-    /**
-     * Decrypts a message.
-     *
-     * If strlen($ciphertext) is not a multiple of the block size, null bytes will be added to the end of the string until
-     * it is.
-     *
-     * @see Crypt_Rijndael::encrypt()
-     * @access public
-     * @param String $ciphertext
-     */
-    function decrypt($ciphertext)
-    {
-        $this->_setup();
-
-        if ($this->mode != CRYPT_RIJNDAEL_MODE_CTR) {
-            // we pad with chr(0) since that's what mcrypt_generic does.  to quote from http://php.net/function.mcrypt-generic :
-            // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
-            $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + $this->block_size - 1) % $this->block_size, chr(0));
-        }
-
-        $block_size = $this->block_size;
-        $plaintext = '';
-        switch ($this->mode) {
-            case CRYPT_RIJNDAEL_MODE_ECB:
-                for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
-                    $plaintext.= $this->_decryptBlock(substr($ciphertext, $i, $block_size));
-                }
-                break;
-            case CRYPT_RIJNDAEL_MODE_CBC:
-                $xor = $this->decryptIV;
-                for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
-                    $block = substr($ciphertext, $i, $block_size);
-                    $plaintext.= $this->_decryptBlock($block) ^ $xor;
-                    $xor = $block;
-                }
-                if ($this->continuousBuffer) {
-                    $this->decryptIV = $xor;
-                }
-                break;
-            case CRYPT_RIJNDAEL_MODE_CTR:
-                $xor = $this->decryptIV;
-                for ($i = 0; $i < strlen($ciphertext); $i+=$block_size) {
-                    $block = substr($ciphertext, $i, $block_size);
-                    $key = $this->_encryptBlock($this->_generate_xor($block_size, $xor));
-                    $plaintext.= $block ^ $key;
-                }
-                if ($this->continuousBuffer) {
-                    $this->decryptIV = $xor;
-                }
-        }
-
-        return $this->mode != CRYPT_RIJNDAEL_MODE_CTR ? $this->_unpad($plaintext) : $plaintext;
+        return parent::isValidEngine($engine);
     }
 
     /**
      * Encrypts a block
      *
      * @access private
-     * @param String $in
-     * @return String
+     * @param string $in
+     * @return string
      */
     function _encryptBlock($in)
     {
+        static $tables;
+        if (empty($tables)) {
+            $tables = &$this->_getTables();
+        }
+        $t0   = $tables[0];
+        $t1   = $tables[1];
+        $t2   = $tables[2];
+        $t3   = $tables[3];
+        $sbox = $tables[4];
+
         $state = array();
-        $words = unpack('N*word', $in);
+        $words = unpack('N*', $in);
 
+        $c = $this->c;
         $w = $this->w;
-        $t0 = $this->t0;
-        $t1 = $this->t1;
-        $t2 = $this->t2;
-        $t3 = $this->t3;
         $Nb = $this->Nb;
         $Nr = $this->Nr;
-        $c = $this->c;
 
         // addRoundKey
-        $i = 0;
+        $wc = $Nb - 1;
         foreach ($words as $word) {
-            $state[] = $word ^ $w[0][$i++];
+            $state[] = $word ^ $w[++$wc];
         }
 
-        // fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components - 
-        // subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding 
+        // fips-197.pdf#page=19, "Figure 5. Pseudo Code for the Cipher", states that this loop has four components -
+        // subBytes, shiftRows, mixColumns, and addRoundKey. fips-197.pdf#page=30, "Implementation Suggestions Regarding
         // Various Platforms" suggests that performs enhanced implementations are described in Rijndael-ammended.pdf.
         // Rijndael-ammended.pdf#page=20, "Implementation aspects / 32-bit processor", discusses such an optimization.
-        // Unfortunately, the description given there is not quite correct.  Per aes.spec.v316.pdf#page=19 [1], 
+        // Unfortunately, the description given there is not quite correct.  Per aes.spec.v316.pdf#page=19 [1],
         // equation (7.4.7) is supposed to use addition instead of subtraction, so we'll do that here, as well.
 
         // [1] http://fp.gladman.plus.com/cryptography_technology/rijndael/aes.spec.v316.pdf
         $temp = array();
-        for ($round = 1; $round < $Nr; $round++) {
+        for ($round = 1; $round < $Nr; ++$round) {
             $i = 0; // $c[0] == 0
             $j = $c[1];
             $k = $c[2];
             $l = $c[3];
 
-            while ($i < $this->Nb) {
-                $temp[$i] = $t0[$state[$i] & 0xFF000000] ^ 
-                            $t1[$state[$j] & 0x00FF0000] ^ 
-                            $t2[$state[$k] & 0x0000FF00] ^ 
-                            $t3[$state[$l] & 0x000000FF] ^ 
-                            $w[$round][$i];
-                $i++;
+            while ($i < $Nb) {
+                $temp[$i] = $t0[$state[$i] >> 24 & 0x000000FF] ^
+                            $t1[$state[$j] >> 16 & 0x000000FF] ^
+                            $t2[$state[$k] >>  8 & 0x000000FF] ^
+                            $t3[$state[$l]       & 0x000000FF] ^
+                            $w[++$wc];
+                ++$i;
                 $j = ($j + 1) % $Nb;
                 $k = ($k + 1) % $Nb;
                 $l = ($l + 1) % $Nb;
             }
-
-            for ($i = 0; $i < $Nb; $i++) {
-                $state[$i] = $temp[$i];
-            }
+            $state = $temp;
         }
 
         // subWord
-        for ($i = 0; $i < $Nb; $i++) {
-            $state[$i] = $this->_subWord($state[$i]);
+        for ($i = 0; $i < $Nb; ++$i) {
+            $state[$i] =   $sbox[$state[$i]       & 0x000000FF]        |
+                          ($sbox[$state[$i] >>  8 & 0x000000FF] <<  8) |
+                          ($sbox[$state[$i] >> 16 & 0x000000FF] << 16) |
+                          ($sbox[$state[$i] >> 24 & 0x000000FF] << 24);
         }
 
         // shiftRows + addRoundKey
@@ -773,74 +339,84 @@ class Crypt_Rijndael {
         $j = $c[1];
         $k = $c[2];
         $l = $c[3];
-        while ($i < $this->Nb) {
-            $temp[$i] = ($state[$i] & 0xFF000000) ^ 
-                        ($state[$j] & 0x00FF0000) ^ 
-                        ($state[$k] & 0x0000FF00) ^ 
+        while ($i < $Nb) {
+            $temp[$i] = ($state[$i] & 0xFF000000) ^
+                        ($state[$j] & 0x00FF0000) ^
+                        ($state[$k] & 0x0000FF00) ^
                         ($state[$l] & 0x000000FF) ^
-                         $w[$Nr][$i];
-            $i++;
+                         $w[$i];
+            ++$i;
             $j = ($j + 1) % $Nb;
             $k = ($k + 1) % $Nb;
             $l = ($l + 1) % $Nb;
         }
-        $state = $temp;
-
-        array_unshift($state, 'N*');
 
-        return call_user_func_array('pack', $state);
+        switch ($Nb) {
+            case 8:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
+            case 7:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
+            case 6:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
+            case 5:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
+            default:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
+        }
     }
 
     /**
      * Decrypts a block
      *
      * @access private
-     * @param String $in
-     * @return String
+     * @param string $in
+     * @return string
      */
     function _decryptBlock($in)
     {
+        static $invtables;
+        if (empty($invtables)) {
+            $invtables = &$this->_getInvTables();
+        }
+        $dt0   = $invtables[0];
+        $dt1   = $invtables[1];
+        $dt2   = $invtables[2];
+        $dt3   = $invtables[3];
+        $isbox = $invtables[4];
+
         $state = array();
-        $words = unpack('N*word', $in);
+        $words = unpack('N*', $in);
 
-        $num_states = count($state);
+        $c  = $this->c;
         $dw = $this->dw;
-        $dt0 = $this->dt0;
-        $dt1 = $this->dt1;
-        $dt2 = $this->dt2;
-        $dt3 = $this->dt3;
         $Nb = $this->Nb;
         $Nr = $this->Nr;
-        $c = $this->c;
 
         // addRoundKey
-        $i = 0;
+        $wc = $Nb - 1;
         foreach ($words as $word) {
-            $state[] = $word ^ $dw[$Nr][$i++];
+            $state[] = $word ^ $dw[++$wc];
         }
 
         $temp = array();
-        for ($round = $Nr - 1; $round > 0; $round--) {
+        for ($round = $Nr - 1; $round > 0; --$round) {
             $i = 0; // $c[0] == 0
             $j = $Nb - $c[1];
             $k = $Nb - $c[2];
             $l = $Nb - $c[3];
 
             while ($i < $Nb) {
-                $temp[$i] = $dt0[$state[$i] & 0xFF000000] ^ 
-                            $dt1[$state[$j] & 0x00FF0000] ^ 
-                            $dt2[$state[$k] & 0x0000FF00] ^ 
-                            $dt3[$state[$l] & 0x000000FF] ^ 
-                            $dw[$round][$i];
-                $i++;
+                $temp[$i] = $dt0[$state[$i] >> 24 & 0x000000FF] ^
+                            $dt1[$state[$j] >> 16 & 0x000000FF] ^
+                            $dt2[$state[$k] >>  8 & 0x000000FF] ^
+                            $dt3[$state[$l]       & 0x000000FF] ^
+                            $dw[++$wc];
+                ++$i;
                 $j = ($j + 1) % $Nb;
                 $k = ($k + 1) % $Nb;
                 $l = ($l + 1) % $Nb;
             }
-
-            for ($i = 0; $i < $Nb; $i++) {
-                $state[$i] = $temp[$i];
-            }
+            $state = $temp;
         }
 
         // invShiftRows + invSubWord + addRoundKey
@@ -850,33 +426,42 @@ class Crypt_Rijndael {
         $l = $Nb - $c[3];
 
         while ($i < $Nb) {
-            $temp[$i] = $dw[0][$i] ^ 
-                        $this->_invSubWord(($state[$i] & 0xFF000000) | 
-                                           ($state[$j] & 0x00FF0000) | 
-                                           ($state[$k] & 0x0000FF00) | 
-                                           ($state[$l] & 0x000000FF));
-            $i++;
+            $word = ($state[$i] & 0xFF000000) |
+                    ($state[$j] & 0x00FF0000) |
+                    ($state[$k] & 0x0000FF00) |
+                    ($state[$l] & 0x000000FF);
+
+            $temp[$i] = $dw[$i] ^ ($isbox[$word       & 0x000000FF]        |
+                                  ($isbox[$word >>  8 & 0x000000FF] <<  8) |
+                                  ($isbox[$word >> 16 & 0x000000FF] << 16) |
+                                  ($isbox[$word >> 24 & 0x000000FF] << 24));
+            ++$i;
             $j = ($j + 1) % $Nb;
             $k = ($k + 1) % $Nb;
             $l = ($l + 1) % $Nb;
         }
 
-        $state = $temp;
-
-        array_unshift($state, 'N*');
-
-        return call_user_func_array('pack', $state);
+        switch ($Nb) {
+            case 8:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6], $temp[7]);
+            case 7:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5], $temp[6]);
+            case 6:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4], $temp[5]);
+            case 5:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3], $temp[4]);
+            default:
+                return pack('N*', $temp[0], $temp[1], $temp[2], $temp[3]);
+        }
     }
 
     /**
-     * Setup Rijndael
-     *
-     * Validates all the variables and calculates $Nr - the number of rounds that need to be performed - and $w - the key
-     * key schedule.
+     * Setup the key (expansion)
      *
+     * @see \phpseclib\Crypt\Base::_setupKey()
      * @access private
      */
-    function _setup()
+    function _setupKey()
     {
         // Each number in $rcon is equal to the previous number multiplied by two in Rijndael's finite field.
         // See http://en.wikipedia.org/wiki/Finite_field_arithmetic#Multiplicative_inverse
@@ -889,25 +474,13 @@ class Crypt_Rijndael {
             0x7D000000, 0xFA000000, 0xEF000000, 0xC5000000, 0x91000000
         );
 
-        if (!$this->changed) {
+        if (isset($this->kl['key']) && $this->key === $this->kl['key'] && $this->key_length === $this->kl['key_length'] && $this->block_size === $this->kl['block_size']) {
+            // already expanded
             return;
         }
+        $this->kl = array('key' => $this->key, 'key_length' => $this->key_length, 'block_size' => $this->block_size);
 
-        if (!$this->explicit_key_length) {
-            // we do >> 2, here, and not >> 5, as we do above, since strlen($this->key) tells us the number of bytes - not bits
-            $length = strlen($this->key) >> 2;
-            if ($length > 8) {
-                $length = 8;
-            } else if ($length < 4) {
-                $length = 4;
-            }
-            $this->Nk = $length;
-            $this->key_size = $length << 2;
-        }
-
-        $this->key = str_pad(substr($this->key, 0, $this->key_size), $this->key_size, chr(0));
-        $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($this->iv, 0, $this->block_size), $this->block_size, chr(0));
-
+        $this->Nk = $this->key_length >> 2;
         // see Rijndael-ammended.pdf#page=44
         $this->Nr = max($this->Nk, $this->Nb) + 6;
 
@@ -928,9 +501,7 @@ class Crypt_Rijndael {
                 $this->c = array(0, 1, 3, 4);
         }
 
-        $key = $this->key;
-
-        $w = array_values(unpack('N*words', $key));
+        $w = array_values(unpack('N*words', $this->key));
 
         $length = $this->Nb * ($this->Nr + 1);
         for ($i = $this->Nk; $i < $length; $i++) {
@@ -942,7 +513,7 @@ class Crypt_Rijndael {
                 // with 0xFFFFFFFF (or 0xFFFFFF00) on a 32-bit machine is unnecessary, but on a 64-bit machine, it is.
                 $temp = (($temp << 8) & 0xFFFFFF00) | (($temp >> 24) & 0x000000FF); // rotWord
                 $temp = $this->_subWord($temp) ^ $rcon[$i / $this->Nk];
-            } else if ($this->Nk > 6 && $i % $this->Nk == 4) {
+            } elseif ($this->Nk > 6 && $i % $this->Nk == 4) {
                 $temp = $this->_subWord($temp);
             }
             $w[$i] = $w[$i - $this->Nk] ^ $temp;
@@ -950,12 +521,13 @@ class Crypt_Rijndael {
 
         // convert the key schedule from a vector of $Nb * ($Nr + 1) length to a matrix with $Nr + 1 rows and $Nb columns
         // and generate the inverse key schedule.  more specifically,
-        // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=23> (section 5.3.3), 
+        // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=23> (section 5.3.3),
         // "The key expansion for the Inverse Cipher is defined as follows:
         //        1. Apply the Key Expansion.
         //        2. Apply InvMixColumn to all Round Keys except the first and the last one."
         // also, see fips-197.pdf#page=27, "5.3.5 Equivalent Inverse Cipher"
-        $temp = array();
+        list($dt0, $dt1, $dt2, $dt3) = $this->_getInvTables();
+        $temp = $this->w = $this->dw = array();
         for ($i = $row = $col = 0; $i < $length; $i++, $col++) {
             if ($col == $this->Nb) {
                 if ($row == 0) {
@@ -965,10 +537,10 @@ class Crypt_Rijndael {
                     $j = 0;
                     while ($j < $this->Nb) {
                         $dw = $this->_subWord($this->w[$row][$j]);
-                        $temp[$j] = $this->dt0[$dw & 0xFF000000] ^ 
-                                    $this->dt1[$dw & 0x00FF0000] ^ 
-                                    $this->dt2[$dw & 0x0000FF00] ^ 
-                                    $this->dt3[$dw & 0x000000FF];
+                        $temp[$j] = $dt0[$dw >> 24 & 0x000000FF] ^
+                                    $dt1[$dw >> 16 & 0x000000FF] ^
+                                    $dt2[$dw >>  8 & 0x000000FF] ^
+                                    $dt3[$dw       & 0x000000FF];
                         $j++;
                     }
                     $this->dw[$row] = $temp;
@@ -982,261 +554,383 @@ class Crypt_Rijndael {
 
         $this->dw[$row] = $this->w[$row];
 
-        $this->changed = false;
+        // Converting to 1-dim key arrays (both ascending)
+        $this->dw = array_reverse($this->dw);
+        $w  = array_pop($this->w);
+        $dw = array_pop($this->dw);
+        foreach ($this->w as $r => $wr) {
+            foreach ($wr as $c => $wc) {
+                $w[]  = $wc;
+                $dw[] = $this->dw[$r][$c];
+            }
+        }
+        $this->w  = $w;
+        $this->dw = $dw;
     }
 
     /**
      * Performs S-Box substitutions
      *
      * @access private
+     * @param int $word
      */
     function _subWord($word)
     {
-        static $sbox0, $sbox1, $sbox2, $sbox3;
-
-        if (empty($sbox0)) {
-            $sbox0 = array(
-                0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
-                0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
-                0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
-                0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
-                0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
-                0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
-                0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
-                0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
-                0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
-                0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
-                0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
-                0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
-                0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
-                0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
-                0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
-                0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
-            );
-
-            $sbox1 = array();
-            $sbox2 = array();
-            $sbox3 = array();
-
-            for ($i = 0; $i < 256; $i++) {
-                $sbox1[$i <<  8] = $sbox0[$i] <<  8;
-                $sbox2[$i << 16] = $sbox0[$i] << 16;
-                $sbox3[$i << 24] = $sbox0[$i] << 24;
-            }
+        static $sbox;
+        if (empty($sbox)) {
+            list(, , , , $sbox) = $this->_getTables();
         }
 
-        return $sbox0[$word & 0x000000FF] | 
-               $sbox1[$word & 0x0000FF00] | 
-               $sbox2[$word & 0x00FF0000] | 
-               $sbox3[$word & 0xFF000000];
+        return  $sbox[$word       & 0x000000FF]        |
+               ($sbox[$word >>  8 & 0x000000FF] <<  8) |
+               ($sbox[$word >> 16 & 0x000000FF] << 16) |
+               ($sbox[$word >> 24 & 0x000000FF] << 24);
     }
 
     /**
-     * Performs inverse S-Box substitutions
+     * Provides the mixColumns and sboxes tables
      *
+     * @see self::_encryptBlock()
+     * @see self::_setupInlineCrypt()
+     * @see self::_subWord()
      * @access private
+     * @return array &$tables
      */
-    function _invSubWord($word)
+    function &_getTables()
     {
-        static $sbox0, $sbox1, $sbox2, $sbox3;
-
-        if (empty($sbox0)) {
-            $sbox0 = array(
-                0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
-                0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
-                0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
-                0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
-                0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
-                0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
-                0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
-                0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
-                0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
-                0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
-                0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
-                0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
-                0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
-                0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
-                0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
-                0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
-            );
-
-            $sbox1 = array();
-            $sbox2 = array();
-            $sbox3 = array();
-
-            for ($i = 0; $i < 256; $i++) {
-                $sbox1[$i <<  8] = $sbox0[$i] <<  8;
-                $sbox2[$i << 16] = $sbox0[$i] << 16;
-                $sbox3[$i << 24] = $sbox0[$i] << 24;
+        static $tables;
+        if (empty($tables)) {
+            // according to <http://csrc.nist.gov/archive/aes/rijndael/Rijndael-ammended.pdf#page=19> (section 5.2.1),
+            // precomputed tables can be used in the mixColumns phase. in that example, they're assigned t0...t3, so
+            // those are the names we'll use.
+            $t3 = array_map('intval', array(
+                // with array_map('intval', ...) we ensure we have only int's and not
+                // some slower floats converted by php automatically on high values
+                0x6363A5C6, 0x7C7C84F8, 0x777799EE, 0x7B7B8DF6, 0xF2F20DFF, 0x6B6BBDD6, 0x6F6FB1DE, 0xC5C55491,
+                0x30305060, 0x01010302, 0x6767A9CE, 0x2B2B7D56, 0xFEFE19E7, 0xD7D762B5, 0xABABE64D, 0x76769AEC,
+                0xCACA458F, 0x82829D1F, 0xC9C94089, 0x7D7D87FA, 0xFAFA15EF, 0x5959EBB2, 0x4747C98E, 0xF0F00BFB,
+                0xADADEC41, 0xD4D467B3, 0xA2A2FD5F, 0xAFAFEA45, 0x9C9CBF23, 0xA4A4F753, 0x727296E4, 0xC0C05B9B,
+                0xB7B7C275, 0xFDFD1CE1, 0x9393AE3D, 0x26266A4C, 0x36365A6C, 0x3F3F417E, 0xF7F702F5, 0xCCCC4F83,
+                0x34345C68, 0xA5A5F451, 0xE5E534D1, 0xF1F108F9, 0x717193E2, 0xD8D873AB, 0x31315362, 0x15153F2A,
+                0x04040C08, 0xC7C75295, 0x23236546, 0xC3C35E9D, 0x18182830, 0x9696A137, 0x05050F0A, 0x9A9AB52F,
+                0x0707090E, 0x12123624, 0x80809B1B, 0xE2E23DDF, 0xEBEB26CD, 0x2727694E, 0xB2B2CD7F, 0x75759FEA,
+                0x09091B12, 0x83839E1D, 0x2C2C7458, 0x1A1A2E34, 0x1B1B2D36, 0x6E6EB2DC, 0x5A5AEEB4, 0xA0A0FB5B,
+                0x5252F6A4, 0x3B3B4D76, 0xD6D661B7, 0xB3B3CE7D, 0x29297B52, 0xE3E33EDD, 0x2F2F715E, 0x84849713,
+                0x5353F5A6, 0xD1D168B9, 0x00000000, 0xEDED2CC1, 0x20206040, 0xFCFC1FE3, 0xB1B1C879, 0x5B5BEDB6,
+                0x6A6ABED4, 0xCBCB468D, 0xBEBED967, 0x39394B72, 0x4A4ADE94, 0x4C4CD498, 0x5858E8B0, 0xCFCF4A85,
+                0xD0D06BBB, 0xEFEF2AC5, 0xAAAAE54F, 0xFBFB16ED, 0x4343C586, 0x4D4DD79A, 0x33335566, 0x85859411,
+                0x4545CF8A, 0xF9F910E9, 0x02020604, 0x7F7F81FE, 0x5050F0A0, 0x3C3C4478, 0x9F9FBA25, 0xA8A8E34B,
+                0x5151F3A2, 0xA3A3FE5D, 0x4040C080, 0x8F8F8A05, 0x9292AD3F, 0x9D9DBC21, 0x38384870, 0xF5F504F1,
+                0xBCBCDF63, 0xB6B6C177, 0xDADA75AF, 0x21216342, 0x10103020, 0xFFFF1AE5, 0xF3F30EFD, 0xD2D26DBF,
+                0xCDCD4C81, 0x0C0C1418, 0x13133526, 0xECEC2FC3, 0x5F5FE1BE, 0x9797A235, 0x4444CC88, 0x1717392E,
+                0xC4C45793, 0xA7A7F255, 0x7E7E82FC, 0x3D3D477A, 0x6464ACC8, 0x5D5DE7BA, 0x19192B32, 0x737395E6,
+                0x6060A0C0, 0x81819819, 0x4F4FD19E, 0xDCDC7FA3, 0x22226644, 0x2A2A7E54, 0x9090AB3B, 0x8888830B,
+                0x4646CA8C, 0xEEEE29C7, 0xB8B8D36B, 0x14143C28, 0xDEDE79A7, 0x5E5EE2BC, 0x0B0B1D16, 0xDBDB76AD,
+                0xE0E03BDB, 0x32325664, 0x3A3A4E74, 0x0A0A1E14, 0x4949DB92, 0x06060A0C, 0x24246C48, 0x5C5CE4B8,
+                0xC2C25D9F, 0xD3D36EBD, 0xACACEF43, 0x6262A6C4, 0x9191A839, 0x9595A431, 0xE4E437D3, 0x79798BF2,
+                0xE7E732D5, 0xC8C8438B, 0x3737596E, 0x6D6DB7DA, 0x8D8D8C01, 0xD5D564B1, 0x4E4ED29C, 0xA9A9E049,
+                0x6C6CB4D8, 0x5656FAAC, 0xF4F407F3, 0xEAEA25CF, 0x6565AFCA, 0x7A7A8EF4, 0xAEAEE947, 0x08081810,
+                0xBABAD56F, 0x787888F0, 0x25256F4A, 0x2E2E725C, 0x1C1C2438, 0xA6A6F157, 0xB4B4C773, 0xC6C65197,
+                0xE8E823CB, 0xDDDD7CA1, 0x74749CE8, 0x1F1F213E, 0x4B4BDD96, 0xBDBDDC61, 0x8B8B860D, 0x8A8A850F,
+                0x707090E0, 0x3E3E427C, 0xB5B5C471, 0x6666AACC, 0x4848D890, 0x03030506, 0xF6F601F7, 0x0E0E121C,
+                0x6161A3C2, 0x35355F6A, 0x5757F9AE, 0xB9B9D069, 0x86869117, 0xC1C15899, 0x1D1D273A, 0x9E9EB927,
+                0xE1E138D9, 0xF8F813EB, 0x9898B32B, 0x11113322, 0x6969BBD2, 0xD9D970A9, 0x8E8E8907, 0x9494A733,
+                0x9B9BB62D, 0x1E1E223C, 0x87879215, 0xE9E920C9, 0xCECE4987, 0x5555FFAA, 0x28287850, 0xDFDF7AA5,
+                0x8C8C8F03, 0xA1A1F859, 0x89898009, 0x0D0D171A, 0xBFBFDA65, 0xE6E631D7, 0x4242C684, 0x6868B8D0,
+                0x4141C382, 0x9999B029, 0x2D2D775A, 0x0F0F111E, 0xB0B0CB7B, 0x5454FCA8, 0xBBBBD66D, 0x16163A2C
+            ));
+
+            foreach ($t3 as $t3i) {
+                $t0[] = (($t3i << 24) & 0xFF000000) | (($t3i >>  8) & 0x00FFFFFF);
+                $t1[] = (($t3i << 16) & 0xFFFF0000) | (($t3i >> 16) & 0x0000FFFF);
+                $t2[] = (($t3i <<  8) & 0xFFFFFF00) | (($t3i >> 24) & 0x000000FF);
             }
-        }
-
-        return $sbox0[$word & 0x000000FF] | 
-               $sbox1[$word & 0x0000FF00] | 
-               $sbox2[$word & 0x00FF0000] | 
-               $sbox3[$word & 0xFF000000];
-    }
 
-    /**
-     * Pad "packets".
-     *
-     * Rijndael works by encrypting between sixteen and thirty-two bytes at a time, provided that number is also a multiple
-     * of four.  If you ever need to encrypt or decrypt something that isn't of the proper length, it becomes necessary to
-     * pad the input so that it is of the proper length.
-     *
-     * Padding is enabled by default.  Sometimes, however, it is undesirable to pad strings.  Such is the case in SSH,
-     * where "packets" are padded with random bytes before being encrypted.  Unpad these packets and you risk stripping
-     * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
-     * transmitted separately)
-     *
-     * @see Crypt_Rijndael::disablePadding()
-     * @access public
-     */
-    function enablePadding()
-    {
-        $this->padding = true;
+            $tables = array(
+                // The Precomputed mixColumns tables t0 - t3
+                $t0,
+                $t1,
+                $t2,
+                $t3,
+                // The SubByte S-Box
+                array(
+                    0x63, 0x7C, 0x77, 0x7B, 0xF2, 0x6B, 0x6F, 0xC5, 0x30, 0x01, 0x67, 0x2B, 0xFE, 0xD7, 0xAB, 0x76,
+                    0xCA, 0x82, 0xC9, 0x7D, 0xFA, 0x59, 0x47, 0xF0, 0xAD, 0xD4, 0xA2, 0xAF, 0x9C, 0xA4, 0x72, 0xC0,
+                    0xB7, 0xFD, 0x93, 0x26, 0x36, 0x3F, 0xF7, 0xCC, 0x34, 0xA5, 0xE5, 0xF1, 0x71, 0xD8, 0x31, 0x15,
+                    0x04, 0xC7, 0x23, 0xC3, 0x18, 0x96, 0x05, 0x9A, 0x07, 0x12, 0x80, 0xE2, 0xEB, 0x27, 0xB2, 0x75,
+                    0x09, 0x83, 0x2C, 0x1A, 0x1B, 0x6E, 0x5A, 0xA0, 0x52, 0x3B, 0xD6, 0xB3, 0x29, 0xE3, 0x2F, 0x84,
+                    0x53, 0xD1, 0x00, 0xED, 0x20, 0xFC, 0xB1, 0x5B, 0x6A, 0xCB, 0xBE, 0x39, 0x4A, 0x4C, 0x58, 0xCF,
+                    0xD0, 0xEF, 0xAA, 0xFB, 0x43, 0x4D, 0x33, 0x85, 0x45, 0xF9, 0x02, 0x7F, 0x50, 0x3C, 0x9F, 0xA8,
+                    0x51, 0xA3, 0x40, 0x8F, 0x92, 0x9D, 0x38, 0xF5, 0xBC, 0xB6, 0xDA, 0x21, 0x10, 0xFF, 0xF3, 0xD2,
+                    0xCD, 0x0C, 0x13, 0xEC, 0x5F, 0x97, 0x44, 0x17, 0xC4, 0xA7, 0x7E, 0x3D, 0x64, 0x5D, 0x19, 0x73,
+                    0x60, 0x81, 0x4F, 0xDC, 0x22, 0x2A, 0x90, 0x88, 0x46, 0xEE, 0xB8, 0x14, 0xDE, 0x5E, 0x0B, 0xDB,
+                    0xE0, 0x32, 0x3A, 0x0A, 0x49, 0x06, 0x24, 0x5C, 0xC2, 0xD3, 0xAC, 0x62, 0x91, 0x95, 0xE4, 0x79,
+                    0xE7, 0xC8, 0x37, 0x6D, 0x8D, 0xD5, 0x4E, 0xA9, 0x6C, 0x56, 0xF4, 0xEA, 0x65, 0x7A, 0xAE, 0x08,
+                    0xBA, 0x78, 0x25, 0x2E, 0x1C, 0xA6, 0xB4, 0xC6, 0xE8, 0xDD, 0x74, 0x1F, 0x4B, 0xBD, 0x8B, 0x8A,
+                    0x70, 0x3E, 0xB5, 0x66, 0x48, 0x03, 0xF6, 0x0E, 0x61, 0x35, 0x57, 0xB9, 0x86, 0xC1, 0x1D, 0x9E,
+                    0xE1, 0xF8, 0x98, 0x11, 0x69, 0xD9, 0x8E, 0x94, 0x9B, 0x1E, 0x87, 0xE9, 0xCE, 0x55, 0x28, 0xDF,
+                    0x8C, 0xA1, 0x89, 0x0D, 0xBF, 0xE6, 0x42, 0x68, 0x41, 0x99, 0x2D, 0x0F, 0xB0, 0x54, 0xBB, 0x16
+                )
+            );
+        }
+        return $tables;
     }
 
     /**
-     * Do not pad packets.
+     * Provides the inverse mixColumns and inverse sboxes tables
      *
-     * @see Crypt_Rijndael::enablePadding()
-     * @access public
+     * @see self::_decryptBlock()
+     * @see self::_setupInlineCrypt()
+     * @see self::_setupKey()
+     * @access private
+     * @return array &$tables
      */
-    function disablePadding()
+    function &_getInvTables()
     {
-        $this->padding = false;
+        static $tables;
+        if (empty($tables)) {
+            $dt3 = array_map('intval', array(
+                0xF4A75051, 0x4165537E, 0x17A4C31A, 0x275E963A, 0xAB6BCB3B, 0x9D45F11F, 0xFA58ABAC, 0xE303934B,
+                0x30FA5520, 0x766DF6AD, 0xCC769188, 0x024C25F5, 0xE5D7FC4F, 0x2ACBD7C5, 0x35448026, 0x62A38FB5,
+                0xB15A49DE, 0xBA1B6725, 0xEA0E9845, 0xFEC0E15D, 0x2F7502C3, 0x4CF01281, 0x4697A38D, 0xD3F9C66B,
+                0x8F5FE703, 0x929C9515, 0x6D7AEBBF, 0x5259DA95, 0xBE832DD4, 0x7421D358, 0xE0692949, 0xC9C8448E,
+                0xC2896A75, 0x8E7978F4, 0x583E6B99, 0xB971DD27, 0xE14FB6BE, 0x88AD17F0, 0x20AC66C9, 0xCE3AB47D,
+                0xDF4A1863, 0x1A3182E5, 0x51336097, 0x537F4562, 0x6477E0B1, 0x6BAE84BB, 0x81A01CFE, 0x082B94F9,
+                0x48685870, 0x45FD198F, 0xDE6C8794, 0x7BF8B752, 0x73D323AB, 0x4B02E272, 0x1F8F57E3, 0x55AB2A66,
+                0xEB2807B2, 0xB5C2032F, 0xC57B9A86, 0x3708A5D3, 0x2887F230, 0xBFA5B223, 0x036ABA02, 0x16825CED,
+                0xCF1C2B8A, 0x79B492A7, 0x07F2F0F3, 0x69E2A14E, 0xDAF4CD65, 0x05BED506, 0x34621FD1, 0xA6FE8AC4,
+                0x2E539D34, 0xF355A0A2, 0x8AE13205, 0xF6EB75A4, 0x83EC390B, 0x60EFAA40, 0x719F065E, 0x6E1051BD,
+                0x218AF93E, 0xDD063D96, 0x3E05AEDD, 0xE6BD464D, 0x548DB591, 0xC45D0571, 0x06D46F04, 0x5015FF60,
+                0x98FB2419, 0xBDE997D6, 0x4043CC89, 0xD99E7767, 0xE842BDB0, 0x898B8807, 0x195B38E7, 0xC8EEDB79,
+                0x7C0A47A1, 0x420FE97C, 0x841EC9F8, 0x00000000, 0x80868309, 0x2BED4832, 0x1170AC1E, 0x5A724E6C,
+                0x0EFFFBFD, 0x8538560F, 0xAED51E3D, 0x2D392736, 0x0FD9640A, 0x5CA62168, 0x5B54D19B, 0x362E3A24,
+                0x0A67B10C, 0x57E70F93, 0xEE96D2B4, 0x9B919E1B, 0xC0C54F80, 0xDC20A261, 0x774B695A, 0x121A161C,
+                0x93BA0AE2, 0xA02AE5C0, 0x22E0433C, 0x1B171D12, 0x090D0B0E, 0x8BC7ADF2, 0xB6A8B92D, 0x1EA9C814,
+                0xF1198557, 0x75074CAF, 0x99DDBBEE, 0x7F60FDA3, 0x01269FF7, 0x72F5BC5C, 0x663BC544, 0xFB7E345B,
+                0x4329768B, 0x23C6DCCB, 0xEDFC68B6, 0xE4F163B8, 0x31DCCAD7, 0x63851042, 0x97224013, 0xC6112084,
+                0x4A247D85, 0xBB3DF8D2, 0xF93211AE, 0x29A16DC7, 0x9E2F4B1D, 0xB230F3DC, 0x8652EC0D, 0xC1E3D077,
+                0xB3166C2B, 0x70B999A9, 0x9448FA11, 0xE9642247, 0xFC8CC4A8, 0xF03F1AA0, 0x7D2CD856, 0x3390EF22,
+                0x494EC787, 0x38D1C1D9, 0xCAA2FE8C, 0xD40B3698, 0xF581CFA6, 0x7ADE28A5, 0xB78E26DA, 0xADBFA43F,
+                0x3A9DE42C, 0x78920D50, 0x5FCC9B6A, 0x7E466254, 0x8D13C2F6, 0xD8B8E890, 0x39F75E2E, 0xC3AFF582,
+                0x5D80BE9F, 0xD0937C69, 0xD52DA96F, 0x2512B3CF, 0xAC993BC8, 0x187DA710, 0x9C636EE8, 0x3BBB7BDB,
+                0x267809CD, 0x5918F46E, 0x9AB701EC, 0x4F9AA883, 0x956E65E6, 0xFFE67EAA, 0xBCCF0821, 0x15E8E6EF,
+                0xE79BD9BA, 0x6F36CE4A, 0x9F09D4EA, 0xB07CD629, 0xA4B2AF31, 0x3F23312A, 0xA59430C6, 0xA266C035,
+                0x4EBC3774, 0x82CAA6FC, 0x90D0B0E0, 0xA7D81533, 0x04984AF1, 0xECDAF741, 0xCD500E7F, 0x91F62F17,
+                0x4DD68D76, 0xEFB04D43, 0xAA4D54CC, 0x9604DFE4, 0xD1B5E39E, 0x6A881B4C, 0x2C1FB8C1, 0x65517F46,
+                0x5EEA049D, 0x8C355D01, 0x877473FA, 0x0B412EFB, 0x671D5AB3, 0xDBD25292, 0x105633E9, 0xD647136D,
+                0xD7618C9A, 0xA10C7A37, 0xF8148E59, 0x133C89EB, 0xA927EECE, 0x61C935B7, 0x1CE5EDE1, 0x47B13C7A,
+                0xD2DF599C, 0xF2733F55, 0x14CE7918, 0xC737BF73, 0xF7CDEA53, 0xFDAA5B5F, 0x3D6F14DF, 0x44DB8678,
+                0xAFF381CA, 0x68C43EB9, 0x24342C38, 0xA3405FC2, 0x1DC37216, 0xE2250CBC, 0x3C498B28, 0x0D9541FF,
+                0xA8017139, 0x0CB3DE08, 0xB4E49CD8, 0x56C19064, 0xCB84617B, 0x32B670D5, 0x6C5C7448, 0xB85742D0
+            ));
+
+            foreach ($dt3 as $dt3i) {
+                $dt0[] = (($dt3i << 24) & 0xFF000000) | (($dt3i >>  8) & 0x00FFFFFF);
+                $dt1[] = (($dt3i << 16) & 0xFFFF0000) | (($dt3i >> 16) & 0x0000FFFF);
+                $dt2[] = (($dt3i <<  8) & 0xFFFFFF00) | (($dt3i >> 24) & 0x000000FF);
+            };
+
+            $tables = array(
+                // The Precomputed inverse mixColumns tables dt0 - dt3
+                $dt0,
+                $dt1,
+                $dt2,
+                $dt3,
+                // The inverse SubByte S-Box
+                array(
+                    0x52, 0x09, 0x6A, 0xD5, 0x30, 0x36, 0xA5, 0x38, 0xBF, 0x40, 0xA3, 0x9E, 0x81, 0xF3, 0xD7, 0xFB,
+                    0x7C, 0xE3, 0x39, 0x82, 0x9B, 0x2F, 0xFF, 0x87, 0x34, 0x8E, 0x43, 0x44, 0xC4, 0xDE, 0xE9, 0xCB,
+                    0x54, 0x7B, 0x94, 0x32, 0xA6, 0xC2, 0x23, 0x3D, 0xEE, 0x4C, 0x95, 0x0B, 0x42, 0xFA, 0xC3, 0x4E,
+                    0x08, 0x2E, 0xA1, 0x66, 0x28, 0xD9, 0x24, 0xB2, 0x76, 0x5B, 0xA2, 0x49, 0x6D, 0x8B, 0xD1, 0x25,
+                    0x72, 0xF8, 0xF6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xD4, 0xA4, 0x5C, 0xCC, 0x5D, 0x65, 0xB6, 0x92,
+                    0x6C, 0x70, 0x48, 0x50, 0xFD, 0xED, 0xB9, 0xDA, 0x5E, 0x15, 0x46, 0x57, 0xA7, 0x8D, 0x9D, 0x84,
+                    0x90, 0xD8, 0xAB, 0x00, 0x8C, 0xBC, 0xD3, 0x0A, 0xF7, 0xE4, 0x58, 0x05, 0xB8, 0xB3, 0x45, 0x06,
+                    0xD0, 0x2C, 0x1E, 0x8F, 0xCA, 0x3F, 0x0F, 0x02, 0xC1, 0xAF, 0xBD, 0x03, 0x01, 0x13, 0x8A, 0x6B,
+                    0x3A, 0x91, 0x11, 0x41, 0x4F, 0x67, 0xDC, 0xEA, 0x97, 0xF2, 0xCF, 0xCE, 0xF0, 0xB4, 0xE6, 0x73,
+                    0x96, 0xAC, 0x74, 0x22, 0xE7, 0xAD, 0x35, 0x85, 0xE2, 0xF9, 0x37, 0xE8, 0x1C, 0x75, 0xDF, 0x6E,
+                    0x47, 0xF1, 0x1A, 0x71, 0x1D, 0x29, 0xC5, 0x89, 0x6F, 0xB7, 0x62, 0x0E, 0xAA, 0x18, 0xBE, 0x1B,
+                    0xFC, 0x56, 0x3E, 0x4B, 0xC6, 0xD2, 0x79, 0x20, 0x9A, 0xDB, 0xC0, 0xFE, 0x78, 0xCD, 0x5A, 0xF4,
+                    0x1F, 0xDD, 0xA8, 0x33, 0x88, 0x07, 0xC7, 0x31, 0xB1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xEC, 0x5F,
+                    0x60, 0x51, 0x7F, 0xA9, 0x19, 0xB5, 0x4A, 0x0D, 0x2D, 0xE5, 0x7A, 0x9F, 0x93, 0xC9, 0x9C, 0xEF,
+                    0xA0, 0xE0, 0x3B, 0x4D, 0xAE, 0x2A, 0xF5, 0xB0, 0xC8, 0xEB, 0xBB, 0x3C, 0x83, 0x53, 0x99, 0x61,
+                    0x17, 0x2B, 0x04, 0x7E, 0xBA, 0x77, 0xD6, 0x26, 0xE1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0C, 0x7D
+                )
+            );
+        }
+        return $tables;
     }
 
     /**
-     * Pads a string
-     *
-     * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize.
-     * $block_size - (strlen($text) % $block_size) bytes are added, each of which is equal to 
-     * chr($block_size - (strlen($text) % $block_size)
+     * Setup the performance-optimized function for de/encrypt()
      *
-     * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
-     * and padding will, hence forth, be enabled.
-     *
-     * @see Crypt_Rijndael::_unpad()
+     * @see \phpseclib\Crypt\Base::_setupInlineCrypt()
      * @access private
      */
-    function _pad($text)
+    function _setupInlineCrypt()
     {
-        $length = strlen($text);
-
-        if (!$this->padding) {
-            if ($length % $this->block_size == 0) {
-                return $text;
-            } else {
-                user_error("The plaintext's length ($length) is not a multiple of the block size ({$this->block_size})", E_USER_NOTICE);
-                $this->padding = true;
-            }
-        }
+        // Note: _setupInlineCrypt() will be called only if $this->changed === true
+        // So here we are'nt under the same heavy timing-stress as we are in _de/encryptBlock() or de/encrypt().
+        // However...the here generated function- $code, stored as php callback in $this->inline_crypt, must work as fast as even possible.
 
-        $pad = $this->block_size - ($length % $this->block_size);
+        $lambda_functions =& self::_getLambdaFunctions();
 
-        return str_pad($text, $length + $pad, chr($pad));
-    }
+        // We create max. 10 hi-optimized code for memory reason. Means: For each $key one ultra fast inline-crypt function.
+        // (Currently, for Crypt_Rijndael/AES, one generated $lambda_function cost on php5.5@32bit ~80kb unfreeable mem and ~130kb on php5.5@64bit)
+        // After that, we'll still create very fast optimized code but not the hi-ultimative code, for each $mode one.
+        $gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
 
-    /**
-     * Unpads a string.
-     *
-     * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
-     * and false will be returned.
-     *
-     * @see Crypt_Rijndael::_pad()
-     * @access private
-     */
-    function _unpad($text)
-    {
-        if (!$this->padding) {
-            return $text;
+        // Generation of a uniqe hash for our generated code
+        $code_hash = "Crypt_Rijndael, {$this->mode}, {$this->Nr}, {$this->Nb}";
+        if ($gen_hi_opt_code) {
+            $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
         }
 
-        $length = ord($text[strlen($text) - 1]);
+        if (!isset($lambda_functions[$code_hash])) {
+            switch (true) {
+                case $gen_hi_opt_code:
+                    // The hi-optimized $lambda_functions will use the key-words hardcoded for better performance.
+                    $w  = $this->w;
+                    $dw = $this->dw;
+                    $init_encrypt = '';
+                    $init_decrypt = '';
+                    break;
+                default:
+                    for ($i = 0, $cw = count($this->w); $i < $cw; ++$i) {
+                        $w[]  = '$w['  . $i . ']';
+                        $dw[] = '$dw[' . $i . ']';
+                    }
+                    $init_encrypt = '$w  = $self->w;';
+                    $init_decrypt = '$dw = $self->dw;';
+            }
 
-        if (!$length || $length > $this->block_size) {
-            return false;
-        }
+            $Nr = $this->Nr;
+            $Nb = $this->Nb;
+            $c  = $this->c;
 
-        return substr($text, 0, -$length);
-    }
+            // Generating encrypt code:
+            $init_encrypt.= '
+                static $tables;
+                if (empty($tables)) {
+                    $tables = &$self->_getTables();
+                }
+                $t0   = $tables[0];
+                $t1   = $tables[1];
+                $t2   = $tables[2];
+                $t3   = $tables[3];
+                $sbox = $tables[4];
+            ';
+
+            $s  = 'e';
+            $e  = 's';
+            $wc = $Nb - 1;
+
+            // Preround: addRoundKey
+            $encrypt_block = '$in = unpack("N*", $in);'."\n";
+            for ($i = 0; $i < $Nb; ++$i) {
+                $encrypt_block .= '$s'.$i.' = $in['.($i + 1).'] ^ '.$w[++$wc].";\n";
+            }
 
-    /**
-     * Treat consecutive "packets" as if they are a continuous buffer.
-     *
-     * Say you have a 32-byte plaintext $plaintext.  Using the default behavior, the two following code snippets
-     * will yield different outputs:
-     *
-     * <code>
-     *    echo $rijndael->encrypt(substr($plaintext,  0, 16));
-     *    echo $rijndael->encrypt(substr($plaintext, 16, 16));
-     * </code>
-     * <code>
-     *    echo $rijndael->encrypt($plaintext);
-     * </code>
-     *
-     * The solution is to enable the continuous buffer.  Although this will resolve the above discrepancy, it creates
-     * another, as demonstrated with the following:
-     *
-     * <code>
-     *    $rijndael->encrypt(substr($plaintext, 0, 16));
-     *    echo $rijndael->decrypt($des->encrypt(substr($plaintext, 16, 16)));
-     * </code>
-     * <code>
-     *    echo $rijndael->decrypt($des->encrypt(substr($plaintext, 16, 16)));
-     * </code>
-     *
-     * With the continuous buffer disabled, these would yield the same output.  With it enabled, they yield different
-     * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /
-     * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.
-     *
-     * Put another way, when the continuous buffer is enabled, the state of the Crypt_Rijndael() object changes after each
-     * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that
-     * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),
-     * however, they are also less intuitive and more likely to cause you problems.
-     *
-     * @see Crypt_Rijndael::disableContinuousBuffer()
-     * @access public
-     */
-    function enableContinuousBuffer()
-    {
-        $this->continuousBuffer = true;
-    }
+            // Mainrounds: shiftRows + subWord + mixColumns + addRoundKey
+            for ($round = 1; $round < $Nr; ++$round) {
+                list($s, $e) = array($e, $s);
+                for ($i = 0; $i < $Nb; ++$i) {
+                    $encrypt_block.=
+                        '$'.$e.$i.' =
+                        $t0[($'.$s.$i                  .' >> 24) & 0xff] ^
+                        $t1[($'.$s.(($i + $c[1]) % $Nb).' >> 16) & 0xff] ^
+                        $t2[($'.$s.(($i + $c[2]) % $Nb).' >>  8) & 0xff] ^
+                        $t3[ $'.$s.(($i + $c[3]) % $Nb).'        & 0xff] ^
+                        '.$w[++$wc].";\n";
+                }
+            }
 
-    /**
-     * Treat consecutive packets as if they are a discontinuous buffer.
-     *
-     * The default behavior.
-     *
-     * @see Crypt_Rijndael::enableContinuousBuffer()
-     * @access public
-     */
-    function disableContinuousBuffer()
-    {
-        $this->continuousBuffer = false;
-        $this->encryptIV = $this->iv;
-        $this->decryptIV = $this->iv;
-    }
+            // Finalround: subWord + shiftRows + addRoundKey
+            for ($i = 0; $i < $Nb; ++$i) {
+                $encrypt_block.=
+                    '$'.$e.$i.' =
+                     $sbox[ $'.$e.$i.'        & 0xff]        |
+                    ($sbox[($'.$e.$i.' >>  8) & 0xff] <<  8) |
+                    ($sbox[($'.$e.$i.' >> 16) & 0xff] << 16) |
+                    ($sbox[($'.$e.$i.' >> 24) & 0xff] << 24);'."\n";
+            }
+            $encrypt_block .= '$in = pack("N*"'."\n";
+            for ($i = 0; $i < $Nb; ++$i) {
+                $encrypt_block.= ',
+                    ($'.$e.$i                  .' & '.((int)0xFF000000).') ^
+                    ($'.$e.(($i + $c[1]) % $Nb).' &         0x00FF0000   ) ^
+                    ($'.$e.(($i + $c[2]) % $Nb).' &         0x0000FF00   ) ^
+                    ($'.$e.(($i + $c[3]) % $Nb).' &         0x000000FF   ) ^
+                    '.$w[$i]."\n";
+            }
+            $encrypt_block .= ');';
 
-    /**
-     * String Shift
-     *
-     * Inspired by array_shift
-     *
-     * @param String $string
-     * @param optional Integer $index
-     * @return String
-     * @access private
-     */
-    function _string_shift(&$string, $index = 1)
-    {
-        $substr = substr($string, 0, $index);
-        $string = substr($string, $index);
-        return $substr;
+            // Generating decrypt code:
+            $init_decrypt.= '
+                static $invtables;
+                if (empty($invtables)) {
+                    $invtables = &$self->_getInvTables();
+                }
+                $dt0   = $invtables[0];
+                $dt1   = $invtables[1];
+                $dt2   = $invtables[2];
+                $dt3   = $invtables[3];
+                $isbox = $invtables[4];
+            ';
+
+            $s  = 'e';
+            $e  = 's';
+            $wc = $Nb - 1;
+
+            // Preround: addRoundKey
+            $decrypt_block = '$in = unpack("N*", $in);'."\n";
+            for ($i = 0; $i < $Nb; ++$i) {
+                $decrypt_block .= '$s'.$i.' = $in['.($i + 1).'] ^ '.$dw[++$wc].';'."\n";
+            }
+
+            // Mainrounds: shiftRows + subWord + mixColumns + addRoundKey
+            for ($round = 1; $round < $Nr; ++$round) {
+                list($s, $e) = array($e, $s);
+                for ($i = 0; $i < $Nb; ++$i) {
+                    $decrypt_block.=
+                        '$'.$e.$i.' =
+                        $dt0[($'.$s.$i                        .' >> 24) & 0xff] ^
+                        $dt1[($'.$s.(($Nb + $i - $c[1]) % $Nb).' >> 16) & 0xff] ^
+                        $dt2[($'.$s.(($Nb + $i - $c[2]) % $Nb).' >>  8) & 0xff] ^
+                        $dt3[ $'.$s.(($Nb + $i - $c[3]) % $Nb).'        & 0xff] ^
+                        '.$dw[++$wc].";\n";
+                }
+            }
+
+            // Finalround: subWord + shiftRows + addRoundKey
+            for ($i = 0; $i < $Nb; ++$i) {
+                $decrypt_block.=
+                    '$'.$e.$i.' =
+                     $isbox[ $'.$e.$i.'        & 0xff]        |
+                    ($isbox[($'.$e.$i.' >>  8) & 0xff] <<  8) |
+                    ($isbox[($'.$e.$i.' >> 16) & 0xff] << 16) |
+                    ($isbox[($'.$e.$i.' >> 24) & 0xff] << 24);'."\n";
+            }
+            $decrypt_block .= '$in = pack("N*"'."\n";
+            for ($i = 0; $i < $Nb; ++$i) {
+                $decrypt_block.= ',
+                    ($'.$e.$i.                        ' & '.((int)0xFF000000).') ^
+                    ($'.$e.(($Nb + $i - $c[1]) % $Nb).' &         0x00FF0000   ) ^
+                    ($'.$e.(($Nb + $i - $c[2]) % $Nb).' &         0x0000FF00   ) ^
+                    ($'.$e.(($Nb + $i - $c[3]) % $Nb).' &         0x000000FF   ) ^
+                    '.$dw[$i]."\n";
+            }
+            $decrypt_block .= ');';
+
+            $lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
+                array(
+                   'init_crypt'    => '',
+                   'init_encrypt'  => $init_encrypt,
+                   'init_decrypt'  => $init_decrypt,
+                   'encrypt_block' => $encrypt_block,
+                   'decrypt_block' => $decrypt_block
+                )
+            );
+        }
+        $this->inline_crypt = $lambda_functions[$code_hash];
     }
 }
-
-// vim: ts=4:sw=4:et:
-// vim6: fdl=1:
diff --git a/lib/phpseclib/Crypt/TripleDES.php b/lib/phpseclib/Crypt/TripleDES.php
index 2a66b3e..a2c4166 100644
--- a/lib/phpseclib/Crypt/TripleDES.php
+++ b/lib/phpseclib/Crypt/TripleDES.php
@@ -1,19 +1,18 @@
 <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
  * Pure-PHP implementation of Triple DES.
  *
  * Uses mcrypt, if available, and an internal implementation, otherwise.  Operates in the EDE3 mode (encrypt-decrypt-encrypt).
  *
- * PHP versions 4 and 5
+ * PHP version 5
  *
  * Here's a short example of how to use this library:
  * <code>
  * <?php
- *    include('Crypt/TripleDES.php');
+ *    include 'vendor/autoload.php';
  *
- *    $des = new Crypt_TripleDES();
+ *    $des = new \phpseclib\Crypt\TripleDES();
  *
  *    $des->setKey('abcdefghijklmnopqrstuvwx');
  *
@@ -27,511 +26,314 @@
  * ?>
  * </code>
  *
- * LICENSE: This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- *
- * @category   Crypt
- * @package    Crypt_TripleDES
- * @author     Jim Wigginton <terrafrost@php.net>
- * @copyright  MMVII Jim Wigginton
- * @license    http://www.gnu.org/licenses/lgpl.txt
- * @version    $Id: TripleDES.php,v 1.13 2010/02/26 03:40:25 terrafrost Exp $
- * @link       http://phpseclib.sourceforge.net
- */
-
-/**
- * Include Crypt_DES
- */
-require_once 'DES.php';
-
-/**
- * Encrypt / decrypt using inner chaining
- *
- * Inner chaining is used by SSH-1 and is generally considered to be less secure then outer chaining (CRYPT_DES_MODE_CBC3).
+ * @category  Crypt
+ * @package   TripleDES
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2007 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
  */
-define('CRYPT_DES_MODE_3CBC', 3);
 
-/**
- * Encrypt / decrypt using outer chaining
- *
- * Outer chaining is used by SSH-2 and when the mode is set to CRYPT_DES_MODE_CBC.
- */
-define('CRYPT_DES_MODE_CBC3', CRYPT_DES_MODE_CBC);
+namespace phpseclib\Crypt;
 
 /**
  * Pure-PHP implementation of Triple DES.
  *
+ * @package TripleDES
  * @author  Jim Wigginton <terrafrost@php.net>
- * @version 0.1.0
  * @access  public
- * @package Crypt_TerraDES
  */
-class Crypt_TripleDES {
+class TripleDES extends DES
+{
     /**
-     * The Three Keys
+     * Encrypt / decrypt using inner chaining
      *
-     * @see Crypt_TripleDES::setKey()
-     * @var String
-     * @access private
+     * Inner chaining is used by SSH-1 and is generally considered to be less secure then outer chaining (self::MODE_CBC3).
      */
-    var $key = "\0\0\0\0\0\0\0\0";
+    const MODE_3CBC = -2;
 
     /**
-     * The Encryption Mode
+     * Encrypt / decrypt using outer chaining
      *
-     * @see Crypt_TripleDES::Crypt_TripleDES()
-     * @var Integer
-     * @access private
+     * Outer chaining is used by SSH-2 and when the mode is set to \phpseclib\Crypt\Base::MODE_CBC.
      */
-    var $mode = CRYPT_DES_MODE_CBC;
+    const MODE_CBC3 = Base::MODE_CBC;
 
     /**
-     * Continuous Buffer status
+     * Key Length (in bytes)
      *
-     * @see Crypt_TripleDES::enableContinuousBuffer()
-     * @var Boolean
+     * @see \phpseclib\Crypt\TripleDES::setKeyLength()
+     * @var int
      * @access private
      */
-    var $continuousBuffer = false;
+    var $key_length = 24;
 
     /**
-     * Padding status
+     * The default salt used by setPassword()
      *
-     * @see Crypt_TripleDES::enablePadding()
-     * @var Boolean
+     * @see \phpseclib\Crypt\Base::password_default_salt
+     * @see \phpseclib\Crypt\Base::setPassword()
+     * @var string
      * @access private
      */
-    var $padding = true;
+    var $password_default_salt = 'phpseclib';
 
     /**
-     * The Initialization Vector
+     * The mcrypt specific name of the cipher
      *
-     * @see Crypt_TripleDES::setIV()
-     * @var String
+     * @see \phpseclib\Crypt\DES::cipher_name_mcrypt
+     * @see \phpseclib\Crypt\Base::cipher_name_mcrypt
+     * @var string
      * @access private
      */
-    var $iv = "\0\0\0\0\0\0\0\0";
+    var $cipher_name_mcrypt = 'tripledes';
 
     /**
-     * A "sliding" Initialization Vector
+     * Optimizing value while CFB-encrypting
      *
-     * @see Crypt_TripleDES::enableContinuousBuffer()
-     * @var String
+     * @see \phpseclib\Crypt\Base::cfb_init_len
+     * @var int
      * @access private
      */
-    var $encryptIV = "\0\0\0\0\0\0\0\0";
+    var $cfb_init_len = 750;
 
     /**
-     * A "sliding" Initialization Vector
+     * max possible size of $key
      *
-     * @see Crypt_TripleDES::enableContinuousBuffer()
-     * @var String
+     * @see self::setKey()
+     * @see \phpseclib\Crypt\DES::setKey()
+     * @var string
      * @access private
      */
-    var $decryptIV = "\0\0\0\0\0\0\0\0";
+    var $key_length_max = 24;
 
     /**
-     * The Crypt_DES objects
+     * Internal flag whether using self::MODE_3CBC or not
      *
-     * @var Array
+     * @var bool
      * @access private
      */
-    var $des;
+    var $mode_3cbc;
 
     /**
-     * mcrypt resource for encryption
+     * The \phpseclib\Crypt\DES objects
      *
-     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
-     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+     * Used only if $mode_3cbc === true
      *
-     * @see Crypt_AES::encrypt()
-     * @var String
+     * @var array
      * @access private
      */
-    var $enmcrypt;
+    var $des;
 
     /**
-     * mcrypt resource for decryption
+     * Default Constructor.
      *
-     * The mcrypt resource can be recreated every time something needs to be created or it can be created just once.
-     * Since mcrypt operates in continuous mode, by default, it'll need to be recreated when in non-continuous mode.
+     * Determines whether or not the mcrypt extension should be used.
      *
-     * @see Crypt_AES::decrypt()
-     * @var String
-     * @access private
-     */
-    var $demcrypt;
-
-    /**
-     * Does the (en|de)mcrypt resource need to be (re)initialized?
+     * $mode could be:
      *
-     * @see setKey()
-     * @see setIV()
-     * @var Boolean
-     * @access private
-     */
-    var $changed = true;
-
-    /**
-     * Default Constructor.
+     * - \phpseclib\Crypt\Base::MODE_ECB
+     *
+     * - \phpseclib\Crypt\Base::MODE_CBC
+     *
+     * - \phpseclib\Crypt\Base::MODE_CTR
+     *
+     * - \phpseclib\Crypt\Base::MODE_CFB
      *
-     * Determines whether or not the mcrypt extension should be used.  $mode should only, at present, be
-     * CRYPT_DES_MODE_ECB or CRYPT_DES_MODE_CBC.  If not explictly set, CRYPT_DES_MODE_CBC will be used.
+     * - \phpseclib\Crypt\Base::MODE_OFB
      *
-     * @param optional Integer $mode
-     * @return Crypt_TripleDES
+     * - \phpseclib\Crypt\TripleDES::MODE_3CBC
+     *
+     * If not explicitly set, \phpseclib\Crypt\Base::MODE_CBC will be used.
+     *
+     * @see \phpseclib\Crypt\DES::__construct()
+     * @see \phpseclib\Crypt\Base::__construct()
+     * @param int $mode
      * @access public
      */
-    function Crypt_TripleDES($mode = CRYPT_DES_MODE_CBC)
+    function __construct($mode = Base::MODE_CBC)
     {
-        if ( !defined('CRYPT_DES_MODE') ) {
-            switch (true) {
-                case extension_loaded('mcrypt'):
-                    // i'd check to see if des was supported, by doing in_array('des', mcrypt_list_algorithms('')),
-                    // but since that can be changed after the object has been created, there doesn't seem to be
-                    // a lot of point...
-                    define('CRYPT_DES_MODE', CRYPT_DES_MODE_MCRYPT);
-                    break;
-                default:
-                    define('CRYPT_DES_MODE', CRYPT_DES_MODE_INTERNAL);
-            }
-        }
-
-        if ( $mode == CRYPT_DES_MODE_3CBC ) {
-            $this->mode = CRYPT_DES_MODE_3CBC;
-            $this->des = array(
-                new Crypt_DES(CRYPT_DES_MODE_CBC),
-                new Crypt_DES(CRYPT_DES_MODE_CBC),
-                new Crypt_DES(CRYPT_DES_MODE_CBC)
-            );
-
-            // we're going to be doing the padding, ourselves, so disable it in the Crypt_DES objects
-            $this->des[0]->disablePadding();
-            $this->des[1]->disablePadding();
-            $this->des[2]->disablePadding();
-
-            return;
-        }
-
-        switch ( CRYPT_DES_MODE ) {
-            case CRYPT_DES_MODE_MCRYPT:
-                switch ($mode) {
-                    case CRYPT_DES_MODE_ECB:
-                        $this->mode = MCRYPT_MODE_ECB;
-                        break;
-                    case CRYPT_DES_MODE_CTR:
-                        $this->mode = 'ctr';
-                        break;
-                    case CRYPT_DES_MODE_CBC:
-                    default:
-                        $this->mode = MCRYPT_MODE_CBC;
-                }
-
-                break;
-            default:
+        switch ($mode) {
+            // In case of self::MODE_3CBC, we init as CRYPT_DES_MODE_CBC
+            // and additional flag us internally as 3CBC
+            case self::MODE_3CBC:
+                parent::__construct(Base::MODE_CBC);
+                $this->mode_3cbc = true;
+
+                // This three $des'es will do the 3CBC work (if $key > 64bits)
                 $this->des = array(
-                    new Crypt_DES(CRYPT_DES_MODE_ECB),
-                    new Crypt_DES(CRYPT_DES_MODE_ECB),
-                    new Crypt_DES(CRYPT_DES_MODE_ECB)
+                    new DES(Base::MODE_CBC),
+                    new DES(Base::MODE_CBC),
+                    new DES(Base::MODE_CBC),
                 );
- 
-                // we're going to be doing the padding, ourselves, so disable it in the Crypt_DES objects
+
+                // we're going to be doing the padding, ourselves, so disable it in the \phpseclib\Crypt\DES objects
                 $this->des[0]->disablePadding();
                 $this->des[1]->disablePadding();
                 $this->des[2]->disablePadding();
-
-                switch ($mode) {
-                    case CRYPT_DES_MODE_ECB:
-                    case CRYPT_DES_MODE_CTR:
-                    case CRYPT_DES_MODE_CBC:
-                        $this->mode = $mode;
-                        break;
-                    default:
-                        $this->mode = CRYPT_DES_MODE_CBC;
-                }
+                break;
+            // If not 3CBC, we init as usual
+            default:
+                parent::__construct($mode);
         }
     }
 
     /**
-     * Sets the key.
-     *
-     * Keys can be of any length.  Triple DES, itself, can use 128-bit (eg. strlen($key) == 16) or
-     * 192-bit (eg. strlen($key) == 24) keys.  This function pads and truncates $key as appropriate.
+     * Test for engine validity
      *
-     * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
-     *
-     * If the key is not explicitly set, it'll be assumed to be all zero's.
+     * This is mainly just a wrapper to set things up for \phpseclib\Crypt\Base::isValidEngine()
      *
+     * @see \phpseclib\Crypt\Base::__construct()
+     * @param int $engine
      * @access public
-     * @param String $key
+     * @return bool
      */
-    function setKey($key)
+    function isValidEngine($engine)
     {
-        $length = strlen($key);
-        if ($length > 8) {
-            $key = str_pad($key, 24, chr(0));
-            // if $key is between 64 and 128-bits, use the first 64-bits as the last, per this:
-            // http://php.net/function.mcrypt-encrypt#47973
-            //$key = $length <= 16 ? substr_replace($key, substr($key, 0, 8), 16) : substr($key, 0, 24);
-        }
-        $this->key = $key;
-        switch (true) {
-            case CRYPT_DES_MODE == CRYPT_DES_MODE_INTERNAL:
-            case $this->mode == CRYPT_DES_MODE_3CBC:
-                $this->des[0]->setKey(substr($key,  0, 8));
-                $this->des[1]->setKey(substr($key,  8, 8));
-                $this->des[2]->setKey(substr($key, 16, 8));
+        if ($engine == self::ENGINE_OPENSSL) {
+            $this->cipher_name_openssl_ecb = 'des-ede3';
+            $mode = $this->_openssl_translate_mode();
+            $this->cipher_name_openssl = $mode == 'ecb' ? 'des-ede3' : 'des-ede3-' . $mode;
         }
-        $this->changed = true;
+
+        return parent::isValidEngine($engine);
     }
 
     /**
      * Sets the initialization vector. (optional)
      *
-     * SetIV is not required when CRYPT_DES_MODE_ECB is being used.  If not explictly set, it'll be assumed
+     * SetIV is not required when \phpseclib\Crypt\Base::MODE_ECB is being used.  If not explicitly set, it'll be assumed
      * to be all zero's.
      *
+     * @see \phpseclib\Crypt\Base::setIV()
      * @access public
-     * @param String $iv
+     * @param string $iv
      */
     function setIV($iv)
     {
-        $this->encryptIV = $this->decryptIV = $this->iv = str_pad(substr($iv, 0, 8), 8, chr(0));
-        if ($this->mode == CRYPT_DES_MODE_3CBC) {
+        parent::setIV($iv);
+        if ($this->mode_3cbc) {
             $this->des[0]->setIV($iv);
             $this->des[1]->setIV($iv);
             $this->des[2]->setIV($iv);
         }
-        $this->changed = true;
     }
 
     /**
-     * Generate CTR XOR encryption key
+     * Sets the key length.
      *
-     * Encrypt the output of this and XOR it against the ciphertext / plaintext to get the
-     * plaintext / ciphertext in CTR mode.
+     * Valid key lengths are 64, 128 and 192
      *
-     * @see Crypt_DES::decrypt()
-     * @see Crypt_DES::encrypt()
+     * @see \phpseclib\Crypt\Base:setKeyLength()
      * @access public
-     * @param Integer $length
-     * @param String $iv
+     * @param int $length
      */
-    function _generate_xor($length, &$iv)
+    function setKeyLength($length)
     {
-        $xor = '';
-        $num_blocks = ($length + 7) >> 3;
-        for ($i = 0; $i < $num_blocks; $i++) {
-            $xor.= $iv;
-            for ($j = 4; $j <= 8; $j+=4) {
-                $temp = substr($iv, -$j, 4);
-                switch ($temp) {
-                    case "\xFF\xFF\xFF\xFF":
-                        $iv = substr_replace($iv, "\x00\x00\x00\x00", -$j, 4);
-                        break;
-                    case "\x7F\xFF\xFF\xFF":
-                        $iv = substr_replace($iv, "\x80\x00\x00\x00", -$j, 4);
-                        break 2;
-                    default:
-                        extract(unpack('Ncount', $temp));
-                        $iv = substr_replace($iv, pack('N', $count + 1), -$j, 4);
-                        break 2;
-                }
-            }
+        $length >>= 3;
+        switch (true) {
+            case $length <= 8:
+                $this->key_length = 8;
+                break;
+            case $length <= 16:
+                $this->key_length = 16;
+                break;
+            default:
+                $this->key_length = 24;
         }
 
-        return $xor;
+        parent::setKeyLength($length);
     }
 
     /**
-     * Encrypts a message.
+     * Sets the key.
+     *
+     * Keys can be of any length.  Triple DES, itself, can use 128-bit (eg. strlen($key) == 16) or
+     * 192-bit (eg. strlen($key) == 24) keys.  This function pads and truncates $key as appropriate.
+     *
+     * DES also requires that every eighth bit be a parity bit, however, we'll ignore that.
+     *
+     * If the key is not explicitly set, it'll be assumed to be all null bytes.
      *
      * @access public
-     * @param String $plaintext
+     * @see \phpseclib\Crypt\DES::setKey()
+     * @see \phpseclib\Crypt\Base::setKey()
+     * @param string $key
      */
-    function encrypt($plaintext)
+    function setKey($key)
     {
-        if ($this->mode != CRYPT_DES_MODE_CTR && $this->mode != 'ctr') {
-            $plaintext = $this->_pad($plaintext);
-        }
-
-        // if the key is smaller then 8, do what we'd normally do
-        if ($this->mode == CRYPT_DES_MODE_3CBC && strlen($this->key) > 8) {
-            $ciphertext = $this->des[2]->encrypt($this->des[1]->decrypt($this->des[0]->encrypt($plaintext)));
-
-            return $ciphertext;
+        $length = $this->explicit_key_length ? $this->key_length : strlen($key);
+        if ($length > 8) {
+            $key = str_pad(substr($key, 0, 24), 24, chr(0));
+            // if $key is between 64 and 128-bits, use the first 64-bits as the last, per this:
+            // http://php.net/function.mcrypt-encrypt#47973
+            $key = $length <= 16 ? substr_replace($key, substr($key, 0, 8), 16) : substr($key, 0, 24);
+        } else {
+            $key = str_pad($key, 8, chr(0));
         }
-
-        if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
-            if ($this->changed) {
-                if (!isset($this->enmcrypt)) {
-                    $this->enmcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, '');
-                }
-                mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
-                $this->changed = false;
-            }
-
-            $ciphertext = mcrypt_generic($this->enmcrypt, $plaintext);
-
-            if (!$this->continuousBuffer) {
-                mcrypt_generic_init($this->enmcrypt, $this->key, $this->encryptIV);
-            }
-
-            return $ciphertext;
+        parent::setKey($key);
+
+        // And in case of self::MODE_3CBC:
+        // if key <= 64bits we not need the 3 $des to work,
+        // because we will then act as regular DES-CBC with just a <= 64bit key.
+        // So only if the key > 64bits (> 8 bytes) we will call setKey() for the 3 $des.
+        if ($this->mode_3cbc && $length > 8) {
+            $this->des[0]->setKey(substr($key,  0, 8));
+            $this->des[1]->setKey(substr($key,  8, 8));
+            $this->des[2]->setKey(substr($key, 16, 8));
         }
+    }
 
-        if (strlen($this->key) <= 8) {
-            $this->des[0]->mode = $this->mode;
-
-            return $this->des[0]->encrypt($plaintext);
-        }
+    /**
+     * Encrypts a message.
+     *
+     * @see \phpseclib\Crypt\Base::encrypt()
+     * @access public
+     * @param string $plaintext
+     * @return string $cipertext
+     */
+    function encrypt($plaintext)
+    {
+        // parent::en/decrypt() is able to do all the work for all modes and keylengths,
+        // except for: self::MODE_3CBC (inner chaining CBC) with a key > 64bits
 
-        // we pad with chr(0) since that's what mcrypt_generic does.  to quote from http://php.net/function.mcrypt-generic :
-        // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
-        $plaintext = str_pad($plaintext, ceil(strlen($plaintext) / 8) * 8, chr(0));
-
-        $des = $this->des;
-
-        $ciphertext = '';
-        switch ($this->mode) {
-            case CRYPT_DES_MODE_ECB:
-                for ($i = 0; $i < strlen($plaintext); $i+=8) {
-                    $block = substr($plaintext, $i, 8);
-                    $block = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT);
-                    $block = $des[1]->_processBlock($block, CRYPT_DES_DECRYPT);
-                    $block = $des[2]->_processBlock($block, CRYPT_DES_ENCRYPT);
-                    $ciphertext.= $block;
-                }
-                break;
-            case CRYPT_DES_MODE_CBC:
-                $xor = $this->encryptIV;
-                for ($i = 0; $i < strlen($plaintext); $i+=8) {
-                    $block = substr($plaintext, $i, 8) ^ $xor;
-                    $block = $des[0]->_processBlock($block, CRYPT_DES_ENCRYPT);
-                    $block = $des[1]->_processBlock($block, CRYPT_DES_DECRYPT);
-                    $block = $des[2]->_processBlock($block, CRYPT_DES_ENCRYPT);
-                    $xor = $block;
-                    $ciphertext.= $block;
-                }
-                if ($this->continuousBuffer) {
-                    $this->encryptIV = $xor;
-                }
-                break;
-            case CRYPT_DES_MODE_CTR:
-                $xor = $this->encryptIV;
-                for ($i = 0; $i < strlen($plaintext); $i+=8) {
-                    $key = $this->_generate_xor(8, $xor);
-                    $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT);
-                    $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT);
-                    $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT);
-                    $block = substr($plaintext, $i, 8);
-                    $ciphertext.= $block ^ $key;
-                }
-                if ($this->continuousBuffer) {
-                    $this->encryptIV = $xor;
-                }
+        // if the key is smaller then 8, do what we'd normally do
+        if ($this->mode_3cbc && strlen($this->key) > 8) {
+            return $this->des[2]->encrypt(
+                $this->des[1]->decrypt(
+                    $this->des[0]->encrypt(
+                        $this->_pad($plaintext)
+                    )
+                )
+            );
         }
 
-        return $ciphertext;
+        return parent::encrypt($plaintext);
     }
 
     /**
      * Decrypts a message.
      *
+     * @see \phpseclib\Crypt\Base::decrypt()
      * @access public
-     * @param String $ciphertext
+     * @param string $ciphertext
+     * @return string $plaintext
      */
     function decrypt($ciphertext)
     {
-        if ($this->mode == CRYPT_DES_MODE_3CBC && strlen($this->key) > 8) {
-            $plaintext = $this->des[0]->decrypt($this->des[1]->encrypt($this->des[2]->decrypt($ciphertext)));
-
-            return $this->_unpad($plaintext);
-        }
-
-        // we pad with chr(0) since that's what mcrypt_generic does.  to quote from http://php.net/function.mcrypt-generic :
-        // "The data is padded with "\0" to make sure the length of the data is n * blocksize."
-        $ciphertext = str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, chr(0));
-
-        if ( CRYPT_DES_MODE == CRYPT_DES_MODE_MCRYPT ) {
-            if ($this->changed) {
-                if (!isset($this->demcrypt)) {
-                    $this->demcrypt = mcrypt_module_open(MCRYPT_3DES, '', $this->mode, '');
-                }
-                mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
-                $this->changed = false;
-            }
-
-            $plaintext = mdecrypt_generic($this->demcrypt, $ciphertext);
-
-            if (!$this->continuousBuffer) {
-                mcrypt_generic_init($this->demcrypt, $this->key, $this->decryptIV);
-            }
-
-            return $this->mode != 'ctr' ? $this->_unpad($plaintext) : $plaintext;
-        }
-
-        if (strlen($this->key) <= 8) {
-            $this->des[0]->mode = $this->mode;
-
-            return $this->_unpad($this->des[0]->decrypt($plaintext));
-        }
-
-        $des = $this->des;
-
-        $plaintext = '';
-        switch ($this->mode) {
-            case CRYPT_DES_MODE_ECB:
-                for ($i = 0; $i < strlen($ciphertext); $i+=8) {
-                    $block = substr($ciphertext, $i, 8);
-                    $block = $des[2]->_processBlock($block, CRYPT_DES_DECRYPT);
-                    $block = $des[1]->_processBlock($block, CRYPT_DES_ENCRYPT);
-                    $block = $des[0]->_processBlock($block, CRYPT_DES_DECRYPT);
-                    $plaintext.= $block;
-                }
-                break;
-            case CRYPT_DES_MODE_CBC:
-                $xor = $this->decryptIV;
-                for ($i = 0; $i < strlen($ciphertext); $i+=8) {
-                    $orig = $block = substr($ciphertext, $i, 8);
-                    $block = $des[2]->_processBlock($block, CRYPT_DES_DECRYPT);
-                    $block = $des[1]->_processBlock($block, CRYPT_DES_ENCRYPT);
-                    $block = $des[0]->_processBlock($block, CRYPT_DES_DECRYPT);
-                    $plaintext.= $block ^ $xor;
-                    $xor = $orig;
-                }
-                if ($this->continuousBuffer) {
-                    $this->decryptIV = $xor;
-                }
-                break;
-            case CRYPT_DES_MODE_CTR:
-                $xor = $this->decryptIV;
-                for ($i = 0; $i < strlen($ciphertext); $i+=8) {
-                    $key = $this->_generate_xor(8, $xor);
-                    $key = $des[0]->_processBlock($key, CRYPT_DES_ENCRYPT);
-                    $key = $des[1]->_processBlock($key, CRYPT_DES_DECRYPT);
-                    $key = $des[2]->_processBlock($key, CRYPT_DES_ENCRYPT);
-                    $block = substr($ciphertext, $i, 8);
-                    $plaintext.= $block ^ $key;
-                }
-                if ($this->continuousBuffer) {
-                    $this->decryptIV = $xor;
-                }
+        if ($this->mode_3cbc && strlen($this->key) > 8) {
+            return $this->_unpad(
+                $this->des[0]->decrypt(
+                    $this->des[1]->encrypt(
+                        $this->des[2]->decrypt(
+                            str_pad($ciphertext, (strlen($ciphertext) + 7) & 0xFFFFFFF8, "\0")
+                        )
+                    )
+                )
+            );
         }
 
-        return $this->mode != CRYPT_DES_MODE_CTR ? $this->_unpad($plaintext) : $plaintext;
+        return parent::decrypt($ciphertext);
     }
 
     /**
@@ -563,18 +365,19 @@ class Crypt_TripleDES {
      * outputs.  The reason is due to the fact that the initialization vector's change after every encryption /
      * decryption round when the continuous buffer is enabled.  When it's disabled, they remain constant.
      *
-     * Put another way, when the continuous buffer is enabled, the state of the Crypt_DES() object changes after each
+     * Put another way, when the continuous buffer is enabled, the state of the \phpseclib\Crypt\DES() object changes after each
      * encryption / decryption round, whereas otherwise, it'd remain constant.  For this reason, it's recommended that
      * continuous buffers not be used.  They do offer better security and are, in fact, sometimes required (SSH uses them),
      * however, they are also less intuitive and more likely to cause you problems.
      *
-     * @see Crypt_TripleDES::disableContinuousBuffer()
+     * @see \phpseclib\Crypt\Base::enableContinuousBuffer()
+     * @see self::disableContinuousBuffer()
      * @access public
      */
     function enableContinuousBuffer()
     {
-        $this->continuousBuffer = true;
-        if ($this->mode == CRYPT_DES_MODE_3CBC) {
+        parent::enableContinuousBuffer();
+        if ($this->mode_3cbc) {
             $this->des[0]->enableContinuousBuffer();
             $this->des[1]->enableContinuousBuffer();
             $this->des[2]->enableContinuousBuffer();
@@ -586,16 +389,14 @@ class Crypt_TripleDES {
      *
      * The default behavior.
      *
-     * @see Crypt_TripleDES::enableContinuousBuffer()
+     * @see \phpseclib\Crypt\Base::disableContinuousBuffer()
+     * @see self::enableContinuousBuffer()
      * @access public
      */
     function disableContinuousBuffer()
     {
-        $this->continuousBuffer = false;
-        $this->encryptIV = $this->iv;
-        $this->decryptIV = $this->iv;
-
-        if ($this->mode == CRYPT_DES_MODE_3CBC) {
+        parent::disableContinuousBuffer();
+        if ($this->mode_3cbc) {
             $this->des[0]->disableContinuousBuffer();
             $this->des[1]->disableContinuousBuffer();
             $this->des[2]->disableContinuousBuffer();
@@ -603,88 +404,57 @@ class Crypt_TripleDES {
     }
 
     /**
-     * Pad "packets".
-     *
-     * DES works by encrypting eight bytes at a time.  If you ever need to encrypt or decrypt something that's not
-     * a multiple of eight, it becomes necessary to pad the input so that it's length is a multiple of eight.
+     * Creates the key schedule
      *
-     * Padding is enabled by default.  Sometimes, however, it is undesirable to pad strings.  Such is the case in SSH1,
-     * where "packets" are padded with random bytes before being encrypted.  Unpad these packets and you risk stripping
-     * away characters that shouldn't be stripped away. (SSH knows how many bytes are added because the length is
-     * transmitted separately)
-     *
-     * @see Crypt_TripleDES::disablePadding()
-     * @access public
+     * @see \phpseclib\Crypt\DES::_setupKey()
+     * @see \phpseclib\Crypt\Base::_setupKey()
+     * @access private
      */
-    function enablePadding()
+    function _setupKey()
     {
-        $this->padding = true;
-    }
+        switch (true) {
+            // if $key <= 64bits we configure our internal pure-php cipher engine
+            // to act as regular [1]DES, not as 3DES. mcrypt.so::tripledes does the same.
+            case strlen($this->key) <= 8:
+                $this->des_rounds = 1;
+                break;
 
-    /**
-     * Do not pad packets.
-     *
-     * @see Crypt_TripleDES::enablePadding()
-     * @access public
-     */
-    function disablePadding()
-    {
-        $this->padding = false;
-    }
+            // otherwise, if $key > 64bits, we configure our engine to work as 3DES.
+            default:
+                $this->des_rounds = 3;
 
-    /**
-     * Pads a string
-     *
-     * Pads a string using the RSA PKCS padding standards so that its length is a multiple of the blocksize (8).
-     * 8 - (strlen($text) & 7) bytes are added, each of which is equal to chr(8 - (strlen($text) & 7)
-     *
-     * If padding is disabled and $text is not a multiple of the blocksize, the string will be padded regardless
-     * and padding will, hence forth, be enabled.
-     *
-     * @see Crypt_TripleDES::_unpad()
-     * @access private
-     */
-    function _pad($text)
-    {
-        $length = strlen($text);
-
-        if (!$this->padding) {
-            if (($length & 7) == 0) {
-                return $text;
-            } else {
-                user_error("The plaintext's length ($length) is not a multiple of the block size (8)", E_USER_NOTICE);
-                $this->padding = true;
-            }
-        }
+                // (only) if 3CBC is used we have, of course, to setup the $des[0-2] keys also separately.
+                if ($this->mode_3cbc) {
+                    $this->des[0]->_setupKey();
+                    $this->des[1]->_setupKey();
+                    $this->des[2]->_setupKey();
 
-        $pad = 8 - ($length & 7);
-        return str_pad($text, $length + $pad, chr($pad));
+                    // because $des[0-2] will, now, do all the work we can return here
+                    // not need unnecessary stress parent::_setupKey() with our, now unused, $key.
+                    return;
+                }
+        }
+        // setup our key
+        parent::_setupKey();
     }
 
     /**
-     * Unpads a string
+     * Sets the internal crypt engine
      *
-     * If padding is enabled and the reported padding length is invalid the encryption key will be assumed to be wrong
-     * and false will be returned.
-     *
-     * @see Crypt_TripleDES::_pad()
-     * @access private
+     * @see \phpseclib\Crypt\Base::__construct()
+     * @see \phpseclib\Crypt\Base::setPreferredEngine()
+     * @param int $engine
+     * @access public
+     * @return int
      */
-    function _unpad($text)
+    function setPreferredEngine($engine)
     {
-        if (!$this->padding) {
-            return $text;
+        if ($this->mode_3cbc) {
+            $this->des[0]->setPreferredEngine($engine);
+            $this->des[1]->setPreferredEngine($engine);
+            $this->des[2]->setPreferredEngine($engine);
         }
 
-        $length = ord($text[strlen($text) - 1]);
-
-        if (!$length || $length > 8) {
-            return false;
-        }
-
-        return substr($text, 0, -$length);
+        return parent::setPreferredEngine($engine);
     }
 }
-
-// vim: ts=4:sw=4:et:
-// vim6: fdl=1:
diff --git a/lib/phpseclib/Crypt/Twofish.php b/lib/phpseclib/Crypt/Twofish.php
new file mode 100644
index 0000000..70980a2
--- /dev/null
+++ b/lib/phpseclib/Crypt/Twofish.php
@@ -0,0 +1,816 @@
+<?php
+
+/**
+ * Pure-PHP implementation of Twofish.
+ *
+ * Uses mcrypt, if available, and an internal implementation, otherwise.
+ *
+ * PHP version 5
+ *
+ * Useful resources are as follows:
+ *
+ *  - {@link http://en.wikipedia.org/wiki/Twofish Wikipedia description of Twofish}
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include 'vendor/autoload.php';
+ *
+ *    $twofish = new \phpseclib\Crypt\Twofish();
+ *
+ *    $twofish->setKey('12345678901234567890123456789012');
+ *
+ *    $plaintext = str_repeat('a', 1024);
+ *
+ *    echo $twofish->decrypt($twofish->encrypt($plaintext));
+ * ?>
+ * </code>
+ *
+ * @category  Crypt
+ * @package   Twofish
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @author    Hans-Juergen Petrich <petrich@tronic-media.com>
+ * @copyright 2007 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
+ */
+
+namespace phpseclib\Crypt;
+
+/**
+ * Pure-PHP implementation of Twofish.
+ *
+ * @package Twofish
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @author  Hans-Juergen Petrich <petrich@tronic-media.com>
+ * @access  public
+ */
+class Twofish extends Base
+{
+    /**
+     * The mcrypt specific name of the cipher
+     *
+     * @see \phpseclib\Crypt\Base::cipher_name_mcrypt
+     * @var string
+     * @access private
+     */
+    var $cipher_name_mcrypt = 'twofish';
+
+    /**
+     * Optimizing value while CFB-encrypting
+     *
+     * @see \phpseclib\Crypt\Base::cfb_init_len
+     * @var int
+     * @access private
+     */
+    var $cfb_init_len = 800;
+
+    /**
+     * Q-Table
+     *
+     * @var array
+     * @access private
+     */
+    var $q0 = array(
+        0xA9, 0x67, 0xB3, 0xE8, 0x04, 0xFD, 0xA3, 0x76,
+        0x9A, 0x92, 0x80, 0x78, 0xE4, 0xDD, 0xD1, 0x38,
+        0x0D, 0xC6, 0x35, 0x98, 0x18, 0xF7, 0xEC, 0x6C,
+        0x43, 0x75, 0x37, 0x26, 0xFA, 0x13, 0x94, 0x48,
+        0xF2, 0xD0, 0x8B, 0x30, 0x84, 0x54, 0xDF, 0x23,
+        0x19, 0x5B, 0x3D, 0x59, 0xF3, 0xAE, 0xA2, 0x82,
+        0x63, 0x01, 0x83, 0x2E, 0xD9, 0x51, 0x9B, 0x7C,
+        0xA6, 0xEB, 0xA5, 0xBE, 0x16, 0x0C, 0xE3, 0x61,
+        0xC0, 0x8C, 0x3A, 0xF5, 0x73, 0x2C, 0x25, 0x0B,
+        0xBB, 0x4E, 0x89, 0x6B, 0x53, 0x6A, 0xB4, 0xF1,
+        0xE1, 0xE6, 0xBD, 0x45, 0xE2, 0xF4, 0xB6, 0x66,
+        0xCC, 0x95, 0x03, 0x56, 0xD4, 0x1C, 0x1E, 0xD7,
+        0xFB, 0xC3, 0x8E, 0xB5, 0xE9, 0xCF, 0xBF, 0xBA,
+        0xEA, 0x77, 0x39, 0xAF, 0x33, 0xC9, 0x62, 0x71,
+        0x81, 0x79, 0x09, 0xAD, 0x24, 0xCD, 0xF9, 0xD8,
+        0xE5, 0xC5, 0xB9, 0x4D, 0x44, 0x08, 0x86, 0xE7,
+        0xA1, 0x1D, 0xAA, 0xED, 0x06, 0x70, 0xB2, 0xD2,
+        0x41, 0x7B, 0xA0, 0x11, 0x31, 0xC2, 0x27, 0x90,
+        0x20, 0xF6, 0x60, 0xFF, 0x96, 0x5C, 0xB1, 0xAB,
+        0x9E, 0x9C, 0x52, 0x1B, 0x5F, 0x93, 0x0A, 0xEF,
+        0x91, 0x85, 0x49, 0xEE, 0x2D, 0x4F, 0x8F, 0x3B,
+        0x47, 0x87, 0x6D, 0x46, 0xD6, 0x3E, 0x69, 0x64,
+        0x2A, 0xCE, 0xCB, 0x2F, 0xFC, 0x97, 0x05, 0x7A,
+        0xAC, 0x7F, 0xD5, 0x1A, 0x4B, 0x0E, 0xA7, 0x5A,
+        0x28, 0x14, 0x3F, 0x29, 0x88, 0x3C, 0x4C, 0x02,
+        0xB8, 0xDA, 0xB0, 0x17, 0x55, 0x1F, 0x8A, 0x7D,
+        0x57, 0xC7, 0x8D, 0x74, 0xB7, 0xC4, 0x9F, 0x72,
+        0x7E, 0x15, 0x22, 0x12, 0x58, 0x07, 0x99, 0x34,
+        0x6E, 0x50, 0xDE, 0x68, 0x65, 0xBC, 0xDB, 0xF8,
+        0xC8, 0xA8, 0x2B, 0x40, 0xDC, 0xFE, 0x32, 0xA4,
+        0xCA, 0x10, 0x21, 0xF0, 0xD3, 0x5D, 0x0F, 0x00,
+        0x6F, 0x9D, 0x36, 0x42, 0x4A, 0x5E, 0xC1, 0xE0
+    );
+
+    /**
+     * Q-Table
+     *
+     * @var array
+     * @access private
+     */
+    var $q1 = array(
+        0x75, 0xF3, 0xC6, 0xF4, 0xDB, 0x7B, 0xFB, 0xC8,
+        0x4A, 0xD3, 0xE6, 0x6B, 0x45, 0x7D, 0xE8, 0x4B,
+        0xD6, 0x32, 0xD8, 0xFD, 0x37, 0x71, 0xF1, 0xE1,
+        0x30, 0x0F, 0xF8, 0x1B, 0x87, 0xFA, 0x06, 0x3F,
+        0x5E, 0xBA, 0xAE, 0x5B, 0x8A, 0x00, 0xBC, 0x9D,
+        0x6D, 0xC1, 0xB1, 0x0E, 0x80, 0x5D, 0xD2, 0xD5,
+        0xA0, 0x84, 0x07, 0x14, 0xB5, 0x90, 0x2C, 0xA3,
+        0xB2, 0x73, 0x4C, 0x54, 0x92, 0x74, 0x36, 0x51,
+        0x38, 0xB0, 0xBD, 0x5A, 0xFC, 0x60, 0x62, 0x96,
+        0x6C, 0x42, 0xF7, 0x10, 0x7C, 0x28, 0x27, 0x8C,
+        0x13, 0x95, 0x9C, 0xC7, 0x24, 0x46, 0x3B, 0x70,
+        0xCA, 0xE3, 0x85, 0xCB, 0x11, 0xD0, 0x93, 0xB8,
+        0xA6, 0x83, 0x20, 0xFF, 0x9F, 0x77, 0xC3, 0xCC,
+        0x03, 0x6F, 0x08, 0xBF, 0x40, 0xE7, 0x2B, 0xE2,
+        0x79, 0x0C, 0xAA, 0x82, 0x41, 0x3A, 0xEA, 0xB9,
+        0xE4, 0x9A, 0xA4, 0x97, 0x7E, 0xDA, 0x7A, 0x17,
+        0x66, 0x94, 0xA1, 0x1D, 0x3D, 0xF0, 0xDE, 0xB3,
+        0x0B, 0x72, 0xA7, 0x1C, 0xEF, 0xD1, 0x53, 0x3E,
+        0x8F, 0x33, 0x26, 0x5F, 0xEC, 0x76, 0x2A, 0x49,
+        0x81, 0x88, 0xEE, 0x21, 0xC4, 0x1A, 0xEB, 0xD9,
+        0xC5, 0x39, 0x99, 0xCD, 0xAD, 0x31, 0x8B, 0x01,
+        0x18, 0x23, 0xDD, 0x1F, 0x4E, 0x2D, 0xF9, 0x48,
+        0x4F, 0xF2, 0x65, 0x8E, 0x78, 0x5C, 0x58, 0x19,
+        0x8D, 0xE5, 0x98, 0x57, 0x67, 0x7F, 0x05, 0x64,
+        0xAF, 0x63, 0xB6, 0xFE, 0xF5, 0xB7, 0x3C, 0xA5,
+        0xCE, 0xE9, 0x68, 0x44, 0xE0, 0x4D, 0x43, 0x69,
+        0x29, 0x2E, 0xAC, 0x15, 0x59, 0xA8, 0x0A, 0x9E,
+        0x6E, 0x47, 0xDF, 0x34, 0x35, 0x6A, 0xCF, 0xDC,
+        0x22, 0xC9, 0xC0, 0x9B, 0x89, 0xD4, 0xED, 0xAB,
+        0x12, 0xA2, 0x0D, 0x52, 0xBB, 0x02, 0x2F, 0xA9,
+        0xD7, 0x61, 0x1E, 0xB4, 0x50, 0x04, 0xF6, 0xC2,
+        0x16, 0x25, 0x86, 0x56, 0x55, 0x09, 0xBE, 0x91
+    );
+
+    /**
+     * M-Table
+     *
+     * @var array
+     * @access private
+     */
+    var $m0 = array(
+        0xBCBC3275, 0xECEC21F3, 0x202043C6, 0xB3B3C9F4, 0xDADA03DB, 0x02028B7B, 0xE2E22BFB, 0x9E9EFAC8,
+        0xC9C9EC4A, 0xD4D409D3, 0x18186BE6, 0x1E1E9F6B, 0x98980E45, 0xB2B2387D, 0xA6A6D2E8, 0x2626B74B,
+        0x3C3C57D6, 0x93938A32, 0x8282EED8, 0x525298FD, 0x7B7BD437, 0xBBBB3771, 0x5B5B97F1, 0x474783E1,
+        0x24243C30, 0x5151E20F, 0xBABAC6F8, 0x4A4AF31B, 0xBFBF4887, 0x0D0D70FA, 0xB0B0B306, 0x7575DE3F,
+        0xD2D2FD5E, 0x7D7D20BA, 0x666631AE, 0x3A3AA35B, 0x59591C8A, 0x00000000, 0xCDCD93BC, 0x1A1AE09D,
+        0xAEAE2C6D, 0x7F7FABC1, 0x2B2BC7B1, 0xBEBEB90E, 0xE0E0A080, 0x8A8A105D, 0x3B3B52D2, 0x6464BAD5,
+        0xD8D888A0, 0xE7E7A584, 0x5F5FE807, 0x1B1B1114, 0x2C2CC2B5, 0xFCFCB490, 0x3131272C, 0x808065A3,
+        0x73732AB2, 0x0C0C8173, 0x79795F4C, 0x6B6B4154, 0x4B4B0292, 0x53536974, 0x94948F36, 0x83831F51,
+        0x2A2A3638, 0xC4C49CB0, 0x2222C8BD, 0xD5D5F85A, 0xBDBDC3FC, 0x48487860, 0xFFFFCE62, 0x4C4C0796,
+        0x4141776C, 0xC7C7E642, 0xEBEB24F7, 0x1C1C1410, 0x5D5D637C, 0x36362228, 0x6767C027, 0xE9E9AF8C,
+        0x4444F913, 0x1414EA95, 0xF5F5BB9C, 0xCFCF18C7, 0x3F3F2D24, 0xC0C0E346, 0x7272DB3B, 0x54546C70,
+        0x29294CCA, 0xF0F035E3, 0x0808FE85, 0xC6C617CB, 0xF3F34F11, 0x8C8CE4D0, 0xA4A45993, 0xCACA96B8,
+        0x68683BA6, 0xB8B84D83, 0x38382820, 0xE5E52EFF, 0xADAD569F, 0x0B0B8477, 0xC8C81DC3, 0x9999FFCC,
+        0x5858ED03, 0x19199A6F, 0x0E0E0A08, 0x95957EBF, 0x70705040, 0xF7F730E7, 0x6E6ECF2B, 0x1F1F6EE2,
+        0xB5B53D79, 0x09090F0C, 0x616134AA, 0x57571682, 0x9F9F0B41, 0x9D9D803A, 0x111164EA, 0x2525CDB9,
+        0xAFAFDDE4, 0x4545089A, 0xDFDF8DA4, 0xA3A35C97, 0xEAEAD57E, 0x353558DA, 0xEDEDD07A, 0x4343FC17,
+        0xF8F8CB66, 0xFBFBB194, 0x3737D3A1, 0xFAFA401D, 0xC2C2683D, 0xB4B4CCF0, 0x32325DDE, 0x9C9C71B3,
+        0x5656E70B, 0xE3E3DA72, 0x878760A7, 0x15151B1C, 0xF9F93AEF, 0x6363BFD1, 0x3434A953, 0x9A9A853E,
+        0xB1B1428F, 0x7C7CD133, 0x88889B26, 0x3D3DA65F, 0xA1A1D7EC, 0xE4E4DF76, 0x8181942A, 0x91910149,
+        0x0F0FFB81, 0xEEEEAA88, 0x161661EE, 0xD7D77321, 0x9797F5C4, 0xA5A5A81A, 0xFEFE3FEB, 0x6D6DB5D9,
+        0x7878AEC5, 0xC5C56D39, 0x1D1DE599, 0x7676A4CD, 0x3E3EDCAD, 0xCBCB6731, 0xB6B6478B, 0xEFEF5B01,
+        0x12121E18, 0x6060C523, 0x6A6AB0DD, 0x4D4DF61F, 0xCECEE94E, 0xDEDE7C2D, 0x55559DF9, 0x7E7E5A48,
+        0x2121B24F, 0x03037AF2, 0xA0A02665, 0x5E5E198E, 0x5A5A6678, 0x65654B5C, 0x62624E58, 0xFDFD4519,
+        0x0606F48D, 0x404086E5, 0xF2F2BE98, 0x3333AC57, 0x17179067, 0x05058E7F, 0xE8E85E05, 0x4F4F7D64,
+        0x89896AAF, 0x10109563, 0x74742FB6, 0x0A0A75FE, 0x5C5C92F5, 0x9B9B74B7, 0x2D2D333C, 0x3030D6A5,
+        0x2E2E49CE, 0x494989E9, 0x46467268, 0x77775544, 0xA8A8D8E0, 0x9696044D, 0x2828BD43, 0xA9A92969,
+        0xD9D97929, 0x8686912E, 0xD1D187AC, 0xF4F44A15, 0x8D8D1559, 0xD6D682A8, 0xB9B9BC0A, 0x42420D9E,
+        0xF6F6C16E, 0x2F2FB847, 0xDDDD06DF, 0x23233934, 0xCCCC6235, 0xF1F1C46A, 0xC1C112CF, 0x8585EBDC,
+        0x8F8F9E22, 0x7171A1C9, 0x9090F0C0, 0xAAAA539B, 0x0101F189, 0x8B8BE1D4, 0x4E4E8CED, 0x8E8E6FAB,
+        0xABABA212, 0x6F6F3EA2, 0xE6E6540D, 0xDBDBF252, 0x92927BBB, 0xB7B7B602, 0x6969CA2F, 0x3939D9A9,
+        0xD3D30CD7, 0xA7A72361, 0xA2A2AD1E, 0xC3C399B4, 0x6C6C4450, 0x07070504, 0x04047FF6, 0x272746C2,
+        0xACACA716, 0xD0D07625, 0x50501386, 0xDCDCF756, 0x84841A55, 0xE1E15109, 0x7A7A25BE, 0x1313EF91
+    );
+
+    /**
+     * M-Table
+     *
+     * @var array
+     * @access private
+     */
+    var $m1 = array(
+        0xA9D93939, 0x67901717, 0xB3719C9C, 0xE8D2A6A6, 0x04050707, 0xFD985252, 0xA3658080, 0x76DFE4E4,
+        0x9A084545, 0x92024B4B, 0x80A0E0E0, 0x78665A5A, 0xE4DDAFAF, 0xDDB06A6A, 0xD1BF6363, 0x38362A2A,
+        0x0D54E6E6, 0xC6432020, 0x3562CCCC, 0x98BEF2F2, 0x181E1212, 0xF724EBEB, 0xECD7A1A1, 0x6C774141,
+        0x43BD2828, 0x7532BCBC, 0x37D47B7B, 0x269B8888, 0xFA700D0D, 0x13F94444, 0x94B1FBFB, 0x485A7E7E,
+        0xF27A0303, 0xD0E48C8C, 0x8B47B6B6, 0x303C2424, 0x84A5E7E7, 0x54416B6B, 0xDF06DDDD, 0x23C56060,
+        0x1945FDFD, 0x5BA33A3A, 0x3D68C2C2, 0x59158D8D, 0xF321ECEC, 0xAE316666, 0xA23E6F6F, 0x82165757,
+        0x63951010, 0x015BEFEF, 0x834DB8B8, 0x2E918686, 0xD9B56D6D, 0x511F8383, 0x9B53AAAA, 0x7C635D5D,
+        0xA63B6868, 0xEB3FFEFE, 0xA5D63030, 0xBE257A7A, 0x16A7ACAC, 0x0C0F0909, 0xE335F0F0, 0x6123A7A7,
+        0xC0F09090, 0x8CAFE9E9, 0x3A809D9D, 0xF5925C5C, 0x73810C0C, 0x2C273131, 0x2576D0D0, 0x0BE75656,
+        0xBB7B9292, 0x4EE9CECE, 0x89F10101, 0x6B9F1E1E, 0x53A93434, 0x6AC4F1F1, 0xB499C3C3, 0xF1975B5B,
+        0xE1834747, 0xE66B1818, 0xBDC82222, 0x450E9898, 0xE26E1F1F, 0xF4C9B3B3, 0xB62F7474, 0x66CBF8F8,
+        0xCCFF9999, 0x95EA1414, 0x03ED5858, 0x56F7DCDC, 0xD4E18B8B, 0x1C1B1515, 0x1EADA2A2, 0xD70CD3D3,
+        0xFB2BE2E2, 0xC31DC8C8, 0x8E195E5E, 0xB5C22C2C, 0xE9894949, 0xCF12C1C1, 0xBF7E9595, 0xBA207D7D,
+        0xEA641111, 0x77840B0B, 0x396DC5C5, 0xAF6A8989, 0x33D17C7C, 0xC9A17171, 0x62CEFFFF, 0x7137BBBB,
+        0x81FB0F0F, 0x793DB5B5, 0x0951E1E1, 0xADDC3E3E, 0x242D3F3F, 0xCDA47676, 0xF99D5555, 0xD8EE8282,
+        0xE5864040, 0xC5AE7878, 0xB9CD2525, 0x4D049696, 0x44557777, 0x080A0E0E, 0x86135050, 0xE730F7F7,
+        0xA1D33737, 0x1D40FAFA, 0xAA346161, 0xED8C4E4E, 0x06B3B0B0, 0x706C5454, 0xB22A7373, 0xD2523B3B,
+        0x410B9F9F, 0x7B8B0202, 0xA088D8D8, 0x114FF3F3, 0x3167CBCB, 0xC2462727, 0x27C06767, 0x90B4FCFC,
+        0x20283838, 0xF67F0404, 0x60784848, 0xFF2EE5E5, 0x96074C4C, 0x5C4B6565, 0xB1C72B2B, 0xAB6F8E8E,
+        0x9E0D4242, 0x9CBBF5F5, 0x52F2DBDB, 0x1BF34A4A, 0x5FA63D3D, 0x9359A4A4, 0x0ABCB9B9, 0xEF3AF9F9,
+        0x91EF1313, 0x85FE0808, 0x49019191, 0xEE611616, 0x2D7CDEDE, 0x4FB22121, 0x8F42B1B1, 0x3BDB7272,
+        0x47B82F2F, 0x8748BFBF, 0x6D2CAEAE, 0x46E3C0C0, 0xD6573C3C, 0x3E859A9A, 0x6929A9A9, 0x647D4F4F,
+        0x2A948181, 0xCE492E2E, 0xCB17C6C6, 0x2FCA6969, 0xFCC3BDBD, 0x975CA3A3, 0x055EE8E8, 0x7AD0EDED,
+        0xAC87D1D1, 0x7F8E0505, 0xD5BA6464, 0x1AA8A5A5, 0x4BB72626, 0x0EB9BEBE, 0xA7608787, 0x5AF8D5D5,
+        0x28223636, 0x14111B1B, 0x3FDE7575, 0x2979D9D9, 0x88AAEEEE, 0x3C332D2D, 0x4C5F7979, 0x02B6B7B7,
+        0xB896CACA, 0xDA583535, 0xB09CC4C4, 0x17FC4343, 0x551A8484, 0x1FF64D4D, 0x8A1C5959, 0x7D38B2B2,
+        0x57AC3333, 0xC718CFCF, 0x8DF40606, 0x74695353, 0xB7749B9B, 0xC4F59797, 0x9F56ADAD, 0x72DAE3E3,
+        0x7ED5EAEA, 0x154AF4F4, 0x229E8F8F, 0x12A2ABAB, 0x584E6262, 0x07E85F5F, 0x99E51D1D, 0x34392323,
+        0x6EC1F6F6, 0x50446C6C, 0xDE5D3232, 0x68724646, 0x6526A0A0, 0xBC93CDCD, 0xDB03DADA, 0xF8C6BABA,
+        0xC8FA9E9E, 0xA882D6D6, 0x2BCF6E6E, 0x40507070, 0xDCEB8585, 0xFE750A0A, 0x328A9393, 0xA48DDFDF,
+        0xCA4C2929, 0x10141C1C, 0x2173D7D7, 0xF0CCB4B4, 0xD309D4D4, 0x5D108A8A, 0x0FE25151, 0x00000000,
+        0x6F9A1919, 0x9DE01A1A, 0x368F9494, 0x42E6C7C7, 0x4AECC9C9, 0x5EFDD2D2, 0xC1AB7F7F, 0xE0D8A8A8
+    );
+
+    /**
+     * M-Table
+     *
+     * @var array
+     * @access private
+     */
+    var $m2 = array(
+        0xBC75BC32, 0xECF3EC21, 0x20C62043, 0xB3F4B3C9, 0xDADBDA03, 0x027B028B, 0xE2FBE22B, 0x9EC89EFA,
+        0xC94AC9EC, 0xD4D3D409, 0x18E6186B, 0x1E6B1E9F, 0x9845980E, 0xB27DB238, 0xA6E8A6D2, 0x264B26B7,
+        0x3CD63C57, 0x9332938A, 0x82D882EE, 0x52FD5298, 0x7B377BD4, 0xBB71BB37, 0x5BF15B97, 0x47E14783,
+        0x2430243C, 0x510F51E2, 0xBAF8BAC6, 0x4A1B4AF3, 0xBF87BF48, 0x0DFA0D70, 0xB006B0B3, 0x753F75DE,
+        0xD25ED2FD, 0x7DBA7D20, 0x66AE6631, 0x3A5B3AA3, 0x598A591C, 0x00000000, 0xCDBCCD93, 0x1A9D1AE0,
+        0xAE6DAE2C, 0x7FC17FAB, 0x2BB12BC7, 0xBE0EBEB9, 0xE080E0A0, 0x8A5D8A10, 0x3BD23B52, 0x64D564BA,
+        0xD8A0D888, 0xE784E7A5, 0x5F075FE8, 0x1B141B11, 0x2CB52CC2, 0xFC90FCB4, 0x312C3127, 0x80A38065,
+        0x73B2732A, 0x0C730C81, 0x794C795F, 0x6B546B41, 0x4B924B02, 0x53745369, 0x9436948F, 0x8351831F,
+        0x2A382A36, 0xC4B0C49C, 0x22BD22C8, 0xD55AD5F8, 0xBDFCBDC3, 0x48604878, 0xFF62FFCE, 0x4C964C07,
+        0x416C4177, 0xC742C7E6, 0xEBF7EB24, 0x1C101C14, 0x5D7C5D63, 0x36283622, 0x672767C0, 0xE98CE9AF,
+        0x441344F9, 0x149514EA, 0xF59CF5BB, 0xCFC7CF18, 0x3F243F2D, 0xC046C0E3, 0x723B72DB, 0x5470546C,
+        0x29CA294C, 0xF0E3F035, 0x088508FE, 0xC6CBC617, 0xF311F34F, 0x8CD08CE4, 0xA493A459, 0xCAB8CA96,
+        0x68A6683B, 0xB883B84D, 0x38203828, 0xE5FFE52E, 0xAD9FAD56, 0x0B770B84, 0xC8C3C81D, 0x99CC99FF,
+        0x580358ED, 0x196F199A, 0x0E080E0A, 0x95BF957E, 0x70407050, 0xF7E7F730, 0x6E2B6ECF, 0x1FE21F6E,
+        0xB579B53D, 0x090C090F, 0x61AA6134, 0x57825716, 0x9F419F0B, 0x9D3A9D80, 0x11EA1164, 0x25B925CD,
+        0xAFE4AFDD, 0x459A4508, 0xDFA4DF8D, 0xA397A35C, 0xEA7EEAD5, 0x35DA3558, 0xED7AEDD0, 0x431743FC,
+        0xF866F8CB, 0xFB94FBB1, 0x37A137D3, 0xFA1DFA40, 0xC23DC268, 0xB4F0B4CC, 0x32DE325D, 0x9CB39C71,
+        0x560B56E7, 0xE372E3DA, 0x87A78760, 0x151C151B, 0xF9EFF93A, 0x63D163BF, 0x345334A9, 0x9A3E9A85,
+        0xB18FB142, 0x7C337CD1, 0x8826889B, 0x3D5F3DA6, 0xA1ECA1D7, 0xE476E4DF, 0x812A8194, 0x91499101,
+        0x0F810FFB, 0xEE88EEAA, 0x16EE1661, 0xD721D773, 0x97C497F5, 0xA51AA5A8, 0xFEEBFE3F, 0x6DD96DB5,
+        0x78C578AE, 0xC539C56D, 0x1D991DE5, 0x76CD76A4, 0x3EAD3EDC, 0xCB31CB67, 0xB68BB647, 0xEF01EF5B,
+        0x1218121E, 0x602360C5, 0x6ADD6AB0, 0x4D1F4DF6, 0xCE4ECEE9, 0xDE2DDE7C, 0x55F9559D, 0x7E487E5A,
+        0x214F21B2, 0x03F2037A, 0xA065A026, 0x5E8E5E19, 0x5A785A66, 0x655C654B, 0x6258624E, 0xFD19FD45,
+        0x068D06F4, 0x40E54086, 0xF298F2BE, 0x335733AC, 0x17671790, 0x057F058E, 0xE805E85E, 0x4F644F7D,
+        0x89AF896A, 0x10631095, 0x74B6742F, 0x0AFE0A75, 0x5CF55C92, 0x9BB79B74, 0x2D3C2D33, 0x30A530D6,
+        0x2ECE2E49, 0x49E94989, 0x46684672, 0x77447755, 0xA8E0A8D8, 0x964D9604, 0x284328BD, 0xA969A929,
+        0xD929D979, 0x862E8691, 0xD1ACD187, 0xF415F44A, 0x8D598D15, 0xD6A8D682, 0xB90AB9BC, 0x429E420D,
+        0xF66EF6C1, 0x2F472FB8, 0xDDDFDD06, 0x23342339, 0xCC35CC62, 0xF16AF1C4, 0xC1CFC112, 0x85DC85EB,
+        0x8F228F9E, 0x71C971A1, 0x90C090F0, 0xAA9BAA53, 0x018901F1, 0x8BD48BE1, 0x4EED4E8C, 0x8EAB8E6F,
+        0xAB12ABA2, 0x6FA26F3E, 0xE60DE654, 0xDB52DBF2, 0x92BB927B, 0xB702B7B6, 0x692F69CA, 0x39A939D9,
+        0xD3D7D30C, 0xA761A723, 0xA21EA2AD, 0xC3B4C399, 0x6C506C44, 0x07040705, 0x04F6047F, 0x27C22746,
+        0xAC16ACA7, 0xD025D076, 0x50865013, 0xDC56DCF7, 0x8455841A, 0xE109E151, 0x7ABE7A25, 0x139113EF
+    );
+
+    /**
+     * M-Table
+     *
+     * @var array
+     * @access private
+     */
+    var $m3 = array(
+        0xD939A9D9, 0x90176790, 0x719CB371, 0xD2A6E8D2, 0x05070405, 0x9852FD98, 0x6580A365, 0xDFE476DF,
+        0x08459A08, 0x024B9202, 0xA0E080A0, 0x665A7866, 0xDDAFE4DD, 0xB06ADDB0, 0xBF63D1BF, 0x362A3836,
+        0x54E60D54, 0x4320C643, 0x62CC3562, 0xBEF298BE, 0x1E12181E, 0x24EBF724, 0xD7A1ECD7, 0x77416C77,
+        0xBD2843BD, 0x32BC7532, 0xD47B37D4, 0x9B88269B, 0x700DFA70, 0xF94413F9, 0xB1FB94B1, 0x5A7E485A,
+        0x7A03F27A, 0xE48CD0E4, 0x47B68B47, 0x3C24303C, 0xA5E784A5, 0x416B5441, 0x06DDDF06, 0xC56023C5,
+        0x45FD1945, 0xA33A5BA3, 0x68C23D68, 0x158D5915, 0x21ECF321, 0x3166AE31, 0x3E6FA23E, 0x16578216,
+        0x95106395, 0x5BEF015B, 0x4DB8834D, 0x91862E91, 0xB56DD9B5, 0x1F83511F, 0x53AA9B53, 0x635D7C63,
+        0x3B68A63B, 0x3FFEEB3F, 0xD630A5D6, 0x257ABE25, 0xA7AC16A7, 0x0F090C0F, 0x35F0E335, 0x23A76123,
+        0xF090C0F0, 0xAFE98CAF, 0x809D3A80, 0x925CF592, 0x810C7381, 0x27312C27, 0x76D02576, 0xE7560BE7,
+        0x7B92BB7B, 0xE9CE4EE9, 0xF10189F1, 0x9F1E6B9F, 0xA93453A9, 0xC4F16AC4, 0x99C3B499, 0x975BF197,
+        0x8347E183, 0x6B18E66B, 0xC822BDC8, 0x0E98450E, 0x6E1FE26E, 0xC9B3F4C9, 0x2F74B62F, 0xCBF866CB,
+        0xFF99CCFF, 0xEA1495EA, 0xED5803ED, 0xF7DC56F7, 0xE18BD4E1, 0x1B151C1B, 0xADA21EAD, 0x0CD3D70C,
+        0x2BE2FB2B, 0x1DC8C31D, 0x195E8E19, 0xC22CB5C2, 0x8949E989, 0x12C1CF12, 0x7E95BF7E, 0x207DBA20,
+        0x6411EA64, 0x840B7784, 0x6DC5396D, 0x6A89AF6A, 0xD17C33D1, 0xA171C9A1, 0xCEFF62CE, 0x37BB7137,
+        0xFB0F81FB, 0x3DB5793D, 0x51E10951, 0xDC3EADDC, 0x2D3F242D, 0xA476CDA4, 0x9D55F99D, 0xEE82D8EE,
+        0x8640E586, 0xAE78C5AE, 0xCD25B9CD, 0x04964D04, 0x55774455, 0x0A0E080A, 0x13508613, 0x30F7E730,
+        0xD337A1D3, 0x40FA1D40, 0x3461AA34, 0x8C4EED8C, 0xB3B006B3, 0x6C54706C, 0x2A73B22A, 0x523BD252,
+        0x0B9F410B, 0x8B027B8B, 0x88D8A088, 0x4FF3114F, 0x67CB3167, 0x4627C246, 0xC06727C0, 0xB4FC90B4,
+        0x28382028, 0x7F04F67F, 0x78486078, 0x2EE5FF2E, 0x074C9607, 0x4B655C4B, 0xC72BB1C7, 0x6F8EAB6F,
+        0x0D429E0D, 0xBBF59CBB, 0xF2DB52F2, 0xF34A1BF3, 0xA63D5FA6, 0x59A49359, 0xBCB90ABC, 0x3AF9EF3A,
+        0xEF1391EF, 0xFE0885FE, 0x01914901, 0x6116EE61, 0x7CDE2D7C, 0xB2214FB2, 0x42B18F42, 0xDB723BDB,
+        0xB82F47B8, 0x48BF8748, 0x2CAE6D2C, 0xE3C046E3, 0x573CD657, 0x859A3E85, 0x29A96929, 0x7D4F647D,
+        0x94812A94, 0x492ECE49, 0x17C6CB17, 0xCA692FCA, 0xC3BDFCC3, 0x5CA3975C, 0x5EE8055E, 0xD0ED7AD0,
+        0x87D1AC87, 0x8E057F8E, 0xBA64D5BA, 0xA8A51AA8, 0xB7264BB7, 0xB9BE0EB9, 0x6087A760, 0xF8D55AF8,
+        0x22362822, 0x111B1411, 0xDE753FDE, 0x79D92979, 0xAAEE88AA, 0x332D3C33, 0x5F794C5F, 0xB6B702B6,
+        0x96CAB896, 0x5835DA58, 0x9CC4B09C, 0xFC4317FC, 0x1A84551A, 0xF64D1FF6, 0x1C598A1C, 0x38B27D38,
+        0xAC3357AC, 0x18CFC718, 0xF4068DF4, 0x69537469, 0x749BB774, 0xF597C4F5, 0x56AD9F56, 0xDAE372DA,
+        0xD5EA7ED5, 0x4AF4154A, 0x9E8F229E, 0xA2AB12A2, 0x4E62584E, 0xE85F07E8, 0xE51D99E5, 0x39233439,
+        0xC1F66EC1, 0x446C5044, 0x5D32DE5D, 0x72466872, 0x26A06526, 0x93CDBC93, 0x03DADB03, 0xC6BAF8C6,
+        0xFA9EC8FA, 0x82D6A882, 0xCF6E2BCF, 0x50704050, 0xEB85DCEB, 0x750AFE75, 0x8A93328A, 0x8DDFA48D,
+        0x4C29CA4C, 0x141C1014, 0x73D72173, 0xCCB4F0CC, 0x09D4D309, 0x108A5D10, 0xE2510FE2, 0x00000000,
+        0x9A196F9A, 0xE01A9DE0, 0x8F94368F, 0xE6C742E6, 0xECC94AEC, 0xFDD25EFD, 0xAB7FC1AB, 0xD8A8E0D8
+    );
+
+    /**
+     * The Key Schedule Array
+     *
+     * @var array
+     * @access private
+     */
+    var $K = array();
+
+    /**
+     * The Key depended S-Table 0
+     *
+     * @var array
+     * @access private
+     */
+    var $S0 = array();
+
+    /**
+     * The Key depended S-Table 1
+     *
+     * @var array
+     * @access private
+     */
+    var $S1 = array();
+
+    /**
+     * The Key depended S-Table 2
+     *
+     * @var array
+     * @access private
+     */
+    var $S2 = array();
+
+    /**
+     * The Key depended S-Table 3
+     *
+     * @var array
+     * @access private
+     */
+    var $S3 = array();
+
+    /**
+     * Holds the last used key
+     *
+     * @var array
+     * @access private
+     */
+    var $kl;
+
+    /**
+     * The Key Length (in bytes)
+     *
+     * @see Crypt_Twofish::setKeyLength()
+     * @var int
+     * @access private
+     */
+    var $key_length = 16;
+
+    /**
+     * Sets the key length.
+     *
+     * Valid key lengths are 128, 192 or 256 bits
+     *
+     * @access public
+     * @param int $length
+     */
+    function setKeyLength($length)
+    {
+        switch (true) {
+            case $length <= 128:
+                $this->key_length = 16;
+                break;
+            case $length <= 192:
+                $this->key_length = 24;
+                break;
+            default:
+                $this->key_length = 32;
+        }
+
+        parent::setKeyLength($length);
+    }
+
+    /**
+     * Setup the key (expansion)
+     *
+     * @see \phpseclib\Crypt\Base::_setupKey()
+     * @access private
+     */
+    function _setupKey()
+    {
+        if (isset($this->kl['key']) && $this->key === $this->kl['key']) {
+            // already expanded
+            return;
+        }
+        $this->kl = array('key' => $this->key);
+
+        /* Key expanding and generating the key-depended s-boxes */
+        $le_longs = unpack('V*', $this->key);
+        $key = unpack('C*', $this->key);
+        $m0 = $this->m0;
+        $m1 = $this->m1;
+        $m2 = $this->m2;
+        $m3 = $this->m3;
+        $q0 = $this->q0;
+        $q1 = $this->q1;
+
+        $K = $S0 = $S1 = $S2 = $S3 = array();
+
+        switch (strlen($this->key)) {
+            case 16:
+                list($s7, $s6, $s5, $s4) = $this->_mdsrem($le_longs[1], $le_longs[2]);
+                list($s3, $s2, $s1, $s0) = $this->_mdsrem($le_longs[3], $le_longs[4]);
+                for ($i = 0, $j = 1; $i < 40; $i+= 2, $j+= 2) {
+                    $A = $m0[$q0[$q0[$i] ^ $key[ 9]] ^ $key[1]] ^
+                         $m1[$q0[$q1[$i] ^ $key[10]] ^ $key[2]] ^
+                         $m2[$q1[$q0[$i] ^ $key[11]] ^ $key[3]] ^
+                         $m3[$q1[$q1[$i] ^ $key[12]] ^ $key[4]];
+                    $B = $m0[$q0[$q0[$j] ^ $key[13]] ^ $key[5]] ^
+                         $m1[$q0[$q1[$j] ^ $key[14]] ^ $key[6]] ^
+                         $m2[$q1[$q0[$j] ^ $key[15]] ^ $key[7]] ^
+                         $m3[$q1[$q1[$j] ^ $key[16]] ^ $key[8]];
+                    $B = ($B << 8) | ($B >> 24 & 0xff);
+                    $A = $this->safe_intval($A + $B);
+                    $K[] = $A;
+                    $A = $this->safe_intval($A + $B);
+                    $K[] = ($A << 9 | $A >> 23 & 0x1ff);
+                }
+                for ($i = 0; $i < 256; ++$i) {
+                    $S0[$i] = $m0[$q0[$q0[$i] ^ $s4] ^ $s0];
+                    $S1[$i] = $m1[$q0[$q1[$i] ^ $s5] ^ $s1];
+                    $S2[$i] = $m2[$q1[$q0[$i] ^ $s6] ^ $s2];
+                    $S3[$i] = $m3[$q1[$q1[$i] ^ $s7] ^ $s3];
+                }
+                break;
+            case 24:
+                list($sb, $sa, $s9, $s8) = $this->_mdsrem($le_longs[1], $le_longs[2]);
+                list($s7, $s6, $s5, $s4) = $this->_mdsrem($le_longs[3], $le_longs[4]);
+                list($s3, $s2, $s1, $s0) = $this->_mdsrem($le_longs[5], $le_longs[6]);
+                for ($i = 0, $j = 1; $i < 40; $i+= 2, $j+= 2) {
+                    $A = $m0[$q0[$q0[$q1[$i] ^ $key[17]] ^ $key[ 9]] ^ $key[1]] ^
+                         $m1[$q0[$q1[$q1[$i] ^ $key[18]] ^ $key[10]] ^ $key[2]] ^
+                         $m2[$q1[$q0[$q0[$i] ^ $key[19]] ^ $key[11]] ^ $key[3]] ^
+                         $m3[$q1[$q1[$q0[$i] ^ $key[20]] ^ $key[12]] ^ $key[4]];
+                    $B = $m0[$q0[$q0[$q1[$j] ^ $key[21]] ^ $key[13]] ^ $key[5]] ^
+                         $m1[$q0[$q1[$q1[$j] ^ $key[22]] ^ $key[14]] ^ $key[6]] ^
+                         $m2[$q1[$q0[$q0[$j] ^ $key[23]] ^ $key[15]] ^ $key[7]] ^
+                         $m3[$q1[$q1[$q0[$j] ^ $key[24]] ^ $key[16]] ^ $key[8]];
+                    $B = ($B << 8) | ($B >> 24 & 0xff);
+                    $A = $this->safe_intval($A + $B);
+                    $K[] = $A;
+                    $A = $this->safe_intval($A + $B);
+                    $K[] = ($A << 9 | $A >> 23 & 0x1ff);
+                }
+                for ($i = 0; $i < 256; ++$i) {
+                    $S0[$i] = $m0[$q0[$q0[$q1[$i] ^ $s8] ^ $s4] ^ $s0];
+                    $S1[$i] = $m1[$q0[$q1[$q1[$i] ^ $s9] ^ $s5] ^ $s1];
+                    $S2[$i] = $m2[$q1[$q0[$q0[$i] ^ $sa] ^ $s6] ^ $s2];
+                    $S3[$i] = $m3[$q1[$q1[$q0[$i] ^ $sb] ^ $s7] ^ $s3];
+                }
+                break;
+            default: // 32
+                list($sf, $se, $sd, $sc) = $this->_mdsrem($le_longs[1], $le_longs[2]);
+                list($sb, $sa, $s9, $s8) = $this->_mdsrem($le_longs[3], $le_longs[4]);
+                list($s7, $s6, $s5, $s4) = $this->_mdsrem($le_longs[5], $le_longs[6]);
+                list($s3, $s2, $s1, $s0) = $this->_mdsrem($le_longs[7], $le_longs[8]);
+                for ($i = 0, $j = 1; $i < 40; $i+= 2, $j+= 2) {
+                    $A = $m0[$q0[$q0[$q1[$q1[$i] ^ $key[25]] ^ $key[17]] ^ $key[ 9]] ^ $key[1]] ^
+                         $m1[$q0[$q1[$q1[$q0[$i] ^ $key[26]] ^ $key[18]] ^ $key[10]] ^ $key[2]] ^
+                         $m2[$q1[$q0[$q0[$q0[$i] ^ $key[27]] ^ $key[19]] ^ $key[11]] ^ $key[3]] ^
+                         $m3[$q1[$q1[$q0[$q1[$i] ^ $key[28]] ^ $key[20]] ^ $key[12]] ^ $key[4]];
+                    $B = $m0[$q0[$q0[$q1[$q1[$j] ^ $key[29]] ^ $key[21]] ^ $key[13]] ^ $key[5]] ^
+                         $m1[$q0[$q1[$q1[$q0[$j] ^ $key[30]] ^ $key[22]] ^ $key[14]] ^ $key[6]] ^
+                         $m2[$q1[$q0[$q0[$q0[$j] ^ $key[31]] ^ $key[23]] ^ $key[15]] ^ $key[7]] ^
+                         $m3[$q1[$q1[$q0[$q1[$j] ^ $key[32]] ^ $key[24]] ^ $key[16]] ^ $key[8]];
+                    $B = ($B << 8) | ($B >> 24 & 0xff);
+                    $A = $this->safe_intval($A + $B);
+                    $K[] = $A;
+                    $A = $this->safe_intval($A + $B);
+                    $K[] = ($A << 9 | $A >> 23 & 0x1ff);
+                }
+                for ($i = 0; $i < 256; ++$i) {
+                    $S0[$i] = $m0[$q0[$q0[$q1[$q1[$i] ^ $sc] ^ $s8] ^ $s4] ^ $s0];
+                    $S1[$i] = $m1[$q0[$q1[$q1[$q0[$i] ^ $sd] ^ $s9] ^ $s5] ^ $s1];
+                    $S2[$i] = $m2[$q1[$q0[$q0[$q0[$i] ^ $se] ^ $sa] ^ $s6] ^ $s2];
+                    $S3[$i] = $m3[$q1[$q1[$q0[$q1[$i] ^ $sf] ^ $sb] ^ $s7] ^ $s3];
+                }
+        }
+
+        $this->K  = $K;
+        $this->S0 = $S0;
+        $this->S1 = $S1;
+        $this->S2 = $S2;
+        $this->S3 = $S3;
+    }
+
+    /**
+     * _mdsrem function using by the twofish cipher algorithm
+     *
+     * @access private
+     * @param string $A
+     * @param string $B
+     * @return array
+     */
+    function _mdsrem($A, $B)
+    {
+        // No gain by unrolling this loop.
+        for ($i = 0; $i < 8; ++$i) {
+            // Get most significant coefficient.
+            $t = 0xff & ($B >> 24);
+
+            // Shift the others up.
+            $B = ($B << 8) | (0xff & ($A >> 24));
+            $A<<= 8;
+
+            $u = $t << 1;
+
+            // Subtract the modular polynomial on overflow.
+            if ($t & 0x80) {
+                $u^= 0x14d;
+            }
+
+            // Remove t * (a * x^2 + 1).
+            $B ^= $t ^ ($u << 16);
+
+            // Form u = a*t + t/a = t*(a + 1/a).
+            $u^= 0x7fffffff & ($t >> 1);
+
+            // Add the modular polynomial on underflow.
+            if ($t & 0x01) {
+                $u^= 0xa6 ;
+            }
+
+            // Remove t * (a + 1/a) * (x^3 + x).
+            $B^= ($u << 24) | ($u << 8);
+        }
+
+        return array(
+            0xff & $B >> 24,
+            0xff & $B >> 16,
+            0xff & $B >>  8,
+            0xff & $B);
+    }
+
+    /**
+     * Encrypts a block
+     *
+     * @access private
+     * @param string $in
+     * @return string
+     */
+    function _encryptBlock($in)
+    {
+        $S0 = $this->S0;
+        $S1 = $this->S1;
+        $S2 = $this->S2;
+        $S3 = $this->S3;
+        $K  = $this->K;
+
+        $in = unpack("V4", $in);
+        $R0 = $K[0] ^ $in[1];
+        $R1 = $K[1] ^ $in[2];
+        $R2 = $K[2] ^ $in[3];
+        $R3 = $K[3] ^ $in[4];
+
+        $ki = 7;
+        while ($ki < 39) {
+            $t0 = $S0[ $R0        & 0xff] ^
+                  $S1[($R0 >>  8) & 0xff] ^
+                  $S2[($R0 >> 16) & 0xff] ^
+                  $S3[($R0 >> 24) & 0xff];
+            $t1 = $S0[($R1 >> 24) & 0xff] ^
+                  $S1[ $R1        & 0xff] ^
+                  $S2[($R1 >>  8) & 0xff] ^
+                  $S3[($R1 >> 16) & 0xff];
+            $R2^= $this->safe_intval($t0 + $t1 + $K[++$ki]);
+            $R2 = ($R2 >> 1 & 0x7fffffff) | ($R2 << 31);
+            $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ $this->safe_intval($t0 + ($t1 << 1) + $K[++$ki]);
+
+            $t0 = $S0[ $R2        & 0xff] ^
+                  $S1[($R2 >>  8) & 0xff] ^
+                  $S2[($R2 >> 16) & 0xff] ^
+                  $S3[($R2 >> 24) & 0xff];
+            $t1 = $S0[($R3 >> 24) & 0xff] ^
+                  $S1[ $R3        & 0xff] ^
+                  $S2[($R3 >>  8) & 0xff] ^
+                  $S3[($R3 >> 16) & 0xff];
+            $R0^= $this->safe_intval($t0 + $t1 + $K[++$ki]);
+            $R0 = ($R0 >> 1 & 0x7fffffff) | ($R0 << 31);
+            $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ $this->safe_intval($t0 + ($t1 << 1) + $K[++$ki]);
+        }
+
+        // @codingStandardsIgnoreStart
+        return pack("V4", $K[4] ^ $R2,
+                          $K[5] ^ $R3,
+                          $K[6] ^ $R0,
+                          $K[7] ^ $R1);
+        // @codingStandardsIgnoreEnd
+    }
+
+    /**
+     * Decrypts a block
+     *
+     * @access private
+     * @param string $in
+     * @return string
+     */
+    function _decryptBlock($in)
+    {
+        $S0 = $this->S0;
+        $S1 = $this->S1;
+        $S2 = $this->S2;
+        $S3 = $this->S3;
+        $K  = $this->K;
+
+        $in = unpack("V4", $in);
+        $R0 = $K[4] ^ $in[1];
+        $R1 = $K[5] ^ $in[2];
+        $R2 = $K[6] ^ $in[3];
+        $R3 = $K[7] ^ $in[4];
+
+        $ki = 40;
+        while ($ki > 8) {
+            $t0 = $S0[$R0       & 0xff] ^
+                  $S1[$R0 >>  8 & 0xff] ^
+                  $S2[$R0 >> 16 & 0xff] ^
+                  $S3[$R0 >> 24 & 0xff];
+            $t1 = $S0[$R1 >> 24 & 0xff] ^
+                  $S1[$R1       & 0xff] ^
+                  $S2[$R1 >>  8 & 0xff] ^
+                  $S3[$R1 >> 16 & 0xff];
+            $R3^= $this->safe_intval($t0 + ($t1 << 1) + $K[--$ki]);
+            $R3 = $R3 >> 1 & 0x7fffffff | $R3 << 31;
+            $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ $this->safe_intval($t0 + $t1 + $K[--$ki]);
+
+            $t0 = $S0[$R2       & 0xff] ^
+                  $S1[$R2 >>  8 & 0xff] ^
+                  $S2[$R2 >> 16 & 0xff] ^
+                  $S3[$R2 >> 24 & 0xff];
+            $t1 = $S0[$R3 >> 24 & 0xff] ^
+                  $S1[$R3       & 0xff] ^
+                  $S2[$R3 >>  8 & 0xff] ^
+                  $S3[$R3 >> 16 & 0xff];
+            $R1^= $this->safe_intval($t0 + ($t1 << 1) + $K[--$ki]);
+            $R1 = $R1 >> 1 & 0x7fffffff | $R1 << 31;
+            $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ $this->safe_intval($t0 + $t1 + $K[--$ki]);
+        }
+
+        // @codingStandardsIgnoreStart
+        return pack("V4", $K[0] ^ $R2,
+                          $K[1] ^ $R3,
+                          $K[2] ^ $R0,
+                          $K[3] ^ $R1);
+        // @codingStandardsIgnoreEnd
+    }
+
+    /**
+     * Setup the performance-optimized function for de/encrypt()
+     *
+     * @see \phpseclib\Crypt\Base::_setupInlineCrypt()
+     * @access private
+     */
+    function _setupInlineCrypt()
+    {
+        $lambda_functions =& self::_getLambdaFunctions();
+
+        // Max. 10 Ultra-Hi-optimized inline-crypt functions. After that, we'll (still) create very fast code, but not the ultimate fast one.
+        // (Currently, for Crypt_Twofish, one generated $lambda_function cost on php5.5@32bit ~140kb unfreeable mem and ~240kb on php5.5@64bit)
+        $gen_hi_opt_code = (bool)(count($lambda_functions) < 10);
+
+        // Generation of a unique hash for our generated code
+        $code_hash = "Crypt_Twofish, {$this->mode}";
+        if ($gen_hi_opt_code) {
+            $code_hash = str_pad($code_hash, 32) . $this->_hashInlineCryptFunction($this->key);
+        }
+
+        $safeint = $this->safe_intval_inline();
+
+        if (!isset($lambda_functions[$code_hash])) {
+            switch (true) {
+                case $gen_hi_opt_code:
+                    $K = $this->K;
+                    $init_crypt = '
+                        static $S0, $S1, $S2, $S3;
+                        if (!$S0) {
+                            for ($i = 0; $i < 256; ++$i) {
+                                $S0[] = (int)$self->S0[$i];
+                                $S1[] = (int)$self->S1[$i];
+                                $S2[] = (int)$self->S2[$i];
+                                $S3[] = (int)$self->S3[$i];
+                            }
+                        }
+                    ';
+                    break;
+                default:
+                    $K   = array();
+                    for ($i = 0; $i < 40; ++$i) {
+                        $K[] = '$K_' . $i;
+                    }
+                    $init_crypt = '
+                        $S0 = $self->S0;
+                        $S1 = $self->S1;
+                        $S2 = $self->S2;
+                        $S3 = $self->S3;
+                        list(' . implode(',', $K) . ') = $self->K;
+                    ';
+            }
+
+            // Generating encrypt code:
+            $encrypt_block = '
+                $in = unpack("V4", $in);
+                $R0 = '.$K[0].' ^ $in[1];
+                $R1 = '.$K[1].' ^ $in[2];
+                $R2 = '.$K[2].' ^ $in[3];
+                $R3 = '.$K[3].' ^ $in[4];
+            ';
+            for ($ki = 7, $i = 0; $i < 8; ++$i) {
+                $encrypt_block.= '
+                    $t0 = $S0[ $R0        & 0xff] ^
+                          $S1[($R0 >>  8) & 0xff] ^
+                          $S2[($R0 >> 16) & 0xff] ^
+                          $S3[($R0 >> 24) & 0xff];
+                    $t1 = $S0[($R1 >> 24) & 0xff] ^
+                          $S1[ $R1        & 0xff] ^
+                          $S2[($R1 >>  8) & 0xff] ^
+                          $S3[($R1 >> 16) & 0xff];
+                    $R2^= ' . sprintf($safeint, '$t0 + $t1 + ' . $K[++$ki]) . ';
+                    $R2 = ($R2 >> 1 & 0x7fffffff) | ($R2 << 31);
+                    $R3 = ((($R3 >> 31) & 1) | ($R3 << 1)) ^ ' . sprintf($safeint, '($t0 + ($t1 << 1) + ' . $K[++$ki] . ')') . ';
+
+                    $t0 = $S0[ $R2        & 0xff] ^
+                          $S1[($R2 >>  8) & 0xff] ^
+                          $S2[($R2 >> 16) & 0xff] ^
+                          $S3[($R2 >> 24) & 0xff];
+                    $t1 = $S0[($R3 >> 24) & 0xff] ^
+                          $S1[ $R3        & 0xff] ^
+                          $S2[($R3 >>  8) & 0xff] ^
+                          $S3[($R3 >> 16) & 0xff];
+                    $R0^= ' . sprintf($safeint, '($t0 + $t1 + ' . $K[++$ki] . ')') . ';
+                    $R0 = ($R0 >> 1 & 0x7fffffff) | ($R0 << 31);
+                    $R1 = ((($R1 >> 31) & 1) | ($R1 << 1)) ^ ' . sprintf($safeint, '($t0 + ($t1 << 1) + ' . $K[++$ki] . ')') . ';
+                ';
+            }
+            $encrypt_block.= '
+                $in = pack("V4", ' . $K[4] . ' ^ $R2,
+                                 ' . $K[5] . ' ^ $R3,
+                                 ' . $K[6] . ' ^ $R0,
+                                 ' . $K[7] . ' ^ $R1);
+            ';
+
+            // Generating decrypt code:
+            $decrypt_block = '
+                $in = unpack("V4", $in);
+                $R0 = '.$K[4].' ^ $in[1];
+                $R1 = '.$K[5].' ^ $in[2];
+                $R2 = '.$K[6].' ^ $in[3];
+                $R3 = '.$K[7].' ^ $in[4];
+            ';
+            for ($ki = 40, $i = 0; $i < 8; ++$i) {
+                $decrypt_block.= '
+                    $t0 = $S0[$R0       & 0xff] ^
+                          $S1[$R0 >>  8 & 0xff] ^
+                          $S2[$R0 >> 16 & 0xff] ^
+                          $S3[$R0 >> 24 & 0xff];
+                    $t1 = $S0[$R1 >> 24 & 0xff] ^
+                          $S1[$R1       & 0xff] ^
+                          $S2[$R1 >>  8 & 0xff] ^
+                          $S3[$R1 >> 16 & 0xff];
+                    $R3^= ' . sprintf($safeint, '$t0 + ($t1 << 1) + ' . $K[--$ki]) . ';
+                    $R3 = $R3 >> 1 & 0x7fffffff | $R3 << 31;
+                    $R2 = ($R2 >> 31 & 0x1 | $R2 << 1) ^ ' . sprintf($safeint, '($t0 + $t1 + '.$K[--$ki] . ')') . ';
+
+                    $t0 = $S0[$R2       & 0xff] ^
+                          $S1[$R2 >>  8 & 0xff] ^
+                          $S2[$R2 >> 16 & 0xff] ^
+                          $S3[$R2 >> 24 & 0xff];
+                    $t1 = $S0[$R3 >> 24 & 0xff] ^
+                          $S1[$R3       & 0xff] ^
+                          $S2[$R3 >>  8 & 0xff] ^
+                          $S3[$R3 >> 16 & 0xff];
+                    $R1^= ' . sprintf($safeint, '$t0 + ($t1 << 1) + ' . $K[--$ki]) . ';
+                    $R1 = $R1 >> 1 & 0x7fffffff | $R1 << 31;
+                    $R0 = ($R0 >> 31 & 0x1 | $R0 << 1) ^ ' . sprintf($safeint, '($t0 + $t1 + '.$K[--$ki] . ')') . ';
+                ';
+            }
+            $decrypt_block.= '
+                $in = pack("V4", ' . $K[0] . ' ^ $R2,
+                                 ' . $K[1] . ' ^ $R3,
+                                 ' . $K[2] . ' ^ $R0,
+                                 ' . $K[3] . ' ^ $R1);
+            ';
+
+            $lambda_functions[$code_hash] = $this->_createInlineCryptFunction(
+                array(
+                   'init_crypt'    => $init_crypt,
+                   'init_encrypt'  => '',
+                   'init_decrypt'  => '',
+                   'encrypt_block' => $encrypt_block,
+                   'decrypt_block' => $decrypt_block
+                )
+            );
+        }
+        $this->inline_crypt = $lambda_functions[$code_hash];
+    }
+}
diff --git a/lib/phpseclib/File/ANSI.php b/lib/phpseclib/File/ANSI.php
new file mode 100644
index 0000000..5ff1f2e
--- /dev/null
+++ b/lib/phpseclib/File/ANSI.php
@@ -0,0 +1,577 @@
+<?php
+
+/**
+ * Pure-PHP ANSI Decoder
+ *
+ * PHP version 5
+ *
+ * If you call read() in \phpseclib\Net\SSH2 you may get {@link http://en.wikipedia.org/wiki/ANSI_escape_code ANSI escape codes} back.
+ * They'd look like chr(0x1B) . '[00m' or whatever (0x1B = ESC).  They tell a
+ * {@link http://en.wikipedia.org/wiki/Terminal_emulator terminal emulator} how to format the characters, what
+ * color to display them in, etc. \phpseclib\File\ANSI is a {@link http://en.wikipedia.org/wiki/VT100 VT100} terminal emulator.
+ *
+ * @category  File
+ * @package   ANSI
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2012 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
+ */
+
+namespace phpseclib\File;
+
+/**
+ * Pure-PHP ANSI Decoder
+ *
+ * @package ANSI
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @access  public
+ */
+class ANSI
+{
+    /**
+     * Max Width
+     *
+     * @var int
+     * @access private
+     */
+    var $max_x;
+
+    /**
+     * Max Height
+     *
+     * @var int
+     * @access private
+     */
+    var $max_y;
+
+    /**
+     * Max History
+     *
+     * @var int
+     * @access private
+     */
+    var $max_history;
+
+    /**
+     * History
+     *
+     * @var array
+     * @access private
+     */
+    var $history;
+
+    /**
+     * History Attributes
+     *
+     * @var array
+     * @access private
+     */
+    var $history_attrs;
+
+    /**
+     * Current Column
+     *
+     * @var int
+     * @access private
+     */
+    var $x;
+
+    /**
+     * Current Row
+     *
+     * @var int
+     * @access private
+     */
+    var $y;
+
+    /**
+     * Old Column
+     *
+     * @var int
+     * @access private
+     */
+    var $old_x;
+
+    /**
+     * Old Row
+     *
+     * @var int
+     * @access private
+     */
+    var $old_y;
+
+    /**
+     * An empty attribute cell
+     *
+     * @var object
+     * @access private
+     */
+    var $base_attr_cell;
+
+    /**
+     * The current attribute cell
+     *
+     * @var object
+     * @access private
+     */
+    var $attr_cell;
+
+    /**
+     * An empty attribute row
+     *
+     * @var array
+     * @access private
+     */
+    var $attr_row;
+
+    /**
+     * The current screen text
+     *
+     * @var array
+     * @access private
+     */
+    var $screen;
+
+    /**
+     * The current screen attributes
+     *
+     * @var array
+     * @access private
+     */
+    var $attrs;
+
+    /**
+     * Current ANSI code
+     *
+     * @var string
+     * @access private
+     */
+    var $ansi;
+
+    /**
+     * Tokenization
+     *
+     * @var array
+     * @access private
+     */
+    var $tokenization;
+
+    /**
+     * Default Constructor.
+     *
+     * @return \phpseclib\File\ANSI
+     * @access public
+     */
+    function __construct()
+    {
+        $attr_cell = new \stdClass();
+        $attr_cell->bold = false;
+        $attr_cell->underline = false;
+        $attr_cell->blink = false;
+        $attr_cell->background = 'black';
+        $attr_cell->foreground = 'white';
+        $attr_cell->reverse = false;
+        $this->base_attr_cell = clone $attr_cell;
+        $this->attr_cell = clone $attr_cell;
+
+        $this->setHistory(200);
+        $this->setDimensions(80, 24);
+    }
+
+    /**
+     * Set terminal width and height
+     *
+     * Resets the screen as well
+     *
+     * @param int $x
+     * @param int $y
+     * @access public
+     */
+    function setDimensions($x, $y)
+    {
+        $this->max_x = $x - 1;
+        $this->max_y = $y - 1;
+        $this->x = $this->y = 0;
+        $this->history = $this->history_attrs = array();
+        $this->attr_row = array_fill(0, $this->max_x + 2, $this->base_attr_cell);
+        $this->screen = array_fill(0, $this->max_y + 1, '');
+        $this->attrs = array_fill(0, $this->max_y + 1, $this->attr_row);
+        $this->ansi = '';
+    }
+
+    /**
+     * Set the number of lines that should be logged past the terminal height
+     *
+     * @param int $x
+     * @param int $y
+     * @access public
+     */
+    function setHistory($history)
+    {
+        $this->max_history = $history;
+    }
+
+    /**
+     * Load a string
+     *
+     * @param string $source
+     * @access public
+     */
+    function loadString($source)
+    {
+        $this->setDimensions($this->max_x + 1, $this->max_y + 1);
+        $this->appendString($source);
+    }
+
+    /**
+     * Appdend a string
+     *
+     * @param string $source
+     * @access public
+     */
+    function appendString($source)
+    {
+        $this->tokenization = array('');
+        for ($i = 0; $i < strlen($source); $i++) {
+            if (strlen($this->ansi)) {
+                $this->ansi.= $source[$i];
+                $chr = ord($source[$i]);
+                // http://en.wikipedia.org/wiki/ANSI_escape_code#Sequence_elements
+                // single character CSI's not currently supported
+                switch (true) {
+                    case $this->ansi == "\x1B=":
+                        $this->ansi = '';
+                        continue 2;
+                    case strlen($this->ansi) == 2 && $chr >= 64 && $chr <= 95 && $chr != ord('['):
+                    case strlen($this->ansi) > 2 && $chr >= 64 && $chr <= 126:
+                        break;
+                    default:
+                        continue 2;
+                }
+                $this->tokenization[] = $this->ansi;
+                $this->tokenization[] = '';
+                // http://ascii-table.com/ansi-escape-sequences-vt-100.php
+                switch ($this->ansi) {
+                    case "\x1B[H": // Move cursor to upper left corner
+                        $this->old_x = $this->x;
+                        $this->old_y = $this->y;
+                        $this->x = $this->y = 0;
+                        break;
+                    case "\x1B[J": // Clear screen from cursor down
+                        $this->history = array_merge($this->history, array_slice(array_splice($this->screen, $this->y + 1), 0, $this->old_y));
+                        $this->screen = array_merge($this->screen, array_fill($this->y, $this->max_y, ''));
+
+                        $this->history_attrs = array_merge($this->history_attrs, array_slice(array_splice($this->attrs, $this->y + 1), 0, $this->old_y));
+                        $this->attrs = array_merge($this->attrs, array_fill($this->y, $this->max_y, $this->attr_row));
+
+                        if (count($this->history) == $this->max_history) {
+                            array_shift($this->history);
+                            array_shift($this->history_attrs);
+                        }
+                    case "\x1B[K": // Clear screen from cursor right
+                        $this->screen[$this->y] = substr($this->screen[$this->y], 0, $this->x);
+
+                        array_splice($this->attrs[$this->y], $this->x + 1, $this->max_x - $this->x, array_fill($this->x, $this->max_x - $this->x - 1, $this->base_attr_cell));
+                        break;
+                    case "\x1B[2K": // Clear entire line
+                        $this->screen[$this->y] = str_repeat(' ', $this->x);
+                        $this->attrs[$this->y] = $this->attr_row;
+                        break;
+                    case "\x1B[?1h": // set cursor key to application
+                    case "\x1B[?25h": // show the cursor
+                    case "\x1B(B": // set united states g0 character set
+                        break;
+                    case "\x1BE": // Move to next line
+                        $this->_newLine();
+                        $this->x = 0;
+                        break;
+                    default:
+                        switch (true) {
+                            case preg_match('#\x1B\[(\d+)B#', $this->ansi, $match): // Move cursor down n lines
+                                $this->old_y = $this->y;
+                                $this->y+= $match[1];
+                                break;
+                            case preg_match('#\x1B\[(\d+);(\d+)H#', $this->ansi, $match): // Move cursor to screen location v,h
+                                $this->old_x = $this->x;
+                                $this->old_y = $this->y;
+                                $this->x = $match[2] - 1;
+                                $this->y = $match[1] - 1;
+                                break;
+                            case preg_match('#\x1B\[(\d+)C#', $this->ansi, $match): // Move cursor right n lines
+                                $this->old_x = $this->x;
+                                $this->x+= $match[1];
+                                break;
+                            case preg_match('#\x1B\[(\d+)D#', $this->ansi, $match): // Move cursor left n lines
+                                $this->old_x = $this->x;
+                                $this->x-= $match[1];
+                                if ($this->x < 0) {
+                                    $this->x = 0;
+                                }
+                                break;
+                            case preg_match('#\x1B\[(\d+);(\d+)r#', $this->ansi, $match): // Set top and bottom lines of a window
+                                break;
+                            case preg_match('#\x1B\[(\d*(?:;\d*)*)m#', $this->ansi, $match): // character attributes
+                                $attr_cell = &$this->attr_cell;
+                                $mods = explode(';', $match[1]);
+                                foreach ($mods as $mod) {
+                                    switch ($mod) {
+                                        case 0: // Turn off character attributes
+                                            $attr_cell = clone $this->base_attr_cell;
+                                            break;
+                                        case 1: // Turn bold mode on
+                                            $attr_cell->bold = true;
+                                            break;
+                                        case 4: // Turn underline mode on
+                                            $attr_cell->underline = true;
+                                            break;
+                                        case 5: // Turn blinking mode on
+                                            $attr_cell->blink = true;
+                                            break;
+                                        case 7: // Turn reverse video on
+                                            $attr_cell->reverse = !$attr_cell->reverse;
+                                            $temp = $attr_cell->background;
+                                            $attr_cell->background = $attr_cell->foreground;
+                                            $attr_cell->foreground = $temp;
+                                            break;
+                                        default: // set colors
+                                            //$front = $attr_cell->reverse ? &$attr_cell->background : &$attr_cell->foreground;
+                                            $front = &$attr_cell->{ $attr_cell->reverse ? 'background' : 'foreground' };
+                                            //$back = $attr_cell->reverse ? &$attr_cell->foreground : &$attr_cell->background;
+                                            $back = &$attr_cell->{ $attr_cell->reverse ? 'foreground' : 'background' };
+                                            switch ($mod) {
+                                                // @codingStandardsIgnoreStart
+                                                case 30: $front = 'black'; break;
+                                                case 31: $front = 'red'; break;
+                                                case 32: $front = 'green'; break;
+                                                case 33: $front = 'yellow'; break;
+                                                case 34: $front = 'blue'; break;
+                                                case 35: $front = 'magenta'; break;
+                                                case 36: $front = 'cyan'; break;
+                                                case 37: $front = 'white'; break;
+
+                                                case 40: $back = 'black'; break;
+                                                case 41: $back = 'red'; break;
+                                                case 42: $back = 'green'; break;
+                                                case 43: $back = 'yellow'; break;
+                                                case 44: $back = 'blue'; break;
+                                                case 45: $back = 'magenta'; break;
+                                                case 46: $back = 'cyan'; break;
+                                                case 47: $back = 'white'; break;
+                                                // @codingStandardsIgnoreEnd
+
+                                                default:
+                                                    //user_error('Unsupported attribute: ' . $mod);
+                                                    $this->ansi = '';
+                                                    break 2;
+                                            }
+                                    }
+                                }
+                                break;
+                            default:
+                                //user_error("{$this->ansi} is unsupported\r\n");
+                        }
+                }
+                $this->ansi = '';
+                continue;
+            }
+
+            $this->tokenization[count($this->tokenization) - 1].= $source[$i];
+            switch ($source[$i]) {
+                case "\r":
+                    $this->x = 0;
+                    break;
+                case "\n":
+                    $this->_newLine();
+                    break;
+                case "\x08": // backspace
+                    if ($this->x) {
+                        $this->x--;
+                        $this->attrs[$this->y][$this->x] = clone $this->base_attr_cell;
+                        $this->screen[$this->y] = substr_replace(
+                            $this->screen[$this->y],
+                            $source[$i],
+                            $this->x,
+                            1
+                        );
+                    }
+                    break;
+                case "\x0F": // shift
+                    break;
+                case "\x1B": // start ANSI escape code
+                    $this->tokenization[count($this->tokenization) - 1] = substr($this->tokenization[count($this->tokenization) - 1], 0, -1);
+                    //if (!strlen($this->tokenization[count($this->tokenization) - 1])) {
+                    //    array_pop($this->tokenization);
+                    //}
+                    $this->ansi.= "\x1B";
+                    break;
+                default:
+                    $this->attrs[$this->y][$this->x] = clone $this->attr_cell;
+                    if ($this->x > strlen($this->screen[$this->y])) {
+                        $this->screen[$this->y] = str_repeat(' ', $this->x);
+                    }
+                    $this->screen[$this->y] = substr_replace(
+                        $this->screen[$this->y],
+                        $source[$i],
+                        $this->x,
+                        1
+                    );
+
+                    if ($this->x > $this->max_x) {
+                        $this->x = 0;
+                        $this->_newLine();
+                    } else {
+                        $this->x++;
+                    }
+            }
+        }
+    }
+
+    /**
+     * Add a new line
+     *
+     * Also update the $this->screen and $this->history buffers
+     *
+     * @access private
+     */
+    function _newLine()
+    {
+        //if ($this->y < $this->max_y) {
+        //    $this->y++;
+        //}
+
+        while ($this->y >= $this->max_y) {
+            $this->history = array_merge($this->history, array(array_shift($this->screen)));
+            $this->screen[] = '';
+
+            $this->history_attrs = array_merge($this->history_attrs, array(array_shift($this->attrs)));
+            $this->attrs[] = $this->attr_row;
+
+            if (count($this->history) >= $this->max_history) {
+                array_shift($this->history);
+                array_shift($this->history_attrs);
+            }
+
+            $this->y--;
+        }
+        $this->y++;
+    }
+
+    /**
+     * Returns the current coordinate without preformating
+     *
+     * @access private
+     * @return string
+     */
+    function _processCoordinate($last_attr, $cur_attr, $char)
+    {
+        $output = '';
+
+        if ($last_attr != $cur_attr) {
+            $close = $open = '';
+            if ($last_attr->foreground != $cur_attr->foreground) {
+                if ($cur_attr->foreground != 'white') {
+                    $open.= '<span style="color: ' . $cur_attr->foreground . '">';
+                }
+                if ($last_attr->foreground != 'white') {
+                    $close = '</span>' . $close;
+                }
+            }
+            if ($last_attr->background != $cur_attr->background) {
+                if ($cur_attr->background != 'black') {
+                    $open.= '<span style="background: ' . $cur_attr->background . '">';
+                }
+                if ($last_attr->background != 'black') {
+                    $close = '</span>' . $close;
+                }
+            }
+            if ($last_attr->bold != $cur_attr->bold) {
+                if ($cur_attr->bold) {
+                    $open.= '<b>';
+                } else {
+                    $close = '</b>' . $close;
+                }
+            }
+            if ($last_attr->underline != $cur_attr->underline) {
+                if ($cur_attr->underline) {
+                    $open.= '<u>';
+                } else {
+                    $close = '</u>' . $close;
+                }
+            }
+            if ($last_attr->blink != $cur_attr->blink) {
+                if ($cur_attr->blink) {
+                    $open.= '<blink>';
+                } else {
+                    $close = '</blink>' . $close;
+                }
+            }
+            $output.= $close . $open;
+        }
+
+        $output.= htmlspecialchars($char);
+
+        return $output;
+    }
+
+    /**
+     * Returns the current screen without preformating
+     *
+     * @access private
+     * @return string
+     */
+    function _getScreen()
+    {
+        $output = '';
+        $last_attr = $this->base_attr_cell;
+        for ($i = 0; $i <= $this->max_y; $i++) {
+            for ($j = 0; $j <= $this->max_x; $j++) {
+                $cur_attr = $this->attrs[$i][$j];
+                $output.= $this->_processCoordinate($last_attr, $cur_attr, isset($this->screen[$i][$j]) ? $this->screen[$i][$j] : '');
+                $last_attr = $this->attrs[$i][$j];
+            }
+            $output.= "\r\n";
+        }
+        $output = substr($output, 0, -2);
+        // close any remaining open tags
+        $output.= $this->_processCoordinate($last_attr, $this->base_attr_cell, '');
+        return rtrim($output);
+    }
+
+    /**
+     * Returns the current screen
+     *
+     * @access public
+     * @return string
+     */
+    function getScreen()
+    {
+        return '<pre width="' . ($this->max_x + 1) . '" style="color: white; background: black">' . $this->_getScreen() . '</pre>';
+    }
+
+    /**
+     * Returns the current screen and the x previous lines
+     *
+     * @access public
+     * @return string
+     */
+    function getHistory()
+    {
+        $scrollback = '';
+        $last_attr = $this->base_attr_cell;
+        for ($i = 0; $i < count($this->history); $i++) {
+            for ($j = 0; $j <= $this->max_x + 1; $j++) {
+                $cur_attr = $this->history_attrs[$i][$j];
+                $scrollback.= $this->_processCoordinate($last_attr, $cur_attr, isset($this->history[$i][$j]) ? $this->history[$i][$j] : '');
+                $last_attr = $this->history_attrs[$i][$j];
+            }
+            $scrollback.= "\r\n";
+        }
+        $base_attr_cell = $this->base_attr_cell;
+        $this->base_attr_cell = $last_attr;
+        $scrollback.= $this->_getScreen();
+        $this->base_attr_cell = $base_attr_cell;
+
+        return '<pre width="' . ($this->max_x + 1) . '" style="color: white; background: black">' . $scrollback . '</span></pre>';
+    }
+}
diff --git a/lib/phpseclib/File/ASN1.php b/lib/phpseclib/File/ASN1.php
new file mode 100644
index 0000000..76ff8e3
--- /dev/null
+++ b/lib/phpseclib/File/ASN1.php
@@ -0,0 +1,1325 @@
+<?php
+
+/**
+ * Pure-PHP ASN.1 Parser
+ *
+ * PHP version 5
+ *
+ * ASN.1 provides the semantics for data encoded using various schemes.  The most commonly
+ * utilized scheme is DER or the "Distinguished Encoding Rules".  PEM's are base64 encoded
+ * DER blobs.
+ *
+ * \phpseclib\File\ASN1 decodes and encodes DER formatted messages and places them in a semantic context.
+ *
+ * Uses the 1988 ASN.1 syntax.
+ *
+ * @category  File
+ * @package   ASN1
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2012 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
+ */
+
+namespace phpseclib\File;
+
+use phpseclib\File\ASN1\Element;
+use phpseclib\Math\BigInteger;
+use DateTime;
+use DateTimeZone;
+
+/**
+ * Pure-PHP ASN.1 Parser
+ *
+ * @package ASN1
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @access  public
+ */
+class ASN1
+{
+    /**#@+
+     * Tag Classes
+     *
+     * @access private
+     * @link http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=12
+     */
+    const CLASS_UNIVERSAL        = 0;
+    const CLASS_APPLICATION      = 1;
+    const CLASS_CONTEXT_SPECIFIC = 2;
+    const CLASS_PRIVATE          = 3;
+    /**#@-*/
+
+    /**#@+
+     * Tag Classes
+     *
+     * @access private
+     * @link http://www.obj-sys.com/asn1tutorial/node124.html
+    */
+    const TYPE_BOOLEAN           = 1;
+    const TYPE_INTEGER           = 2;
+    const TYPE_BIT_STRING        = 3;
+    const TYPE_OCTET_STRING      = 4;
+    const TYPE_NULL              = 5;
+    const TYPE_OBJECT_IDENTIFIER = 6;
+    //const TYPE_OBJECT_DESCRIPTOR = 7;
+    //const TYPE_INSTANCE_OF       = 8; // EXTERNAL
+    const TYPE_REAL              = 9;
+    const TYPE_ENUMERATED        = 10;
+    //const TYPE_EMBEDDED          = 11;
+    const TYPE_UTF8_STRING       = 12;
+    //const TYPE_RELATIVE_OID      = 13;
+    const TYPE_SEQUENCE          = 16; // SEQUENCE OF
+    const TYPE_SET               = 17; // SET OF
+    /**#@-*/
+    /**#@+
+     * More Tag Classes
+     *
+     * @access private
+     * @link http://www.obj-sys.com/asn1tutorial/node10.html
+    */
+    const TYPE_NUMERIC_STRING   = 18;
+    const TYPE_PRINTABLE_STRING = 19;
+    const TYPE_TELETEX_STRING   = 20; // T61String
+    const TYPE_VIDEOTEX_STRING  = 21;
+    const TYPE_IA5_STRING       = 22;
+    const TYPE_UTC_TIME         = 23;
+    const TYPE_GENERALIZED_TIME = 24;
+    const TYPE_GRAPHIC_STRING   = 25;
+    const TYPE_VISIBLE_STRING   = 26; // ISO646String
+    const TYPE_GENERAL_STRING   = 27;
+    const TYPE_UNIVERSAL_STRING = 28;
+    //const TYPE_CHARACTER_STRING = 29;
+    const TYPE_BMP_STRING       = 30;
+    /**#@-*/
+
+    /**#@+
+     * Tag Aliases
+     *
+     * These tags are kinda place holders for other tags.
+     *
+     * @access private
+    */
+    const TYPE_CHOICE = -1;
+    const TYPE_ANY    = -2;
+    /**#@-*/
+
+    /**
+     * ASN.1 object identifier
+     *
+     * @var array
+     * @access private
+     * @link http://en.wikipedia.org/wiki/Object_identifier
+     */
+    var $oids = array();
+
+    /**
+     * Default date format
+     *
+     * @var string
+     * @access private
+     * @link http://php.net/class.datetime
+     */
+    var $format = 'D, d M Y H:i:s O';
+
+    /**
+     * Default date format
+     *
+     * @var array
+     * @access private
+     * @see self::setTimeFormat()
+     * @see self::asn1map()
+     * @link http://php.net/class.datetime
+     */
+    var $encoded;
+
+    /**
+     * Filters
+     *
+     * If the mapping type is self::TYPE_ANY what do we actually encode it as?
+     *
+     * @var array
+     * @access private
+     * @see self::_encode_der()
+     */
+    var $filters;
+
+    /**
+     * Type mapping table for the ANY type.
+     *
+     * Structured or unknown types are mapped to a \phpseclib\File\ASN1\Element.
+     * Unambiguous types get the direct mapping (int/real/bool).
+     * Others are mapped as a choice, with an extra indexing level.
+     *
+     * @var array
+     * @access public
+     */
+    var $ANYmap = array(
+        self::TYPE_BOOLEAN              => true,
+        self::TYPE_INTEGER              => true,
+        self::TYPE_BIT_STRING           => 'bitString',
+        self::TYPE_OCTET_STRING         => 'octetString',
+        self::TYPE_NULL                 => 'null',
+        self::TYPE_OBJECT_IDENTIFIER    => 'objectIdentifier',
+        self::TYPE_REAL                 => true,
+        self::TYPE_ENUMERATED           => 'enumerated',
+        self::TYPE_UTF8_STRING          => 'utf8String',
+        self::TYPE_NUMERIC_STRING       => 'numericString',
+        self::TYPE_PRINTABLE_STRING     => 'printableString',
+        self::TYPE_TELETEX_STRING       => 'teletexString',
+        self::TYPE_VIDEOTEX_STRING      => 'videotexString',
+        self::TYPE_IA5_STRING           => 'ia5String',
+        self::TYPE_UTC_TIME             => 'utcTime',
+        self::TYPE_GENERALIZED_TIME     => 'generalTime',
+        self::TYPE_GRAPHIC_STRING       => 'graphicString',
+        self::TYPE_VISIBLE_STRING       => 'visibleString',
+        self::TYPE_GENERAL_STRING       => 'generalString',
+        self::TYPE_UNIVERSAL_STRING     => 'universalString',
+        //self::TYPE_CHARACTER_STRING     => 'characterString',
+        self::TYPE_BMP_STRING           => 'bmpString'
+    );
+
+    /**
+     * String type to character size mapping table.
+     *
+     * Non-convertable types are absent from this table.
+     * size == 0 indicates variable length encoding.
+     *
+     * @var array
+     * @access public
+     */
+    var $stringTypeSize = array(
+        self::TYPE_UTF8_STRING      => 0,
+        self::TYPE_BMP_STRING       => 2,
+        self::TYPE_UNIVERSAL_STRING => 4,
+        self::TYPE_PRINTABLE_STRING => 1,
+        self::TYPE_TELETEX_STRING   => 1,
+        self::TYPE_IA5_STRING       => 1,
+        self::TYPE_VISIBLE_STRING   => 1,
+    );
+
+    /**
+     * Parse BER-encoding
+     *
+     * Serves a similar purpose to openssl's asn1parse
+     *
+     * @param string $encoded
+     * @return array
+     * @access public
+     */
+    function decodeBER($encoded)
+    {
+        if ($encoded instanceof Element) {
+            $encoded = $encoded->element;
+        }
+
+        $this->encoded = $encoded;
+        // encapsulate in an array for BC with the old decodeBER
+        return array($this->_decode_ber($encoded));
+    }
+
+    /**
+     * Parse BER-encoding (Helper function)
+     *
+     * Sometimes we want to get the BER encoding of a particular tag.  $start lets us do that without having to reencode.
+     * $encoded is passed by reference for the recursive calls done for self::TYPE_BIT_STRING and
+     * self::TYPE_OCTET_STRING. In those cases, the indefinite length is used.
+     *
+     * @param string $encoded
+     * @param int $start
+     * @param int $encoded_pos
+     * @return array
+     * @access private
+     */
+    function _decode_ber($encoded, $start = 0, $encoded_pos = 0)
+    {
+        $current = array('start' => $start);
+
+        $type = ord($encoded[$encoded_pos++]);
+        $start++;
+
+        $constructed = ($type >> 5) & 1;
+
+        $tag = $type & 0x1F;
+        if ($tag == 0x1F) {
+            $tag = 0;
+            // process septets (since the eighth bit is ignored, it's not an octet)
+            do {
+                $loop = ord($encoded[0]) >> 7;
+                $tag <<= 7;
+                $tag |= ord($encoded[$encoded_pos++]) & 0x7F;
+                $start++;
+            } while ($loop);
+        }
+
+        // Length, as discussed in paragraph 8.1.3 of X.690-0207.pdf#page=13
+        $length = ord($encoded[$encoded_pos++]);
+        $start++;
+        if ($length == 0x80) { // indefinite length
+            // "[A sender shall] use the indefinite form (see 8.1.3.6) if the encoding is constructed and is not all
+            //  immediately available." -- paragraph 8.1.3.2.c
+            $length = strlen($encoded) - $encoded_pos;
+        } elseif ($length & 0x80) { // definite length, long form
+            // technically, the long form of the length can be represented by up to 126 octets (bytes), but we'll only
+            // support it up to four.
+            $length&= 0x7F;
+            $temp = substr($encoded, $encoded_pos, $length);
+            $encoded_pos += $length;
+            // tags of indefinte length don't really have a header length; this length includes the tag
+            $current+= array('headerlength' => $length + 2);
+            $start+= $length;
+            extract(unpack('Nlength', substr(str_pad($temp, 4, chr(0), STR_PAD_LEFT), -4)));
+        } else {
+            $current+= array('headerlength' => 2);
+        }
+
+        if ($length > (strlen($encoded) - $encoded_pos)) {
+            return false;
+        }
+
+        $content = substr($encoded, $encoded_pos, $length);
+        $content_pos = 0;
+
+        // at this point $length can be overwritten. it's only accurate for definite length things as is
+
+        /* Class is UNIVERSAL, APPLICATION, PRIVATE, or CONTEXT-SPECIFIC. The UNIVERSAL class is restricted to the ASN.1
+           built-in types. It defines an application-independent data type that must be distinguishable from all other
+           data types. The other three classes are user defined. The APPLICATION class distinguishes data types that
+           have a wide, scattered use within a particular presentation context. PRIVATE distinguishes data types within
+           a particular organization or country. CONTEXT-SPECIFIC distinguishes members of a sequence or set, the
+           alternatives of a CHOICE, or universally tagged set members. Only the class number appears in braces for this
+           data type; the term CONTEXT-SPECIFIC does not appear.
+
+             -- http://www.obj-sys.com/asn1tutorial/node12.html */
+        $class = ($type >> 6) & 3;
+        switch ($class) {
+            case self::CLASS_APPLICATION:
+            case self::CLASS_PRIVATE:
+            case self::CLASS_CONTEXT_SPECIFIC:
+                if (!$constructed) {
+                    return array(
+                        'type'     => $class,
+                        'constant' => $tag,
+                        'content'  => $content,
+                        'length'   => $length + $start - $current['start']
+                    );
+                }
+
+                $newcontent = array();
+                $remainingLength = $length;
+                while ($remainingLength > 0) {
+                    $temp = $this->_decode_ber($content, $start, $content_pos);
+                    $length = $temp['length'];
+                    // end-of-content octets - see paragraph 8.1.5
+                    if (substr($content, $content_pos + $length, 2) == "\0\0") {
+                        $length+= 2;
+                        $start+= $length;
+                        $newcontent[] = $temp;
+                        break;
+                    }
+                    $start+= $length;
+                    $remainingLength-= $length;
+                    $newcontent[] = $temp;
+                    $content_pos += $length;
+                }
+
+                return array(
+                    'type'     => $class,
+                    'constant' => $tag,
+                    // the array encapsulation is for BC with the old format
+                    'content'  => $newcontent,
+                    // the only time when $content['headerlength'] isn't defined is when the length is indefinite.
+                    // the absence of $content['headerlength'] is how we know if something is indefinite or not.
+                    // technically, it could be defined to be 2 and then another indicator could be used but whatever.
+                    'length'   => $start - $current['start']
+                ) + $current;
+        }
+
+        $current+= array('type' => $tag);
+
+        // decode UNIVERSAL tags
+        switch ($tag) {
+            case self::TYPE_BOOLEAN:
+                // "The contents octets shall consist of a single octet." -- paragraph 8.2.1
+                //if (strlen($content) != 1) {
+                //    return false;
+                //}
+                $current['content'] = (bool) ord($content[$content_pos]);
+                break;
+            case self::TYPE_INTEGER:
+            case self::TYPE_ENUMERATED:
+                $current['content'] = new BigInteger(substr($content, $content_pos), -256);
+                break;
+            case self::TYPE_REAL: // not currently supported
+                return false;
+            case self::TYPE_BIT_STRING:
+                // The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit,
+                // the number of unused bits in the final subsequent octet. The number shall be in the range zero to
+                // seven.
+                if (!$constructed) {
+                    $current['content'] = substr($content, $content_pos);
+                } else {
+                    $temp = $this->_decode_ber($content, $start, $content_pos);
+                    $length-= (strlen($content) - $content_pos);
+                    $last = count($temp) - 1;
+                    for ($i = 0; $i < $last; $i++) {
+                        // all subtags should be bit strings
+                        //if ($temp[$i]['type'] != self::TYPE_BIT_STRING) {
+                        //    return false;
+                        //}
+                        $current['content'].= substr($temp[$i]['content'], 1);
+                    }
+                    // all subtags should be bit strings
+                    //if ($temp[$last]['type'] != self::TYPE_BIT_STRING) {
+                    //    return false;
+                    //}
+                    $current['content'] = $temp[$last]['content'][0] . $current['content'] . substr($temp[$i]['content'], 1);
+                }
+                break;
+            case self::TYPE_OCTET_STRING:
+                if (!$constructed) {
+                    $current['content'] = substr($content, $content_pos);
+                } else {
+                    $current['content'] = '';
+                    $length = 0;
+                    while (substr($content, $content_pos, 2) != "\0\0") {
+                        $temp = $this->_decode_ber($content, $length + $start, $content_pos);
+                        $content_pos += $temp['length'];
+                        // all subtags should be octet strings
+                        //if ($temp['type'] != self::TYPE_OCTET_STRING) {
+                        //    return false;
+                        //}
+                        $current['content'].= $temp['content'];
+                        $length+= $temp['length'];
+                    }
+                    if (substr($content, $content_pos, 2) == "\0\0") {
+                        $length+= 2; // +2 for the EOC
+                    }
+                }
+                break;
+            case self::TYPE_NULL:
+                // "The contents octets shall not contain any octets." -- paragraph 8.8.2
+                //if (strlen($content)) {
+                //    return false;
+                //}
+                break;
+            case self::TYPE_SEQUENCE:
+            case self::TYPE_SET:
+                $offset = 0;
+                $current['content'] = array();
+                $content_len = strlen($content);
+                while ($content_pos < $content_len) {
+                    // if indefinite length construction was used and we have an end-of-content string next
+                    // see paragraphs 8.1.1.3, 8.1.3.2, 8.1.3.6, 8.1.5, and (for an example) 8.6.4.2
+                    if (!isset($current['headerlength']) && substr($content, $content_pos, 2) == "\0\0") {
+                        $length = $offset + 2; // +2 for the EOC
+                        break 2;
+                    }
+                    $temp = $this->_decode_ber($content, $start + $offset, $content_pos);
+                    $content_pos += $temp['length'];
+                    $current['content'][] = $temp;
+                    $offset+= $temp['length'];
+                }
+                break;
+            case self::TYPE_OBJECT_IDENTIFIER:
+                $temp = ord($content[$content_pos++]);
+                $current['content'] = sprintf('%d.%d', floor($temp / 40), $temp % 40);
+                $valuen = 0;
+                // process septets
+                $content_len = strlen($content);
+                while ($content_pos < $content_len) {
+                    $temp = ord($content[$content_pos++]);
+                    $valuen <<= 7;
+                    $valuen |= $temp & 0x7F;
+                    if (~$temp & 0x80) {
+                        $current['content'].= ".$valuen";
+                        $valuen = 0;
+                    }
+                }
+                // the eighth bit of the last byte should not be 1
+                //if ($temp >> 7) {
+                //    return false;
+                //}
+                break;
+            /* Each character string type shall be encoded as if it had been declared:
+               [UNIVERSAL x] IMPLICIT OCTET STRING
+
+                 -- X.690-0207.pdf#page=23 (paragraph 8.21.3)
+
+               Per that, we're not going to do any validation.  If there are any illegal characters in the string,
+               we don't really care */
+            case self::TYPE_NUMERIC_STRING:
+                // 0,1,2,3,4,5,6,7,8,9, and space
+            case self::TYPE_PRINTABLE_STRING:
+                // Upper and lower case letters, digits, space, apostrophe, left/right parenthesis, plus sign, comma,
+                // hyphen, full stop, solidus, colon, equal sign, question mark
+            case self::TYPE_TELETEX_STRING:
+                // The Teletex character set in CCITT's T61, space, and delete
+                // see http://en.wikipedia.org/wiki/Teletex#Character_sets
+            case self::TYPE_VIDEOTEX_STRING:
+                // The Videotex character set in CCITT's T.100 and T.101, space, and delete
+            case self::TYPE_VISIBLE_STRING:
+                // Printing character sets of international ASCII, and space
+            case self::TYPE_IA5_STRING:
+                // International Alphabet 5 (International ASCII)
+            case self::TYPE_GRAPHIC_STRING:
+                // All registered G sets, and space
+            case self::TYPE_GENERAL_STRING:
+                // All registered C and G sets, space and delete
+            case self::TYPE_UTF8_STRING:
+                // ????
+            case self::TYPE_BMP_STRING:
+                $current['content'] = substr($content, $content_pos);
+                break;
+            case self::TYPE_UTC_TIME:
+            case self::TYPE_GENERALIZED_TIME:
+                $current['content'] = $this->_decodeTime(substr($content, $content_pos), $tag);
+            default:
+        }
+
+        $start+= $length;
+
+        // ie. length is the length of the full TLV encoding - it's not just the length of the value
+        return $current + array('length' => $start - $current['start']);
+    }
+
+    /**
+     * ASN.1 Map
+     *
+     * Provides an ASN.1 semantic mapping ($mapping) from a parsed BER-encoding to a human readable format.
+     *
+     * "Special" mappings may be applied on a per tag-name basis via $special.
+     *
+     * @param array $decoded
+     * @param array $mapping
+     * @param array $special
+     * @return array
+     * @access public
+     */
+    function asn1map($decoded, $mapping, $special = array())
+    {
+        if (isset($mapping['explicit']) && is_array($decoded['content'])) {
+            $decoded = $decoded['content'][0];
+        }
+
+        switch (true) {
+            case $mapping['type'] == self::TYPE_ANY:
+                $intype = $decoded['type'];
+                if (isset($decoded['constant']) || !isset($this->ANYmap[$intype]) || (ord($this->encoded[$decoded['start']]) & 0x20)) {
+                    return new Element(substr($this->encoded, $decoded['start'], $decoded['length']));
+                }
+                $inmap = $this->ANYmap[$intype];
+                if (is_string($inmap)) {
+                    return array($inmap => $this->asn1map($decoded, array('type' => $intype) + $mapping, $special));
+                }
+                break;
+            case $mapping['type'] == self::TYPE_CHOICE:
+                foreach ($mapping['children'] as $key => $option) {
+                    switch (true) {
+                        case isset($option['constant']) && $option['constant'] == $decoded['constant']:
+                        case !isset($option['constant']) && $option['type'] == $decoded['type']:
+                            $value = $this->asn1map($decoded, $option, $special);
+                            break;
+                        case !isset($option['constant']) && $option['type'] == self::TYPE_CHOICE:
+                            $v = $this->asn1map($decoded, $option, $special);
+                            if (isset($v)) {
+                                $value = $v;
+                            }
+                    }
+                    if (isset($value)) {
+                        if (isset($special[$key])) {
+                            $value = call_user_func($special[$key], $value);
+                        }
+                        return array($key => $value);
+                    }
+                }
+                return null;
+            case isset($mapping['implicit']):
+            case isset($mapping['explicit']):
+            case $decoded['type'] == $mapping['type']:
+                break;
+            default:
+                // if $decoded['type'] and $mapping['type'] are both strings, but different types of strings,
+                // let it through
+                switch (true) {
+                    case $decoded['type'] < 18: // self::TYPE_NUMERIC_STRING == 18
+                    case $decoded['type'] > 30: // self::TYPE_BMP_STRING == 30
+                    case $mapping['type'] < 18:
+                    case $mapping['type'] > 30:
+                        return null;
+                }
+        }
+
+        if (isset($mapping['implicit'])) {
+            $decoded['type'] = $mapping['type'];
+        }
+
+        switch ($decoded['type']) {
+            case self::TYPE_SEQUENCE:
+                $map = array();
+
+                // ignore the min and max
+                if (isset($mapping['min']) && isset($mapping['max'])) {
+                    $child = $mapping['children'];
+                    foreach ($decoded['content'] as $content) {
+                        if (($map[] = $this->asn1map($content, $child, $special)) === null) {
+                            return null;
+                        }
+                    }
+
+                    return $map;
+                }
+
+                $n = count($decoded['content']);
+                $i = 0;
+
+                foreach ($mapping['children'] as $key => $child) {
+                    $maymatch = $i < $n; // Match only existing input.
+                    if ($maymatch) {
+                        $temp = $decoded['content'][$i];
+
+                        if ($child['type'] != self::TYPE_CHOICE) {
+                            // Get the mapping and input class & constant.
+                            $childClass = $tempClass = self::CLASS_UNIVERSAL;
+                            $constant = null;
+                            if (isset($temp['constant'])) {
+                                $tempClass = $temp['type'];
+                            }
+                            if (isset($child['class'])) {
+                                $childClass = $child['class'];
+                                $constant = $child['cast'];
+                            } elseif (isset($child['constant'])) {
+                                $childClass = self::CLASS_CONTEXT_SPECIFIC;
+                                $constant = $child['constant'];
+                            }
+
+                            if (isset($constant) && isset($temp['constant'])) {
+                                // Can only match if constants and class match.
+                                $maymatch = $constant == $temp['constant'] && $childClass == $tempClass;
+                            } else {
+                                // Can only match if no constant expected and type matches or is generic.
+                                $maymatch = !isset($child['constant']) && array_search($child['type'], array($temp['type'], self::TYPE_ANY, self::TYPE_CHOICE)) !== false;
+                            }
+                        }
+                    }
+
+                    if ($maymatch) {
+                        // Attempt submapping.
+                        $candidate = $this->asn1map($temp, $child, $special);
+                        $maymatch = $candidate !== null;
+                    }
+
+                    if ($maymatch) {
+                        // Got the match: use it.
+                        if (isset($special[$key])) {
+                            $candidate = call_user_func($special[$key], $candidate);
+                        }
+                        $map[$key] = $candidate;
+                        $i++;
+                    } elseif (isset($child['default'])) {
+                        $map[$key] = $child['default']; // Use default.
+                    } elseif (!isset($child['optional'])) {
+                        return null; // Syntax error.
+                    }
+                }
+
+                // Fail mapping if all input items have not been consumed.
+                return $i < $n ? null: $map;
+
+            // the main diff between sets and sequences is the encapsulation of the foreach in another for loop
+            case self::TYPE_SET:
+                $map = array();
+
+                // ignore the min and max
+                if (isset($mapping['min']) && isset($mapping['max'])) {
+                    $child = $mapping['children'];
+                    foreach ($decoded['content'] as $content) {
+                        if (($map[] = $this->asn1map($content, $child, $special)) === null) {
+                            return null;
+                        }
+                    }
+
+                    return $map;
+                }
+
+                for ($i = 0; $i < count($decoded['content']); $i++) {
+                    $temp = $decoded['content'][$i];
+                    $tempClass = self::CLASS_UNIVERSAL;
+                    if (isset($temp['constant'])) {
+                        $tempClass = $temp['type'];
+                    }
+
+                    foreach ($mapping['children'] as $key => $child) {
+                        if (isset($map[$key])) {
+                            continue;
+                        }
+                        $maymatch = true;
+                        if ($child['type'] != self::TYPE_CHOICE) {
+                            $childClass = self::CLASS_UNIVERSAL;
+                            $constant = null;
+                            if (isset($child['class'])) {
+                                $childClass = $child['class'];
+                                $constant = $child['cast'];
+                            } elseif (isset($child['constant'])) {
+                                $childClass = self::CLASS_CONTEXT_SPECIFIC;
+                                $constant = $child['constant'];
+                            }
+
+                            if (isset($constant) && isset($temp['constant'])) {
+                                // Can only match if constants and class match.
+                                $maymatch = $constant == $temp['constant'] && $childClass == $tempClass;
+                            } else {
+                                // Can only match if no constant expected and type matches or is generic.
+                                $maymatch = !isset($child['constant']) && array_search($child['type'], array($temp['type'], self::TYPE_ANY, self::TYPE_CHOICE)) !== false;
+                            }
+                        }
+
+                        if ($maymatch) {
+                            // Attempt submapping.
+                            $candidate = $this->asn1map($temp, $child, $special);
+                            $maymatch = $candidate !== null;
+                        }
+
+                        if (!$maymatch) {
+                            break;
+                        }
+
+                        // Got the match: use it.
+                        if (isset($special[$key])) {
+                            $candidate = call_user_func($special[$key], $candidate);
+                        }
+                        $map[$key] = $candidate;
+                        break;
+                    }
+                }
+
+                foreach ($mapping['children'] as $key => $child) {
+                    if (!isset($map[$key])) {
+                        if (isset($child['default'])) {
+                            $map[$key] = $child['default'];
+                        } elseif (!isset($child['optional'])) {
+                            return null;
+                        }
+                    }
+                }
+                return $map;
+            case self::TYPE_OBJECT_IDENTIFIER:
+                return isset($this->oids[$decoded['content']]) ? $this->oids[$decoded['content']] : $decoded['content'];
+            case self::TYPE_UTC_TIME:
+            case self::TYPE_GENERALIZED_TIME:
+                if (isset($mapping['implicit'])) {
+                    $decoded['content'] = $this->_decodeTime($decoded['content'], $decoded['type']);
+                }
+                return $decoded['content'] ? $decoded['content']->format($this->format) : false;
+            case self::TYPE_BIT_STRING:
+                if (isset($mapping['mapping'])) {
+                    $offset = ord($decoded['content'][0]);
+                    $size = (strlen($decoded['content']) - 1) * 8 - $offset;
+                    /*
+                       From X.680-0207.pdf#page=46 (21.7):
+
+                       "When a "NamedBitList" is used in defining a bitstring type ASN.1 encoding rules are free to add (or remove)
+                        arbitrarily any trailing 0 bits to (or from) values that are being encoded or decoded. Application designers should
+                        therefore ensure that different semantics are not associated with such values which differ only in the number of trailing
+                        0 bits."
+                    */
+                    $bits = count($mapping['mapping']) == $size ? array() : array_fill(0, count($mapping['mapping']) - $size, false);
+                    for ($i = strlen($decoded['content']) - 1; $i > 0; $i--) {
+                        $current = ord($decoded['content'][$i]);
+                        for ($j = $offset; $j < 8; $j++) {
+                            $bits[] = (bool) ($current & (1 << $j));
+                        }
+                        $offset = 0;
+                    }
+                    $values = array();
+                    $map = array_reverse($mapping['mapping']);
+                    foreach ($map as $i => $value) {
+                        if ($bits[$i]) {
+                            $values[] = $value;
+                        }
+                    }
+                    return $values;
+                }
+            case self::TYPE_OCTET_STRING:
+                return base64_encode($decoded['content']);
+            case self::TYPE_NULL:
+                return '';
+            case self::TYPE_BOOLEAN:
+                return $decoded['content'];
+            case self::TYPE_NUMERIC_STRING:
+            case self::TYPE_PRINTABLE_STRING:
+            case self::TYPE_TELETEX_STRING:
+            case self::TYPE_VIDEOTEX_STRING:
+            case self::TYPE_IA5_STRING:
+            case self::TYPE_GRAPHIC_STRING:
+            case self::TYPE_VISIBLE_STRING:
+            case self::TYPE_GENERAL_STRING:
+            case self::TYPE_UNIVERSAL_STRING:
+            case self::TYPE_UTF8_STRING:
+            case self::TYPE_BMP_STRING:
+                return $decoded['content'];
+            case self::TYPE_INTEGER:
+            case self::TYPE_ENUMERATED:
+                $temp = $decoded['content'];
+                if (isset($mapping['implicit'])) {
+                    $temp = new BigInteger($decoded['content'], -256);
+                }
+                if (isset($mapping['mapping'])) {
+                    $temp = (int) $temp->toString();
+                    return isset($mapping['mapping'][$temp]) ?
+                        $mapping['mapping'][$temp] :
+                        false;
+                }
+                return $temp;
+        }
+    }
+
+    /**
+     * ASN.1 Encode
+     *
+     * DER-encodes an ASN.1 semantic mapping ($mapping).  Some libraries would probably call this function
+     * an ASN.1 compiler.
+     *
+     * "Special" mappings can be applied via $special.
+     *
+     * @param string $source
+     * @param string $mapping
+     * @param int $idx
+     * @return string
+     * @access public
+     */
+    function encodeDER($source, $mapping, $special = array())
+    {
+        $this->location = array();
+        return $this->_encode_der($source, $mapping, null, $special);
+    }
+
+    /**
+     * ASN.1 Encode (Helper function)
+     *
+     * @param string $source
+     * @param string $mapping
+     * @param int $idx
+     * @return string
+     * @access private
+     */
+    function _encode_der($source, $mapping, $idx = null, $special = array())
+    {
+        if ($source instanceof Element) {
+            return $source->element;
+        }
+
+        // do not encode (implicitly optional) fields with value set to default
+        if (isset($mapping['default']) && $source === $mapping['default']) {
+            return '';
+        }
+
+        if (isset($idx)) {
+            if (isset($special[$idx])) {
+                $source = call_user_func($special[$idx], $source);
+            }
+            $this->location[] = $idx;
+        }
+
+        $tag = $mapping['type'];
+
+        switch ($tag) {
+            case self::TYPE_SET:    // Children order is not important, thus process in sequence.
+            case self::TYPE_SEQUENCE:
+                $tag|= 0x20; // set the constructed bit
+
+                // ignore the min and max
+                if (isset($mapping['min']) && isset($mapping['max'])) {
+                    $value = array();
+                    $child = $mapping['children'];
+
+                    foreach ($source as $content) {
+                        $temp = $this->_encode_der($content, $child, null, $special);
+                        if ($temp === false) {
+                            return false;
+                        }
+                        $value[]= $temp;
+                    }
+                    /* "The encodings of the component values of a set-of value shall appear in ascending order, the encodings being compared
+                        as octet strings with the shorter components being padded at their trailing end with 0-octets.
+                        NOTE - The padding octets are for comparison purposes only and do not appear in the encodings."
+
+                       -- sec 11.6 of http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf  */
+                    if ($mapping['type'] == self::TYPE_SET) {
+                        sort($value);
+                    }
+                    $value = implode($value, '');
+                    break;
+                }
+
+                $value = '';
+                foreach ($mapping['children'] as $key => $child) {
+                    if (!array_key_exists($key, $source)) {
+                        if (!isset($child['optional'])) {
+                            return false;
+                        }
+                        continue;
+                    }
+
+                    $temp = $this->_encode_der($source[$key], $child, $key, $special);
+                    if ($temp === false) {
+                        return false;
+                    }
+
+                    // An empty child encoding means it has been optimized out.
+                    // Else we should have at least one tag byte.
+                    if ($temp === '') {
+                        continue;
+                    }
+
+                    // if isset($child['constant']) is true then isset($child['optional']) should be true as well
+                    if (isset($child['constant'])) {
+                        /*
+                           From X.680-0207.pdf#page=58 (30.6):
+
+                           "The tagging construction specifies explicit tagging if any of the following holds:
+                            ...
+                            c) the "Tag Type" alternative is used and the value of "TagDefault" for the module is IMPLICIT TAGS or
+                            AUTOMATIC TAGS, but the type defined by "Type" is an untagged choice type, an untagged open type, or
+                            an untagged "DummyReference" (see ITU-T Rec. X.683 | ISO/IEC 8824-4, 8.3)."
+                         */
+                        if (isset($child['explicit']) || $child['type'] == self::TYPE_CHOICE) {
+                            $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']);
+                            $temp = $subtag . $this->_encodeLength(strlen($temp)) . $temp;
+                        } else {
+                            $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']);
+                            $temp = $subtag . substr($temp, 1);
+                        }
+                    }
+                    $value.= $temp;
+                }
+                break;
+            case self::TYPE_CHOICE:
+                $temp = false;
+
+                foreach ($mapping['children'] as $key => $child) {
+                    if (!isset($source[$key])) {
+                        continue;
+                    }
+
+                    $temp = $this->_encode_der($source[$key], $child, $key, $special);
+                    if ($temp === false) {
+                        return false;
+                    }
+
+                    // An empty child encoding means it has been optimized out.
+                    // Else we should have at least one tag byte.
+                    if ($temp === '') {
+                        continue;
+                    }
+
+                    $tag = ord($temp[0]);
+
+                    // if isset($child['constant']) is true then isset($child['optional']) should be true as well
+                    if (isset($child['constant'])) {
+                        if (isset($child['explicit']) || $child['type'] == self::TYPE_CHOICE) {
+                            $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | 0x20 | $child['constant']);
+                            $temp = $subtag . $this->_encodeLength(strlen($temp)) . $temp;
+                        } else {
+                            $subtag = chr((self::CLASS_CONTEXT_SPECIFIC << 6) | (ord($temp[0]) & 0x20) | $child['constant']);
+                            $temp = $subtag . substr($temp, 1);
+                        }
+                    }
+                }
+
+                if (isset($idx)) {
+                    array_pop($this->location);
+                }
+
+                if ($temp && isset($mapping['cast'])) {
+                    $temp[0] = chr(($mapping['class'] << 6) | ($tag & 0x20) | $mapping['cast']);
+                }
+
+                return $temp;
+            case self::TYPE_INTEGER:
+            case self::TYPE_ENUMERATED:
+                if (!isset($mapping['mapping'])) {
+                    if (is_numeric($source)) {
+                        $source = new BigInteger($source);
+                    }
+                    $value = $source->toBytes(true);
+                } else {
+                    $value = array_search($source, $mapping['mapping']);
+                    if ($value === false) {
+                        return false;
+                    }
+                    $value = new BigInteger($value);
+                    $value = $value->toBytes(true);
+                }
+                if (!strlen($value)) {
+                    $value = chr(0);
+                }
+                break;
+            case self::TYPE_UTC_TIME:
+            case self::TYPE_GENERALIZED_TIME:
+                $format = $mapping['type'] == self::TYPE_UTC_TIME ? 'y' : 'Y';
+                $format.= 'mdHis';
+                $date = new DateTime($source, new DateTimeZone('GMT'));
+                $value = $date->format($format) . 'Z';
+                break;
+            case self::TYPE_BIT_STRING:
+                if (isset($mapping['mapping'])) {
+                    $bits = array_fill(0, count($mapping['mapping']), 0);
+                    $size = 0;
+                    for ($i = 0; $i < count($mapping['mapping']); $i++) {
+                        if (in_array($mapping['mapping'][$i], $source)) {
+                            $bits[$i] = 1;
+                            $size = $i;
+                        }
+                    }
+
+                    if (isset($mapping['min']) && $mapping['min'] >= 1 && $size < $mapping['min']) {
+                        $size = $mapping['min'] - 1;
+                    }
+
+                    $offset = 8 - (($size + 1) & 7);
+                    $offset = $offset !== 8 ? $offset : 0;
+
+                    $value = chr($offset);
+
+                    for ($i = $size + 1; $i < count($mapping['mapping']); $i++) {
+                        unset($bits[$i]);
+                    }
+
+                    $bits = implode('', array_pad($bits, $size + $offset + 1, 0));
+                    $bytes = explode(' ', rtrim(chunk_split($bits, 8, ' ')));
+                    foreach ($bytes as $byte) {
+                        $value.= chr(bindec($byte));
+                    }
+
+                    break;
+                }
+            case self::TYPE_OCTET_STRING:
+                /* The initial octet shall encode, as an unsigned binary integer with bit 1 as the least significant bit,
+                   the number of unused bits in the final subsequent octet. The number shall be in the range zero to seven.
+
+                   -- http://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=16 */
+                $value = base64_decode($source);
+                break;
+            case self::TYPE_OBJECT_IDENTIFIER:
+                $oid = preg_match('#(?:\d+\.)+#', $source) ? $source : array_search($source, $this->oids);
+                if ($oid === false) {
+                    user_error('Invalid OID');
+                    return false;
+                }
+                $value = '';
+                $parts = explode('.', $oid);
+                $value = chr(40 * $parts[0] + $parts[1]);
+                for ($i = 2; $i < count($parts); $i++) {
+                    $temp = '';
+                    if (!$parts[$i]) {
+                        $temp = "\0";
+                    } else {
+                        while ($parts[$i]) {
+                            $temp = chr(0x80 | ($parts[$i] & 0x7F)) . $temp;
+                            $parts[$i] >>= 7;
+                        }
+                        $temp[strlen($temp) - 1] = $temp[strlen($temp) - 1] & chr(0x7F);
+                    }
+                    $value.= $temp;
+                }
+                break;
+            case self::TYPE_ANY:
+                $loc = $this->location;
+                if (isset($idx)) {
+                    array_pop($this->location);
+                }
+
+                switch (true) {
+                    case !isset($source):
+                        return $this->_encode_der(null, array('type' => self::TYPE_NULL) + $mapping, null, $special);
+                    case is_int($source):
+                    case $source instanceof BigInteger:
+                        return $this->_encode_der($source, array('type' => self::TYPE_INTEGER) + $mapping, null, $special);
+                    case is_float($source):
+                        return $this->_encode_der($source, array('type' => self::TYPE_REAL) + $mapping, null, $special);
+                    case is_bool($source):
+                        return $this->_encode_der($source, array('type' => self::TYPE_BOOLEAN) + $mapping, null, $special);
+                    case is_array($source) && count($source) == 1:
+                        $typename = implode('', array_keys($source));
+                        $outtype = array_search($typename, $this->ANYmap, true);
+                        if ($outtype !== false) {
+                            return $this->_encode_der($source[$typename], array('type' => $outtype) + $mapping, null, $special);
+                        }
+                }
+
+                $filters = $this->filters;
+                foreach ($loc as $part) {
+                    if (!isset($filters[$part])) {
+                        $filters = false;
+                        break;
+                    }
+                    $filters = $filters[$part];
+                }
+                if ($filters === false) {
+                    user_error('No filters defined for ' . implode('/', $loc));
+                    return false;
+                }
+                return $this->_encode_der($source, $filters + $mapping, null, $special);
+            case self::TYPE_NULL:
+                $value = '';
+                break;
+            case self::TYPE_NUMERIC_STRING:
+            case self::TYPE_TELETEX_STRING:
+            case self::TYPE_PRINTABLE_STRING:
+            case self::TYPE_UNIVERSAL_STRING:
+            case self::TYPE_UTF8_STRING:
+            case self::TYPE_BMP_STRING:
+            case self::TYPE_IA5_STRING:
+            case self::TYPE_VISIBLE_STRING:
+            case self::TYPE_VIDEOTEX_STRING:
+            case self::TYPE_GRAPHIC_STRING:
+            case self::TYPE_GENERAL_STRING:
+                $value = $source;
+                break;
+            case self::TYPE_BOOLEAN:
+                $value = $source ? "\xFF" : "\x00";
+                break;
+            default:
+                user_error('Mapping provides no type definition for ' . implode('/', $this->location));
+                return false;
+        }
+
+        if (isset($idx)) {
+            array_pop($this->location);
+        }
+
+        if (isset($mapping['cast'])) {
+            if (isset($mapping['explicit']) || $mapping['type'] == self::TYPE_CHOICE) {
+                $value = chr($tag) . $this->_encodeLength(strlen($value)) . $value;
+                $tag = ($mapping['class'] << 6) | 0x20 | $mapping['cast'];
+            } else {
+                $tag = ($mapping['class'] << 6) | (ord($temp[0]) & 0x20) | $mapping['cast'];
+            }
+        }
+
+        return chr($tag) . $this->_encodeLength(strlen($value)) . $value;
+    }
+
+    /**
+     * DER-encode the length
+     *
+     * DER supports lengths up to (2**8)**127, however, we'll only support lengths up to (2**8)**4.  See
+     * {@link http://itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#p=13 X.690 paragraph 8.1.3} for more information.
+     *
+     * @access private
+     * @param int $length
+     * @return string
+     */
+    function _encodeLength($length)
+    {
+        if ($length <= 0x7F) {
+            return chr($length);
+        }
+
+        $temp = ltrim(pack('N', $length), chr(0));
+        return pack('Ca*', 0x80 | strlen($temp), $temp);
+    }
+
+    /**
+     * BER-decode the time
+     *
+     * Called by _decode_ber() and in the case of implicit tags asn1map().
+     *
+     * @access private
+     * @param string $content
+     * @param int $tag
+     * @return string
+     */
+    function _decodeTime($content, $tag)
+    {
+        /* UTCTime:
+           http://tools.ietf.org/html/rfc5280#section-4.1.2.5.1
+           http://www.obj-sys.com/asn1tutorial/node15.html
+
+           GeneralizedTime:
+           http://tools.ietf.org/html/rfc5280#section-4.1.2.5.2
+           http://www.obj-sys.com/asn1tutorial/node14.html */
+
+        $format = 'YmdHis';
+
+        if ($tag == self::TYPE_UTC_TIME) {
+            // https://www.itu.int/ITU-T/studygroups/com17/languages/X.690-0207.pdf#page=28 says "the seconds
+            // element shall always be present" but none-the-less I've seen X509 certs where it isn't and if the
+            // browsers parse it phpseclib ought to too
+            if (preg_match('#^(\d{10})(Z|[+-]\d{4})$#', $content, $matches)) {
+                $content = $matches[1] . '00' . $matches[2];
+            }
+            $prefix = substr($content, 0, 2) >= 50 ? '19' : '20';
+            $content = $prefix . $content;
+        } elseif (strpos($content, '.') !== false) {
+            $format.= '.u';
+        }
+
+        if ($content[strlen($content) - 1] == 'Z') {
+            $content = substr($content, 0, -1) . '+0000';
+        }
+
+        if (strpos($content, '-') !== false || strpos($content, '+') !== false) {
+            $format.= 'O';
+        }
+
+        // error supression isn't necessary as of PHP 7.0:
+        // http://php.net/manual/en/migration70.other-changes.php
+        return @DateTime::createFromFormat($format, $content);
+    }
+
+    /**
+     * Set the time format
+     *
+     * Sets the time / date format for asn1map().
+     *
+     * @access public
+     * @param string $format
+     */
+    function setTimeFormat($format)
+    {
+        $this->format = $format;
+    }
+
+    /**
+     * Load OIDs
+     *
+     * Load the relevant OIDs for a particular ASN.1 semantic mapping.
+     *
+     * @access public
+     * @param array $oids
+     */
+    function loadOIDs($oids)
+    {
+        $this->oids = $oids;
+    }
+
+    /**
+     * Load filters
+     *
+     * See \phpseclib\File\X509, etc, for an example.
+     *
+     * @access public
+     * @param array $filters
+     */
+    function loadFilters($filters)
+    {
+        $this->filters = $filters;
+    }
+
+    /**
+     * String Shift
+     *
+     * Inspired by array_shift
+     *
+     * @param string $string
+     * @param int $index
+     * @return string
+     * @access private
+     */
+    function _string_shift(&$string, $index = 1)
+    {
+        $substr = substr($string, 0, $index);
+        $string = substr($string, $index);
+        return $substr;
+    }
+
+    /**
+     * String type conversion
+     *
+     * This is a lazy conversion, dealing only with character size.
+     * No real conversion table is used.
+     *
+     * @param string $in
+     * @param int $from
+     * @param int $to
+     * @return string
+     * @access public
+     */
+    function convert($in, $from = self::TYPE_UTF8_STRING, $to = self::TYPE_UTF8_STRING)
+    {
+        if (!isset($this->stringTypeSize[$from]) || !isset($this->stringTypeSize[$to])) {
+            return false;
+        }
+        $insize = $this->stringTypeSize[$from];
+        $outsize = $this->stringTypeSize[$to];
+        $inlength = strlen($in);
+        $out = '';
+
+        for ($i = 0; $i < $inlength;) {
+            if ($inlength - $i < $insize) {
+                return false;
+            }
+
+            // Get an input character as a 32-bit value.
+            $c = ord($in[$i++]);
+            switch (true) {
+                case $insize == 4:
+                    $c = ($c << 8) | ord($in[$i++]);
+                    $c = ($c << 8) | ord($in[$i++]);
+                case $insize == 2:
+                    $c = ($c << 8) | ord($in[$i++]);
+                case $insize == 1:
+                    break;
+                case ($c & 0x80) == 0x00:
+                    break;
+                case ($c & 0x40) == 0x00:
+                    return false;
+                default:
+                    $bit = 6;
+                    do {
+                        if ($bit > 25 || $i >= $inlength || (ord($in[$i]) & 0xC0) != 0x80) {
+                            return false;
+                        }
+                        $c = ($c << 6) | (ord($in[$i++]) & 0x3F);
+                        $bit += 5;
+                        $mask = 1 << $bit;
+                    } while ($c & $bit);
+                    $c &= $mask - 1;
+                    break;
+            }
+
+            // Convert and append the character to output string.
+            $v = '';
+            switch (true) {
+                case $outsize == 4:
+                    $v .= chr($c & 0xFF);
+                    $c >>= 8;
+                    $v .= chr($c & 0xFF);
+                    $c >>= 8;
+                case $outsize == 2:
+                    $v .= chr($c & 0xFF);
+                    $c >>= 8;
+                case $outsize == 1:
+                    $v .= chr($c & 0xFF);
+                    $c >>= 8;
+                    if ($c) {
+                        return false;
+                    }
+                    break;
+                case ($c & 0x80000000) != 0:
+                    return false;
+                case $c >= 0x04000000:
+                    $v .= chr(0x80 | ($c & 0x3F));
+                    $c = ($c >> 6) | 0x04000000;
+                case $c >= 0x00200000:
+                    $v .= chr(0x80 | ($c & 0x3F));
+                    $c = ($c >> 6) | 0x00200000;
+                case $c >= 0x00010000:
+                    $v .= chr(0x80 | ($c & 0x3F));
+                    $c = ($c >> 6) | 0x00010000;
+                case $c >= 0x00000800:
+                    $v .= chr(0x80 | ($c & 0x3F));
+                    $c = ($c >> 6) | 0x00000800;
+                case $c >= 0x00000080:
+                    $v .= chr(0x80 | ($c & 0x3F));
+                    $c = ($c >> 6) | 0x000000C0;
+                default:
+                    $v .= chr($c);
+                    break;
+            }
+            $out .= strrev($v);
+        }
+        return $out;
+    }
+}
diff --git a/lib/phpseclib/File/ASN1/Element.php b/lib/phpseclib/File/ASN1/Element.php
new file mode 100644
index 0000000..68246e2
--- /dev/null
+++ b/lib/phpseclib/File/ASN1/Element.php
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Pure-PHP ASN.1 Parser
+ *
+ * PHP version 5
+ *
+ * @category  File
+ * @package   ASN1
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2012 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
+ */
+
+namespace phpseclib\File\ASN1;
+
+/**
+ * ASN.1 Element
+ *
+ * Bypass normal encoding rules in phpseclib\File\ASN1::encodeDER()
+ *
+ * @package ASN1
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @access  public
+ */
+class Element
+{
+    /**
+     * Raw element value
+     *
+     * @var string
+     * @access private
+     */
+    var $element;
+
+    /**
+     * Constructor
+     *
+     * @param string $encoded
+     * @return \phpseclib\File\ASN1\Element
+     * @access public
+     */
+    function __construct($encoded)
+    {
+        $this->element = $encoded;
+    }
+}
diff --git a/lib/phpseclib/File/X509.php b/lib/phpseclib/File/X509.php
new file mode 100644
index 0000000..f3ee813
--- /dev/null
+++ b/lib/phpseclib/File/X509.php
@@ -0,0 +1,5046 @@
+<?php
+
+/**
+ * Pure-PHP X.509 Parser
+ *
+ * PHP version 5
+ *
+ * Encode and decode X.509 certificates.
+ *
+ * The extensions are from {@link http://tools.ietf.org/html/rfc5280 RFC5280} and
+ * {@link http://web.archive.org/web/19961027104704/http://www3.netscape.com/eng/security/cert-exts.html Netscape Certificate Extensions}.
+ *
+ * Note that loading an X.509 certificate and resaving it may invalidate the signature.  The reason being that the signature is based on a
+ * portion of the certificate that contains optional parameters with default values.  ie. if the parameter isn't there the default value is
+ * used.  Problem is, if the parameter is there and it just so happens to have the default value there are two ways that that parameter can
+ * be encoded.  It can be encoded explicitly or left out all together.  This would effect the signature value and thus may invalidate the
+ * the certificate all together unless the certificate is re-signed.
+ *
+ * @category  File
+ * @package   X509
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2012 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
+ */
+
+namespace phpseclib\File;
+
+use phpseclib\Crypt\Hash;
+use phpseclib\Crypt\Random;
+use phpseclib\Crypt\RSA;
+use phpseclib\File\ASN1\Element;
+use phpseclib\Math\BigInteger;
+use DateTime;
+use DateTimeZone;
+
+/**
+ * Pure-PHP X.509 Parser
+ *
+ * @package X509
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @access  public
+ */
+class X509
+{
+    /**
+     * Flag to only accept signatures signed by certificate authorities
+     *
+     * Not really used anymore but retained all the same to suppress E_NOTICEs from old installs
+     *
+     * @access public
+     */
+    const VALIDATE_SIGNATURE_BY_CA = 1;
+
+    /**#@+
+     * @access public
+     * @see \phpseclib\File\X509::getDN()
+    */
+    /**
+     * Return internal array representation
+     */
+    const DN_ARRAY = 0;
+    /**
+     * Return string
+     */
+    const DN_STRING = 1;
+    /**
+     * Return ASN.1 name string
+     */
+    const DN_ASN1 = 2;
+    /**
+     * Return OpenSSL compatible array
+     */
+    const DN_OPENSSL = 3;
+    /**
+     * Return canonical ASN.1 RDNs string
+     */
+    const DN_CANON = 4;
+    /**
+     * Return name hash for file indexing
+     */
+    const DN_HASH = 5;
+    /**#@-*/
+
+    /**#@+
+     * @access public
+     * @see \phpseclib\File\X509::saveX509()
+     * @see \phpseclib\File\X509::saveCSR()
+     * @see \phpseclib\File\X509::saveCRL()
+    */
+    /**
+     * Save as PEM
+     *
+     * ie. a base64-encoded PEM with a header and a footer
+     */
+    const FORMAT_PEM = 0;
+    /**
+     * Save as DER
+     */
+    const FORMAT_DER = 1;
+    /**
+     * Save as a SPKAC
+     *
+     * Only works on CSRs. Not currently supported.
+     */
+    const FORMAT_SPKAC = 2;
+    /**
+     * Auto-detect the format
+     *
+     * Used only by the load*() functions
+     */
+    const FORMAT_AUTO_DETECT = 3;
+    /**#@-*/
+
+    /**
+     * Attribute value disposition.
+     * If disposition is >= 0, this is the index of the target value.
+     */
+    const ATTR_ALL = -1; // All attribute values (array).
+    const ATTR_APPEND = -2; // Add a value.
+    const ATTR_REPLACE = -3; // Clear first, then add a value.
+
+    /**
+     * ASN.1 syntax for X.509 certificates
+     *
+     * @var array
+     * @access private
+     */
+    var $Certificate;
+
+    /**#@+
+     * ASN.1 syntax for various extensions
+     *
+     * @access private
+     */
+    var $DirectoryString;
+    var $PKCS9String;
+    var $AttributeValue;
+    var $Extensions;
+    var $KeyUsage;
+    var $ExtKeyUsageSyntax;
+    var $BasicConstraints;
+    var $KeyIdentifier;
+    var $CRLDistributionPoints;
+    var $AuthorityKeyIdentifier;
+    var $CertificatePolicies;
+    var $AuthorityInfoAccessSyntax;
+    var $SubjectAltName;
+    var $SubjectDirectoryAttributes;
+    var $PrivateKeyUsagePeriod;
+    var $IssuerAltName;
+    var $PolicyMappings;
+    var $NameConstraints;
+
+    var $CPSuri;
+    var $UserNotice;
+
+    var $netscape_cert_type;
+    var $netscape_comment;
+    var $netscape_ca_policy_url;
+
+    var $Name;
+    var $RelativeDistinguishedName;
+    var $CRLNumber;
+    var $CRLReason;
+    var $IssuingDistributionPoint;
+    var $InvalidityDate;
+    var $CertificateIssuer;
+    var $HoldInstructionCode;
+    var $SignedPublicKeyAndChallenge;
+    /**#@-*/
+
+    /**#@+
+     * ASN.1 syntax for various DN attributes
+     *
+     * @access private
+     */
+    var $PostalAddress;
+    /**#@-*/
+
+    /**
+     * ASN.1 syntax for Certificate Signing Requests (RFC2986)
+     *
+     * @var array
+     * @access private
+     */
+    var $CertificationRequest;
+
+    /**
+     * ASN.1 syntax for Certificate Revocation Lists (RFC5280)
+     *
+     * @var array
+     * @access private
+     */
+    var $CertificateList;
+
+    /**
+     * Distinguished Name
+     *
+     * @var array
+     * @access private
+     */
+    var $dn;
+
+    /**
+     * Public key
+     *
+     * @var string
+     * @access private
+     */
+    var $publicKey;
+
+    /**
+     * Private key
+     *
+     * @var string
+     * @access private
+     */
+    var $privateKey;
+
+    /**
+     * Object identifiers for X.509 certificates
+     *
+     * @var array
+     * @access private
+     * @link http://en.wikipedia.org/wiki/Object_identifier
+     */
+    var $oids;
+
+    /**
+     * The certificate authorities
+     *
+     * @var array
+     * @access private
+     */
+    var $CAs;
+
+    /**
+     * The currently loaded certificate
+     *
+     * @var array
+     * @access private
+     */
+    var $currentCert;
+
+    /**
+     * The signature subject
+     *
+     * There's no guarantee \phpseclib\File\X509 is going to re-encode an X.509 cert in the same way it was originally
+     * encoded so we take save the portion of the original cert that the signature would have made for.
+     *
+     * @var string
+     * @access private
+     */
+    var $signatureSubject;
+
+    /**
+     * Certificate Start Date
+     *
+     * @var string
+     * @access private
+     */
+    var $startDate;
+
+    /**
+     * Certificate End Date
+     *
+     * @var string
+     * @access private
+     */
+    var $endDate;
+
+    /**
+     * Serial Number
+     *
+     * @var string
+     * @access private
+     */
+    var $serialNumber;
+
+    /**
+     * Key Identifier
+     *
+     * See {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.1 RFC5280#section-4.2.1.1} and
+     * {@link http://tools.ietf.org/html/rfc5280#section-4.2.1.2 RFC5280#section-4.2.1.2}.
+     *
+     * @var string
+     * @access private
+     */
+    var $currentKeyIdentifier;
+
+    /**
+     * CA Flag
+     *
+     * @var bool
+     * @access private
+     */
+    var $caFlag = false;
+
+    /**
+     * SPKAC Challenge
+     *
+     * @var string
+     * @access private
+     */
+    var $challenge;
+
+    /**
+     * Recursion Limit
+     *
+     * @var int
+     * @access private
+     */
+    static $recur_limit = 5;
+
+    /**
+     * URL fetch flag
+     *
+     * @var bool
+     * @access private
+     */
+    static $disable_url_fetch = false;
+
+    /**
+     * Default Constructor.
+     *
+     * @return \phpseclib\File\X509
+     * @access public
+     */
+    function __construct()
+    {
+        // Explicitly Tagged Module, 1988 Syntax
+        // http://tools.ietf.org/html/rfc5280#appendix-A.1
+
+        $this->DirectoryString = array(
+            'type'     => ASN1::TYPE_CHOICE,
+            'children' => array(
+                'teletexString'   => array('type' => ASN1::TYPE_TELETEX_STRING),
+                'printableString' => array('type' => ASN1::TYPE_PRINTABLE_STRING),
+                'universalString' => array('type' => ASN1::TYPE_UNIVERSAL_STRING),
+                'utf8String'      => array('type' => ASN1::TYPE_UTF8_STRING),
+                'bmpString'       => array('type' => ASN1::TYPE_BMP_STRING)
+            )
+        );
+
+        $this->PKCS9String = array(
+            'type'     => ASN1::TYPE_CHOICE,
+            'children' => array(
+                'ia5String'       => array('type' => ASN1::TYPE_IA5_STRING),
+                'directoryString' => $this->DirectoryString
+            )
+        );
+
+        $this->AttributeValue = array('type' => ASN1::TYPE_ANY);
+
+        $AttributeType = array('type' => ASN1::TYPE_OBJECT_IDENTIFIER);
+
+        $AttributeTypeAndValue = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'type' => $AttributeType,
+                'value'=> $this->AttributeValue
+            )
+        );
+
+        /*
+        In practice, RDNs containing multiple name-value pairs (called "multivalued RDNs") are rare,
+        but they can be useful at times when either there is no unique attribute in the entry or you
+        want to ensure that the entry's DN contains some useful identifying information.
+
+        - https://www.opends.org/wiki/page/DefinitionRelativeDistinguishedName
+        */
+        $this->RelativeDistinguishedName = array(
+            'type'     => ASN1::TYPE_SET,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $AttributeTypeAndValue
+        );
+
+        // http://tools.ietf.org/html/rfc5280#section-4.1.2.4
+        $RDNSequence = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            // RDNSequence does not define a min or a max, which means it doesn't have one
+            'min'      => 0,
+            'max'      => -1,
+            'children' => $this->RelativeDistinguishedName
+        );
+
+        $this->Name = array(
+            'type'     => ASN1::TYPE_CHOICE,
+            'children' => array(
+                'rdnSequence' => $RDNSequence
+            )
+        );
+
+        // http://tools.ietf.org/html/rfc5280#section-4.1.1.2
+        $AlgorithmIdentifier = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'algorithm'  => array('type' => ASN1::TYPE_OBJECT_IDENTIFIER),
+                'parameters' => array(
+                                    'type'     => ASN1::TYPE_ANY,
+                                    'optional' => true
+                                )
+            )
+        );
+
+        /*
+           A certificate using system MUST reject the certificate if it encounters
+           a critical extension it does not recognize; however, a non-critical
+           extension may be ignored if it is not recognized.
+
+           http://tools.ietf.org/html/rfc5280#section-4.2
+        */
+        $Extension = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'extnId'   => array('type' => ASN1::TYPE_OBJECT_IDENTIFIER),
+                'critical' => array(
+                                  'type'     => ASN1::TYPE_BOOLEAN,
+                                  'optional' => true,
+                                  'default'  => false
+                              ),
+                'extnValue' => array('type' => ASN1::TYPE_OCTET_STRING)
+            )
+        );
+
+        $this->Extensions = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'min'      => 1,
+            // technically, it's MAX, but we'll assume anything < 0 is MAX
+            'max'      => -1,
+            // if 'children' isn't an array then 'min' and 'max' must be defined
+            'children' => $Extension
+        );
+
+        $SubjectPublicKeyInfo = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'algorithm'        => $AlgorithmIdentifier,
+                'subjectPublicKey' => array('type' => ASN1::TYPE_BIT_STRING)
+            )
+        );
+
+        $UniqueIdentifier = array('type' => ASN1::TYPE_BIT_STRING);
+
+        $Time = array(
+            'type'     => ASN1::TYPE_CHOICE,
+            'children' => array(
+                'utcTime'     => array('type' => ASN1::TYPE_UTC_TIME),
+                'generalTime' => array('type' => ASN1::TYPE_GENERALIZED_TIME)
+            )
+        );
+
+        // http://tools.ietf.org/html/rfc5280#section-4.1.2.5
+        $Validity = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'notBefore' => $Time,
+                'notAfter'  => $Time
+            )
+        );
+
+        $CertificateSerialNumber = array('type' => ASN1::TYPE_INTEGER);
+
+        $Version = array(
+            'type'    => ASN1::TYPE_INTEGER,
+            'mapping' => array('v1', 'v2', 'v3')
+        );
+
+        // assert($TBSCertificate['children']['signature'] == $Certificate['children']['signatureAlgorithm'])
+        $TBSCertificate = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                // technically, default implies optional, but we'll define it as being optional, none-the-less, just to
+                // reenforce that fact
+                'version'             => array(
+                                             'constant' => 0,
+                                             'optional' => true,
+                                             'explicit' => true,
+                                             'default'  => 'v1'
+                                         ) + $Version,
+                'serialNumber'         => $CertificateSerialNumber,
+                'signature'            => $AlgorithmIdentifier,
+                'issuer'               => $this->Name,
+                'validity'             => $Validity,
+                'subject'              => $this->Name,
+                'subjectPublicKeyInfo' => $SubjectPublicKeyInfo,
+                // implicit means that the T in the TLV structure is to be rewritten, regardless of the type
+                'issuerUniqueID'       => array(
+                                               'constant' => 1,
+                                               'optional' => true,
+                                               'implicit' => true
+                                           ) + $UniqueIdentifier,
+                'subjectUniqueID'       => array(
+                                               'constant' => 2,
+                                               'optional' => true,
+                                               'implicit' => true
+                                           ) + $UniqueIdentifier,
+                // <http://tools.ietf.org/html/rfc2459#page-74> doesn't use the EXPLICIT keyword but if
+                // it's not IMPLICIT, it's EXPLICIT
+                'extensions'            => array(
+                                               'constant' => 3,
+                                               'optional' => true,
+                                               'explicit' => true
+                                           ) + $this->Extensions
+            )
+        );
+
+        $this->Certificate = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                 'tbsCertificate'     => $TBSCertificate,
+                 'signatureAlgorithm' => $AlgorithmIdentifier,
+                 'signature'          => array('type' => ASN1::TYPE_BIT_STRING)
+            )
+        );
+
+        $this->KeyUsage = array(
+            'type'    => ASN1::TYPE_BIT_STRING,
+            'mapping' => array(
+                'digitalSignature',
+                'nonRepudiation',
+                'keyEncipherment',
+                'dataEncipherment',
+                'keyAgreement',
+                'keyCertSign',
+                'cRLSign',
+                'encipherOnly',
+                'decipherOnly'
+            )
+        );
+
+        $this->BasicConstraints = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'cA'                => array(
+                                                 'type'     => ASN1::TYPE_BOOLEAN,
+                                                 'optional' => true,
+                                                 'default'  => false
+                                       ),
+                'pathLenConstraint' => array(
+                                                 'type' => ASN1::TYPE_INTEGER,
+                                                 'optional' => true
+                                       )
+            )
+        );
+
+        $this->KeyIdentifier = array('type' => ASN1::TYPE_OCTET_STRING);
+
+        $OrganizationalUnitNames = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => 4, // ub-organizational-units
+            'children' => array('type' => ASN1::TYPE_PRINTABLE_STRING)
+        );
+
+        $PersonalName = array(
+            'type'     => ASN1::TYPE_SET,
+            'children' => array(
+                'surname'              => array(
+                                           'type' => ASN1::TYPE_PRINTABLE_STRING,
+                                           'constant' => 0,
+                                           'optional' => true,
+                                           'implicit' => true
+                                         ),
+                'given-name'           => array(
+                                           'type' => ASN1::TYPE_PRINTABLE_STRING,
+                                           'constant' => 1,
+                                           'optional' => true,
+                                           'implicit' => true
+                                         ),
+                'initials'             => array(
+                                           'type' => ASN1::TYPE_PRINTABLE_STRING,
+                                           'constant' => 2,
+                                           'optional' => true,
+                                           'implicit' => true
+                                         ),
+                'generation-qualifier' => array(
+                                           'type' => ASN1::TYPE_PRINTABLE_STRING,
+                                           'constant' => 3,
+                                           'optional' => true,
+                                           'implicit' => true
+                                         )
+            )
+        );
+
+        $NumericUserIdentifier = array('type' => ASN1::TYPE_NUMERIC_STRING);
+
+        $OrganizationName = array('type' => ASN1::TYPE_PRINTABLE_STRING);
+
+        $PrivateDomainName = array(
+            'type'     => ASN1::TYPE_CHOICE,
+            'children' => array(
+                'numeric'   => array('type' => ASN1::TYPE_NUMERIC_STRING),
+                'printable' => array('type' => ASN1::TYPE_PRINTABLE_STRING)
+            )
+        );
+
+        $TerminalIdentifier = array('type' => ASN1::TYPE_PRINTABLE_STRING);
+
+        $NetworkAddress = array('type' => ASN1::TYPE_NUMERIC_STRING);
+
+        $AdministrationDomainName = array(
+            'type'     => ASN1::TYPE_CHOICE,
+            // if class isn't present it's assumed to be \phpseclib\File\ASN1::CLASS_UNIVERSAL or
+            // (if constant is present) \phpseclib\File\ASN1::CLASS_CONTEXT_SPECIFIC
+            'class'    => ASN1::CLASS_APPLICATION,
+            'cast'     => 2,
+            'children' => array(
+                'numeric'   => array('type' => ASN1::TYPE_NUMERIC_STRING),
+                'printable' => array('type' => ASN1::TYPE_PRINTABLE_STRING)
+            )
+        );
+
+        $CountryName = array(
+            'type'     => ASN1::TYPE_CHOICE,
+            // if class isn't present it's assumed to be \phpseclib\File\ASN1::CLASS_UNIVERSAL or
+            // (if constant is present) \phpseclib\File\ASN1::CLASS_CONTEXT_SPECIFIC
+            'class'    => ASN1::CLASS_APPLICATION,
+            'cast'     => 1,
+            'children' => array(
+                'x121-dcc-code'        => array('type' => ASN1::TYPE_NUMERIC_STRING),
+                'iso-3166-alpha2-code' => array('type' => ASN1::TYPE_PRINTABLE_STRING)
+            )
+        );
+
+        $AnotherName = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                 'type-id' => array('type' => ASN1::TYPE_OBJECT_IDENTIFIER),
+                 'value'   => array(
+                                  'type' => ASN1::TYPE_ANY,
+                                  'constant' => 0,
+                                  'optional' => true,
+                                  'explicit' => true
+                              )
+            )
+        );
+
+        $ExtensionAttribute = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                 'extension-attribute-type'  => array(
+                                                    'type' => ASN1::TYPE_PRINTABLE_STRING,
+                                                    'constant' => 0,
+                                                    'optional' => true,
+                                                    'implicit' => true
+                                                ),
+                 'extension-attribute-value' => array(
+                                                    'type' => ASN1::TYPE_ANY,
+                                                    'constant' => 1,
+                                                    'optional' => true,
+                                                    'explicit' => true
+                                                )
+            )
+        );
+
+        $ExtensionAttributes = array(
+            'type'     => ASN1::TYPE_SET,
+            'min'      => 1,
+            'max'      => 256, // ub-extension-attributes
+            'children' => $ExtensionAttribute
+        );
+
+        $BuiltInDomainDefinedAttribute = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                 'type'  => array('type' => ASN1::TYPE_PRINTABLE_STRING),
+                 'value' => array('type' => ASN1::TYPE_PRINTABLE_STRING)
+            )
+        );
+
+        $BuiltInDomainDefinedAttributes = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => 4, // ub-domain-defined-attributes
+            'children' => $BuiltInDomainDefinedAttribute
+        );
+
+        $BuiltInStandardAttributes =  array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'country-name'               => array('optional' => true) + $CountryName,
+                'administration-domain-name' => array('optional' => true) + $AdministrationDomainName,
+                'network-address'            => array(
+                                                 'constant' => 0,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $NetworkAddress,
+                'terminal-identifier'        => array(
+                                                 'constant' => 1,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $TerminalIdentifier,
+                'private-domain-name'        => array(
+                                                 'constant' => 2,
+                                                 'optional' => true,
+                                                 'explicit' => true
+                                               ) + $PrivateDomainName,
+                'organization-name'          => array(
+                                                 'constant' => 3,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $OrganizationName,
+                'numeric-user-identifier'    => array(
+                                                 'constant' => 4,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $NumericUserIdentifier,
+                'personal-name'              => array(
+                                                 'constant' => 5,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $PersonalName,
+                'organizational-unit-names'  => array(
+                                                 'constant' => 6,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $OrganizationalUnitNames
+            )
+        );
+
+        $ORAddress = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                 'built-in-standard-attributes'       => $BuiltInStandardAttributes,
+                 'built-in-domain-defined-attributes' => array('optional' => true) + $BuiltInDomainDefinedAttributes,
+                 'extension-attributes'               => array('optional' => true) + $ExtensionAttributes
+            )
+        );
+
+        $EDIPartyName = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                 'nameAssigner' => array(
+                                    'constant' => 0,
+                                    'optional' => true,
+                                    'implicit' => true
+                                ) + $this->DirectoryString,
+                 // partyName is technically required but \phpseclib\File\ASN1 doesn't currently support non-optional constants and
+                 // setting it to optional gets the job done in any event.
+                 'partyName'    => array(
+                                    'constant' => 1,
+                                    'optional' => true,
+                                    'implicit' => true
+                                ) + $this->DirectoryString
+            )
+        );
+
+        $GeneralName = array(
+            'type'     => ASN1::TYPE_CHOICE,
+            'children' => array(
+                'otherName'                 => array(
+                                                 'constant' => 0,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $AnotherName,
+                'rfc822Name'                => array(
+                                                 'type' => ASN1::TYPE_IA5_STRING,
+                                                 'constant' => 1,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ),
+                'dNSName'                   => array(
+                                                 'type' => ASN1::TYPE_IA5_STRING,
+                                                 'constant' => 2,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ),
+                'x400Address'               => array(
+                                                 'constant' => 3,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $ORAddress,
+                'directoryName'             => array(
+                                                 'constant' => 4,
+                                                 'optional' => true,
+                                                 'explicit' => true
+                                               ) + $this->Name,
+                'ediPartyName'              => array(
+                                                 'constant' => 5,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $EDIPartyName,
+                'uniformResourceIdentifier' => array(
+                                                 'type' => ASN1::TYPE_IA5_STRING,
+                                                 'constant' => 6,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ),
+                'iPAddress'                 => array(
+                                                 'type' => ASN1::TYPE_OCTET_STRING,
+                                                 'constant' => 7,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ),
+                'registeredID'              => array(
+                                                 'type' => ASN1::TYPE_OBJECT_IDENTIFIER,
+                                                 'constant' => 8,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               )
+            )
+        );
+
+        $GeneralNames = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $GeneralName
+        );
+
+        $this->IssuerAltName = $GeneralNames;
+
+        $ReasonFlags = array(
+            'type'    => ASN1::TYPE_BIT_STRING,
+            'mapping' => array(
+                'unused',
+                'keyCompromise',
+                'cACompromise',
+                'affiliationChanged',
+                'superseded',
+                'cessationOfOperation',
+                'certificateHold',
+                'privilegeWithdrawn',
+                'aACompromise'
+            )
+        );
+
+        $DistributionPointName = array(
+            'type'     => ASN1::TYPE_CHOICE,
+            'children' => array(
+                'fullName'                => array(
+                                                 'constant' => 0,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                       ) + $GeneralNames,
+                'nameRelativeToCRLIssuer' => array(
+                                                 'constant' => 1,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                       ) + $this->RelativeDistinguishedName
+            )
+        );
+
+        $DistributionPoint = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'distributionPoint' => array(
+                                                 'constant' => 0,
+                                                 'optional' => true,
+                                                 'explicit' => true
+                                       ) + $DistributionPointName,
+                'reasons'           => array(
+                                                 'constant' => 1,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                       ) + $ReasonFlags,
+                'cRLIssuer'         => array(
+                                                 'constant' => 2,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                       ) + $GeneralNames
+            )
+        );
+
+        $this->CRLDistributionPoints = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $DistributionPoint
+        );
+
+        $this->AuthorityKeyIdentifier = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'keyIdentifier'             => array(
+                                                 'constant' => 0,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $this->KeyIdentifier,
+                'authorityCertIssuer'       => array(
+                                                 'constant' => 1,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $GeneralNames,
+                'authorityCertSerialNumber' => array(
+                                                 'constant' => 2,
+                                                 'optional' => true,
+                                                 'implicit' => true
+                                               ) + $CertificateSerialNumber
+            )
+        );
+
+        $PolicyQualifierId = array('type' => ASN1::TYPE_OBJECT_IDENTIFIER);
+
+        $PolicyQualifierInfo = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'policyQualifierId' => $PolicyQualifierId,
+                'qualifier'         => array('type' => ASN1::TYPE_ANY)
+            )
+        );
+
+        $CertPolicyId = array('type' => ASN1::TYPE_OBJECT_IDENTIFIER);
+
+        $PolicyInformation = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'policyIdentifier' => $CertPolicyId,
+                'policyQualifiers' => array(
+                                          'type'     => ASN1::TYPE_SEQUENCE,
+                                          'min'      => 0,
+                                          'max'      => -1,
+                                          'optional' => true,
+                                          'children' => $PolicyQualifierInfo
+                                      )
+            )
+        );
+
+        $this->CertificatePolicies = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $PolicyInformation
+        );
+
+        $this->PolicyMappings = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => array(
+                              'type'     => ASN1::TYPE_SEQUENCE,
+                              'children' => array(
+                                  'issuerDomainPolicy' => $CertPolicyId,
+                                  'subjectDomainPolicy' => $CertPolicyId
+                              )
+                       )
+        );
+
+        $KeyPurposeId = array('type' => ASN1::TYPE_OBJECT_IDENTIFIER);
+
+        $this->ExtKeyUsageSyntax = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $KeyPurposeId
+        );
+
+        $AccessDescription = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'accessMethod'   => array('type' => ASN1::TYPE_OBJECT_IDENTIFIER),
+                'accessLocation' => $GeneralName
+            )
+        );
+
+        $this->AuthorityInfoAccessSyntax = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $AccessDescription
+        );
+
+        $this->SubjectAltName = $GeneralNames;
+
+        $this->PrivateKeyUsagePeriod = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'notBefore' => array(
+                                                 'constant' => 0,
+                                                 'optional' => true,
+                                                 'implicit' => true,
+                                                 'type' => ASN1::TYPE_GENERALIZED_TIME),
+                'notAfter'  => array(
+                                                 'constant' => 1,
+                                                 'optional' => true,
+                                                 'implicit' => true,
+                                                 'type' => ASN1::TYPE_GENERALIZED_TIME)
+            )
+        );
+
+        $BaseDistance = array('type' => ASN1::TYPE_INTEGER);
+
+        $GeneralSubtree = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'base'    => $GeneralName,
+                'minimum' => array(
+                                 'constant' => 0,
+                                 'optional' => true,
+                                 'implicit' => true,
+                                 'default' => new BigInteger(0)
+                             ) + $BaseDistance,
+                'maximum' => array(
+                                 'constant' => 1,
+                                 'optional' => true,
+                                 'implicit' => true,
+                             ) + $BaseDistance
+            )
+        );
+
+        $GeneralSubtrees = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $GeneralSubtree
+        );
+
+        $this->NameConstraints = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'permittedSubtrees' => array(
+                                           'constant' => 0,
+                                           'optional' => true,
+                                           'implicit' => true
+                                       ) + $GeneralSubtrees,
+                'excludedSubtrees'  => array(
+                                           'constant' => 1,
+                                           'optional' => true,
+                                           'implicit' => true
+                                       ) + $GeneralSubtrees
+            )
+        );
+
+        $this->CPSuri = array('type' => ASN1::TYPE_IA5_STRING);
+
+        $DisplayText = array(
+            'type'     => ASN1::TYPE_CHOICE,
+            'children' => array(
+                'ia5String'     => array('type' => ASN1::TYPE_IA5_STRING),
+                'visibleString' => array('type' => ASN1::TYPE_VISIBLE_STRING),
+                'bmpString'     => array('type' => ASN1::TYPE_BMP_STRING),
+                'utf8String'    => array('type' => ASN1::TYPE_UTF8_STRING)
+            )
+        );
+
+        $NoticeReference = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'organization'  => $DisplayText,
+                'noticeNumbers' => array(
+                                       'type'     => ASN1::TYPE_SEQUENCE,
+                                       'min'      => 1,
+                                       'max'      => 200,
+                                       'children' => array('type' => ASN1::TYPE_INTEGER)
+                                   )
+            )
+        );
+
+        $this->UserNotice = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'noticeRef' => array(
+                                           'optional' => true,
+                                           'implicit' => true
+                                       ) + $NoticeReference,
+                'explicitText'  => array(
+                                           'optional' => true,
+                                           'implicit' => true
+                                       ) + $DisplayText
+            )
+        );
+
+        // mapping is from <http://www.mozilla.org/projects/security/pki/nss/tech-notes/tn3.html>
+        $this->netscape_cert_type = array(
+            'type'    => ASN1::TYPE_BIT_STRING,
+            'mapping' => array(
+                'SSLClient',
+                'SSLServer',
+                'Email',
+                'ObjectSigning',
+                'Reserved',
+                'SSLCA',
+                'EmailCA',
+                'ObjectSigningCA'
+            )
+        );
+
+        $this->netscape_comment = array('type' => ASN1::TYPE_IA5_STRING);
+        $this->netscape_ca_policy_url = array('type' => ASN1::TYPE_IA5_STRING);
+
+        // attribute is used in RFC2986 but we're using the RFC5280 definition
+
+        $Attribute = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'type' => $AttributeType,
+                'value'=> array(
+                              'type'     => ASN1::TYPE_SET,
+                              'min'      => 1,
+                              'max'      => -1,
+                              'children' => $this->AttributeValue
+                          )
+            )
+        );
+
+        $this->SubjectDirectoryAttributes = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $Attribute
+        );
+
+        // adapted from <http://tools.ietf.org/html/rfc2986>
+
+        $Attributes = array(
+            'type'     => ASN1::TYPE_SET,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $Attribute
+        );
+
+        $CertificationRequestInfo = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'version'       => array(
+                                       'type' => ASN1::TYPE_INTEGER,
+                                       'mapping' => array('v1')
+                                   ),
+                'subject'       => $this->Name,
+                'subjectPKInfo' => $SubjectPublicKeyInfo,
+                'attributes'    => array(
+                                       'constant' => 0,
+                                       'optional' => true,
+                                       'implicit' => true
+                                   ) + $Attributes,
+            )
+        );
+
+        $this->CertificationRequest = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'certificationRequestInfo' => $CertificationRequestInfo,
+                'signatureAlgorithm'       => $AlgorithmIdentifier,
+                'signature'                => array('type' => ASN1::TYPE_BIT_STRING)
+            )
+        );
+
+        $RevokedCertificate = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                              'userCertificate'    => $CertificateSerialNumber,
+                              'revocationDate'     => $Time,
+                              'crlEntryExtensions' => array(
+                                                          'optional' => true
+                                                      ) + $this->Extensions
+                          )
+        );
+
+        $TBSCertList = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'version'             => array(
+                                             'optional' => true,
+                                             'default'  => 'v1'
+                                         ) + $Version,
+                'signature'           => $AlgorithmIdentifier,
+                'issuer'              => $this->Name,
+                'thisUpdate'          => $Time,
+                'nextUpdate'          => array(
+                                             'optional' => true
+                                         ) + $Time,
+                'revokedCertificates' => array(
+                                             'type'     => ASN1::TYPE_SEQUENCE,
+                                             'optional' => true,
+                                             'min'      => 0,
+                                             'max'      => -1,
+                                             'children' => $RevokedCertificate
+                                         ),
+                'crlExtensions'       => array(
+                                             'constant' => 0,
+                                             'optional' => true,
+                                             'explicit' => true
+                                         ) + $this->Extensions
+            )
+        );
+
+        $this->CertificateList = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'tbsCertList'        => $TBSCertList,
+                'signatureAlgorithm' => $AlgorithmIdentifier,
+                'signature'          => array('type' => ASN1::TYPE_BIT_STRING)
+            )
+        );
+
+        $this->CRLNumber = array('type' => ASN1::TYPE_INTEGER);
+
+        $this->CRLReason = array('type' => ASN1::TYPE_ENUMERATED,
+           'mapping' => array(
+                            'unspecified',
+                            'keyCompromise',
+                            'cACompromise',
+                            'affiliationChanged',
+                            'superseded',
+                            'cessationOfOperation',
+                            'certificateHold',
+                            // Value 7 is not used.
+                            8 => 'removeFromCRL',
+                            'privilegeWithdrawn',
+                            'aACompromise'
+            )
+        );
+
+        $this->IssuingDistributionPoint = array('type' => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'distributionPoint'          => array(
+                                                    'constant' => 0,
+                                                    'optional' => true,
+                                                    'explicit' => true
+                                                ) + $DistributionPointName,
+                'onlyContainsUserCerts'      => array(
+                                                    'type'     => ASN1::TYPE_BOOLEAN,
+                                                    'constant' => 1,
+                                                    'optional' => true,
+                                                    'default'  => false,
+                                                    'implicit' => true
+                                                ),
+                'onlyContainsCACerts'        => array(
+                                                    'type'     => ASN1::TYPE_BOOLEAN,
+                                                    'constant' => 2,
+                                                    'optional' => true,
+                                                    'default'  => false,
+                                                    'implicit' => true
+                                                ),
+                'onlySomeReasons'           => array(
+                                                    'constant' => 3,
+                                                    'optional' => true,
+                                                    'implicit' => true
+                                                ) + $ReasonFlags,
+                'indirectCRL'               => array(
+                                                    'type'     => ASN1::TYPE_BOOLEAN,
+                                                    'constant' => 4,
+                                                    'optional' => true,
+                                                    'default'  => false,
+                                                    'implicit' => true
+                                                ),
+                'onlyContainsAttributeCerts' => array(
+                                                    'type'     => ASN1::TYPE_BOOLEAN,
+                                                    'constant' => 5,
+                                                    'optional' => true,
+                                                    'default'  => false,
+                                                    'implicit' => true
+                                                )
+                          )
+        );
+
+        $this->InvalidityDate = array('type' => ASN1::TYPE_GENERALIZED_TIME);
+
+        $this->CertificateIssuer = $GeneralNames;
+
+        $this->HoldInstructionCode = array('type' => ASN1::TYPE_OBJECT_IDENTIFIER);
+
+        $PublicKeyAndChallenge = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'spki'      => $SubjectPublicKeyInfo,
+                'challenge' => array('type' => ASN1::TYPE_IA5_STRING)
+            )
+        );
+
+        $this->SignedPublicKeyAndChallenge = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'children' => array(
+                'publicKeyAndChallenge' => $PublicKeyAndChallenge,
+                'signatureAlgorithm'    => $AlgorithmIdentifier,
+                'signature'             => array('type' => ASN1::TYPE_BIT_STRING)
+            )
+        );
+
+        $this->PostalAddress = array(
+            'type'     => ASN1::TYPE_SEQUENCE,
+            'optional' => true,
+            'min'      => 1,
+            'max'      => -1,
+            'children' => $this->DirectoryString
+        );
+
+        // OIDs from RFC5280 and those RFCs mentioned in RFC5280#section-4.1.1.2
+        $this->oids = array(
+            '1.3.6.1.5.5.7' => 'id-pkix',
+            '1.3.6.1.5.5.7.1' => 'id-pe',
+            '1.3.6.1.5.5.7.2' => 'id-qt',
+            '1.3.6.1.5.5.7.3' => 'id-kp',
+            '1.3.6.1.5.5.7.48' => 'id-ad',
+            '1.3.6.1.5.5.7.2.1' => 'id-qt-cps',
+            '1.3.6.1.5.5.7.2.2' => 'id-qt-unotice',
+            '1.3.6.1.5.5.7.48.1' =>'id-ad-ocsp',
+            '1.3.6.1.5.5.7.48.2' => 'id-ad-caIssuers',
+            '1.3.6.1.5.5.7.48.3' => 'id-ad-timeStamping',
+            '1.3.6.1.5.5.7.48.5' => 'id-ad-caRepository',
+            '2.5.4' => 'id-at',
+            '2.5.4.41' => 'id-at-name',
+            '2.5.4.4' => 'id-at-surname',
+            '2.5.4.42' => 'id-at-givenName',
+            '2.5.4.43' => 'id-at-initials',
+            '2.5.4.44' => 'id-at-generationQualifier',
+            '2.5.4.3' => 'id-at-commonName',
+            '2.5.4.7' => 'id-at-localityName',
+            '2.5.4.8' => 'id-at-stateOrProvinceName',
+            '2.5.4.10' => 'id-at-organizationName',
+            '2.5.4.11' => 'id-at-organizationalUnitName',
+            '2.5.4.12' => 'id-at-title',
+            '2.5.4.13' => 'id-at-description',
+            '2.5.4.46' => 'id-at-dnQualifier',
+            '2.5.4.6' => 'id-at-countryName',
+            '2.5.4.5' => 'id-at-serialNumber',
+            '2.5.4.65' => 'id-at-pseudonym',
+            '2.5.4.17' => 'id-at-postalCode',
+            '2.5.4.9' => 'id-at-streetAddress',
+            '2.5.4.45' => 'id-at-uniqueIdentifier',
+            '2.5.4.72' => 'id-at-role',
+            '2.5.4.16' => 'id-at-postalAddress',
+
+            '0.9.2342.19200300.100.1.25' => 'id-domainComponent',
+            '1.2.840.113549.1.9' => 'pkcs-9',
+            '1.2.840.113549.1.9.1' => 'pkcs-9-at-emailAddress',
+            '2.5.29' => 'id-ce',
+            '2.5.29.35' => 'id-ce-authorityKeyIdentifier',
+            '2.5.29.14' => 'id-ce-subjectKeyIdentifier',
+            '2.5.29.15' => 'id-ce-keyUsage',
+            '2.5.29.16' => 'id-ce-privateKeyUsagePeriod',
+            '2.5.29.32' => 'id-ce-certificatePolicies',
+            '2.5.29.32.0' => 'anyPolicy',
+
+            '2.5.29.33' => 'id-ce-policyMappings',
+            '2.5.29.17' => 'id-ce-subjectAltName',
+            '2.5.29.18' => 'id-ce-issuerAltName',
+            '2.5.29.9' => 'id-ce-subjectDirectoryAttributes',
+            '2.5.29.19' => 'id-ce-basicConstraints',
+            '2.5.29.30' => 'id-ce-nameConstraints',
+            '2.5.29.36' => 'id-ce-policyConstraints',
+            '2.5.29.31' => 'id-ce-cRLDistributionPoints',
+            '2.5.29.37' => 'id-ce-extKeyUsage',
+            '2.5.29.37.0' => 'anyExtendedKeyUsage',
+            '1.3.6.1.5.5.7.3.1' => 'id-kp-serverAuth',
+            '1.3.6.1.5.5.7.3.2' => 'id-kp-clientAuth',
+            '1.3.6.1.5.5.7.3.3' => 'id-kp-codeSigning',
+            '1.3.6.1.5.5.7.3.4' => 'id-kp-emailProtection',
+            '1.3.6.1.5.5.7.3.8' => 'id-kp-timeStamping',
+            '1.3.6.1.5.5.7.3.9' => 'id-kp-OCSPSigning',
+            '2.5.29.54' => 'id-ce-inhibitAnyPolicy',
+            '2.5.29.46' => 'id-ce-freshestCRL',
+            '1.3.6.1.5.5.7.1.1' => 'id-pe-authorityInfoAccess',
+            '1.3.6.1.5.5.7.1.11' => 'id-pe-subjectInfoAccess',
+            '2.5.29.20' => 'id-ce-cRLNumber',
+            '2.5.29.28' => 'id-ce-issuingDistributionPoint',
+            '2.5.29.27' => 'id-ce-deltaCRLIndicator',
+            '2.5.29.21' => 'id-ce-cRLReasons',
+            '2.5.29.29' => 'id-ce-certificateIssuer',
+            '2.5.29.23' => 'id-ce-holdInstructionCode',
+            '1.2.840.10040.2' => 'holdInstruction',
+            '1.2.840.10040.2.1' => 'id-holdinstruction-none',
+            '1.2.840.10040.2.2' => 'id-holdinstruction-callissuer',
+            '1.2.840.10040.2.3' => 'id-holdinstruction-reject',
+            '2.5.29.24' => 'id-ce-invalidityDate',
+
+            '1.2.840.113549.2.2' => 'md2',
+            '1.2.840.113549.2.5' => 'md5',
+            '1.3.14.3.2.26' => 'id-sha1',
+            '1.2.840.10040.4.1' => 'id-dsa',
+            '1.2.840.10040.4.3' => 'id-dsa-with-sha1',
+            '1.2.840.113549.1.1' => 'pkcs-1',
+            '1.2.840.113549.1.1.1' => 'rsaEncryption',
+            '1.2.840.113549.1.1.2' => 'md2WithRSAEncryption',
+            '1.2.840.113549.1.1.4' => 'md5WithRSAEncryption',
+            '1.2.840.113549.1.1.5' => 'sha1WithRSAEncryption',
+            '1.2.840.10046.2.1' => 'dhpublicnumber',
+            '2.16.840.1.101.2.1.1.22' => 'id-keyExchangeAlgorithm',
+            '1.2.840.10045' => 'ansi-X9-62',
+            '1.2.840.10045.4' => 'id-ecSigType',
+            '1.2.840.10045.4.1' => 'ecdsa-with-SHA1',
+            '1.2.840.10045.1' => 'id-fieldType',
+            '1.2.840.10045.1.1' => 'prime-field',
+            '1.2.840.10045.1.2' => 'characteristic-two-field',
+            '1.2.840.10045.1.2.3' => 'id-characteristic-two-basis',
+            '1.2.840.10045.1.2.3.1' => 'gnBasis',
+            '1.2.840.10045.1.2.3.2' => 'tpBasis',
+            '1.2.840.10045.1.2.3.3' => 'ppBasis',
+            '1.2.840.10045.2' => 'id-publicKeyType',
+            '1.2.840.10045.2.1' => 'id-ecPublicKey',
+            '1.2.840.10045.3' => 'ellipticCurve',
+            '1.2.840.10045.3.0' => 'c-TwoCurve',
+            '1.2.840.10045.3.0.1' => 'c2pnb163v1',
+            '1.2.840.10045.3.0.2' => 'c2pnb163v2',
+            '1.2.840.10045.3.0.3' => 'c2pnb163v3',
+            '1.2.840.10045.3.0.4' => 'c2pnb176w1',
+            '1.2.840.10045.3.0.5' => 'c2pnb191v1',
+            '1.2.840.10045.3.0.6' => 'c2pnb191v2',
+            '1.2.840.10045.3.0.7' => 'c2pnb191v3',
+            '1.2.840.10045.3.0.8' => 'c2pnb191v4',
+            '1.2.840.10045.3.0.9' => 'c2pnb191v5',
+            '1.2.840.10045.3.0.10' => 'c2pnb208w1',
+            '1.2.840.10045.3.0.11' => 'c2pnb239v1',
+            '1.2.840.10045.3.0.12' => 'c2pnb239v2',
+            '1.2.840.10045.3.0.13' => 'c2pnb239v3',
+            '1.2.840.10045.3.0.14' => 'c2pnb239v4',
+            '1.2.840.10045.3.0.15' => 'c2pnb239v5',
+            '1.2.840.10045.3.0.16' => 'c2pnb272w1',
+            '1.2.840.10045.3.0.17' => 'c2pnb304w1',
+            '1.2.840.10045.3.0.18' => 'c2pnb359v1',
+            '1.2.840.10045.3.0.19' => 'c2pnb368w1',
+            '1.2.840.10045.3.0.20' => 'c2pnb431r1',
+            '1.2.840.10045.3.1' => 'primeCurve',
+            '1.2.840.10045.3.1.1' => 'prime192v1',
+            '1.2.840.10045.3.1.2' => 'prime192v2',
+            '1.2.840.10045.3.1.3' => 'prime192v3',
+            '1.2.840.10045.3.1.4' => 'prime239v1',
+            '1.2.840.10045.3.1.5' => 'prime239v2',
+            '1.2.840.10045.3.1.6' => 'prime239v3',
+            '1.2.840.10045.3.1.7' => 'prime256v1',
+            '1.2.840.113549.1.1.7' => 'id-RSAES-OAEP',
+            '1.2.840.113549.1.1.9' => 'id-pSpecified',
+            '1.2.840.113549.1.1.10' => 'id-RSASSA-PSS',
+            '1.2.840.113549.1.1.8' => 'id-mgf1',
+            '1.2.840.113549.1.1.14' => 'sha224WithRSAEncryption',
+            '1.2.840.113549.1.1.11' => 'sha256WithRSAEncryption',
+            '1.2.840.113549.1.1.12' => 'sha384WithRSAEncryption',
+            '1.2.840.113549.1.1.13' => 'sha512WithRSAEncryption',
+            '2.16.840.1.101.3.4.2.4' => 'id-sha224',
+            '2.16.840.1.101.3.4.2.1' => 'id-sha256',
+            '2.16.840.1.101.3.4.2.2' => 'id-sha384',
+            '2.16.840.1.101.3.4.2.3' => 'id-sha512',
+            '1.2.643.2.2.4' => 'id-GostR3411-94-with-GostR3410-94',
+            '1.2.643.2.2.3' => 'id-GostR3411-94-with-GostR3410-2001',
+            '1.2.643.2.2.20' => 'id-GostR3410-2001',
+            '1.2.643.2.2.19' => 'id-GostR3410-94',
+            // Netscape Object Identifiers from "Netscape Certificate Extensions"
+            '2.16.840.1.113730' => 'netscape',
+            '2.16.840.1.113730.1' => 'netscape-cert-extension',
+            '2.16.840.1.113730.1.1' => 'netscape-cert-type',
+            '2.16.840.1.113730.1.13' => 'netscape-comment',
+            '2.16.840.1.113730.1.8' => 'netscape-ca-policy-url',
+            // the following are X.509 extensions not supported by phpseclib
+            '1.3.6.1.5.5.7.1.12' => 'id-pe-logotype',
+            '1.2.840.113533.7.65.0' => 'entrustVersInfo',
+            '2.16.840.1.113733.1.6.9' => 'verisignPrivate',
+            // for Certificate Signing Requests
+            // see http://tools.ietf.org/html/rfc2985
+            '1.2.840.113549.1.9.2' => 'pkcs-9-at-unstructuredName', // PKCS #9 unstructured name
+            '1.2.840.113549.1.9.7' => 'pkcs-9-at-challengePassword', // Challenge password for certificate revocations
+            '1.2.840.113549.1.9.14' => 'pkcs-9-at-extensionRequest' // Certificate extension request
+        );
+    }
+
+    /**
+     * Load X.509 certificate
+     *
+     * Returns an associative array describing the X.509 cert or a false if the cert failed to load
+     *
+     * @param string $cert
+     * @param int $mode
+     * @access public
+     * @return mixed
+     */
+    function loadX509($cert, $mode = self::FORMAT_AUTO_DETECT)
+    {
+        if (is_array($cert) && isset($cert['tbsCertificate'])) {
+            unset($this->currentCert);
+            unset($this->currentKeyIdentifier);
+            $this->dn = $cert['tbsCertificate']['subject'];
+            if (!isset($this->dn)) {
+                return false;
+            }
+            $this->currentCert = $cert;
+
+            $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier');
+            $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : null;
+
+            unset($this->signatureSubject);
+
+            return $cert;
+        }
+
+        $asn1 = new ASN1();
+
+        if ($mode != self::FORMAT_DER) {
+            $newcert = $this->_extractBER($cert);
+            if ($mode == self::FORMAT_PEM && $cert == $newcert) {
+                return false;
+            }
+            $cert = $newcert;
+        }
+
+        if ($cert === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $asn1->loadOIDs($this->oids);
+        $decoded = $asn1->decodeBER($cert);
+
+        if (!empty($decoded)) {
+            $x509 = $asn1->asn1map($decoded[0], $this->Certificate);
+        }
+        if (!isset($x509) || $x509 === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $this->signatureSubject = substr($cert, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);
+
+        if ($this->_isSubArrayValid($x509, 'tbsCertificate/extensions')) {
+            $this->_mapInExtensions($x509, 'tbsCertificate/extensions', $asn1);
+        }
+        $this->_mapInDNs($x509, 'tbsCertificate/issuer/rdnSequence', $asn1);
+        $this->_mapInDNs($x509, 'tbsCertificate/subject/rdnSequence', $asn1);
+
+        $key = &$x509['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'];
+        $key = $this->_reformatKey($x509['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'], $key);
+
+        $this->currentCert = $x509;
+        $this->dn = $x509['tbsCertificate']['subject'];
+
+        $currentKeyIdentifier = $this->getExtension('id-ce-subjectKeyIdentifier');
+        $this->currentKeyIdentifier = is_string($currentKeyIdentifier) ? $currentKeyIdentifier : null;
+
+        return $x509;
+    }
+
+    /**
+     * Save X.509 certificate
+     *
+     * @param array $cert
+     * @param int $format optional
+     * @access public
+     * @return string
+     */
+    function saveX509($cert, $format = self::FORMAT_PEM)
+    {
+        if (!is_array($cert) || !isset($cert['tbsCertificate'])) {
+            return false;
+        }
+
+        switch (true) {
+            // "case !$a: case !$b: break; default: whatever();" is the same thing as "if ($a && $b) whatever()"
+            case !($algorithm = $this->_subArray($cert, 'tbsCertificate/subjectPublicKeyInfo/algorithm/algorithm')):
+            case is_object($cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']):
+                break;
+            default:
+                switch ($algorithm) {
+                    case 'rsaEncryption':
+                        $cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']
+                            = base64_encode("\0" . base64_decode(preg_replace('#-.+-|[\r\n]#', '', $cert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'])));
+                        /* "[For RSA keys] the parameters field MUST have ASN.1 type NULL for this algorithm identifier."
+                           -- https://tools.ietf.org/html/rfc3279#section-2.3.1
+
+                           given that and the fact that RSA keys appear ot be the only key type for which the parameters field can be blank,
+                           it seems like perhaps the ASN.1 description ought not say the parameters field is OPTIONAL, but whatever.
+                         */
+                        $cert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['parameters'] = null;
+                        // https://tools.ietf.org/html/rfc3279#section-2.2.1
+                        $cert['signatureAlgorithm']['parameters'] = null;
+                        $cert['tbsCertificate']['signature']['parameters'] = null;
+                }
+        }
+
+        $asn1 = new ASN1();
+        $asn1->loadOIDs($this->oids);
+
+        $filters = array();
+        $type_utf8_string = array('type' => ASN1::TYPE_UTF8_STRING);
+        $filters['tbsCertificate']['signature']['parameters'] = $type_utf8_string;
+        $filters['tbsCertificate']['signature']['issuer']['rdnSequence']['value'] = $type_utf8_string;
+        $filters['tbsCertificate']['issuer']['rdnSequence']['value'] = $type_utf8_string;
+        $filters['tbsCertificate']['subject']['rdnSequence']['value'] = $type_utf8_string;
+        $filters['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['parameters'] = $type_utf8_string;
+        $filters['signatureAlgorithm']['parameters'] = $type_utf8_string;
+        $filters['authorityCertIssuer']['directoryName']['rdnSequence']['value'] = $type_utf8_string;
+        //$filters['policyQualifiers']['qualifier'] = $type_utf8_string;
+        $filters['distributionPoint']['fullName']['directoryName']['rdnSequence']['value'] = $type_utf8_string;
+        $filters['directoryName']['rdnSequence']['value'] = $type_utf8_string;
+
+        /* in the case of policyQualifiers/qualifier, the type has to be \phpseclib\File\ASN1::TYPE_IA5_STRING.
+           \phpseclib\File\ASN1::TYPE_PRINTABLE_STRING will cause OpenSSL's X.509 parser to spit out random
+           characters.
+         */
+        $filters['policyQualifiers']['qualifier']
+            = array('type' => ASN1::TYPE_IA5_STRING);
+
+        $asn1->loadFilters($filters);
+
+        $this->_mapOutExtensions($cert, 'tbsCertificate/extensions', $asn1);
+        $this->_mapOutDNs($cert, 'tbsCertificate/issuer/rdnSequence', $asn1);
+        $this->_mapOutDNs($cert, 'tbsCertificate/subject/rdnSequence', $asn1);
+
+        $cert = $asn1->encodeDER($cert, $this->Certificate);
+
+        switch ($format) {
+            case self::FORMAT_DER:
+                return $cert;
+            // case self::FORMAT_PEM:
+            default:
+                return "-----BEGIN CERTIFICATE-----\r\n" . chunk_split(base64_encode($cert), 64) . '-----END CERTIFICATE-----';
+        }
+    }
+
+    /**
+     * Map extension values from octet string to extension-specific internal
+     *   format.
+     *
+     * @param array ref $root
+     * @param string $path
+     * @param object $asn1
+     * @access private
+     */
+    function _mapInExtensions(&$root, $path, $asn1)
+    {
+        $extensions = &$this->_subArrayUnchecked($root, $path);
+
+        if ($extensions) {
+            for ($i = 0; $i < count($extensions); $i++) {
+                $id = $extensions[$i]['extnId'];
+                $value = &$extensions[$i]['extnValue'];
+                $value = base64_decode($value);
+                $decoded = $asn1->decodeBER($value);
+                /* [extnValue] contains the DER encoding of an ASN.1 value
+                   corresponding to the extension type identified by extnID */
+                $map = $this->_getMapping($id);
+                if (!is_bool($map)) {
+                    $mapped = $asn1->asn1map($decoded[0], $map, array('iPAddress' => array($this, '_decodeIP')));
+                    $value = $mapped === false ? $decoded[0] : $mapped;
+
+                    if ($id == 'id-ce-certificatePolicies') {
+                        for ($j = 0; $j < count($value); $j++) {
+                            if (!isset($value[$j]['policyQualifiers'])) {
+                                continue;
+                            }
+                            for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) {
+                                $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId'];
+                                $map = $this->_getMapping($subid);
+                                $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier'];
+                                if ($map !== false) {
+                                    $decoded = $asn1->decodeBER($subvalue);
+                                    $mapped = $asn1->asn1map($decoded[0], $map);
+                                    $subvalue = $mapped === false ? $decoded[0] : $mapped;
+                                }
+                            }
+                        }
+                    }
+                } else {
+                    $value = base64_encode($value);
+                }
+            }
+        }
+    }
+
+    /**
+     * Map extension values from extension-specific internal format to
+     *   octet string.
+     *
+     * @param array ref $root
+     * @param string $path
+     * @param object $asn1
+     * @access private
+     */
+    function _mapOutExtensions(&$root, $path, $asn1)
+    {
+        $extensions = &$this->_subArray($root, $path);
+
+        if (is_array($extensions)) {
+            $size = count($extensions);
+            for ($i = 0; $i < $size; $i++) {
+                if ($extensions[$i] instanceof Element) {
+                    continue;
+                }
+
+                $id = $extensions[$i]['extnId'];
+                $value = &$extensions[$i]['extnValue'];
+
+                switch ($id) {
+                    case 'id-ce-certificatePolicies':
+                        for ($j = 0; $j < count($value); $j++) {
+                            if (!isset($value[$j]['policyQualifiers'])) {
+                                continue;
+                            }
+                            for ($k = 0; $k < count($value[$j]['policyQualifiers']); $k++) {
+                                $subid = $value[$j]['policyQualifiers'][$k]['policyQualifierId'];
+                                $map = $this->_getMapping($subid);
+                                $subvalue = &$value[$j]['policyQualifiers'][$k]['qualifier'];
+                                if ($map !== false) {
+                                    // by default \phpseclib\File\ASN1 will try to render qualifier as a \phpseclib\File\ASN1::TYPE_IA5_STRING since it's
+                                    // actual type is \phpseclib\File\ASN1::TYPE_ANY
+                                    $subvalue = new Element($asn1->encodeDER($subvalue, $map));
+                                }
+                            }
+                        }
+                        break;
+                    case 'id-ce-authorityKeyIdentifier': // use 00 as the serial number instead of an empty string
+                        if (isset($value['authorityCertSerialNumber'])) {
+                            if ($value['authorityCertSerialNumber']->toBytes() == '') {
+                                $temp = chr((ASN1::CLASS_CONTEXT_SPECIFIC << 6) | 2) . "\1\0";
+                                $value['authorityCertSerialNumber'] = new Element($temp);
+                            }
+                        }
+                }
+
+                /* [extnValue] contains the DER encoding of an ASN.1 value
+                   corresponding to the extension type identified by extnID */
+                $map = $this->_getMapping($id);
+                if (is_bool($map)) {
+                    if (!$map) {
+                        user_error($id . ' is not a currently supported extension');
+                        unset($extensions[$i]);
+                    }
+                } else {
+                    $temp = $asn1->encodeDER($value, $map, array('iPAddress' => array($this, '_encodeIP')));
+                    $value = base64_encode($temp);
+                }
+            }
+        }
+    }
+
+    /**
+     * Map attribute values from ANY type to attribute-specific internal
+     *   format.
+     *
+     * @param array ref $root
+     * @param string $path
+     * @param object $asn1
+     * @access private
+     */
+    function _mapInAttributes(&$root, $path, $asn1)
+    {
+        $attributes = &$this->_subArray($root, $path);
+
+        if (is_array($attributes)) {
+            for ($i = 0; $i < count($attributes); $i++) {
+                $id = $attributes[$i]['type'];
+                /* $value contains the DER encoding of an ASN.1 value
+                   corresponding to the attribute type identified by type */
+                $map = $this->_getMapping($id);
+                if (is_array($attributes[$i]['value'])) {
+                    $values = &$attributes[$i]['value'];
+                    for ($j = 0; $j < count($values); $j++) {
+                        $value = $asn1->encodeDER($values[$j], $this->AttributeValue);
+                        $decoded = $asn1->decodeBER($value);
+                        if (!is_bool($map)) {
+                            $mapped = $asn1->asn1map($decoded[0], $map);
+                            if ($mapped !== false) {
+                                $values[$j] = $mapped;
+                            }
+                            if ($id == 'pkcs-9-at-extensionRequest' && $this->_isSubArrayValid($values, $j)) {
+                                $this->_mapInExtensions($values, $j, $asn1);
+                            }
+                        } elseif ($map) {
+                            $values[$j] = base64_encode($value);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Map attribute values from attribute-specific internal format to
+     *   ANY type.
+     *
+     * @param array ref $root
+     * @param string $path
+     * @param object $asn1
+     * @access private
+     */
+    function _mapOutAttributes(&$root, $path, $asn1)
+    {
+        $attributes = &$this->_subArray($root, $path);
+
+        if (is_array($attributes)) {
+            $size = count($attributes);
+            for ($i = 0; $i < $size; $i++) {
+                /* [value] contains the DER encoding of an ASN.1 value
+                   corresponding to the attribute type identified by type */
+                $id = $attributes[$i]['type'];
+                $map = $this->_getMapping($id);
+                if ($map === false) {
+                    user_error($id . ' is not a currently supported attribute', E_USER_NOTICE);
+                    unset($attributes[$i]);
+                } elseif (is_array($attributes[$i]['value'])) {
+                    $values = &$attributes[$i]['value'];
+                    for ($j = 0; $j < count($values); $j++) {
+                        switch ($id) {
+                            case 'pkcs-9-at-extensionRequest':
+                                $this->_mapOutExtensions($values, $j, $asn1);
+                                break;
+                        }
+
+                        if (!is_bool($map)) {
+                            $temp = $asn1->encodeDER($values[$j], $map);
+                            $decoded = $asn1->decodeBER($temp);
+                            $values[$j] = $asn1->asn1map($decoded[0], $this->AttributeValue);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Map DN values from ANY type to DN-specific internal
+     *   format.
+     *
+     * @param array ref $root
+     * @param string $path
+     * @param object $asn1
+     * @access private
+     */
+    function _mapInDNs(&$root, $path, $asn1)
+    {
+        $dns = &$this->_subArray($root, $path);
+
+        if (is_array($dns)) {
+            for ($i = 0; $i < count($dns); $i++) {
+                for ($j = 0; $j < count($dns[$i]); $j++) {
+                    $type = $dns[$i][$j]['type'];
+                    $value = &$dns[$i][$j]['value'];
+                    if (is_object($value) && $value instanceof Element) {
+                        $map = $this->_getMapping($type);
+                        if (!is_bool($map)) {
+                            $decoded = $asn1->decodeBER($value);
+                            $value = $asn1->asn1map($decoded[0], $map);
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Map DN values from DN-specific internal format to
+     *   ANY type.
+     *
+     * @param array ref $root
+     * @param string $path
+     * @param object $asn1
+     * @access private
+     */
+    function _mapOutDNs(&$root, $path, $asn1)
+    {
+        $dns = &$this->_subArray($root, $path);
+
+        if (is_array($dns)) {
+            $size = count($dns);
+            for ($i = 0; $i < $size; $i++) {
+                for ($j = 0; $j < count($dns[$i]); $j++) {
+                    $type = $dns[$i][$j]['type'];
+                    $value = &$dns[$i][$j]['value'];
+                    if (is_object($value) && $value instanceof Element) {
+                        continue;
+                    }
+
+                    $map = $this->_getMapping($type);
+                    if (!is_bool($map)) {
+                        $value = new Element($asn1->encodeDER($value, $map));
+                    }
+                }
+            }
+        }
+    }
+
+    /**
+     * Associate an extension ID to an extension mapping
+     *
+     * @param string $extnId
+     * @access private
+     * @return mixed
+     */
+    function _getMapping($extnId)
+    {
+        if (!is_string($extnId)) { // eg. if it's a \phpseclib\File\ASN1\Element object
+            return true;
+        }
+
+        switch ($extnId) {
+            case 'id-ce-keyUsage':
+                return $this->KeyUsage;
+            case 'id-ce-basicConstraints':
+                return $this->BasicConstraints;
+            case 'id-ce-subjectKeyIdentifier':
+                return $this->KeyIdentifier;
+            case 'id-ce-cRLDistributionPoints':
+                return $this->CRLDistributionPoints;
+            case 'id-ce-authorityKeyIdentifier':
+                return $this->AuthorityKeyIdentifier;
+            case 'id-ce-certificatePolicies':
+                return $this->CertificatePolicies;
+            case 'id-ce-extKeyUsage':
+                return $this->ExtKeyUsageSyntax;
+            case 'id-pe-authorityInfoAccess':
+                return $this->AuthorityInfoAccessSyntax;
+            case 'id-ce-subjectAltName':
+                return $this->SubjectAltName;
+            case 'id-ce-subjectDirectoryAttributes':
+                return $this->SubjectDirectoryAttributes;
+            case 'id-ce-privateKeyUsagePeriod':
+                return $this->PrivateKeyUsagePeriod;
+            case 'id-ce-issuerAltName':
+                return $this->IssuerAltName;
+            case 'id-ce-policyMappings':
+                return $this->PolicyMappings;
+            case 'id-ce-nameConstraints':
+                return $this->NameConstraints;
+
+            case 'netscape-cert-type':
+                return $this->netscape_cert_type;
+            case 'netscape-comment':
+                return $this->netscape_comment;
+            case 'netscape-ca-policy-url':
+                return $this->netscape_ca_policy_url;
+
+            // since id-qt-cps isn't a constructed type it will have already been decoded as a string by the time it gets
+            // back around to asn1map() and we don't want it decoded again.
+            //case 'id-qt-cps':
+            //    return $this->CPSuri;
+            case 'id-qt-unotice':
+                return $this->UserNotice;
+
+            // the following OIDs are unsupported but we don't want them to give notices when calling saveX509().
+            case 'id-pe-logotype': // http://www.ietf.org/rfc/rfc3709.txt
+            case 'entrustVersInfo':
+            // http://support.microsoft.com/kb/287547
+            case '1.3.6.1.4.1.311.20.2': // szOID_ENROLL_CERTTYPE_EXTENSION
+            case '1.3.6.1.4.1.311.21.1': // szOID_CERTSRV_CA_VERSION
+            // "SET Secure Electronic Transaction Specification"
+            // http://www.maithean.com/docs/set_bk3.pdf
+            case '2.23.42.7.0': // id-set-hashedRootKey
+            // "Certificate Transparency"
+            // https://tools.ietf.org/html/rfc6962
+            case '1.3.6.1.4.1.11129.2.4.2':
+                return true;
+
+            // CSR attributes
+            case 'pkcs-9-at-unstructuredName':
+                return $this->PKCS9String;
+            case 'pkcs-9-at-challengePassword':
+                return $this->DirectoryString;
+            case 'pkcs-9-at-extensionRequest':
+                return $this->Extensions;
+
+            // CRL extensions.
+            case 'id-ce-cRLNumber':
+                return $this->CRLNumber;
+            case 'id-ce-deltaCRLIndicator':
+                return $this->CRLNumber;
+            case 'id-ce-issuingDistributionPoint':
+                return $this->IssuingDistributionPoint;
+            case 'id-ce-freshestCRL':
+                return $this->CRLDistributionPoints;
+            case 'id-ce-cRLReasons':
+                return $this->CRLReason;
+            case 'id-ce-invalidityDate':
+                return $this->InvalidityDate;
+            case 'id-ce-certificateIssuer':
+                return $this->CertificateIssuer;
+            case 'id-ce-holdInstructionCode':
+                return $this->HoldInstructionCode;
+            case 'id-at-postalAddress':
+                return $this->PostalAddress;
+        }
+
+        return false;
+    }
+
+    /**
+     * Load an X.509 certificate as a certificate authority
+     *
+     * @param string $cert
+     * @access public
+     * @return bool
+     */
+    function loadCA($cert)
+    {
+        $olddn = $this->dn;
+        $oldcert = $this->currentCert;
+        $oldsigsubj = $this->signatureSubject;
+        $oldkeyid = $this->currentKeyIdentifier;
+
+        $cert = $this->loadX509($cert);
+        if (!$cert) {
+            $this->dn = $olddn;
+            $this->currentCert = $oldcert;
+            $this->signatureSubject = $oldsigsubj;
+            $this->currentKeyIdentifier = $oldkeyid;
+
+            return false;
+        }
+
+        /* From RFC5280 "PKIX Certificate and CRL Profile":
+
+           If the keyUsage extension is present, then the subject public key
+           MUST NOT be used to verify signatures on certificates or CRLs unless
+           the corresponding keyCertSign or cRLSign bit is set. */
+        //$keyUsage = $this->getExtension('id-ce-keyUsage');
+        //if ($keyUsage && !in_array('keyCertSign', $keyUsage)) {
+        //    return false;
+        //}
+
+        /* From RFC5280 "PKIX Certificate and CRL Profile":
+
+           The cA boolean indicates whether the certified public key may be used
+           to verify certificate signatures.  If the cA boolean is not asserted,
+           then the keyCertSign bit in the key usage extension MUST NOT be
+           asserted.  If the basic constraints extension is not present in a
+           version 3 certificate, or the extension is present but the cA boolean
+           is not asserted, then the certified public key MUST NOT be used to
+           verify certificate signatures. */
+        //$basicConstraints = $this->getExtension('id-ce-basicConstraints');
+        //if (!$basicConstraints || !$basicConstraints['cA']) {
+        //    return false;
+        //}
+
+        $this->CAs[] = $cert;
+
+        $this->dn = $olddn;
+        $this->currentCert = $oldcert;
+        $this->signatureSubject = $oldsigsubj;
+
+        return true;
+    }
+
+    /**
+     * Validate an X.509 certificate against a URL
+     *
+     * From RFC2818 "HTTP over TLS":
+     *
+     * Matching is performed using the matching rules specified by
+     * [RFC2459].  If more than one identity of a given type is present in
+     * the certificate (e.g., more than one dNSName name, a match in any one
+     * of the set is considered acceptable.) Names may contain the wildcard
+     * character * which is considered to match any single domain name
+     * component or component fragment. E.g., *.a.com matches foo.a.com but
+     * not bar.foo.a.com. f*.com matches foo.com but not bar.com.
+     *
+     * @param string $url
+     * @access public
+     * @return bool
+     */
+    function validateURL($url)
+    {
+        if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {
+            return false;
+        }
+
+        $components = parse_url($url);
+        if (!isset($components['host'])) {
+            return false;
+        }
+
+        if ($names = $this->getExtension('id-ce-subjectAltName')) {
+            foreach ($names as $name) {
+                foreach ($name as $key => $value) {
+                    $value = str_replace(array('.', '*'), array('\.', '[^.]*'), $value);
+                    switch ($key) {
+                        case 'dNSName':
+                            /* From RFC2818 "HTTP over TLS":
+
+                               If a subjectAltName extension of type dNSName is present, that MUST
+                               be used as the identity. Otherwise, the (most specific) Common Name
+                               field in the Subject field of the certificate MUST be used. Although
+                               the use of the Common Name is existing practice, it is deprecated and
+                               Certification Authorities are encouraged to use the dNSName instead. */
+                            if (preg_match('#^' . $value . '$#', $components['host'])) {
+                                return true;
+                            }
+                            break;
+                        case 'iPAddress':
+                            /* From RFC2818 "HTTP over TLS":
+
+                               In some cases, the URI is specified as an IP address rather than a
+                               hostname. In this case, the iPAddress subjectAltName must be present
+                               in the certificate and must exactly match the IP in the URI. */
+                            if (preg_match('#(?:\d{1-3}\.){4}#', $components['host'] . '.') && preg_match('#^' . $value . '$#', $components['host'])) {
+                                return true;
+                            }
+                    }
+                }
+            }
+            return false;
+        }
+
+        if ($value = $this->getDNProp('id-at-commonName')) {
+            $value = str_replace(array('.', '*'), array('\.', '[^.]*'), $value[0]);
+            return preg_match('#^' . $value . '$#', $components['host']);
+        }
+
+        return false;
+    }
+
+    /**
+     * Validate a date
+     *
+     * If $date isn't defined it is assumed to be the current date.
+     *
+     * @param int $date optional
+     * @access public
+     */
+    function validateDate($date = null)
+    {
+        if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {
+            return false;
+        }
+
+        if (!isset($date)) {
+            $date = new DateTime($date, new DateTimeZone(@date_default_timezone_get()));
+        }
+
+        $notBefore = $this->currentCert['tbsCertificate']['validity']['notBefore'];
+        $notBefore = isset($notBefore['generalTime']) ? $notBefore['generalTime'] : $notBefore['utcTime'];
+
+        $notAfter = $this->currentCert['tbsCertificate']['validity']['notAfter'];
+        $notAfter = isset($notAfter['generalTime']) ? $notAfter['generalTime'] : $notAfter['utcTime'];
+
+        switch (true) {
+            case $date < new DateTime($notBefore, new DateTimeZone(@date_default_timezone_get())):
+            case $date > new DateTime($notAfter, new DateTimeZone(@date_default_timezone_get())):
+                return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Fetches a URL
+     *
+     * @param string $url
+     * @access private
+     * @return bool|string
+     */
+    static function _fetchURL($url)
+    {
+        if (self::$disable_url_fetch) {
+            return false;
+        }
+
+        $parts = parse_url($url);
+        $data = '';
+        switch ($parts['scheme']) {
+            case 'http':
+                $fsock = @fsockopen($parts['host'], isset($parts['port']) ? $parts['port'] : 80);
+                if (!$fsock) {
+                    return false;
+                }
+                fputs($fsock, "GET $parts[path] HTTP/1.0\r\n");
+                fputs($fsock, "Host: $parts[host]\r\n\r\n");
+                $line = fgets($fsock, 1024);
+                if (strlen($line) < 3) {
+                    return false;
+                }
+                preg_match('#HTTP/1.\d (\d{3})#', $line, $temp);
+                if ($temp[1] != '200') {
+                    return false;
+                }
+
+                // skip the rest of the headers in the http response
+                while (!feof($fsock) && fgets($fsock, 1024) != "\r\n") {
+                }
+
+                while (!feof($fsock)) {
+                    $data.= fread($fsock, 1024);
+                }
+
+                break;
+            //case 'ftp':
+            //case 'ldap':
+            //default:
+        }
+
+        return $data;
+    }
+
+    /**
+     * Validates an intermediate cert as identified via authority info access extension
+     *
+     * See https://tools.ietf.org/html/rfc4325 for more info
+     *
+     * @param bool $caonly
+     * @param int $count
+     * @access private
+     * @return bool
+     */
+    function _testForIntermediate($caonly, $count)
+    {
+        $opts = $this->getExtension('id-pe-authorityInfoAccess');
+        if (!is_array($opts)) {
+            return false;
+        }
+        foreach ($opts as $opt) {
+            if ($opt['accessMethod'] == 'id-ad-caIssuers') {
+                // accessLocation is a GeneralName. GeneralName fields support stuff like email addresses, IP addresses, LDAP,
+                // etc, but we're only supporting URI's. URI's and LDAP are the only thing https://tools.ietf.org/html/rfc4325
+                // discusses
+                if (isset($opt['accessLocation']['uniformResourceIdentifier'])) {
+                    $url = $opt['accessLocation']['uniformResourceIdentifier'];
+                    break;
+                }
+            }
+        }
+
+        if (!isset($url)) {
+            return false;
+        }
+
+        $cert = static::_fetchURL($url);
+        if (!is_string($cert)) {
+            return false;
+        }
+
+        $parent = new static();
+        $parent->CAs = $this->CAs;
+        /*
+         "Conforming applications that support HTTP or FTP for accessing
+          certificates MUST be able to accept .cer files and SHOULD be able
+          to accept .p7c files." -- https://tools.ietf.org/html/rfc4325
+
+         A .p7c file is 'a "certs-only" CMS message as specified in RFC 2797"
+
+         These are currently unsupported
+        */
+        if (!is_array($parent->loadX509($cert))) {
+            return false;
+        }
+
+        if (!$parent->_validateSignatureCountable($caonly, ++$count)) {
+            return false;
+        }
+
+        $this->CAs[] = $parent->currentCert;
+        //$this->loadCA($cert);
+
+        return true;
+    }
+
+    /**
+     * Validate a signature
+     *
+     * Works on X.509 certs, CSR's and CRL's.
+     * Returns true if the signature is verified, false if it is not correct or null on error
+     *
+     * By default returns false for self-signed certs. Call validateSignature(false) to make this support
+     * self-signed.
+     *
+     * The behavior of this function is inspired by {@link http://php.net/openssl-verify openssl_verify}.
+     *
+     * @param bool $caonly optional
+     * @access public
+     * @return mixed
+     */
+    function validateSignature($caonly = true)
+    {
+        return $this->_validateSignatureCountable($caonly, 0);
+    }
+
+    /**
+     * Validate a signature
+     *
+     * Performs said validation whilst keeping track of how many times validation method is called
+     *
+     * @param bool $caonly
+     * @param int $count
+     * @access private
+     * @return mixed
+     */
+    function _validateSignatureCountable($caonly, $count)
+    {
+        if (!is_array($this->currentCert) || !isset($this->signatureSubject)) {
+            return null;
+        }
+
+        if ($count == self::$recur_limit) {
+            return false;
+        }
+
+        /* TODO:
+           "emailAddress attribute values are not case-sensitive (e.g., "subscriber@example.com" is the same as "SUBSCRIBER@EXAMPLE.COM")."
+            -- http://tools.ietf.org/html/rfc5280#section-4.1.2.6
+
+           implement pathLenConstraint in the id-ce-basicConstraints extension */
+
+        switch (true) {
+            case isset($this->currentCert['tbsCertificate']):
+                // self-signed cert
+                switch (true) {
+                    case !defined('FILE_X509_IGNORE_TYPE') && $this->currentCert['tbsCertificate']['issuer'] === $this->currentCert['tbsCertificate']['subject']:
+                    case defined('FILE_X509_IGNORE_TYPE') && $this->getIssuerDN(self::DN_STRING) === $this->getDN(self::DN_STRING):
+                        $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');
+                        $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier');
+                        switch (true) {
+                            case !is_array($authorityKey):
+                            case !$subjectKeyID:
+                            case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
+                                $signingCert = $this->currentCert; // working cert
+                        }
+                }
+
+                if (!empty($this->CAs)) {
+                    for ($i = 0; $i < count($this->CAs); $i++) {
+                        // even if the cert is a self-signed one we still want to see if it's a CA;
+                        // if not, we'll conditionally return an error
+                        $ca = $this->CAs[$i];
+                        switch (true) {
+                            case !defined('FILE_X509_IGNORE_TYPE') && $this->currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']:
+                            case defined('FILE_X509_IGNORE_TYPE') && $this->getDN(self::DN_STRING, $this->currentCert['tbsCertificate']['issuer']) === $this->getDN(self::DN_STRING, $ca['tbsCertificate']['subject']):
+                                $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');
+                                $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);
+                                switch (true) {
+                                    case !is_array($authorityKey):
+                                    case !$subjectKeyID:
+                                    case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
+                                        if (is_array($authorityKey) && isset($authorityKey['authorityCertSerialNumber']) && !$authorityKey['authorityCertSerialNumber']->equals($ca['tbsCertificate']['serialNumber'])) {
+                                            break 2; // serial mismatch - check other ca
+                                        }
+                                        $signingCert = $ca; // working cert
+                                        break 3;
+                                }
+                        }
+                    }
+                    if (count($this->CAs) == $i && $caonly) {
+                        return $this->_testForIntermediate($caonly, $count) && $this->validateSignature($caonly);
+                    }
+                } elseif (!isset($signingCert) || $caonly) {
+                    return $this->_testForIntermediate($caonly, $count) && $this->validateSignature($caonly);
+                }
+                return $this->_validateSignature(
+                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'],
+                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'],
+                    $this->currentCert['signatureAlgorithm']['algorithm'],
+                    substr(base64_decode($this->currentCert['signature']), 1),
+                    $this->signatureSubject
+                );
+            case isset($this->currentCert['certificationRequestInfo']):
+                return $this->_validateSignature(
+                    $this->currentCert['certificationRequestInfo']['subjectPKInfo']['algorithm']['algorithm'],
+                    $this->currentCert['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'],
+                    $this->currentCert['signatureAlgorithm']['algorithm'],
+                    substr(base64_decode($this->currentCert['signature']), 1),
+                    $this->signatureSubject
+                );
+            case isset($this->currentCert['publicKeyAndChallenge']):
+                return $this->_validateSignature(
+                    $this->currentCert['publicKeyAndChallenge']['spki']['algorithm']['algorithm'],
+                    $this->currentCert['publicKeyAndChallenge']['spki']['subjectPublicKey'],
+                    $this->currentCert['signatureAlgorithm']['algorithm'],
+                    substr(base64_decode($this->currentCert['signature']), 1),
+                    $this->signatureSubject
+                );
+            case isset($this->currentCert['tbsCertList']):
+                if (!empty($this->CAs)) {
+                    for ($i = 0; $i < count($this->CAs); $i++) {
+                        $ca = $this->CAs[$i];
+                        switch (true) {
+                            case !defined('FILE_X509_IGNORE_TYPE') && $this->currentCert['tbsCertList']['issuer'] === $ca['tbsCertificate']['subject']:
+                            case defined('FILE_X509_IGNORE_TYPE') && $this->getDN(self::DN_STRING, $this->currentCert['tbsCertList']['issuer']) === $this->getDN(self::DN_STRING, $ca['tbsCertificate']['subject']):
+                                $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier');
+                                $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);
+                                switch (true) {
+                                    case !is_array($authorityKey):
+                                    case !$subjectKeyID:
+                                    case isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
+                                        if (is_array($authorityKey) && isset($authorityKey['authorityCertSerialNumber']) && !$authorityKey['authorityCertSerialNumber']->equals($ca['tbsCertificate']['serialNumber'])) {
+                                            break 2; // serial mismatch - check other ca
+                                        }
+                                        $signingCert = $ca; // working cert
+                                        break 3;
+                                }
+                        }
+                    }
+                }
+                if (!isset($signingCert)) {
+                    return false;
+                }
+                return $this->_validateSignature(
+                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['algorithm']['algorithm'],
+                    $signingCert['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'],
+                    $this->currentCert['signatureAlgorithm']['algorithm'],
+                    substr(base64_decode($this->currentCert['signature']), 1),
+                    $this->signatureSubject
+                );
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Validates a signature
+     *
+     * Returns true if the signature is verified, false if it is not correct or null on error
+     *
+     * @param string $publicKeyAlgorithm
+     * @param string $publicKey
+     * @param string $signatureAlgorithm
+     * @param string $signature
+     * @param string $signatureSubject
+     * @access private
+     * @return int
+     */
+    function _validateSignature($publicKeyAlgorithm, $publicKey, $signatureAlgorithm, $signature, $signatureSubject)
+    {
+        switch ($publicKeyAlgorithm) {
+            case 'rsaEncryption':
+                $rsa = new RSA();
+                $rsa->loadKey($publicKey);
+
+                switch ($signatureAlgorithm) {
+                    case 'md2WithRSAEncryption':
+                    case 'md5WithRSAEncryption':
+                    case 'sha1WithRSAEncryption':
+                    case 'sha224WithRSAEncryption':
+                    case 'sha256WithRSAEncryption':
+                    case 'sha384WithRSAEncryption':
+                    case 'sha512WithRSAEncryption':
+                        $rsa->setHash(preg_replace('#WithRSAEncryption$#', '', $signatureAlgorithm));
+                        $rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
+                        if (!@$rsa->verify($signatureSubject, $signature)) {
+                            return false;
+                        }
+                        break;
+                    default:
+                        return null;
+                }
+                break;
+            default:
+                return null;
+        }
+
+        return true;
+    }
+
+    /**
+     * Sets the recursion limit
+     *
+     * When validating a signature it may be necessary to download intermediate certs from URI's.
+     * An intermediate cert that linked to itself would result in an infinite loop so to prevent
+     * that we set a recursion limit. A negative number means that there is no recursion limit.
+     *
+     * @param int $count
+     * @access public
+     */
+    static function setRecurLimit($count)
+    {
+        self::$recur_limit = $count;
+    }
+
+    /**
+     * Prevents URIs from being automatically retrieved
+     *
+     * @access public
+     */
+    static function disableURLFetch()
+    {
+        self::$disable_url_fetch = true;
+    }
+
+    /**
+     * Allows URIs to be automatically retrieved
+     *
+     * @access public
+     */
+    static function enableURLFetch()
+    {
+        self::$disable_url_fetch = false;
+    }
+
+    /**
+     * Reformat public keys
+     *
+     * Reformats a public key to a format supported by phpseclib (if applicable)
+     *
+     * @param string $algorithm
+     * @param string $key
+     * @access private
+     * @return string
+     */
+    function _reformatKey($algorithm, $key)
+    {
+        switch ($algorithm) {
+            case 'rsaEncryption':
+                return
+                    "-----BEGIN RSA PUBLIC KEY-----\r\n" .
+                    // subjectPublicKey is stored as a bit string in X.509 certs.  the first byte of a bit string represents how many bits
+                    // in the last byte should be ignored.  the following only supports non-zero stuff but as none of the X.509 certs Firefox
+                    // uses as a cert authority actually use a non-zero bit I think it's safe to assume that none do.
+                    chunk_split(base64_encode(substr(base64_decode($key), 1)), 64) .
+                    '-----END RSA PUBLIC KEY-----';
+            default:
+                return $key;
+        }
+    }
+
+    /**
+     * Decodes an IP address
+     *
+     * Takes in a base64 encoded "blob" and returns a human readable IP address
+     *
+     * @param string $ip
+     * @access private
+     * @return string
+     */
+    function _decodeIP($ip)
+    {
+        return inet_ntop(base64_decode($ip));
+    }
+
+    /**
+     * Encodes an IP address
+     *
+     * Takes a human readable IP address into a base64-encoded "blob"
+     *
+     * @param string $ip
+     * @access private
+     * @return string
+     */
+    function _encodeIP($ip)
+    {
+        return base64_encode(inet_pton($ip));
+    }
+
+    /**
+     * "Normalizes" a Distinguished Name property
+     *
+     * @param string $propName
+     * @access private
+     * @return mixed
+     */
+    function _translateDNProp($propName)
+    {
+        switch (strtolower($propName)) {
+            case 'id-at-countryname':
+            case 'countryname':
+            case 'c':
+                return 'id-at-countryName';
+            case 'id-at-organizationname':
+            case 'organizationname':
+            case 'o':
+                return 'id-at-organizationName';
+            case 'id-at-dnqualifier':
+            case 'dnqualifier':
+                return 'id-at-dnQualifier';
+            case 'id-at-commonname':
+            case 'commonname':
+            case 'cn':
+                return 'id-at-commonName';
+            case 'id-at-stateorprovincename':
+            case 'stateorprovincename':
+            case 'state':
+            case 'province':
+            case 'provincename':
+            case 'st':
+                return 'id-at-stateOrProvinceName';
+            case 'id-at-localityname':
+            case 'localityname':
+            case 'l':
+                return 'id-at-localityName';
+            case 'id-emailaddress':
+            case 'emailaddress':
+                return 'pkcs-9-at-emailAddress';
+            case 'id-at-serialnumber':
+            case 'serialnumber':
+                return 'id-at-serialNumber';
+            case 'id-at-postalcode':
+            case 'postalcode':
+                return 'id-at-postalCode';
+            case 'id-at-streetaddress':
+            case 'streetaddress':
+                return 'id-at-streetAddress';
+            case 'id-at-name':
+            case 'name':
+                return 'id-at-name';
+            case 'id-at-givenname':
+            case 'givenname':
+                return 'id-at-givenName';
+            case 'id-at-surname':
+            case 'surname':
+            case 'sn':
+                return 'id-at-surname';
+            case 'id-at-initials':
+            case 'initials':
+                return 'id-at-initials';
+            case 'id-at-generationqualifier':
+            case 'generationqualifier':
+                return 'id-at-generationQualifier';
+            case 'id-at-organizationalunitname':
+            case 'organizationalunitname':
+            case 'ou':
+                return 'id-at-organizationalUnitName';
+            case 'id-at-pseudonym':
+            case 'pseudonym':
+                return 'id-at-pseudonym';
+            case 'id-at-title':
+            case 'title':
+                return 'id-at-title';
+            case 'id-at-description':
+            case 'description':
+                return 'id-at-description';
+            case 'id-at-role':
+            case 'role':
+                return 'id-at-role';
+            case 'id-at-uniqueidentifier':
+            case 'uniqueidentifier':
+            case 'x500uniqueidentifier':
+                return 'id-at-uniqueIdentifier';
+            case 'postaladdress':
+            case 'id-at-postaladdress':
+                return 'id-at-postalAddress';
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Set a Distinguished Name property
+     *
+     * @param string $propName
+     * @param mixed $propValue
+     * @param string $type optional
+     * @access public
+     * @return bool
+     */
+    function setDNProp($propName, $propValue, $type = 'utf8String')
+    {
+        if (empty($this->dn)) {
+            $this->dn = array('rdnSequence' => array());
+        }
+
+        if (($propName = $this->_translateDNProp($propName)) === false) {
+            return false;
+        }
+
+        foreach ((array) $propValue as $v) {
+            if (!is_array($v) && isset($type)) {
+                $v = array($type => $v);
+            }
+            $this->dn['rdnSequence'][] = array(
+                array(
+                    'type' => $propName,
+                    'value'=> $v
+                )
+            );
+        }
+
+        return true;
+    }
+
+    /**
+     * Remove Distinguished Name properties
+     *
+     * @param string $propName
+     * @access public
+     */
+    function removeDNProp($propName)
+    {
+        if (empty($this->dn)) {
+            return;
+        }
+
+        if (($propName = $this->_translateDNProp($propName)) === false) {
+            return;
+        }
+
+        $dn = &$this->dn['rdnSequence'];
+        $size = count($dn);
+        for ($i = 0; $i < $size; $i++) {
+            if ($dn[$i][0]['type'] == $propName) {
+                unset($dn[$i]);
+            }
+        }
+
+        $dn = array_values($dn);
+        // fix for https://bugs.php.net/75433 affecting PHP 7.2
+        if (!isset($dn[0])) {
+            $dn = array_splice($dn, 0, 0);
+        }
+    }
+
+    /**
+     * Get Distinguished Name properties
+     *
+     * @param string $propName
+     * @param array $dn optional
+     * @param bool $withType optional
+     * @return mixed
+     * @access public
+     */
+    function getDNProp($propName, $dn = null, $withType = false)
+    {
+        if (!isset($dn)) {
+            $dn = $this->dn;
+        }
+
+        if (empty($dn)) {
+            return false;
+        }
+
+        if (($propName = $this->_translateDNProp($propName)) === false) {
+            return false;
+        }
+
+        $asn1 = new ASN1();
+        $asn1->loadOIDs($this->oids);
+        $filters = array();
+        $filters['value'] = array('type' => ASN1::TYPE_UTF8_STRING);
+        $asn1->loadFilters($filters);
+        $this->_mapOutDNs($dn, 'rdnSequence', $asn1);
+        $dn = $dn['rdnSequence'];
+        $result = array();
+        for ($i = 0; $i < count($dn); $i++) {
+            if ($dn[$i][0]['type'] == $propName) {
+                $v = $dn[$i][0]['value'];
+                if (!$withType) {
+                    if (is_array($v)) {
+                        foreach ($v as $type => $s) {
+                            $type = array_search($type, $asn1->ANYmap, true);
+                            if ($type !== false && isset($asn1->stringTypeSize[$type])) {
+                                $s = $asn1->convert($s, $type);
+                                if ($s !== false) {
+                                    $v = $s;
+                                    break;
+                                }
+                            }
+                        }
+                        if (is_array($v)) {
+                            $v = array_pop($v); // Always strip data type.
+                        }
+                    } elseif (is_object($v) && $v instanceof Element) {
+                        $map = $this->_getMapping($propName);
+                        if (!is_bool($map)) {
+                            $decoded = $asn1->decodeBER($v);
+                            $v = $asn1->asn1map($decoded[0], $map);
+                        }
+                    }
+                }
+                $result[] = $v;
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Set a Distinguished Name
+     *
+     * @param mixed $dn
+     * @param bool $merge optional
+     * @param string $type optional
+     * @access public
+     * @return bool
+     */
+    function setDN($dn, $merge = false, $type = 'utf8String')
+    {
+        if (!$merge) {
+            $this->dn = null;
+        }
+
+        if (is_array($dn)) {
+            if (isset($dn['rdnSequence'])) {
+                $this->dn = $dn; // No merge here.
+                return true;
+            }
+
+            // handles stuff generated by openssl_x509_parse()
+            foreach ($dn as $prop => $value) {
+                if (!$this->setDNProp($prop, $value, $type)) {
+                    return false;
+                }
+            }
+            return true;
+        }
+
+        // handles everything else
+        $results = preg_split('#((?:^|, *|/)(?:C=|O=|OU=|CN=|L=|ST=|SN=|postalCode=|streetAddress=|emailAddress=|serialNumber=|organizationalUnitName=|title=|description=|role=|x500UniqueIdentifier=|postalAddress=))#', $dn, -1, PREG_SPLIT_DELIM_CAPTURE);
+        for ($i = 1; $i < count($results); $i+=2) {
+            $prop = trim($results[$i], ', =/');
+            $value = $results[$i + 1];
+            if (!$this->setDNProp($prop, $value, $type)) {
+                return false;
+            }
+        }
+
+        return true;
+    }
+
+    /**
+     * Get the Distinguished Name for a certificates subject
+     *
+     * @param mixed $format optional
+     * @param array $dn optional
+     * @access public
+     * @return bool
+     */
+    function getDN($format = self::DN_ARRAY, $dn = null)
+    {
+        if (!isset($dn)) {
+            $dn = isset($this->currentCert['tbsCertList']) ? $this->currentCert['tbsCertList']['issuer'] : $this->dn;
+        }
+
+        switch ((int) $format) {
+            case self::DN_ARRAY:
+                return $dn;
+            case self::DN_ASN1:
+                $asn1 = new ASN1();
+                $asn1->loadOIDs($this->oids);
+                $filters = array();
+                $filters['rdnSequence']['value'] = array('type' => ASN1::TYPE_UTF8_STRING);
+                $asn1->loadFilters($filters);
+                $this->_mapOutDNs($dn, 'rdnSequence', $asn1);
+                return $asn1->encodeDER($dn, $this->Name);
+            case self::DN_CANON:
+                //  No SEQUENCE around RDNs and all string values normalized as
+                // trimmed lowercase UTF-8 with all spacing as one blank.
+                // constructed RDNs will not be canonicalized
+                $asn1 = new ASN1();
+                $asn1->loadOIDs($this->oids);
+                $filters = array();
+                $filters['value'] = array('type' => ASN1::TYPE_UTF8_STRING);
+                $asn1->loadFilters($filters);
+                $result = '';
+                $this->_mapOutDNs($dn, 'rdnSequence', $asn1);
+                foreach ($dn['rdnSequence'] as $rdn) {
+                    foreach ($rdn as $i => $attr) {
+                        $attr = &$rdn[$i];
+                        if (is_array($attr['value'])) {
+                            foreach ($attr['value'] as $type => $v) {
+                                $type = array_search($type, $asn1->ANYmap, true);
+                                if ($type !== false && isset($asn1->stringTypeSize[$type])) {
+                                    $v = $asn1->convert($v, $type);
+                                    if ($v !== false) {
+                                        $v = preg_replace('/\s+/', ' ', $v);
+                                        $attr['value'] = strtolower(trim($v));
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    $result .= $asn1->encodeDER($rdn, $this->RelativeDistinguishedName);
+                }
+                return $result;
+            case self::DN_HASH:
+                $dn = $this->getDN(self::DN_CANON, $dn);
+                $hash = new Hash('sha1');
+                $hash = $hash->hash($dn);
+                extract(unpack('Vhash', $hash));
+                return strtolower(bin2hex(pack('N', $hash)));
+        }
+
+        // Default is to return a string.
+        $start = true;
+        $output = '';
+
+        $result = array();
+        $asn1 = new ASN1();
+        $asn1->loadOIDs($this->oids);
+        $filters = array();
+        $filters['rdnSequence']['value'] = array('type' => ASN1::TYPE_UTF8_STRING);
+        $asn1->loadFilters($filters);
+        $this->_mapOutDNs($dn, 'rdnSequence', $asn1);
+
+        foreach ($dn['rdnSequence'] as $field) {
+            $prop = $field[0]['type'];
+            $value = $field[0]['value'];
+
+            $delim = ', ';
+            switch ($prop) {
+                case 'id-at-countryName':
+                    $desc = 'C';
+                    break;
+                case 'id-at-stateOrProvinceName':
+                    $desc = 'ST';
+                    break;
+                case 'id-at-organizationName':
+                    $desc = 'O';
+                    break;
+                case 'id-at-organizationalUnitName':
+                    $desc = 'OU';
+                    break;
+                case 'id-at-commonName':
+                    $desc = 'CN';
+                    break;
+                case 'id-at-localityName':
+                    $desc = 'L';
+                    break;
+                case 'id-at-surname':
+                    $desc = 'SN';
+                    break;
+                case 'id-at-uniqueIdentifier':
+                    $delim = '/';
+                    $desc = 'x500UniqueIdentifier';
+                    break;
+                case 'id-at-postalAddress':
+                    $delim = '/';
+                    $desc = 'postalAddress';
+                    break;
+                default:
+                    $delim = '/';
+                    $desc = preg_replace('#.+-([^-]+)$#', '$1', $prop);
+            }
+
+            if (!$start) {
+                $output.= $delim;
+            }
+            if (is_array($value)) {
+                foreach ($value as $type => $v) {
+                    $type = array_search($type, $asn1->ANYmap, true);
+                    if ($type !== false && isset($asn1->stringTypeSize[$type])) {
+                        $v = $asn1->convert($v, $type);
+                        if ($v !== false) {
+                            $value = $v;
+                            break;
+                        }
+                    }
+                }
+                if (is_array($value)) {
+                    $value = array_pop($value); // Always strip data type.
+                }
+            } elseif (is_object($value) && $value instanceof Element) {
+                $callback = function ($x) {
+                    return "\x" . bin2hex($x[0]);
+                };
+                $value = strtoupper(preg_replace_callback('#[^\x20-\x7E]#', $callback, $value->element));
+            }
+            $output.= $desc . '=' . $value;
+            $result[$desc] = isset($result[$desc]) ?
+                array_merge((array) $dn[$prop], array($value)) :
+                $value;
+            $start = false;
+        }
+
+        return $format == self::DN_OPENSSL ? $result : $output;
+    }
+
+    /**
+     * Get the Distinguished Name for a certificate/crl issuer
+     *
+     * @param int $format optional
+     * @access public
+     * @return mixed
+     */
+    function getIssuerDN($format = self::DN_ARRAY)
+    {
+        switch (true) {
+            case !isset($this->currentCert) || !is_array($this->currentCert):
+                break;
+            case isset($this->currentCert['tbsCertificate']):
+                return $this->getDN($format, $this->currentCert['tbsCertificate']['issuer']);
+            case isset($this->currentCert['tbsCertList']):
+                return $this->getDN($format, $this->currentCert['tbsCertList']['issuer']);
+        }
+
+        return false;
+    }
+
+    /**
+     * Get the Distinguished Name for a certificate/csr subject
+     * Alias of getDN()
+     *
+     * @param int $format optional
+     * @access public
+     * @return mixed
+     */
+    function getSubjectDN($format = self::DN_ARRAY)
+    {
+        switch (true) {
+            case !empty($this->dn):
+                return $this->getDN($format);
+            case !isset($this->currentCert) || !is_array($this->currentCert):
+                break;
+            case isset($this->currentCert['tbsCertificate']):
+                return $this->getDN($format, $this->currentCert['tbsCertificate']['subject']);
+            case isset($this->currentCert['certificationRequestInfo']):
+                return $this->getDN($format, $this->currentCert['certificationRequestInfo']['subject']);
+        }
+
+        return false;
+    }
+
+    /**
+     * Get an individual Distinguished Name property for a certificate/crl issuer
+     *
+     * @param string $propName
+     * @param bool $withType optional
+     * @access public
+     * @return mixed
+     */
+    function getIssuerDNProp($propName, $withType = false)
+    {
+        switch (true) {
+            case !isset($this->currentCert) || !is_array($this->currentCert):
+                break;
+            case isset($this->currentCert['tbsCertificate']):
+                return $this->getDNProp($propName, $this->currentCert['tbsCertificate']['issuer'], $withType);
+            case isset($this->currentCert['tbsCertList']):
+                return $this->getDNProp($propName, $this->currentCert['tbsCertList']['issuer'], $withType);
+        }
+
+        return false;
+    }
+
+    /**
+     * Get an individual Distinguished Name property for a certificate/csr subject
+     *
+     * @param string $propName
+     * @param bool $withType optional
+     * @access public
+     * @return mixed
+     */
+    function getSubjectDNProp($propName, $withType = false)
+    {
+        switch (true) {
+            case !empty($this->dn):
+                return $this->getDNProp($propName, null, $withType);
+            case !isset($this->currentCert) || !is_array($this->currentCert):
+                break;
+            case isset($this->currentCert['tbsCertificate']):
+                return $this->getDNProp($propName, $this->currentCert['tbsCertificate']['subject'], $withType);
+            case isset($this->currentCert['certificationRequestInfo']):
+                return $this->getDNProp($propName, $this->currentCert['certificationRequestInfo']['subject'], $withType);
+        }
+
+        return false;
+    }
+
+    /**
+     * Get the certificate chain for the current cert
+     *
+     * @access public
+     * @return mixed
+     */
+    function getChain()
+    {
+        $chain = array($this->currentCert);
+
+        if (!is_array($this->currentCert) || !isset($this->currentCert['tbsCertificate'])) {
+            return false;
+        }
+        if (empty($this->CAs)) {
+            return $chain;
+        }
+        while (true) {
+            $currentCert = $chain[count($chain) - 1];
+            for ($i = 0; $i < count($this->CAs); $i++) {
+                $ca = $this->CAs[$i];
+                if ($currentCert['tbsCertificate']['issuer'] === $ca['tbsCertificate']['subject']) {
+                    $authorityKey = $this->getExtension('id-ce-authorityKeyIdentifier', $currentCert);
+                    $subjectKeyID = $this->getExtension('id-ce-subjectKeyIdentifier', $ca);
+                    switch (true) {
+                        case !is_array($authorityKey):
+                        case is_array($authorityKey) && isset($authorityKey['keyIdentifier']) && $authorityKey['keyIdentifier'] === $subjectKeyID:
+                            if ($currentCert === $ca) {
+                                break 3;
+                            }
+                            $chain[] = $ca;
+                            break 2;
+                    }
+                }
+            }
+            if ($i == count($this->CAs)) {
+                break;
+            }
+        }
+        foreach ($chain as $key => $value) {
+            $chain[$key] = new X509();
+            $chain[$key]->loadX509($value);
+        }
+        return $chain;
+    }
+
+    /**
+     * Set public key
+     *
+     * Key needs to be a \phpseclib\Crypt\RSA object
+     *
+     * @param object $key
+     * @access public
+     * @return bool
+     */
+    function setPublicKey($key)
+    {
+        $key->setPublicKey();
+        $this->publicKey = $key;
+    }
+
+    /**
+     * Set private key
+     *
+     * Key needs to be a \phpseclib\Crypt\RSA object
+     *
+     * @param object $key
+     * @access public
+     */
+    function setPrivateKey($key)
+    {
+        $this->privateKey = $key;
+    }
+
+    /**
+     * Set challenge
+     *
+     * Used for SPKAC CSR's
+     *
+     * @param string $challenge
+     * @access public
+     */
+    function setChallenge($challenge)
+    {
+        $this->challenge = $challenge;
+    }
+
+    /**
+     * Gets the public key
+     *
+     * Returns a \phpseclib\Crypt\RSA object or a false.
+     *
+     * @access public
+     * @return mixed
+     */
+    function getPublicKey()
+    {
+        if (isset($this->publicKey)) {
+            return $this->publicKey;
+        }
+
+        if (isset($this->currentCert) && is_array($this->currentCert)) {
+            foreach (array('tbsCertificate/subjectPublicKeyInfo', 'certificationRequestInfo/subjectPKInfo') as $path) {
+                $keyinfo = $this->_subArray($this->currentCert, $path);
+                if (!empty($keyinfo)) {
+                    break;
+                }
+            }
+        }
+        if (empty($keyinfo)) {
+            return false;
+        }
+
+        $key = $keyinfo['subjectPublicKey'];
+
+        switch ($keyinfo['algorithm']['algorithm']) {
+            case 'rsaEncryption':
+                $publicKey = new RSA();
+                $publicKey->loadKey($key);
+                $publicKey->setPublicKey();
+                break;
+            default:
+                return false;
+        }
+
+        return $publicKey;
+    }
+
+    /**
+     * Load a Certificate Signing Request
+     *
+     * @param string $csr
+     * @access public
+     * @return mixed
+     */
+    function loadCSR($csr, $mode = self::FORMAT_AUTO_DETECT)
+    {
+        if (is_array($csr) && isset($csr['certificationRequestInfo'])) {
+            unset($this->currentCert);
+            unset($this->currentKeyIdentifier);
+            unset($this->signatureSubject);
+            $this->dn = $csr['certificationRequestInfo']['subject'];
+            if (!isset($this->dn)) {
+                return false;
+            }
+
+            $this->currentCert = $csr;
+            return $csr;
+        }
+
+        // see http://tools.ietf.org/html/rfc2986
+
+        $asn1 = new ASN1();
+
+        if ($mode != self::FORMAT_DER) {
+            $newcsr = $this->_extractBER($csr);
+            if ($mode == self::FORMAT_PEM && $csr == $newcsr) {
+                return false;
+            }
+            $csr = $newcsr;
+        }
+        $orig = $csr;
+
+        if ($csr === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $asn1->loadOIDs($this->oids);
+        $decoded = $asn1->decodeBER($csr);
+
+        if (empty($decoded)) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $csr = $asn1->asn1map($decoded[0], $this->CertificationRequest);
+        if (!isset($csr) || $csr === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $this->_mapInAttributes($csr, 'certificationRequestInfo/attributes', $asn1);
+        $this->_mapInDNs($csr, 'certificationRequestInfo/subject/rdnSequence', $asn1);
+
+        $this->dn = $csr['certificationRequestInfo']['subject'];
+
+        $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);
+
+        $algorithm = &$csr['certificationRequestInfo']['subjectPKInfo']['algorithm']['algorithm'];
+        $key = &$csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'];
+        $key = $this->_reformatKey($algorithm, $key);
+
+        switch ($algorithm) {
+            case 'rsaEncryption':
+                $this->publicKey = new RSA();
+                $this->publicKey->loadKey($key);
+                $this->publicKey->setPublicKey();
+                break;
+            default:
+                $this->publicKey = null;
+        }
+
+        $this->currentKeyIdentifier = null;
+        $this->currentCert = $csr;
+
+        return $csr;
+    }
+
+    /**
+     * Save CSR request
+     *
+     * @param array $csr
+     * @param int $format optional
+     * @access public
+     * @return string
+     */
+    function saveCSR($csr, $format = self::FORMAT_PEM)
+    {
+        if (!is_array($csr) || !isset($csr['certificationRequestInfo'])) {
+            return false;
+        }
+
+        switch (true) {
+            case !($algorithm = $this->_subArray($csr, 'certificationRequestInfo/subjectPKInfo/algorithm/algorithm')):
+            case is_object($csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']):
+                break;
+            default:
+                switch ($algorithm) {
+                    case 'rsaEncryption':
+                        $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']
+                            = base64_encode("\0" . base64_decode(preg_replace('#-.+-|[\r\n]#', '', $csr['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'])));
+                        $csr['certificationRequestInfo']['subjectPKInfo']['algorithm']['parameters'] = null;
+                        $csr['signatureAlgorithm']['parameters'] = null;
+                        $csr['certificationRequestInfo']['signature']['parameters'] = null;
+                }
+        }
+
+        $asn1 = new ASN1();
+
+        $asn1->loadOIDs($this->oids);
+
+        $filters = array();
+        $filters['certificationRequestInfo']['subject']['rdnSequence']['value']
+            = array('type' => ASN1::TYPE_UTF8_STRING);
+
+        $asn1->loadFilters($filters);
+
+        $this->_mapOutDNs($csr, 'certificationRequestInfo/subject/rdnSequence', $asn1);
+        $this->_mapOutAttributes($csr, 'certificationRequestInfo/attributes', $asn1);
+        $csr = $asn1->encodeDER($csr, $this->CertificationRequest);
+
+        switch ($format) {
+            case self::FORMAT_DER:
+                return $csr;
+            // case self::FORMAT_PEM:
+            default:
+                return "-----BEGIN CERTIFICATE REQUEST-----\r\n" . chunk_split(base64_encode($csr), 64) . '-----END CERTIFICATE REQUEST-----';
+        }
+    }
+
+    /**
+     * Load a SPKAC CSR
+     *
+     * SPKAC's are produced by the HTML5 keygen element:
+     *
+     * https://developer.mozilla.org/en-US/docs/HTML/Element/keygen
+     *
+     * @param string $csr
+     * @access public
+     * @return mixed
+     */
+    function loadSPKAC($spkac)
+    {
+        if (is_array($spkac) && isset($spkac['publicKeyAndChallenge'])) {
+            unset($this->currentCert);
+            unset($this->currentKeyIdentifier);
+            unset($this->signatureSubject);
+            $this->currentCert = $spkac;
+            return $spkac;
+        }
+
+        // see http://www.w3.org/html/wg/drafts/html/master/forms.html#signedpublickeyandchallenge
+
+        $asn1 = new ASN1();
+
+        // OpenSSL produces SPKAC's that are preceded by the string SPKAC=
+        $temp = preg_replace('#(?:SPKAC=)|[ \r\n\\\]#', '', $spkac);
+        $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false;
+        if ($temp != false) {
+            $spkac = $temp;
+        }
+        $orig = $spkac;
+
+        if ($spkac === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $asn1->loadOIDs($this->oids);
+        $decoded = $asn1->decodeBER($spkac);
+
+        if (empty($decoded)) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $spkac = $asn1->asn1map($decoded[0], $this->SignedPublicKeyAndChallenge);
+
+        if (!isset($spkac) || $spkac === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);
+
+        $algorithm = &$spkac['publicKeyAndChallenge']['spki']['algorithm']['algorithm'];
+        $key = &$spkac['publicKeyAndChallenge']['spki']['subjectPublicKey'];
+        $key = $this->_reformatKey($algorithm, $key);
+
+        switch ($algorithm) {
+            case 'rsaEncryption':
+                $this->publicKey = new RSA();
+                $this->publicKey->loadKey($key);
+                $this->publicKey->setPublicKey();
+                break;
+            default:
+                $this->publicKey = null;
+        }
+
+        $this->currentKeyIdentifier = null;
+        $this->currentCert = $spkac;
+
+        return $spkac;
+    }
+
+    /**
+     * Save a SPKAC CSR request
+     *
+     * @param array $csr
+     * @param int $format optional
+     * @access public
+     * @return string
+     */
+    function saveSPKAC($spkac, $format = self::FORMAT_PEM)
+    {
+        if (!is_array($spkac) || !isset($spkac['publicKeyAndChallenge'])) {
+            return false;
+        }
+
+        $algorithm = $this->_subArray($spkac, 'publicKeyAndChallenge/spki/algorithm/algorithm');
+        switch (true) {
+            case !$algorithm:
+            case is_object($spkac['publicKeyAndChallenge']['spki']['subjectPublicKey']):
+                break;
+            default:
+                switch ($algorithm) {
+                    case 'rsaEncryption':
+                        $spkac['publicKeyAndChallenge']['spki']['subjectPublicKey']
+                            = base64_encode("\0" . base64_decode(preg_replace('#-.+-|[\r\n]#', '', $spkac['publicKeyAndChallenge']['spki']['subjectPublicKey'])));
+                }
+        }
+
+        $asn1 = new ASN1();
+
+        $asn1->loadOIDs($this->oids);
+        $spkac = $asn1->encodeDER($spkac, $this->SignedPublicKeyAndChallenge);
+
+        switch ($format) {
+            case self::FORMAT_DER:
+                return $spkac;
+            // case self::FORMAT_PEM:
+            default:
+                // OpenSSL's implementation of SPKAC requires the SPKAC be preceded by SPKAC= and since there are pretty much
+                // no other SPKAC decoders phpseclib will use that same format
+                return 'SPKAC=' . base64_encode($spkac);
+        }
+    }
+
+    /**
+     * Load a Certificate Revocation List
+     *
+     * @param string $crl
+     * @access public
+     * @return mixed
+     */
+    function loadCRL($crl, $mode = self::FORMAT_AUTO_DETECT)
+    {
+        if (is_array($crl) && isset($crl['tbsCertList'])) {
+            $this->currentCert = $crl;
+            unset($this->signatureSubject);
+            return $crl;
+        }
+
+        $asn1 = new ASN1();
+
+        if ($mode != self::FORMAT_DER) {
+            $newcrl = $this->_extractBER($crl);
+            if ($mode == self::FORMAT_PEM && $crl == $newcrl) {
+                return false;
+            }
+            $crl = $newcrl;
+        }
+        $orig = $crl;
+
+        if ($crl === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $asn1->loadOIDs($this->oids);
+        $decoded = $asn1->decodeBER($crl);
+
+        if (empty($decoded)) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $crl = $asn1->asn1map($decoded[0], $this->CertificateList);
+        if (!isset($crl) || $crl === false) {
+            $this->currentCert = false;
+            return false;
+        }
+
+        $this->signatureSubject = substr($orig, $decoded[0]['content'][0]['start'], $decoded[0]['content'][0]['length']);
+
+        $this->_mapInDNs($crl, 'tbsCertList/issuer/rdnSequence', $asn1);
+        if ($this->_isSubArrayValid($crl, 'tbsCertList/crlExtensions')) {
+            $this->_mapInExtensions($crl, 'tbsCertList/crlExtensions', $asn1);
+        }
+        if ($this->_isSubArrayValid($crl, 'tbsCertList/revokedCertificates')) {
+            $rclist_ref = &$this->_subArrayUnchecked($crl, 'tbsCertList/revokedCertificates');
+            if ($rclist_ref) {
+                $rclist = $crl['tbsCertList']['revokedCertificates'];
+                foreach ($rclist as $i => $extension) {
+                    if ($this->_isSubArrayValid($rclist, "$i/crlEntryExtensions", $asn1)) {
+                        $this->_mapInExtensions($rclist_ref, "$i/crlEntryExtensions", $asn1);
+                    }
+                }
+            }
+        }
+
+        $this->currentKeyIdentifier = null;
+        $this->currentCert = $crl;
+
+        return $crl;
+    }
+
+    /**
+     * Save Certificate Revocation List.
+     *
+     * @param array $crl
+     * @param int $format optional
+     * @access public
+     * @return string
+     */
+    function saveCRL($crl, $format = self::FORMAT_PEM)
+    {
+        if (!is_array($crl) || !isset($crl['tbsCertList'])) {
+            return false;
+        }
+
+        $asn1 = new ASN1();
+
+        $asn1->loadOIDs($this->oids);
+
+        $filters = array();
+        $filters['tbsCertList']['issuer']['rdnSequence']['value']
+            = array('type' => ASN1::TYPE_UTF8_STRING);
+        $filters['tbsCertList']['signature']['parameters']
+            = array('type' => ASN1::TYPE_UTF8_STRING);
+        $filters['signatureAlgorithm']['parameters']
+            = array('type' => ASN1::TYPE_UTF8_STRING);
+
+        if (empty($crl['tbsCertList']['signature']['parameters'])) {
+            $filters['tbsCertList']['signature']['parameters']
+                = array('type' => ASN1::TYPE_NULL);
+        }
+
+        if (empty($crl['signatureAlgorithm']['parameters'])) {
+            $filters['signatureAlgorithm']['parameters']
+                = array('type' => ASN1::TYPE_NULL);
+        }
+
+        $asn1->loadFilters($filters);
+
+        $this->_mapOutDNs($crl, 'tbsCertList/issuer/rdnSequence', $asn1);
+        $this->_mapOutExtensions($crl, 'tbsCertList/crlExtensions', $asn1);
+        $rclist = &$this->_subArray($crl, 'tbsCertList/revokedCertificates');
+        if (is_array($rclist)) {
+            foreach ($rclist as $i => $extension) {
+                $this->_mapOutExtensions($rclist, "$i/crlEntryExtensions", $asn1);
+            }
+        }
+
+        $crl = $asn1->encodeDER($crl, $this->CertificateList);
+
+        switch ($format) {
+            case self::FORMAT_DER:
+                return $crl;
+            // case self::FORMAT_PEM:
+            default:
+                return "-----BEGIN X509 CRL-----\r\n" . chunk_split(base64_encode($crl), 64) . '-----END X509 CRL-----';
+        }
+    }
+
+    /**
+     * Helper function to build a time field according to RFC 3280 section
+     *  - 4.1.2.5 Validity
+     *  - 5.1.2.4 This Update
+     *  - 5.1.2.5 Next Update
+     *  - 5.1.2.6 Revoked Certificates
+     * by choosing utcTime iff year of date given is before 2050 and generalTime else.
+     *
+     * @param string $date in format date('D, d M Y H:i:s O')
+     * @access private
+     * @return array
+     */
+    function _timeField($date)
+    {
+        if ($date instanceof Element) {
+            return $date;
+        }
+        $dateObj = new DateTime($date, new DateTimeZone('GMT'));
+        $year = $dateObj->format('Y'); // the same way ASN1.php parses this
+        if ($year < 2050) {
+            return array('utcTime' => $date);
+        } else {
+            return array('generalTime' => $date);
+        }
+    }
+
+    /**
+     * Sign an X.509 certificate
+     *
+     * $issuer's private key needs to be loaded.
+     * $subject can be either an existing X.509 cert (if you want to resign it),
+     * a CSR or something with the DN and public key explicitly set.
+     *
+     * @param \phpseclib\File\X509 $issuer
+     * @param \phpseclib\File\X509 $subject
+     * @param string $signatureAlgorithm optional
+     * @access public
+     * @return mixed
+     */
+    function sign($issuer, $subject, $signatureAlgorithm = 'sha1WithRSAEncryption')
+    {
+        if (!is_object($issuer->privateKey) || empty($issuer->dn)) {
+            return false;
+        }
+
+        if (isset($subject->publicKey) && !($subjectPublicKey = $subject->_formatSubjectPublicKey())) {
+            return false;
+        }
+
+        $currentCert = isset($this->currentCert) ? $this->currentCert : null;
+        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject: null;
+
+        if (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertificate'])) {
+            $this->currentCert = $subject->currentCert;
+            $this->currentCert['tbsCertificate']['signature']['algorithm'] = $signatureAlgorithm;
+            $this->currentCert['signatureAlgorithm']['algorithm'] = $signatureAlgorithm;
+
+            if (!empty($this->startDate)) {
+                $this->currentCert['tbsCertificate']['validity']['notBefore'] = $this->_timeField($this->startDate);
+            }
+            if (!empty($this->endDate)) {
+                $this->currentCert['tbsCertificate']['validity']['notAfter'] = $this->_timeField($this->endDate);
+            }
+            if (!empty($this->serialNumber)) {
+                $this->currentCert['tbsCertificate']['serialNumber'] = $this->serialNumber;
+            }
+            if (!empty($subject->dn)) {
+                $this->currentCert['tbsCertificate']['subject'] = $subject->dn;
+            }
+            if (!empty($subject->publicKey)) {
+                $this->currentCert['tbsCertificate']['subjectPublicKeyInfo'] = $subjectPublicKey;
+            }
+            $this->removeExtension('id-ce-authorityKeyIdentifier');
+            if (isset($subject->domains)) {
+                $this->removeExtension('id-ce-subjectAltName');
+            }
+        } elseif (isset($subject->currentCert) && is_array($subject->currentCert) && isset($subject->currentCert['tbsCertList'])) {
+            return false;
+        } else {
+            if (!isset($subject->publicKey)) {
+                return false;
+            }
+
+            $startDate = new DateTime('now', new DateTimeZone(@date_default_timezone_get()));
+            $startDate = !empty($this->startDate) ? $this->startDate : $startDate->format('D, d M Y H:i:s O');
+
+            $endDate = new DateTime('+1 year', new DateTimeZone(@date_default_timezone_get()));
+            $endDate = !empty($this->endDate) ? $this->endDate : $endDate->format('D, d M Y H:i:s O');
+
+            /* "The serial number MUST be a positive integer"
+               "Conforming CAs MUST NOT use serialNumber values longer than 20 octets."
+                -- https://tools.ietf.org/html/rfc5280#section-4.1.2.2
+
+               for the integer to be positive the leading bit needs to be 0 hence the
+               application of a bitmap
+            */
+            $serialNumber = !empty($this->serialNumber) ?
+                $this->serialNumber :
+                new BigInteger(Random::string(20) & ("\x7F" . str_repeat("\xFF", 19)), 256);
+
+            $this->currentCert = array(
+                'tbsCertificate' =>
+                    array(
+                        'version' => 'v3',
+                        'serialNumber' => $serialNumber, // $this->setSerialNumber()
+                        'signature' => array('algorithm' => $signatureAlgorithm),
+                        'issuer' => false, // this is going to be overwritten later
+                        'validity' => array(
+                            'notBefore' => $this->_timeField($startDate), // $this->setStartDate()
+                            'notAfter' => $this->_timeField($endDate)   // $this->setEndDate()
+                        ),
+                        'subject' => $subject->dn,
+                        'subjectPublicKeyInfo' => $subjectPublicKey
+                    ),
+                    'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm),
+                    'signature'          => false // this is going to be overwritten later
+            );
+
+            // Copy extensions from CSR.
+            $csrexts = $subject->getAttribute('pkcs-9-at-extensionRequest', 0);
+
+            if (!empty($csrexts)) {
+                $this->currentCert['tbsCertificate']['extensions'] = $csrexts;
+            }
+        }
+
+        $this->currentCert['tbsCertificate']['issuer'] = $issuer->dn;
+
+        if (isset($issuer->currentKeyIdentifier)) {
+            $this->setExtension('id-ce-authorityKeyIdentifier', array(
+                    //'authorityCertIssuer' => array(
+                    //    array(
+                    //        'directoryName' => $issuer->dn
+                    //    )
+                    //),
+                    'keyIdentifier' => $issuer->currentKeyIdentifier
+                ));
+            //$extensions = &$this->currentCert['tbsCertificate']['extensions'];
+            //if (isset($issuer->serialNumber)) {
+            //    $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber;
+            //}
+            //unset($extensions);
+        }
+
+        if (isset($subject->currentKeyIdentifier)) {
+            $this->setExtension('id-ce-subjectKeyIdentifier', $subject->currentKeyIdentifier);
+        }
+
+        $altName = array();
+
+        if (isset($subject->domains) && count($subject->domains)) {
+            $altName = array_map(array('\phpseclib\File\X509', '_dnsName'), $subject->domains);
+        }
+
+        if (isset($subject->ipAddresses) && count($subject->ipAddresses)) {
+            // should an IP address appear as the CN if no domain name is specified? idk
+            //$ips = count($subject->domains) ? $subject->ipAddresses : array_slice($subject->ipAddresses, 1);
+            $ipAddresses = array();
+            foreach ($subject->ipAddresses as $ipAddress) {
+                $encoded = $subject->_ipAddress($ipAddress);
+                if ($encoded !== false) {
+                    $ipAddresses[] = $encoded;
+                }
+            }
+            if (count($ipAddresses)) {
+                $altName = array_merge($altName, $ipAddresses);
+            }
+        }
+
+        if (!empty($altName)) {
+            $this->setExtension('id-ce-subjectAltName', $altName);
+        }
+
+        if ($this->caFlag) {
+            $keyUsage = $this->getExtension('id-ce-keyUsage');
+            if (!$keyUsage) {
+                $keyUsage = array();
+            }
+
+            $this->setExtension(
+                'id-ce-keyUsage',
+                array_values(array_unique(array_merge($keyUsage, array('cRLSign', 'keyCertSign'))))
+            );
+
+            $basicConstraints = $this->getExtension('id-ce-basicConstraints');
+            if (!$basicConstraints) {
+                $basicConstraints = array();
+            }
+
+            $this->setExtension(
+                'id-ce-basicConstraints',
+                array_unique(array_merge(array('cA' => true), $basicConstraints)),
+                true
+            );
+
+            if (!isset($subject->currentKeyIdentifier)) {
+                $this->setExtension('id-ce-subjectKeyIdentifier', base64_encode($this->computeKeyIdentifier($this->currentCert)), false, false);
+            }
+        }
+
+        // resync $this->signatureSubject
+        // save $tbsCertificate in case there are any \phpseclib\File\ASN1\Element objects in it
+        $tbsCertificate = $this->currentCert['tbsCertificate'];
+        $this->loadX509($this->saveX509($this->currentCert));
+
+        $result = $this->_sign($issuer->privateKey, $signatureAlgorithm);
+        $result['tbsCertificate'] = $tbsCertificate;
+
+        $this->currentCert = $currentCert;
+        $this->signatureSubject = $signatureSubject;
+
+        return $result;
+    }
+
+    /**
+     * Sign a CSR
+     *
+     * @access public
+     * @return mixed
+     */
+    function signCSR($signatureAlgorithm = 'sha1WithRSAEncryption')
+    {
+        if (!is_object($this->privateKey) || empty($this->dn)) {
+            return false;
+        }
+
+        $origPublicKey = $this->publicKey;
+        $class = get_class($this->privateKey);
+        $this->publicKey = new $class();
+        $this->publicKey->loadKey($this->privateKey->getPublicKey());
+        $this->publicKey->setPublicKey();
+        if (!($publicKey = $this->_formatSubjectPublicKey())) {
+            return false;
+        }
+        $this->publicKey = $origPublicKey;
+
+        $currentCert = isset($this->currentCert) ? $this->currentCert : null;
+        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject: null;
+
+        if (isset($this->currentCert) && is_array($this->currentCert) && isset($this->currentCert['certificationRequestInfo'])) {
+            $this->currentCert['signatureAlgorithm']['algorithm'] = $signatureAlgorithm;
+            if (!empty($this->dn)) {
+                $this->currentCert['certificationRequestInfo']['subject'] = $this->dn;
+            }
+            $this->currentCert['certificationRequestInfo']['subjectPKInfo'] = $publicKey;
+        } else {
+            $this->currentCert = array(
+                'certificationRequestInfo' =>
+                    array(
+                        'version' => 'v1',
+                        'subject' => $this->dn,
+                        'subjectPKInfo' => $publicKey
+                    ),
+                    'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm),
+                    'signature'          => false // this is going to be overwritten later
+            );
+        }
+
+        // resync $this->signatureSubject
+        // save $certificationRequestInfo in case there are any \phpseclib\File\ASN1\Element objects in it
+        $certificationRequestInfo = $this->currentCert['certificationRequestInfo'];
+        $this->loadCSR($this->saveCSR($this->currentCert));
+
+        $result = $this->_sign($this->privateKey, $signatureAlgorithm);
+        $result['certificationRequestInfo'] = $certificationRequestInfo;
+
+        $this->currentCert = $currentCert;
+        $this->signatureSubject = $signatureSubject;
+
+        return $result;
+    }
+
+    /**
+     * Sign a SPKAC
+     *
+     * @access public
+     * @return mixed
+     */
+    function signSPKAC($signatureAlgorithm = 'sha1WithRSAEncryption')
+    {
+        if (!is_object($this->privateKey)) {
+            return false;
+        }
+
+        $origPublicKey = $this->publicKey;
+        $class = get_class($this->privateKey);
+        $this->publicKey = new $class();
+        $this->publicKey->loadKey($this->privateKey->getPublicKey());
+        $this->publicKey->setPublicKey();
+        $publicKey = $this->_formatSubjectPublicKey();
+        if (!$publicKey) {
+            return false;
+        }
+        $this->publicKey = $origPublicKey;
+
+        $currentCert = isset($this->currentCert) ? $this->currentCert : null;
+        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject: null;
+
+        // re-signing a SPKAC seems silly but since everything else supports re-signing why not?
+        if (isset($this->currentCert) && is_array($this->currentCert) && isset($this->currentCert['publicKeyAndChallenge'])) {
+            $this->currentCert['signatureAlgorithm']['algorithm'] = $signatureAlgorithm;
+            $this->currentCert['publicKeyAndChallenge']['spki'] = $publicKey;
+            if (!empty($this->challenge)) {
+                // the bitwise AND ensures that the output is a valid IA5String
+                $this->currentCert['publicKeyAndChallenge']['challenge'] = $this->challenge & str_repeat("\x7F", strlen($this->challenge));
+            }
+        } else {
+            $this->currentCert = array(
+                'publicKeyAndChallenge' =>
+                    array(
+                        'spki' => $publicKey,
+                        // quoting <https://developer.mozilla.org/en-US/docs/Web/HTML/Element/keygen>,
+                        // "A challenge string that is submitted along with the public key. Defaults to an empty string if not specified."
+                        // both Firefox and OpenSSL ("openssl spkac -key private.key") behave this way
+                        // we could alternatively do this instead if we ignored the specs:
+                        // Random::string(8) & str_repeat("\x7F", 8)
+                        'challenge' => !empty($this->challenge) ? $this->challenge : ''
+                    ),
+                    'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm),
+                    'signature'          => false // this is going to be overwritten later
+            );
+        }
+
+        // resync $this->signatureSubject
+        // save $publicKeyAndChallenge in case there are any \phpseclib\File\ASN1\Element objects in it
+        $publicKeyAndChallenge = $this->currentCert['publicKeyAndChallenge'];
+        $this->loadSPKAC($this->saveSPKAC($this->currentCert));
+
+        $result = $this->_sign($this->privateKey, $signatureAlgorithm);
+        $result['publicKeyAndChallenge'] = $publicKeyAndChallenge;
+
+        $this->currentCert = $currentCert;
+        $this->signatureSubject = $signatureSubject;
+
+        return $result;
+    }
+
+    /**
+     * Sign a CRL
+     *
+     * $issuer's private key needs to be loaded.
+     *
+     * @param \phpseclib\File\X509 $issuer
+     * @param \phpseclib\File\X509 $crl
+     * @param string $signatureAlgorithm optional
+     * @access public
+     * @return mixed
+     */
+    function signCRL($issuer, $crl, $signatureAlgorithm = 'sha1WithRSAEncryption')
+    {
+        if (!is_object($issuer->privateKey) || empty($issuer->dn)) {
+            return false;
+        }
+
+        $currentCert = isset($this->currentCert) ? $this->currentCert : null;
+        $signatureSubject = isset($this->signatureSubject) ? $this->signatureSubject : null;
+
+        $thisUpdate = new DateTime('now', new DateTimeZone(@date_default_timezone_get()));
+        $thisUpdate = !empty($this->startDate) ? $this->startDate : $thisUpdate->format('D, d M Y H:i:s O');
+
+        if (isset($crl->currentCert) && is_array($crl->currentCert) && isset($crl->currentCert['tbsCertList'])) {
+            $this->currentCert = $crl->currentCert;
+            $this->currentCert['tbsCertList']['signature']['algorithm'] = $signatureAlgorithm;
+            $this->currentCert['signatureAlgorithm']['algorithm'] = $signatureAlgorithm;
+        } else {
+            $this->currentCert = array(
+                'tbsCertList' =>
+                    array(
+                        'version' => 'v2',
+                        'signature' => array('algorithm' => $signatureAlgorithm),
+                        'issuer' => false, // this is going to be overwritten later
+                        'thisUpdate' => $this->_timeField($thisUpdate) // $this->setStartDate()
+                    ),
+                    'signatureAlgorithm' => array('algorithm' => $signatureAlgorithm),
+                    'signature'          => false // this is going to be overwritten later
+            );
+        }
+
+        $tbsCertList = &$this->currentCert['tbsCertList'];
+        $tbsCertList['issuer'] = $issuer->dn;
+        $tbsCertList['thisUpdate'] = $this->_timeField($thisUpdate);
+
+        if (!empty($this->endDate)) {
+            $tbsCertList['nextUpdate'] = $this->_timeField($this->endDate); // $this->setEndDate()
+        } else {
+            unset($tbsCertList['nextUpdate']);
+        }
+
+        if (!empty($this->serialNumber)) {
+            $crlNumber = $this->serialNumber;
+        } else {
+            $crlNumber = $this->getExtension('id-ce-cRLNumber');
+            // "The CRL number is a non-critical CRL extension that conveys a
+            //  monotonically increasing sequence number for a given CRL scope and
+            //  CRL issuer.  This extension allows users to easily determine when a
+            //  particular CRL supersedes another CRL."
+            // -- https://tools.ietf.org/html/rfc5280#section-5.2.3
+            $crlNumber = $crlNumber !== false ? $crlNumber->add(new BigInteger(1)) : null;
+        }
+
+        $this->removeExtension('id-ce-authorityKeyIdentifier');
+        $this->removeExtension('id-ce-issuerAltName');
+
+        // Be sure version >= v2 if some extension found.
+        $version = isset($tbsCertList['version']) ? $tbsCertList['version'] : 0;
+        if (!$version) {
+            if (!empty($tbsCertList['crlExtensions'])) {
+                $version = 1; // v2.
+            } elseif (!empty($tbsCertList['revokedCertificates'])) {
+                foreach ($tbsCertList['revokedCertificates'] as $cert) {
+                    if (!empty($cert['crlEntryExtensions'])) {
+                        $version = 1; // v2.
+                    }
+                }
+            }
+
+            if ($version) {
+                $tbsCertList['version'] = $version;
+            }
+        }
+
+        // Store additional extensions.
+        if (!empty($tbsCertList['version'])) { // At least v2.
+            if (!empty($crlNumber)) {
+                $this->setExtension('id-ce-cRLNumber', $crlNumber);
+            }
+
+            if (isset($issuer->currentKeyIdentifier)) {
+                $this->setExtension('id-ce-authorityKeyIdentifier', array(
+                        //'authorityCertIssuer' => array(
+                        //    array(
+                        //        'directoryName' => $issuer->dn
+                        //    )
+                        //),
+                        'keyIdentifier' => $issuer->currentKeyIdentifier
+                    ));
+                //$extensions = &$tbsCertList['crlExtensions'];
+                //if (isset($issuer->serialNumber)) {
+                //    $extensions[count($extensions) - 1]['authorityCertSerialNumber'] = $issuer->serialNumber;
+                //}
+                //unset($extensions);
+            }
+
+            $issuerAltName = $this->getExtension('id-ce-subjectAltName', $issuer->currentCert);
+
+            if ($issuerAltName !== false) {
+                $this->setExtension('id-ce-issuerAltName', $issuerAltName);
+            }
+        }
+
+        if (empty($tbsCertList['revokedCertificates'])) {
+            unset($tbsCertList['revokedCertificates']);
+        }
+
+        unset($tbsCertList);
+
+        // resync $this->signatureSubject
+        // save $tbsCertList in case there are any \phpseclib\File\ASN1\Element objects in it
+        $tbsCertList = $this->currentCert['tbsCertList'];
+        $this->loadCRL($this->saveCRL($this->currentCert));
+
+        $result = $this->_sign($issuer->privateKey, $signatureAlgorithm);
+        $result['tbsCertList'] = $tbsCertList;
+
+        $this->currentCert = $currentCert;
+        $this->signatureSubject = $signatureSubject;
+
+        return $result;
+    }
+
+    /**
+     * X.509 certificate signing helper function.
+     *
+     * @param object $key
+     * @param \phpseclib\File\X509 $subject
+     * @param string $signatureAlgorithm
+     * @access public
+     * @return mixed
+     */
+    function _sign($key, $signatureAlgorithm)
+    {
+        if ($key instanceof RSA) {
+            switch ($signatureAlgorithm) {
+                case 'md2WithRSAEncryption':
+                case 'md5WithRSAEncryption':
+                case 'sha1WithRSAEncryption':
+                case 'sha224WithRSAEncryption':
+                case 'sha256WithRSAEncryption':
+                case 'sha384WithRSAEncryption':
+                case 'sha512WithRSAEncryption':
+                    $key->setHash(preg_replace('#WithRSAEncryption$#', '', $signatureAlgorithm));
+                    $key->setSignatureMode(RSA::SIGNATURE_PKCS1);
+
+                    $this->currentCert['signature'] = base64_encode("\0" . $key->sign($this->signatureSubject));
+                    return $this->currentCert;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Set certificate start date
+     *
+     * @param string $date
+     * @access public
+     */
+    function setStartDate($date)
+    {
+        if (!is_object($date) || !is_a($date, 'DateTime')) {
+            $date = new DateTime($date, new DateTimeZone(@date_default_timezone_get()));
+        }
+
+        $this->startDate = $date->format('D, d M Y H:i:s O');
+    }
+
+    /**
+     * Set certificate end date
+     *
+     * @param string $date
+     * @access public
+     */
+    function setEndDate($date)
+    {
+        /*
+          To indicate that a certificate has no well-defined expiration date,
+          the notAfter SHOULD be assigned the GeneralizedTime value of
+          99991231235959Z.
+
+          -- http://tools.ietf.org/html/rfc5280#section-4.1.2.5
+        */
+        if (strtolower($date) == 'lifetime') {
+            $temp = '99991231235959Z';
+            $asn1 = new ASN1();
+            $temp = chr(ASN1::TYPE_GENERALIZED_TIME) . $asn1->_encodeLength(strlen($temp)) . $temp;
+            $this->endDate = new Element($temp);
+        } else {
+            if (!is_object($date) || !is_a($date, 'DateTime')) {
+                $date = new DateTime($date, new DateTimeZone(@date_default_timezone_get()));
+            }
+
+            $this->endDate = $date->format('D, d M Y H:i:s O');
+        }
+    }
+
+    /**
+     * Set Serial Number
+     *
+     * @param string $serial
+     * @param $base optional
+     * @access public
+     */
+    function setSerialNumber($serial, $base = -256)
+    {
+        $this->serialNumber = new BigInteger($serial, $base);
+    }
+
+    /**
+     * Turns the certificate into a certificate authority
+     *
+     * @access public
+     */
+    function makeCA()
+    {
+        $this->caFlag = true;
+    }
+
+    /**
+     * Check for validity of subarray
+     *
+     * This is intended for use in conjunction with _subArrayUnchecked(),
+     * implementing the checks included in _subArray() but without copying
+     * a potentially large array by passing its reference by-value to is_array().
+     *
+     * @param array $root
+     * @param string $path
+     * @return boolean
+     * @access private
+     */
+    function _isSubArrayValid($root, $path)
+    {
+        if (!is_array($root)) {
+            return false;
+        }
+
+        foreach (explode('/', $path) as $i) {
+            if (!is_array($root)) {
+                return false;
+            }
+
+            if (!isset($root[$i])) {
+                return true;
+            }
+
+            $root = $root[$i];
+        }
+
+        return true;
+    }
+
+    /**
+     * Get a reference to a subarray
+     *
+     * This variant of _subArray() does no is_array() checking,
+     * so $root should be checked with _isSubArrayValid() first.
+     *
+     * This is here for performance reasons:
+     * Passing a reference (i.e. $root) by-value (i.e. to is_array())
+     * creates a copy. If $root is an especially large array, this is expensive.
+     *
+     * @param array $root
+     * @param string $path  absolute path with / as component separator
+     * @param bool $create optional
+     * @access private
+     * @return array|false
+     */
+    function &_subArrayUnchecked(&$root, $path, $create = false)
+    {
+        $false = false;
+
+        foreach (explode('/', $path) as $i) {
+            if (!isset($root[$i])) {
+                if (!$create) {
+                    return $false;
+                }
+
+                $root[$i] = array();
+            }
+
+            $root = &$root[$i];
+        }
+
+        return $root;
+    }
+
+    /**
+     * Get a reference to a subarray
+     *
+     * @param array $root
+     * @param string $path  absolute path with / as component separator
+     * @param bool $create optional
+     * @access private
+     * @return array|false
+     */
+    function &_subArray(&$root, $path, $create = false)
+    {
+        $false = false;
+
+        if (!is_array($root)) {
+            return $false;
+        }
+
+        foreach (explode('/', $path) as $i) {
+            if (!is_array($root)) {
+                return $false;
+            }
+
+            if (!isset($root[$i])) {
+                if (!$create) {
+                    return $false;
+                }
+
+                $root[$i] = array();
+            }
+
+            $root = &$root[$i];
+        }
+
+        return $root;
+    }
+
+    /**
+     * Get a reference to an extension subarray
+     *
+     * @param array $root
+     * @param string $path optional absolute path with / as component separator
+     * @param bool $create optional
+     * @access private
+     * @return array|false
+     */
+    function &_extensions(&$root, $path = null, $create = false)
+    {
+        if (!isset($root)) {
+            $root = $this->currentCert;
+        }
+
+        switch (true) {
+            case !empty($path):
+            case !is_array($root):
+                break;
+            case isset($root['tbsCertificate']):
+                $path = 'tbsCertificate/extensions';
+                break;
+            case isset($root['tbsCertList']):
+                $path = 'tbsCertList/crlExtensions';
+                break;
+            case isset($root['certificationRequestInfo']):
+                $pth = 'certificationRequestInfo/attributes';
+                $attributes = &$this->_subArray($root, $pth, $create);
+
+                if (is_array($attributes)) {
+                    foreach ($attributes as $key => $value) {
+                        if ($value['type'] == 'pkcs-9-at-extensionRequest') {
+                            $path = "$pth/$key/value/0";
+                            break 2;
+                        }
+                    }
+                    if ($create) {
+                        $key = count($attributes);
+                        $attributes[] = array('type' => 'pkcs-9-at-extensionRequest', 'value' => array());
+                        $path = "$pth/$key/value/0";
+                    }
+                }
+                break;
+        }
+
+        $extensions = &$this->_subArray($root, $path, $create);
+
+        if (!is_array($extensions)) {
+            $false = false;
+            return $false;
+        }
+
+        return $extensions;
+    }
+
+    /**
+     * Remove an Extension
+     *
+     * @param string $id
+     * @param string $path optional
+     * @access private
+     * @return bool
+     */
+    function _removeExtension($id, $path = null)
+    {
+        $extensions = &$this->_extensions($this->currentCert, $path);
+
+        if (!is_array($extensions)) {
+            return false;
+        }
+
+        $result = false;
+        foreach ($extensions as $key => $value) {
+            if ($value['extnId'] == $id) {
+                unset($extensions[$key]);
+                $result = true;
+            }
+        }
+
+        $extensions = array_values($extensions);
+        // fix for https://bugs.php.net/75433 affecting PHP 7.2
+        if (!isset($extensions[0])) {
+            $extensions = array_splice($extensions, 0, 0);
+        }
+        return $result;
+    }
+
+    /**
+     * Get an Extension
+     *
+     * Returns the extension if it exists and false if not
+     *
+     * @param string $id
+     * @param array $cert optional
+     * @param string $path optional
+     * @access private
+     * @return mixed
+     */
+    function _getExtension($id, $cert = null, $path = null)
+    {
+        $extensions = $this->_extensions($cert, $path);
+
+        if (!is_array($extensions)) {
+            return false;
+        }
+
+        foreach ($extensions as $key => $value) {
+            if ($value['extnId'] == $id) {
+                return $value['extnValue'];
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns a list of all extensions in use
+     *
+     * @param array $cert optional
+     * @param string $path optional
+     * @access private
+     * @return array
+     */
+    function _getExtensions($cert = null, $path = null)
+    {
+        $exts = $this->_extensions($cert, $path);
+        $extensions = array();
+
+        if (is_array($exts)) {
+            foreach ($exts as $extension) {
+                $extensions[] = $extension['extnId'];
+            }
+        }
+
+        return $extensions;
+    }
+
+    /**
+     * Set an Extension
+     *
+     * @param string $id
+     * @param mixed $value
+     * @param bool $critical optional
+     * @param bool $replace optional
+     * @param string $path optional
+     * @access private
+     * @return bool
+     */
+    function _setExtension($id, $value, $critical = false, $replace = true, $path = null)
+    {
+        $extensions = &$this->_extensions($this->currentCert, $path, true);
+
+        if (!is_array($extensions)) {
+            return false;
+        }
+
+        $newext = array('extnId'  => $id, 'critical' => $critical, 'extnValue' => $value);
+
+        foreach ($extensions as $key => $value) {
+            if ($value['extnId'] == $id) {
+                if (!$replace) {
+                    return false;
+                }
+
+                $extensions[$key] = $newext;
+                return true;
+            }
+        }
+
+        $extensions[] = $newext;
+        return true;
+    }
+
+    /**
+     * Remove a certificate, CSR or CRL Extension
+     *
+     * @param string $id
+     * @access public
+     * @return bool
+     */
+    function removeExtension($id)
+    {
+        return $this->_removeExtension($id);
+    }
+
+    /**
+     * Get a certificate, CSR or CRL Extension
+     *
+     * Returns the extension if it exists and false if not
+     *
+     * @param string $id
+     * @param array $cert optional
+     * @access public
+     * @return mixed
+     */
+    function getExtension($id, $cert = null)
+    {
+        return $this->_getExtension($id, $cert);
+    }
+
+    /**
+     * Returns a list of all extensions in use in certificate, CSR or CRL
+     *
+     * @param array $cert optional
+     * @access public
+     * @return array
+     */
+    function getExtensions($cert = null)
+    {
+        return $this->_getExtensions($cert);
+    }
+
+    /**
+     * Set a certificate, CSR or CRL Extension
+     *
+     * @param string $id
+     * @param mixed $value
+     * @param bool $critical optional
+     * @param bool $replace optional
+     * @access public
+     * @return bool
+     */
+    function setExtension($id, $value, $critical = false, $replace = true)
+    {
+        return $this->_setExtension($id, $value, $critical, $replace);
+    }
+
+    /**
+     * Remove a CSR attribute.
+     *
+     * @param string $id
+     * @param int $disposition optional
+     * @access public
+     * @return bool
+     */
+    function removeAttribute($id, $disposition = self::ATTR_ALL)
+    {
+        $attributes = &$this->_subArray($this->currentCert, 'certificationRequestInfo/attributes');
+
+        if (!is_array($attributes)) {
+            return false;
+        }
+
+        $result = false;
+        foreach ($attributes as $key => $attribute) {
+            if ($attribute['type'] == $id) {
+                $n = count($attribute['value']);
+                switch (true) {
+                    case $disposition == self::ATTR_APPEND:
+                    case $disposition == self::ATTR_REPLACE:
+                        return false;
+                    case $disposition >= $n:
+                        $disposition -= $n;
+                        break;
+                    case $disposition == self::ATTR_ALL:
+                    case $n == 1:
+                        unset($attributes[$key]);
+                        $result = true;
+                        break;
+                    default:
+                        unset($attributes[$key]['value'][$disposition]);
+                        $attributes[$key]['value'] = array_values($attributes[$key]['value']);
+                        $result = true;
+                        break;
+                }
+                if ($result && $disposition != self::ATTR_ALL) {
+                    break;
+                }
+            }
+        }
+
+        $attributes = array_values($attributes);
+        return $result;
+    }
+
+    /**
+     * Get a CSR attribute
+     *
+     * Returns the attribute if it exists and false if not
+     *
+     * @param string $id
+     * @param int $disposition optional
+     * @param array $csr optional
+     * @access public
+     * @return mixed
+     */
+    function getAttribute($id, $disposition = self::ATTR_ALL, $csr = null)
+    {
+        if (empty($csr)) {
+            $csr = $this->currentCert;
+        }
+
+        $attributes = $this->_subArray($csr, 'certificationRequestInfo/attributes');
+
+        if (!is_array($attributes)) {
+            return false;
+        }
+
+        foreach ($attributes as $key => $attribute) {
+            if ($attribute['type'] == $id) {
+                $n = count($attribute['value']);
+                switch (true) {
+                    case $disposition == self::ATTR_APPEND:
+                    case $disposition == self::ATTR_REPLACE:
+                        return false;
+                    case $disposition == self::ATTR_ALL:
+                        return $attribute['value'];
+                    case $disposition >= $n:
+                        $disposition -= $n;
+                        break;
+                    default:
+                        return $attribute['value'][$disposition];
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns a list of all CSR attributes in use
+     *
+     * @param array $csr optional
+     * @access public
+     * @return array
+     */
+    function getAttributes($csr = null)
+    {
+        if (empty($csr)) {
+            $csr = $this->currentCert;
+        }
+
+        $attributes = $this->_subArray($csr, 'certificationRequestInfo/attributes');
+        $attrs = array();
+
+        if (is_array($attributes)) {
+            foreach ($attributes as $attribute) {
+                $attrs[] = $attribute['type'];
+            }
+        }
+
+        return $attrs;
+    }
+
+    /**
+     * Set a CSR attribute
+     *
+     * @param string $id
+     * @param mixed $value
+     * @param bool $disposition optional
+     * @access public
+     * @return bool
+     */
+    function setAttribute($id, $value, $disposition = self::ATTR_ALL)
+    {
+        $attributes = &$this->_subArray($this->currentCert, 'certificationRequestInfo/attributes', true);
+
+        if (!is_array($attributes)) {
+            return false;
+        }
+
+        switch ($disposition) {
+            case self::ATTR_REPLACE:
+                $disposition = self::ATTR_APPEND;
+            case self::ATTR_ALL:
+                $this->removeAttribute($id);
+                break;
+        }
+
+        foreach ($attributes as $key => $attribute) {
+            if ($attribute['type'] == $id) {
+                $n = count($attribute['value']);
+                switch (true) {
+                    case $disposition == self::ATTR_APPEND:
+                        $last = $key;
+                        break;
+                    case $disposition >= $n:
+                        $disposition -= $n;
+                        break;
+                    default:
+                        $attributes[$key]['value'][$disposition] = $value;
+                        return true;
+                }
+            }
+        }
+
+        switch (true) {
+            case $disposition >= 0:
+                return false;
+            case isset($last):
+                $attributes[$last]['value'][] = $value;
+                break;
+            default:
+                $attributes[] = array('type' => $id, 'value' => $disposition == self::ATTR_ALL ? $value: array($value));
+                break;
+        }
+
+        return true;
+    }
+
+    /**
+     * Sets the subject key identifier
+     *
+     * This is used by the id-ce-authorityKeyIdentifier and the id-ce-subjectKeyIdentifier extensions.
+     *
+     * @param string $value
+     * @access public
+     */
+    function setKeyIdentifier($value)
+    {
+        if (empty($value)) {
+            unset($this->currentKeyIdentifier);
+        } else {
+            $this->currentKeyIdentifier = base64_encode($value);
+        }
+    }
+
+    /**
+     * Compute a public key identifier.
+     *
+     * Although key identifiers may be set to any unique value, this function
+     * computes key identifiers from public key according to the two
+     * recommended methods (4.2.1.2 RFC 3280).
+     * Highly polymorphic: try to accept all possible forms of key:
+     * - Key object
+     * - \phpseclib\File\X509 object with public or private key defined
+     * - Certificate or CSR array
+     * - \phpseclib\File\ASN1\Element object
+     * - PEM or DER string
+     *
+     * @param mixed $key optional
+     * @param int $method optional
+     * @access public
+     * @return string binary key identifier
+     */
+    function computeKeyIdentifier($key = null, $method = 1)
+    {
+        if (is_null($key)) {
+            $key = $this;
+        }
+
+        switch (true) {
+            case is_string($key):
+                break;
+            case is_array($key) && isset($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey']):
+                return $this->computeKeyIdentifier($key['tbsCertificate']['subjectPublicKeyInfo']['subjectPublicKey'], $method);
+            case is_array($key) && isset($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey']):
+                return $this->computeKeyIdentifier($key['certificationRequestInfo']['subjectPKInfo']['subjectPublicKey'], $method);
+            case !is_object($key):
+                return false;
+            case $key instanceof Element:
+                // Assume the element is a bitstring-packed key.
+                $asn1 = new ASN1();
+                $decoded = $asn1->decodeBER($key->element);
+                if (empty($decoded)) {
+                    return false;
+                }
+                $raw = $asn1->asn1map($decoded[0], array('type' => ASN1::TYPE_BIT_STRING));
+                if (empty($raw)) {
+                    return false;
+                }
+                $raw = base64_decode($raw);
+                // If the key is private, compute identifier from its corresponding public key.
+                $key = new RSA();
+                if (!$key->loadKey($raw)) {
+                    return false;   // Not an unencrypted RSA key.
+                }
+                if ($key->getPrivateKey() !== false) {  // If private.
+                    return $this->computeKeyIdentifier($key, $method);
+                }
+                $key = $raw;    // Is a public key.
+                break;
+            case $key instanceof X509:
+                if (isset($key->publicKey)) {
+                    return $this->computeKeyIdentifier($key->publicKey, $method);
+                }
+                if (isset($key->privateKey)) {
+                    return $this->computeKeyIdentifier($key->privateKey, $method);
+                }
+                if (isset($key->currentCert['tbsCertificate']) || isset($key->currentCert['certificationRequestInfo'])) {
+                    return $this->computeKeyIdentifier($key->currentCert, $method);
+                }
+                return false;
+            default: // Should be a key object (i.e.: \phpseclib\Crypt\RSA).
+                $key = $key->getPublicKey(RSA::PUBLIC_FORMAT_PKCS1);
+                break;
+        }
+
+        // If in PEM format, convert to binary.
+        $key = $this->_extractBER($key);
+
+        // Now we have the key string: compute its sha-1 sum.
+        $hash = new Hash('sha1');
+        $hash = $hash->hash($key);
+
+        if ($method == 2) {
+            $hash = substr($hash, -8);
+            $hash[0] = chr((ord($hash[0]) & 0x0F) | 0x40);
+        }
+
+        return $hash;
+    }
+
+    /**
+     * Format a public key as appropriate
+     *
+     * @access private
+     * @return array
+     */
+    function _formatSubjectPublicKey()
+    {
+        if ($this->publicKey instanceof RSA) {
+            // the following two return statements do the same thing. i dunno.. i just prefer the later for some reason.
+            // the former is a good example of how to do fuzzing on the public key
+            //return new Element(base64_decode(preg_replace('#-.+-|[\r\n]#', '', $this->publicKey->getPublicKey())));
+            return array(
+                'algorithm' => array('algorithm' => 'rsaEncryption'),
+                'subjectPublicKey' => $this->publicKey->getPublicKey(RSA::PUBLIC_FORMAT_PKCS1)
+            );
+        }
+
+        return false;
+    }
+
+    /**
+     * Set the domain name's which the cert is to be valid for
+     *
+     * @access public
+     * @return array
+     */
+    function setDomain()
+    {
+        $this->domains = func_get_args();
+        $this->removeDNProp('id-at-commonName');
+        $this->setDNProp('id-at-commonName', $this->domains[0]);
+    }
+
+    /**
+     * Set the IP Addresses's which the cert is to be valid for
+     *
+     * @access public
+     * @param string $ipAddress optional
+     */
+    function setIPAddress()
+    {
+        $this->ipAddresses = func_get_args();
+        /*
+        if (!isset($this->domains)) {
+            $this->removeDNProp('id-at-commonName');
+            $this->setDNProp('id-at-commonName', $this->ipAddresses[0]);
+        }
+        */
+    }
+
+    /**
+     * Helper function to build domain array
+     *
+     * @access private
+     * @param string $domain
+     * @return array
+     */
+    function _dnsName($domain)
+    {
+        return array('dNSName' => $domain);
+    }
+
+    /**
+     * Helper function to build IP Address array
+     *
+     * (IPv6 is not currently supported)
+     *
+     * @access private
+     * @param string $address
+     * @return array
+     */
+    function _iPAddress($address)
+    {
+        return array('iPAddress' => $address);
+    }
+
+    /**
+     * Get the index of a revoked certificate.
+     *
+     * @param array $rclist
+     * @param string $serial
+     * @param bool $create optional
+     * @access private
+     * @return int|false
+     */
+    function _revokedCertificate(&$rclist, $serial, $create = false)
+    {
+        $serial = new BigInteger($serial);
+
+        foreach ($rclist as $i => $rc) {
+            if (!($serial->compare($rc['userCertificate']))) {
+                return $i;
+            }
+        }
+
+        if (!$create) {
+            return false;
+        }
+
+        $i = count($rclist);
+        $revocationDate = new DateTime('now', new DateTimeZone(@date_default_timezone_get()));
+        $rclist[] = array('userCertificate' => $serial,
+                          'revocationDate'  => $this->_timeField($revocationDate->format('D, d M Y H:i:s O')));
+        return $i;
+    }
+
+    /**
+     * Revoke a certificate.
+     *
+     * @param string $serial
+     * @param string $date optional
+     * @access public
+     * @return bool
+     */
+    function revoke($serial, $date = null)
+    {
+        if (isset($this->currentCert['tbsCertList'])) {
+            if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) {
+                if ($this->_revokedCertificate($rclist, $serial) === false) { // If not yet revoked
+                    if (($i = $this->_revokedCertificate($rclist, $serial, true)) !== false) {
+                        if (!empty($date)) {
+                            $rclist[$i]['revocationDate'] = $this->_timeField($date);
+                        }
+
+                        return true;
+                    }
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Unrevoke a certificate.
+     *
+     * @param string $serial
+     * @access public
+     * @return bool
+     */
+    function unrevoke($serial)
+    {
+        if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {
+            if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+                unset($rclist[$i]);
+                $rclist = array_values($rclist);
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Get a revoked certificate.
+     *
+     * @param string $serial
+     * @access public
+     * @return mixed
+     */
+    function getRevoked($serial)
+    {
+        if (is_array($rclist = $this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {
+            if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+                return $rclist[$i];
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * List revoked certificates
+     *
+     * @param array $crl optional
+     * @access public
+     * @return array
+     */
+    function listRevoked($crl = null)
+    {
+        if (!isset($crl)) {
+            $crl = $this->currentCert;
+        }
+
+        if (!isset($crl['tbsCertList'])) {
+            return false;
+        }
+
+        $result = array();
+
+        if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) {
+            foreach ($rclist as $rc) {
+                $result[] = $rc['userCertificate']->toString();
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Remove a Revoked Certificate Extension
+     *
+     * @param string $serial
+     * @param string $id
+     * @access public
+     * @return bool
+     */
+    function removeRevokedCertificateExtension($serial, $id)
+    {
+        if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates'))) {
+            if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+                return $this->_removeExtension($id, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Get a Revoked Certificate Extension
+     *
+     * Returns the extension if it exists and false if not
+     *
+     * @param string $serial
+     * @param string $id
+     * @param array $crl optional
+     * @access public
+     * @return mixed
+     */
+    function getRevokedCertificateExtension($serial, $id, $crl = null)
+    {
+        if (!isset($crl)) {
+            $crl = $this->currentCert;
+        }
+
+        if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) {
+            if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+                return $this->_getExtension($id, $crl,  "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Returns a list of all extensions in use for a given revoked certificate
+     *
+     * @param string $serial
+     * @param array $crl optional
+     * @access public
+     * @return array
+     */
+    function getRevokedCertificateExtensions($serial, $crl = null)
+    {
+        if (!isset($crl)) {
+            $crl = $this->currentCert;
+        }
+
+        if (is_array($rclist = $this->_subArray($crl, 'tbsCertList/revokedCertificates'))) {
+            if (($i = $this->_revokedCertificate($rclist, $serial)) !== false) {
+                return $this->_getExtensions($crl, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Set a Revoked Certificate Extension
+     *
+     * @param string $serial
+     * @param string $id
+     * @param mixed $value
+     * @param bool $critical optional
+     * @param bool $replace optional
+     * @access public
+     * @return bool
+     */
+    function setRevokedCertificateExtension($serial, $id, $value, $critical = false, $replace = true)
+    {
+        if (isset($this->currentCert['tbsCertList'])) {
+            if (is_array($rclist = &$this->_subArray($this->currentCert, 'tbsCertList/revokedCertificates', true))) {
+                if (($i = $this->_revokedCertificate($rclist, $serial, true)) !== false) {
+                    return $this->_setExtension($id, $value, $critical, $replace, "tbsCertList/revokedCertificates/$i/crlEntryExtensions");
+                }
+            }
+        }
+
+        return false;
+    }
+
+    /**
+     * Extract raw BER from Base64 encoding
+     *
+     * @access private
+     * @param string $str
+     * @return string
+     */
+    function _extractBER($str)
+    {
+        /* X.509 certs are assumed to be base64 encoded but sometimes they'll have additional things in them
+         * above and beyond the ceritificate.
+         * ie. some may have the following preceding the -----BEGIN CERTIFICATE----- line:
+         *
+         * Bag Attributes
+         *     localKeyID: 01 00 00 00
+         * subject=/O=organization/OU=org unit/CN=common name
+         * issuer=/O=organization/CN=common name
+         */
+        $temp = preg_replace('#.*?^-+[^-]+-+[\r\n ]*$#ms', '', $str, 1);
+        // remove the -----BEGIN CERTIFICATE----- and -----END CERTIFICATE----- stuff
+        $temp = preg_replace('#-+[^-]+-+#', '', $temp);
+        // remove new lines
+        $temp = str_replace(array("\r", "\n", ' '), '', $temp);
+        $temp = preg_match('#^[a-zA-Z\d/+]*={0,2}$#', $temp) ? base64_decode($temp) : false;
+        return $temp != false ? $temp : $str;
+    }
+
+    /**
+     * Returns the OID corresponding to a name
+     *
+     * What's returned in the associative array returned by loadX509() (or load*()) is either a name or an OID if
+     * no OID to name mapping is available. The problem with this is that what may be an unmapped OID in one version
+     * of phpseclib may not be unmapped in the next version, so apps that are looking at this OID may not be able
+     * to work from version to version.
+     *
+     * This method will return the OID if a name is passed to it and if no mapping is avialable it'll assume that
+     * what's being passed to it already is an OID and return that instead. A few examples.
+     *
+     * getOID('2.16.840.1.101.3.4.2.1') == '2.16.840.1.101.3.4.2.1'
+     * getOID('id-sha256') == '2.16.840.1.101.3.4.2.1'
+     * getOID('zzz') == 'zzz'
+     *
+     * @access public
+     * @return string
+     */
+    function getOID($name)
+    {
+        static $reverseMap;
+        if (!isset($reverseMap)) {
+            $reverseMap = array_flip($this->oids);
+        }
+        return isset($reverseMap[$name]) ? $reverseMap[$name] : $name;
+    }
+}
diff --git a/lib/phpseclib/Math/BigInteger.php b/lib/phpseclib/Math/BigInteger.php
index 92b50b8..d82d123 100644
--- a/lib/phpseclib/Math/BigInteger.php
+++ b/lib/phpseclib/Math/BigInteger.php
@@ -1,5 +1,4 @@
 <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
  * Pure-PHP arbitrary precision integer arithmetic library.
@@ -7,12 +6,12 @@
  * Supports base-2, base-10, base-16, and base-256 numbers.  Uses the GMP or BCMath extensions, if available,
  * and an internal implementation, otherwise.
  *
- * PHP versions 4 and 5
+ * PHP version 5
  *
- * {@internal (all DocBlock comments regarding implementation - such as the one that follows - refer to the 
- * {@link MATH_BIGINTEGER_MODE_INTERNAL MATH_BIGINTEGER_MODE_INTERNAL} mode)
+ * {@internal (all DocBlock comments regarding implementation - such as the one that follows - refer to the
+ * {@link self::MODE_INTERNAL self::MODE_INTERNAL} mode)
  *
- * Math_BigInteger uses base-2**26 to perform operations such as multiplication and division and
+ * BigInteger uses base-2**26 to perform operations such as multiplication and division and
  * base-2**52 (ie. two base 2**26 digits) to perform addition and subtraction.  Because the largest possible
  * value when multiplying two base-2**26 numbers together is a base-2**52 number, double precision floating
  * point numbers - numbers that should be supported on most hardware and whose significand is 53 bits - are
@@ -20,12 +19,8 @@
  * which only supports integers.  Although this fact will slow this library down, the fact that such a high
  * base is being used should more than compensate.
  *
- * When PHP version 6 is officially released, we'll be able to use 64-bit integers.  This should, once again,
- * allow bitwise operators, and will increase the maximum possible base to 2**31 (or 2**62 for addition /
- * subtraction).
- *
  * Numbers are stored in {@link http://en.wikipedia.org/wiki/Endianness little endian} format.  ie.
- * (new Math_BigInteger(pow(2, 26)))->value = array(0, 1)
+ * (new \phpseclib\Math\BigInteger(pow(2, 26)))->value = array(0, 1)
  *
  * Useful resources are as follows:
  *
@@ -36,10 +31,8 @@
  * Here's an example of how to use this library:
  * <code>
  * <?php
- *    include('Math/BigInteger.php');
- *
- *    $a = new Math_BigInteger(2);
- *    $b = new Math_BigInteger(3);
+ *    $a = new \phpseclib\Math\BigInteger(2);
+ *    $b = new \phpseclib\Math\BigInteger(3);
  *
  *    $c = $a->add($b);
  *
@@ -47,175 +40,169 @@
  * ?>
  * </code>
  *
- * LICENSE: This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- *
- * @category   Math
- * @package    Math_BigInteger
- * @author     Jim Wigginton <terrafrost@php.net>
- * @copyright  MMVI Jim Wigginton
- * @license    http://www.gnu.org/licenses/lgpl.txt
- * @version    $Id: BigInteger.php,v 1.33 2010/03/22 22:32:03 terrafrost Exp $
- * @link       http://pear.php.net/package/Math_BigInteger
+ * @category  Math
+ * @package   BigInteger
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2006 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://pear.php.net/package/Math_BigInteger
  */
 
-/**#@+
- * Reduction constants
- *
- * @access private
- * @see Math_BigInteger::_reduce()
- */
-/**
- * @see Math_BigInteger::_montgomery()
- * @see Math_BigInteger::_prepMontgomery()
- */
-define('MATH_BIGINTEGER_MONTGOMERY', 0);
-/**
- * @see Math_BigInteger::_barrett()
- */
-define('MATH_BIGINTEGER_BARRETT', 1);
-/**
- * @see Math_BigInteger::_mod2()
- */
-define('MATH_BIGINTEGER_POWEROF2', 2);
-/**
- * @see Math_BigInteger::_remainder()
- */
-define('MATH_BIGINTEGER_CLASSIC', 3);
-/**
- * @see Math_BigInteger::__clone()
- */
-define('MATH_BIGINTEGER_NONE', 4);
-/**#@-*/
+namespace phpseclib\Math;
 
-/**#@+
- * Array constants
- *
- * Rather than create a thousands and thousands of new Math_BigInteger objects in repeated function calls to add() and
- * multiply() or whatever, we'll just work directly on arrays, taking them in as parameters and returning them.
- *
- * @access private
- */
-/**
- * $result[MATH_BIGINTEGER_VALUE] contains the value.
- */
-define('MATH_BIGINTEGER_VALUE', 0);
-/**
- * $result[MATH_BIGINTEGER_SIGN] contains the sign.
- */
-define('MATH_BIGINTEGER_SIGN', 1);
-/**#@-*/
-
-/**#@+
- * @access private
- * @see Math_BigInteger::_montgomery()
- * @see Math_BigInteger::_barrett()
- */
-/**
- * Cache constants
- *
- * $cache[MATH_BIGINTEGER_VARIABLE] tells us whether or not the cached data is still valid.
- */
-define('MATH_BIGINTEGER_VARIABLE', 0);
-/**
- * $cache[MATH_BIGINTEGER_DATA] contains the cached data.
- */
-define('MATH_BIGINTEGER_DATA', 1);
-/**#@-*/
-
-/**#@+
- * Mode constants.
- *
- * @access private
- * @see Math_BigInteger::Math_BigInteger()
- */
-/**
- * To use the pure-PHP implementation
- */
-define('MATH_BIGINTEGER_MODE_INTERNAL', 1);
-/**
- * To use the BCMath library
- *
- * (if enabled; otherwise, the internal implementation will be used)
- */
-define('MATH_BIGINTEGER_MODE_BCMATH', 2);
-/**
- * To use the GMP library
- *
- * (if present; otherwise, either the BCMath or the internal implementation will be used)
- */
-define('MATH_BIGINTEGER_MODE_GMP', 3);
-/**#@-*/
-
-/**
- * The largest digit that may be used in addition / subtraction
- *
- * (we do pow(2, 52) instead of using 4503599627370496, directly, because some PHP installations
- *  will truncate 4503599627370496)
- *
- * @access private
- */
-define('MATH_BIGINTEGER_MAX_DIGIT52', pow(2, 52));
-
-/**
- * Karatsuba Cutoff
- *
- * At what point do we switch between Karatsuba multiplication and schoolbook long multiplication?
- *
- * @access private
- */
-define('MATH_BIGINTEGER_KARATSUBA_CUTOFF', 25);
+use phpseclib\Crypt\Random;
 
 /**
  * Pure-PHP arbitrary precision integer arithmetic library. Supports base-2, base-10, base-16, and base-256
  * numbers.
  *
+ * @package BigInteger
  * @author  Jim Wigginton <terrafrost@php.net>
- * @version 1.0.0RC4
  * @access  public
- * @package Math_BigInteger
  */
-class Math_BigInteger {
+class BigInteger
+{
+    /**#@+
+     * Reduction constants
+     *
+     * @access private
+     * @see BigInteger::_reduce()
+     */
     /**
-     * Holds the BigInteger's value.
+     * @see BigInteger::_montgomery()
+     * @see BigInteger::_prepMontgomery()
+     */
+    const MONTGOMERY = 0;
+    /**
+     * @see BigInteger::_barrett()
+     */
+    const BARRETT = 1;
+    /**
+     * @see BigInteger::_mod2()
+     */
+    const POWEROF2 = 2;
+    /**
+     * @see BigInteger::_remainder()
+     */
+    const CLASSIC = 3;
+    /**
+     * @see BigInteger::__clone()
+     */
+    const NONE = 4;
+    /**#@-*/
+
+    /**#@+
+     * Array constants
+     *
+     * Rather than create a thousands and thousands of new BigInteger objects in repeated function calls to add() and
+     * multiply() or whatever, we'll just work directly on arrays, taking them in as parameters and returning them.
      *
-     * @var Array
      * @access private
+    */
+    /**
+     * $result[self::VALUE] contains the value.
      */
-    var $value;
+    const VALUE = 0;
+    /**
+     * $result[self::SIGN] contains the sign.
+     */
+    const SIGN = 1;
+    /**#@-*/
 
+    /**#@+
+     * @access private
+     * @see BigInteger::_montgomery()
+     * @see BigInteger::_barrett()
+    */
     /**
-     * Holds the BigInteger's magnitude.
+     * Cache constants
+     *
+     * $cache[self::VARIABLE] tells us whether or not the cached data is still valid.
+     */
+    const VARIABLE = 0;
+    /**
+     * $cache[self::DATA] contains the cached data.
+     */
+    const DATA = 1;
+    /**#@-*/
+
+    /**#@+
+     * Mode constants.
      *
-     * @var Boolean
      * @access private
+     * @see BigInteger::__construct()
+    */
+    /**
+     * To use the pure-PHP implementation
      */
-    var $is_negative = false;
+    const MODE_INTERNAL = 1;
+    /**
+     * To use the BCMath library
+     *
+     * (if enabled; otherwise, the internal implementation will be used)
+     */
+    const MODE_BCMATH = 2;
+    /**
+     * To use the GMP library
+     *
+     * (if present; otherwise, either the BCMath or the internal implementation will be used)
+     */
+    const MODE_GMP = 3;
+    /**#@-*/
+
+    /**
+     * Karatsuba Cutoff
+     *
+     * At what point do we switch between Karatsuba multiplication and schoolbook long multiplication?
+     *
+     * @access private
+     */
+    const KARATSUBA_CUTOFF = 25;
+
+    /**#@+
+     * Static properties used by the pure-PHP implementation.
+     *
+     * @see __construct()
+     */
+    protected static $base;
+    protected static $baseFull;
+    protected static $maxDigit;
+    protected static $msb;
+
+    /**
+     * $max10 in greatest $max10Len satisfying
+     * $max10 = 10**$max10Len <= 2**$base.
+     */
+    protected static $max10;
+
+    /**
+     * $max10Len in greatest $max10Len satisfying
+     * $max10 = 10**$max10Len <= 2**$base.
+     */
+    protected static $max10Len;
+    protected static $maxDigit2;
+    /**#@-*/
+
+    /**
+     * Holds the BigInteger's value.
+     *
+     * @var array
+     * @access private
+     */
+    var $value;
 
     /**
-     * Random number generator function
+     * Holds the BigInteger's magnitude.
      *
-     * @see setRandomGenerator()
+     * @var bool
      * @access private
      */
-    var $generator = 'mt_rand';
+    var $is_negative = false;
 
     /**
      * Precision
      *
-     * @see setPrecision()
+     * @see self::setPrecision()
      * @access private
      */
     var $precision = -1;
@@ -223,27 +210,27 @@ class Math_BigInteger {
     /**
      * Precision Bitmask
      *
-     * @see setPrecision()
+     * @see self::setPrecision()
      * @access private
      */
     var $bitmask = false;
 
     /**
-     * Mode independant value used for serialization.
+     * Mode independent value used for serialization.
      *
-     * If the bcmath or gmp extensions are installed $this->value will be a non-serializable resource, hence the need for 
+     * If the bcmath or gmp extensions are installed $this->value will be a non-serializable resource, hence the need for
      * a variable that'll be serializable regardless of whether or not extensions are being used.  Unlike $this->value,
      * however, $this->hex is only calculated when $this->__sleep() is called.
      *
-     * @see __sleep()
-     * @see __wakeup()
-     * @var String
+     * @see self::__sleep()
+     * @see self::__wakeup()
+     * @var string
      * @access private
      */
     var $hex;
 
     /**
-     * Converts base-2, base-10, base-16, and binary strings (eg. base-256) to BigIntegers.
+     * Converts base-2, base-10, base-16, and binary strings (base-256) to BigIntegers.
      *
      * If the second parameter - $base - is negative, then it will be assumed that the number's are encoded using
      * two's compliment.  The sole exception to this is -10, which is treated the same as 10 is.
@@ -251,50 +238,120 @@ class Math_BigInteger {
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger('0x32', 16); // 50 in base-16
+     *    $a = new \phpseclib\Math\BigInteger('0x32', 16); // 50 in base-16
      *
      *    echo $a->toString(); // outputs 50
      * ?>
      * </code>
      *
-     * @param optional $x base-10 number or base-$base number if $base set.
-     * @param optional integer $base
-     * @return Math_BigInteger
+     * @param $x base-10 number or base-$base number if $base set.
+     * @param int $base
+     * @return \phpseclib\Math\BigInteger
      * @access public
      */
-    function Math_BigInteger($x = 0, $base = 10)
+    function __construct($x = 0, $base = 10)
     {
-        if ( !defined('MATH_BIGINTEGER_MODE') ) {
+        if (!defined('MATH_BIGINTEGER_MODE')) {
             switch (true) {
                 case extension_loaded('gmp'):
-                    define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_GMP);
+                    define('MATH_BIGINTEGER_MODE', self::MODE_GMP);
                     break;
                 case extension_loaded('bcmath'):
-                    define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_BCMATH);
+                    define('MATH_BIGINTEGER_MODE', self::MODE_BCMATH);
+                    break;
+                default:
+                    define('MATH_BIGINTEGER_MODE', self::MODE_INTERNAL);
+            }
+        }
+
+        if (extension_loaded('openssl') && !defined('MATH_BIGINTEGER_OPENSSL_DISABLE') && !defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) {
+            // some versions of XAMPP have mismatched versions of OpenSSL which causes it not to work
+            $versions = array();
+
+            // avoid generating errors (even with suppression) when phpinfo() is disabled (common in production systems)
+            if (strpos(ini_get('disable_functions'), 'phpinfo') === false) {
+                ob_start();
+                @phpinfo();
+                $content = ob_get_contents();
+                ob_end_clean();
+
+                preg_match_all('#OpenSSL (Header|Library) Version(.*)#im', $content, $matches);
+
+                if (!empty($matches[1])) {
+                    for ($i = 0; $i < count($matches[1]); $i++) {
+                        $fullVersion = trim(str_replace('=>', '', strip_tags($matches[2][$i])));
+
+                        // Remove letter part in OpenSSL version
+                        if (!preg_match('/(\d+\.\d+\.\d+)/i', $fullVersion, $m)) {
+                            $versions[$matches[1][$i]] = $fullVersion;
+                        } else {
+                            $versions[$matches[1][$i]] = $m[0];
+                        }
+                    }
+                }
+            }
+
+            // it doesn't appear that OpenSSL versions were reported upon until PHP 5.3+
+            switch (true) {
+                case !isset($versions['Header']):
+                case !isset($versions['Library']):
+                case $versions['Header'] == $versions['Library']:
+                case version_compare($versions['Header'], '1.0.0') >= 0 && version_compare($versions['Library'], '1.0.0') >= 0:
+                    define('MATH_BIGINTEGER_OPENSSL_ENABLED', true);
                     break;
                 default:
-                    define('MATH_BIGINTEGER_MODE', MATH_BIGINTEGER_MODE_INTERNAL);
+                    define('MATH_BIGINTEGER_OPENSSL_DISABLE', true);
             }
         }
 
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
-                if (is_resource($x) && get_resource_type($x) == 'GMP integer') {
-                    $this->value = $x;
-                    return;
+        if (!defined('PHP_INT_SIZE')) {
+            define('PHP_INT_SIZE', 4);
+        }
+
+        if (empty(self::$base) && MATH_BIGINTEGER_MODE == self::MODE_INTERNAL) {
+            switch (PHP_INT_SIZE) {
+                case 8: // use 64-bit integers if int size is 8 bytes
+                    self::$base      = 31;
+                    self::$baseFull  = 0x80000000;
+                    self::$maxDigit  = 0x7FFFFFFF;
+                    self::$msb       = 0x40000000;
+                    self::$max10     = 1000000000;
+                    self::$max10Len  = 9;
+                    self::$maxDigit2 = pow(2, 62);
+                    break;
+                //case 4: // use 64-bit floats if int size is 4 bytes
+                default:
+                    self::$base      = 26;
+                    self::$baseFull  = 0x4000000;
+                    self::$maxDigit  = 0x3FFFFFF;
+                    self::$msb       = 0x2000000;
+                    self::$max10     = 10000000;
+                    self::$max10Len  = 7;
+                    self::$maxDigit2 = pow(2, 52); // pow() prevents truncation
+            }
+        }
+
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
+                switch (true) {
+                    case is_resource($x) && get_resource_type($x) == 'GMP integer':
+                    // PHP 5.6 switched GMP from using resources to objects
+                    case $x instanceof \GMP:
+                        $this->value = $x;
+                        return;
                 }
                 $this->value = gmp_init(0);
                 break;
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 $this->value = '0';
                 break;
             default:
                 $this->value = array();
         }
 
-        if (empty($x)) {
+        // '0' counts as empty() but when the base is 256 '0' is equal to ord('0') or 48
+        // '0' is the only value like this per http://php.net/empty
+        if (empty($x) && (abs($base) != 256 || $x !== '0')) {
             return;
         }
 
@@ -304,13 +361,17 @@ class Math_BigInteger {
                     $x = ~$x;
                     $this->is_negative = true;
                 }
-            case  256:
-                switch ( MATH_BIGINTEGER_MODE ) {
-                    case MATH_BIGINTEGER_MODE_GMP:
-                        $sign = $this->is_negative ? '-' : '';
-                        $this->value = gmp_init($sign . '0x' . bin2hex($x));
+            case 256:
+                switch (MATH_BIGINTEGER_MODE) {
+                    case self::MODE_GMP:
+                        $this->value = function_exists('gmp_import') ?
+                            gmp_import($x) :
+                            gmp_init('0x' . bin2hex($x));
+                        if ($this->is_negative) {
+                            $this->value = gmp_neg($this->value);
+                        }
                         break;
-                    case MATH_BIGINTEGER_MODE_BCMATH:
+                    case self::MODE_BCMATH:
                         // round $len to the nearest 4 (thanks, DavidMJ!)
                         $len = (strlen($x) + 3) & 0xFFFFFFFC;
 
@@ -329,19 +390,19 @@ class Math_BigInteger {
                     // converts a base-2**8 (big endian / msb) number to base-2**26 (little endian / lsb)
                     default:
                         while (strlen($x)) {
-                            $this->value[] = $this->_bytes2int($this->_base256_rshift($x, 26));
+                            $this->value[] = $this->_bytes2int($this->_base256_rshift($x, self::$base));
                         }
                 }
 
                 if ($this->is_negative) {
-                    if (MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL) {
+                    if (MATH_BIGINTEGER_MODE != self::MODE_INTERNAL) {
                         $this->is_negative = false;
                     }
-                    $temp = $this->add(new Math_BigInteger('-1'));
+                    $temp = $this->add(new static('-1'));
                     $this->value = $temp->value;
                 }
                 break;
-            case  16:
+            case 16:
             case -16:
                 if ($base > 0 && $x[0] == '-') {
                     $this->is_negative = true;
@@ -356,66 +417,67 @@ class Math_BigInteger {
                     $x = bin2hex(~pack('H*', $x));
                 }
 
-                switch ( MATH_BIGINTEGER_MODE ) {
-                    case MATH_BIGINTEGER_MODE_GMP:
+                switch (MATH_BIGINTEGER_MODE) {
+                    case self::MODE_GMP:
                         $temp = $this->is_negative ? '-0x' . $x : '0x' . $x;
                         $this->value = gmp_init($temp);
                         $this->is_negative = false;
                         break;
-                    case MATH_BIGINTEGER_MODE_BCMATH:
-                        $x = ( strlen($x) & 1 ) ? '0' . $x : $x;
-                        $temp = new Math_BigInteger(pack('H*', $x), 256);
+                    case self::MODE_BCMATH:
+                        $x = (strlen($x) & 1) ? '0' . $x : $x;
+                        $temp = new static(pack('H*', $x), 256);
                         $this->value = $this->is_negative ? '-' . $temp->value : $temp->value;
                         $this->is_negative = false;
                         break;
                     default:
-                        $x = ( strlen($x) & 1 ) ? '0' . $x : $x;
-                        $temp = new Math_BigInteger(pack('H*', $x), 256);
+                        $x = (strlen($x) & 1) ? '0' . $x : $x;
+                        $temp = new static(pack('H*', $x), 256);
                         $this->value = $temp->value;
                 }
 
                 if ($is_negative) {
-                    $temp = $this->add(new Math_BigInteger('-1'));
+                    $temp = $this->add(new static('-1'));
                     $this->value = $temp->value;
                 }
                 break;
-            case  10:
+            case 10:
             case -10:
-                $x = preg_replace('#^(-?[0-9]*).*#', '$1', $x);
+                // (?<!^)(?:-).*: find any -'s that aren't at the beginning and then any characters that follow that
+                // (?<=^|-)0*: find any 0's that are preceded by the start of the string or by a - (ie. octals)
+                // [^-0-9].*: find any non-numeric characters and then any characters that follow that
+                $x = preg_replace('#(?<!^)(?:-).*|(?<=^|-)0*|[^-0-9].*#', '', $x);
 
-                switch ( MATH_BIGINTEGER_MODE ) {
-                    case MATH_BIGINTEGER_MODE_GMP:
+                switch (MATH_BIGINTEGER_MODE) {
+                    case self::MODE_GMP:
                         $this->value = gmp_init($x);
                         break;
-                    case MATH_BIGINTEGER_MODE_BCMATH:
+                    case self::MODE_BCMATH:
                         // explicitly casting $x to a string is necessary, here, since doing $x[0] on -1 yields different
                         // results then doing it on '-1' does (modInverse does $x[0])
-                        $this->value = (string) $x;
+                        $this->value = $x === '-' ? '0' : (string) $x;
                         break;
                     default:
-                        $temp = new Math_BigInteger();
+                        $temp = new static();
 
-                        // array(10000000) is 10**7 in base-2**26.  10**7 is the closest to 2**26 we can get without passing it.
-                        $multiplier = new Math_BigInteger();
-                        $multiplier->value = array(10000000);
+                        $multiplier = new static();
+                        $multiplier->value = array(self::$max10);
 
                         if ($x[0] == '-') {
                             $this->is_negative = true;
                             $x = substr($x, 1);
                         }
 
-                        $x = str_pad($x, strlen($x) + (6 * strlen($x)) % 7, 0, STR_PAD_LEFT);
-
+                        $x = str_pad($x, strlen($x) + ((self::$max10Len - 1) * strlen($x)) % self::$max10Len, 0, STR_PAD_LEFT);
                         while (strlen($x)) {
                             $temp = $temp->multiply($multiplier);
-                            $temp = $temp->add(new Math_BigInteger($this->_int2bytes(substr($x, 0, 7)), 256));
-                            $x = substr($x, 7);
+                            $temp = $temp->add(new static($this->_int2bytes(substr($x, 0, self::$max10Len)), 256));
+                            $x = substr($x, self::$max10Len);
                         }
 
                         $this->value = $temp->value;
                 }
                 break;
-            case  2: // base-2 support originally implemented by Lluis Pamies - thanks!
+            case 2: // base-2 support originally implemented by Lluis Pamies - thanks!
             case -2:
                 if ($base > 0 && $x[0] == '-') {
                     $this->is_negative = true;
@@ -436,7 +498,7 @@ class Math_BigInteger {
                     $str = '-' . $str;
                 }
 
-                $temp = new Math_BigInteger($str, 8 * $base); // ie. either -16 or +16
+                $temp = new static($str, 8 * $base); // ie. either -16 or +16
                 $this->value = $temp->value;
                 $this->is_negative = $temp->is_negative;
 
@@ -455,31 +517,29 @@ class Math_BigInteger {
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger('65');
+     *    $a = new \phpseclib\Math\BigInteger('65');
      *
      *    echo $a->toBytes(); // outputs chr(65)
      * ?>
      * </code>
      *
-     * @param Boolean $twos_compliment
-     * @return String
+     * @param bool $twos_compliment
+     * @return string
      * @access public
      * @internal Converts a base-2**26 number to base-2**8
      */
     function toBytes($twos_compliment = false)
     {
         if ($twos_compliment) {
-            $comparison = $this->compare(new Math_BigInteger());
+            $comparison = $this->compare(new static());
             if ($comparison == 0) {
                 return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
             }
 
-            $temp = $comparison < 0 ? $this->add(new Math_BigInteger(1)) : $this->copy();
+            $temp = $comparison < 0 ? $this->add(new static(1)) : $this->copy();
             $bytes = $temp->toBytes();
 
-            if (empty($bytes)) { // eg. if the number we're trying to convert is -1
+            if (!strlen($bytes)) { // eg. if the number we're trying to convert is -1
                 $bytes = chr(0);
             }
 
@@ -490,20 +550,24 @@ class Math_BigInteger {
             return $comparison < 0 ? ~$bytes : $bytes;
         }
 
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
                 if (gmp_cmp($this->value, gmp_init(0)) == 0) {
                     return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
                 }
 
-                $temp = gmp_strval(gmp_abs($this->value), 16);
-                $temp = ( strlen($temp) & 1 ) ? '0' . $temp : $temp;
-                $temp = pack('H*', $temp);
+                if (function_exists('gmp_export')) {
+                    $temp = gmp_export($this->value);
+                } else {
+                    $temp = gmp_strval(gmp_abs($this->value), 16);
+                    $temp = (strlen($temp) & 1) ? '0' . $temp : $temp;
+                    $temp = pack('H*', $temp);
+                }
 
                 return $this->precision > 0 ?
                     substr(str_pad($temp, $this->precision >> 3, chr(0), STR_PAD_LEFT), -($this->precision >> 3)) :
                     ltrim($temp, chr(0));
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 if ($this->value === '0') {
                     return $this->precision > 0 ? str_repeat(chr(0), ($this->precision + 1) >> 3) : '';
                 }
@@ -534,7 +598,7 @@ class Math_BigInteger {
         $temp = $this->copy();
 
         for ($i = count($temp->value) - 2; $i >= 0; --$i) {
-            $temp->_base256_lshift($result, 26);
+            $temp->_base256_lshift($result, self::$base);
             $result = $result | str_pad($temp->_int2bytes($temp->value[$i]), strlen($result), chr(0), STR_PAD_LEFT);
         }
 
@@ -552,16 +616,14 @@ class Math_BigInteger {
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger('65');
+     *    $a = new \phpseclib\Math\BigInteger('65');
      *
      *    echo $a->toHex(); // outputs '41'
      * ?>
      * </code>
      *
-     * @param Boolean $twos_compliment
-     * @return String
+     * @param bool $twos_compliment
+     * @return string
      * @access public
      * @internal Converts a base-2**26 number to base-2**8
      */
@@ -579,16 +641,14 @@ class Math_BigInteger {
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger('65');
+     *    $a = new \phpseclib\Math\BigInteger('65');
      *
      *    echo $a->toBits(); // outputs '1000001'
      * ?>
      * </code>
      *
-     * @param Boolean $twos_compliment
-     * @return String
+     * @param bool $twos_compliment
+     * @return string
      * @access public
      * @internal Converts a base-2**26 number to base-2**2
      */
@@ -596,10 +656,19 @@ class Math_BigInteger {
     {
         $hex = $this->toHex($twos_compliment);
         $bits = '';
-        for ($i = 0; $i < strlen($hex); $i+=8) {
-            $bits.= str_pad(decbin(hexdec(substr($hex, $i, 8))), 32, '0', STR_PAD_LEFT);
+        for ($i = strlen($hex) - 8, $start = strlen($hex) & 7; $i >= $start; $i-=8) {
+            $bits = str_pad(decbin(hexdec(substr($hex, $i, 8))), 32, '0', STR_PAD_LEFT) . $bits;
         }
-        return $this->precision > 0 ? substr($bits, -$this->precision) : ltrim($bits, '0');
+        if ($start) { // hexdec('') == 0
+            $bits = str_pad(decbin(hexdec(substr($hex, 0, $start))), 8, '0', STR_PAD_LEFT) . $bits;
+        }
+        $result = $this->precision > 0 ? substr($bits, -$this->precision) : ltrim($bits, '0');
+
+        if ($twos_compliment && $this->compare(new static()) > 0 && $this->precision <= 0) {
+            return '0' . $result;
+        }
+
+        return $result;
     }
 
     /**
@@ -608,24 +677,22 @@ class Math_BigInteger {
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger('50');
+     *    $a = new \phpseclib\Math\BigInteger('50');
      *
      *    echo $a->toString(); // outputs 50
      * ?>
      * </code>
      *
-     * @return String
+     * @return string
      * @access public
      * @internal Converts a base-2**26 number to base-10**7 (which is pretty much base-10)
      */
     function toString()
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
                 return gmp_strval($this->value);
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 if ($this->value === '0') {
                     return '0';
                 }
@@ -640,12 +707,12 @@ class Math_BigInteger {
         $temp = $this->copy();
         $temp->is_negative = false;
 
-        $divisor = new Math_BigInteger();
-        $divisor->value = array(10000000); // eg. 10**7
+        $divisor = new static();
+        $divisor->value = array(self::$max10);
         $result = '';
         while (count($temp->value)) {
             list($temp, $mod) = $temp->divide($divisor);
-            $result = str_pad(isset($mod->value[0]) ? $mod->value[0] : '', 7, '0', STR_PAD_LEFT) . $result;
+            $result = str_pad(isset($mod->value[0]) ? $mod->value[0] : '', self::$max10Len, '0', STR_PAD_LEFT) . $result;
         }
         $result = ltrim($result, '0');
         if (empty($result)) {
@@ -668,15 +735,14 @@ class Math_BigInteger {
      * {@link http://php.net/language.oop5.basic#51624}
      *
      * @access public
-     * @see __clone()
-     * @return Math_BigInteger
+     * @see self::__clone()
+     * @return \phpseclib\Math\BigInteger
      */
     function copy()
     {
-        $temp = new Math_BigInteger();
+        $temp = new static();
         $temp->value = $this->value;
         $temp->is_negative = $this->is_negative;
-        $temp->generator = $this->generator;
         $temp->precision = $this->precision;
         $temp->bitmask = $this->bitmask;
         return $temp;
@@ -699,14 +765,14 @@ class Math_BigInteger {
     /**
      * __clone() magic method
      *
-     * Although you can call Math_BigInteger::__toString() directly in PHP5, you cannot call Math_BigInteger::__clone()
-     * directly in PHP5.  You can in PHP4 since it's not a magic method, but in PHP5, you have to call it by using the PHP5
-     * only syntax of $y = clone $x.  As such, if you're trying to write an application that works on both PHP4 and PHP5,
-     * call Math_BigInteger::copy(), instead.
+     * Although you can call BigInteger::__toString() directly in PHP5, you cannot call BigInteger::__clone() directly
+     * in PHP5.  You can in PHP4 since it's not a magic method, but in PHP5, you have to call it by using the PHP5
+     * only syntax of $y = clone $x.  As such, if you're trying to write an application that works on both PHP4 and
+     * PHP5, call BigInteger::copy(), instead.
      *
      * @access public
-     * @see copy()
-     * @return Math_BigInteger
+     * @see self::copy()
+     * @return \phpseclib\Math\BigInteger
      */
     function __clone()
     {
@@ -716,39 +782,34 @@ class Math_BigInteger {
     /**
      *  __sleep() magic method
      *
-     * Will be called, automatically, when serialize() is called on a Math_BigInteger object.
+     * Will be called, automatically, when serialize() is called on a BigInteger object.
      *
-     * @see __wakeup()
+     * @see self::__wakeup()
      * @access public
      */
     function __sleep()
     {
         $this->hex = $this->toHex(true);
         $vars = array('hex');
-        if ($this->generator != 'mt_rand') {
-            $vars[] = 'generator';
-        }
         if ($this->precision > 0) {
             $vars[] = 'precision';
         }
         return $vars;
-        
     }
 
     /**
      *  __wakeup() magic method
      *
-     * Will be called, automatically, when unserialize() is called on a Math_BigInteger object.
+     * Will be called, automatically, when unserialize() is called on a BigInteger object.
      *
-     * @see __sleep()
+     * @see self::__sleep()
      * @access public
      */
     function __wakeup()
     {
-        $temp = new Math_BigInteger($this->hex, -16);
+        $temp = new static($this->hex, -16);
         $this->value = $temp->value;
         $this->is_negative = $temp->is_negative;
-        $this->setRandomGenerator($this->generator);
         if ($this->precision > 0) {
             // recalculate $this->bitmask
             $this->setPrecision($this->precision);
@@ -756,15 +817,46 @@ class Math_BigInteger {
     }
 
     /**
+     *  __debugInfo() magic method
+     *
+     * Will be called, automatically, when print_r() or var_dump() are called
+     *
+     * @access public
+     */
+    function __debugInfo()
+    {
+        $opts = array();
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
+                $engine = 'gmp';
+                break;
+            case self::MODE_BCMATH:
+                $engine = 'bcmath';
+                break;
+            case self::MODE_INTERNAL:
+                $engine = 'internal';
+                $opts[] = PHP_INT_SIZE == 8 ? '64-bit' : '32-bit';
+        }
+        if (MATH_BIGINTEGER_MODE != self::MODE_GMP && defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) {
+            $opts[] = 'OpenSSL';
+        }
+        if (!empty($opts)) {
+            $engine.= ' (' . implode($opts, ', ') . ')';
+        }
+        return array(
+            'value' => '0x' . $this->toHex(true),
+            'engine' => $engine
+        );
+    }
+
+    /**
      * Adds two BigIntegers.
      *
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger('10');
-     *    $b = new Math_BigInteger('20');
+     *    $a = new \phpseclib\Math\BigInteger('10');
+     *    $b = new \phpseclib\Math\BigInteger('20');
      *
      *    $c = $a->add($b);
      *
@@ -772,21 +864,21 @@ class Math_BigInteger {
      * ?>
      * </code>
      *
-     * @param Math_BigInteger $y
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $y
+     * @return \phpseclib\Math\BigInteger
      * @access public
      * @internal Performs base-2**52 addition
      */
     function add($y)
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
-                $temp = new Math_BigInteger();
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
+                $temp = new static();
                 $temp->value = gmp_add($this->value, $y->value);
 
                 return $this->_normalize($temp);
-            case MATH_BIGINTEGER_MODE_BCMATH:
-                $temp = new Math_BigInteger();
+            case self::MODE_BCMATH:
+                $temp = new static();
                 $temp->value = bcadd($this->value, $y->value, 0);
 
                 return $this->_normalize($temp);
@@ -794,9 +886,9 @@ class Math_BigInteger {
 
         $temp = $this->_add($this->value, $this->is_negative, $y->value, $y->is_negative);
 
-        $result = new Math_BigInteger();
-        $result->value = $temp[MATH_BIGINTEGER_VALUE];
-        $result->is_negative = $temp[MATH_BIGINTEGER_SIGN];
+        $result = new static();
+        $result->value = $temp[self::VALUE];
+        $result->is_negative = $temp[self::SIGN];
 
         return $this->_normalize($result);
     }
@@ -804,11 +896,11 @@ class Math_BigInteger {
     /**
      * Performs addition.
      *
-     * @param Array $x_value
-     * @param Boolean $x_negative
-     * @param Array $y_value
-     * @param Boolean $y_negative
-     * @return Array
+     * @param array $x_value
+     * @param bool $x_negative
+     * @param array $y_value
+     * @param bool $y_negative
+     * @return array
      * @access private
      */
     function _add($x_value, $x_negative, $y_value, $y_negative)
@@ -818,27 +910,27 @@ class Math_BigInteger {
 
         if ($x_size == 0) {
             return array(
-                MATH_BIGINTEGER_VALUE => $y_value,
-                MATH_BIGINTEGER_SIGN => $y_negative
+                self::VALUE => $y_value,
+                self::SIGN => $y_negative
             );
-        } else if ($y_size == 0) {
+        } elseif ($y_size == 0) {
             return array(
-                MATH_BIGINTEGER_VALUE => $x_value,
-                MATH_BIGINTEGER_SIGN => $x_negative
+                self::VALUE => $x_value,
+                self::SIGN => $x_negative
             );
         }
 
         // subtract, if appropriate
-        if ( $x_negative != $y_negative ) {
-            if ( $x_value == $y_value ) {
+        if ($x_negative != $y_negative) {
+            if ($x_value == $y_value) {
                 return array(
-                    MATH_BIGINTEGER_VALUE => array(),
-                    MATH_BIGINTEGER_SIGN => false
+                    self::VALUE => array(),
+                    self::SIGN => false
                 );
             }
 
             $temp = $this->_subtract($x_value, false, $y_value, false);
-            $temp[MATH_BIGINTEGER_SIGN] = $this->_compare($x_value, false, $y_value, false) > 0 ?
+            $temp[self::SIGN] = $this->_compare($x_value, false, $y_value, false) > 0 ?
                                           $x_negative : $y_negative;
 
             return $temp;
@@ -852,37 +944,37 @@ class Math_BigInteger {
             $value = $x_value;
         }
 
-        $value[] = 0; // just in case the carry adds an extra digit
+        $value[count($value)] = 0; // just in case the carry adds an extra digit
 
         $carry = 0;
         for ($i = 0, $j = 1; $j < $size; $i+=2, $j+=2) {
-            $sum = $x_value[$j] * 0x4000000 + $x_value[$i] + $y_value[$j] * 0x4000000 + $y_value[$i] + $carry;
-            $carry = $sum >= MATH_BIGINTEGER_MAX_DIGIT52; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1
-            $sum = $carry ? $sum - MATH_BIGINTEGER_MAX_DIGIT52 : $sum;
+            $sum = $x_value[$j] * self::$baseFull + $x_value[$i] + $y_value[$j] * self::$baseFull + $y_value[$i] + $carry;
+            $carry = $sum >= self::$maxDigit2; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1
+            $sum = $carry ? $sum - self::$maxDigit2 : $sum;
 
-            $temp = (int) ($sum / 0x4000000);
+            $temp = self::$base === 26 ? intval($sum / 0x4000000) : ($sum >> 31);
 
-            $value[$i] = (int) ($sum - 0x4000000 * $temp); // eg. a faster alternative to fmod($sum, 0x4000000)
+            $value[$i] = (int) ($sum - self::$baseFull * $temp); // eg. a faster alternative to fmod($sum, 0x4000000)
             $value[$j] = $temp;
         }
 
         if ($j == $size) { // ie. if $y_size is odd
             $sum = $x_value[$i] + $y_value[$i] + $carry;
-            $carry = $sum >= 0x4000000;
-            $value[$i] = $carry ? $sum - 0x4000000 : $sum;
+            $carry = $sum >= self::$baseFull;
+            $value[$i] = $carry ? $sum - self::$baseFull : $sum;
             ++$i; // ie. let $i = $j since we've just done $value[$i]
         }
 
         if ($carry) {
-            for (; $value[$i] == 0x3FFFFFF; ++$i) {
+            for (; $value[$i] == self::$maxDigit; ++$i) {
                 $value[$i] = 0;
             }
             ++$value[$i];
         }
 
         return array(
-            MATH_BIGINTEGER_VALUE => $this->_trim($value),
-            MATH_BIGINTEGER_SIGN => $x_negative
+            self::VALUE => $this->_trim($value),
+            self::SIGN => $x_negative
         );
     }
 
@@ -892,10 +984,8 @@ class Math_BigInteger {
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger('10');
-     *    $b = new Math_BigInteger('20');
+     *    $a = new \phpseclib\Math\BigInteger('10');
+     *    $b = new \phpseclib\Math\BigInteger('20');
      *
      *    $c = $a->subtract($b);
      *
@@ -903,21 +993,21 @@ class Math_BigInteger {
      * ?>
      * </code>
      *
-     * @param Math_BigInteger $y
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $y
+     * @return \phpseclib\Math\BigInteger
      * @access public
      * @internal Performs base-2**52 subtraction
      */
     function subtract($y)
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
-                $temp = new Math_BigInteger();
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
+                $temp = new static();
                 $temp->value = gmp_sub($this->value, $y->value);
 
                 return $this->_normalize($temp);
-            case MATH_BIGINTEGER_MODE_BCMATH:
-                $temp = new Math_BigInteger();
+            case self::MODE_BCMATH:
+                $temp = new static();
                 $temp->value = bcsub($this->value, $y->value, 0);
 
                 return $this->_normalize($temp);
@@ -925,9 +1015,9 @@ class Math_BigInteger {
 
         $temp = $this->_subtract($this->value, $this->is_negative, $y->value, $y->is_negative);
 
-        $result = new Math_BigInteger();
-        $result->value = $temp[MATH_BIGINTEGER_VALUE];
-        $result->is_negative = $temp[MATH_BIGINTEGER_SIGN];
+        $result = new static();
+        $result->value = $temp[self::VALUE];
+        $result->is_negative = $temp[self::SIGN];
 
         return $this->_normalize($result);
     }
@@ -935,11 +1025,11 @@ class Math_BigInteger {
     /**
      * Performs subtraction.
      *
-     * @param Array $x_value
-     * @param Boolean $x_negative
-     * @param Array $y_value
-     * @param Boolean $y_negative
-     * @return Array
+     * @param array $x_value
+     * @param bool $x_negative
+     * @param array $y_value
+     * @param bool $y_negative
+     * @return array
      * @access private
      */
     function _subtract($x_value, $x_negative, $y_value, $y_negative)
@@ -949,35 +1039,35 @@ class Math_BigInteger {
 
         if ($x_size == 0) {
             return array(
-                MATH_BIGINTEGER_VALUE => $y_value,
-                MATH_BIGINTEGER_SIGN => !$y_negative
+                self::VALUE => $y_value,
+                self::SIGN => !$y_negative
             );
-        } else if ($y_size == 0) {
+        } elseif ($y_size == 0) {
             return array(
-                MATH_BIGINTEGER_VALUE => $x_value,
-                MATH_BIGINTEGER_SIGN => $x_negative
+                self::VALUE => $x_value,
+                self::SIGN => $x_negative
             );
         }
 
         // add, if appropriate (ie. -$x - +$y or +$x - -$y)
-        if ( $x_negative != $y_negative ) {
+        if ($x_negative != $y_negative) {
             $temp = $this->_add($x_value, false, $y_value, false);
-            $temp[MATH_BIGINTEGER_SIGN] = $x_negative;
+            $temp[self::SIGN] = $x_negative;
 
             return $temp;
         }
 
         $diff = $this->_compare($x_value, $x_negative, $y_value, $y_negative);
 
-        if ( !$diff ) {
+        if (!$diff) {
             return array(
-                MATH_BIGINTEGER_VALUE => array(),
-                MATH_BIGINTEGER_SIGN => false
+                self::VALUE => array(),
+                self::SIGN => false
             );
         }
 
         // switch $x and $y around, if appropriate.
-        if ( (!$x_negative && $diff < 0) || ($x_negative && $diff > 0) ) {
+        if ((!$x_negative && $diff < 0) || ($x_negative && $diff > 0)) {
             $temp = $x_value;
             $x_value = $y_value;
             $y_value = $temp;
@@ -992,33 +1082,33 @@ class Math_BigInteger {
 
         $carry = 0;
         for ($i = 0, $j = 1; $j < $y_size; $i+=2, $j+=2) {
-            $sum = $x_value[$j] * 0x4000000 + $x_value[$i] - $y_value[$j] * 0x4000000 - $y_value[$i] - $carry;
+            $sum = $x_value[$j] * self::$baseFull + $x_value[$i] - $y_value[$j] * self::$baseFull - $y_value[$i] - $carry;
             $carry = $sum < 0; // eg. floor($sum / 2**52); only possible values (in any base) are 0 and 1
-            $sum = $carry ? $sum + MATH_BIGINTEGER_MAX_DIGIT52 : $sum;
+            $sum = $carry ? $sum + self::$maxDigit2 : $sum;
 
-            $temp = (int) ($sum / 0x4000000);
+            $temp = self::$base === 26 ? intval($sum / 0x4000000) : ($sum >> 31);
 
-            $x_value[$i] = (int) ($sum - 0x4000000 * $temp);
+            $x_value[$i] = (int) ($sum - self::$baseFull * $temp);
             $x_value[$j] = $temp;
         }
 
         if ($j == $y_size) { // ie. if $y_size is odd
             $sum = $x_value[$i] - $y_value[$i] - $carry;
             $carry = $sum < 0;
-            $x_value[$i] = $carry ? $sum + 0x4000000 : $sum;
+            $x_value[$i] = $carry ? $sum + self::$baseFull : $sum;
             ++$i;
         }
 
         if ($carry) {
             for (; !$x_value[$i]; ++$i) {
-                $x_value[$i] = 0x3FFFFFF;
+                $x_value[$i] = self::$maxDigit;
             }
             --$x_value[$i];
         }
 
         return array(
-            MATH_BIGINTEGER_VALUE => $this->_trim($x_value),
-            MATH_BIGINTEGER_SIGN => $x_negative
+            self::VALUE => $this->_trim($x_value),
+            self::SIGN => $x_negative
         );
     }
 
@@ -1028,10 +1118,8 @@ class Math_BigInteger {
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger('10');
-     *    $b = new Math_BigInteger('20');
+     *    $a = new \phpseclib\Math\BigInteger('10');
+     *    $b = new \phpseclib\Math\BigInteger('20');
      *
      *    $c = $a->multiply($b);
      *
@@ -1039,20 +1127,20 @@ class Math_BigInteger {
      * ?>
      * </code>
      *
-     * @param Math_BigInteger $x
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $x
+     * @return \phpseclib\Math\BigInteger
      * @access public
      */
     function multiply($x)
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
-                $temp = new Math_BigInteger();
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
+                $temp = new static();
                 $temp->value = gmp_mul($this->value, $x->value);
 
                 return $this->_normalize($temp);
-            case MATH_BIGINTEGER_MODE_BCMATH:
-                $temp = new Math_BigInteger();
+            case self::MODE_BCMATH:
+                $temp = new static();
                 $temp->value = bcmul($this->value, $x->value, 0);
 
                 return $this->_normalize($temp);
@@ -1060,9 +1148,9 @@ class Math_BigInteger {
 
         $temp = $this->_multiply($this->value, $this->is_negative, $x->value, $x->is_negative);
 
-        $product = new Math_BigInteger();
-        $product->value = $temp[MATH_BIGINTEGER_VALUE];
-        $product->is_negative = $temp[MATH_BIGINTEGER_SIGN];
+        $product = new static();
+        $product->value = $temp[self::VALUE];
+        $product->is_negative = $temp[self::SIGN];
 
         return $this->_normalize($product);
     }
@@ -1070,37 +1158,37 @@ class Math_BigInteger {
     /**
      * Performs multiplication.
      *
-     * @param Array $x_value
-     * @param Boolean $x_negative
-     * @param Array $y_value
-     * @param Boolean $y_negative
-     * @return Array
+     * @param array $x_value
+     * @param bool $x_negative
+     * @param array $y_value
+     * @param bool $y_negative
+     * @return array
      * @access private
      */
     function _multiply($x_value, $x_negative, $y_value, $y_negative)
     {
         //if ( $x_value == $y_value ) {
         //    return array(
-        //        MATH_BIGINTEGER_VALUE => $this->_square($x_value),
-        //        MATH_BIGINTEGER_SIGN => $x_sign != $y_value
+        //        self::VALUE => $this->_square($x_value),
+        //        self::SIGN => $x_sign != $y_value
         //    );
         //}
 
         $x_length = count($x_value);
         $y_length = count($y_value);
 
-        if ( !$x_length || !$y_length ) { // a 0 is being multiplied
+        if (!$x_length || !$y_length) { // a 0 is being multiplied
             return array(
-                MATH_BIGINTEGER_VALUE => array(),
-                MATH_BIGINTEGER_SIGN => false
+                self::VALUE => array(),
+                self::SIGN => false
             );
         }
 
         return array(
-            MATH_BIGINTEGER_VALUE => min($x_length, $y_length) < 2 * MATH_BIGINTEGER_KARATSUBA_CUTOFF ?
+            self::VALUE => min($x_length, $y_length) < 2 * self::KARATSUBA_CUTOFF ?
                 $this->_trim($this->_regularMultiply($x_value, $y_value)) :
                 $this->_trim($this->_karatsuba($x_value, $y_value)),
-            MATH_BIGINTEGER_SIGN => $x_negative != $y_negative
+            self::SIGN => $x_negative != $y_negative
         );
     }
 
@@ -1109,9 +1197,9 @@ class Math_BigInteger {
      *
      * Modeled after 'multiply' in MutableBigInteger.java.
      *
-     * @param Array $x_value
-     * @param Array $y_value
-     * @return Array
+     * @param array $x_value
+     * @param array $y_value
+     * @return array
      * @access private
      */
     function _regularMultiply($x_value, $y_value)
@@ -1119,11 +1207,11 @@ class Math_BigInteger {
         $x_length = count($x_value);
         $y_length = count($y_value);
 
-        if ( !$x_length || !$y_length ) { // a 0 is being multiplied
+        if (!$x_length || !$y_length) { // a 0 is being multiplied
             return array();
         }
 
-        if ( $x_length < $y_length ) {
+        if ($x_length < $y_length) {
             $temp = $x_value;
             $x_value = $y_value;
             $y_value = $temp;
@@ -1144,8 +1232,8 @@ class Math_BigInteger {
 
         for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0
             $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0
-            $carry = (int) ($temp / 0x4000000);
-            $product_value[$j] = (int) ($temp - 0x4000000 * $carry);
+            $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
+            $product_value[$j] = (int) ($temp - self::$baseFull * $carry);
         }
 
         $product_value[$j] = $carry;
@@ -1157,8 +1245,8 @@ class Math_BigInteger {
 
             for ($j = 0, $k = $i; $j < $x_length; ++$j, ++$k) {
                 $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry;
-                $carry = (int) ($temp / 0x4000000);
-                $product_value[$k] = (int) ($temp - 0x4000000 * $carry);
+                $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
+                $product_value[$k] = (int) ($temp - self::$baseFull * $carry);
             }
 
             $product_value[$k] = $carry;
@@ -1173,16 +1261,16 @@ class Math_BigInteger {
      * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and
      * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=120 MPM 5.2.3}.
      *
-     * @param Array $x_value
-     * @param Array $y_value
-     * @return Array
+     * @param array $x_value
+     * @param array $y_value
+     * @return array
      * @access private
      */
     function _karatsuba($x_value, $y_value)
     {
         $m = min(count($x_value) >> 1, count($y_value) >> 1);
 
-        if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) {
+        if ($m < self::KARATSUBA_CUTOFF) {
             return $this->_regularMultiply($x_value, $y_value);
         }
 
@@ -1196,29 +1284,29 @@ class Math_BigInteger {
 
         $z1 = $this->_add($x1, false, $x0, false);
         $temp = $this->_add($y1, false, $y0, false);
-        $z1 = $this->_karatsuba($z1[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_VALUE]);
+        $z1 = $this->_karatsuba($z1[self::VALUE], $temp[self::VALUE]);
         $temp = $this->_add($z2, false, $z0, false);
-        $z1 = $this->_subtract($z1, false, $temp[MATH_BIGINTEGER_VALUE], false);
+        $z1 = $this->_subtract($z1, false, $temp[self::VALUE], false);
 
         $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2);
-        $z1[MATH_BIGINTEGER_VALUE] = array_merge(array_fill(0, $m, 0), $z1[MATH_BIGINTEGER_VALUE]);
+        $z1[self::VALUE] = array_merge(array_fill(0, $m, 0), $z1[self::VALUE]);
 
-        $xy = $this->_add($z2, false, $z1[MATH_BIGINTEGER_VALUE], $z1[MATH_BIGINTEGER_SIGN]);
-        $xy = $this->_add($xy[MATH_BIGINTEGER_VALUE], $xy[MATH_BIGINTEGER_SIGN], $z0, false);
+        $xy = $this->_add($z2, false, $z1[self::VALUE], $z1[self::SIGN]);
+        $xy = $this->_add($xy[self::VALUE], $xy[self::SIGN], $z0, false);
 
-        return $xy[MATH_BIGINTEGER_VALUE];
+        return $xy[self::VALUE];
     }
 
     /**
      * Performs squaring
      *
-     * @param Array $x
-     * @return Array
+     * @param array $x
+     * @return array
      * @access private
      */
     function _square($x = false)
     {
-        return count($x) < 2 * MATH_BIGINTEGER_KARATSUBA_CUTOFF ?
+        return count($x) < 2 * self::KARATSUBA_CUTOFF ?
             $this->_trim($this->_baseSquare($x)) :
             $this->_trim($this->_karatsubaSquare($x));
     }
@@ -1230,13 +1318,13 @@ class Math_BigInteger {
      * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=7 HAC 14.2.4} /
      * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=141 MPM 5.3} for more information.
      *
-     * @param Array $value
-     * @return Array
+     * @param array $value
+     * @return array
      * @access private
      */
     function _baseSquare($value)
     {
-        if ( empty($value) ) {
+        if (empty($value)) {
             return array();
         }
         $square_value = $this->_array_repeat(0, 2 * count($value));
@@ -1245,14 +1333,14 @@ class Math_BigInteger {
             $i2 = $i << 1;
 
             $temp = $square_value[$i2] + $value[$i] * $value[$i];
-            $carry = (int) ($temp / 0x4000000);
-            $square_value[$i2] = (int) ($temp - 0x4000000 * $carry);
+            $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
+            $square_value[$i2] = (int) ($temp - self::$baseFull * $carry);
 
             // note how we start from $i+1 instead of 0 as we do in multiplication.
             for ($j = $i + 1, $k = $i2 + 1; $j <= $max_index; ++$j, ++$k) {
                 $temp = $square_value[$k] + 2 * $value[$j] * $value[$i] + $carry;
-                $carry = (int) ($temp / 0x4000000);
-                $square_value[$k] = (int) ($temp - 0x4000000 * $carry);
+                $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
+                $square_value[$k] = (int) ($temp - self::$baseFull * $carry);
             }
 
             // the following line can yield values larger 2**15.  at this point, PHP should switch
@@ -1269,15 +1357,15 @@ class Math_BigInteger {
      * See {@link http://en.wikipedia.org/wiki/Karatsuba_algorithm Karatsuba algorithm} and
      * {@link http://math.libtomcrypt.com/files/tommath.pdf#page=151 MPM 5.3.4}.
      *
-     * @param Array $value
-     * @return Array
+     * @param array $value
+     * @return array
      * @access private
      */
     function _karatsubaSquare($value)
     {
         $m = count($value) >> 1;
 
-        if ($m < MATH_BIGINTEGER_KARATSUBA_CUTOFF) {
+        if ($m < self::KARATSUBA_CUTOFF) {
             return $this->_baseSquare($value);
         }
 
@@ -1288,17 +1376,17 @@ class Math_BigInteger {
         $z0 = $this->_karatsubaSquare($x0);
 
         $z1 = $this->_add($x1, false, $x0, false);
-        $z1 = $this->_karatsubaSquare($z1[MATH_BIGINTEGER_VALUE]);
+        $z1 = $this->_karatsubaSquare($z1[self::VALUE]);
         $temp = $this->_add($z2, false, $z0, false);
-        $z1 = $this->_subtract($z1, false, $temp[MATH_BIGINTEGER_VALUE], false);
+        $z1 = $this->_subtract($z1, false, $temp[self::VALUE], false);
 
         $z2 = array_merge(array_fill(0, 2 * $m, 0), $z2);
-        $z1[MATH_BIGINTEGER_VALUE] = array_merge(array_fill(0, $m, 0), $z1[MATH_BIGINTEGER_VALUE]);
+        $z1[self::VALUE] = array_merge(array_fill(0, $m, 0), $z1[self::VALUE]);
 
-        $xx = $this->_add($z2, false, $z1[MATH_BIGINTEGER_VALUE], $z1[MATH_BIGINTEGER_SIGN]);
-        $xx = $this->_add($xx[MATH_BIGINTEGER_VALUE], $xx[MATH_BIGINTEGER_SIGN], $z0, false);
+        $xx = $this->_add($z2, false, $z1[self::VALUE], $z1[self::SIGN]);
+        $xx = $this->_add($xx[self::VALUE], $xx[self::SIGN], $z0, false);
 
-        return $xx[MATH_BIGINTEGER_VALUE];
+        return $xx[self::VALUE];
     }
 
     /**
@@ -1312,10 +1400,8 @@ class Math_BigInteger {
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger('10');
-     *    $b = new Math_BigInteger('20');
+     *    $a = new \phpseclib\Math\BigInteger('10');
+     *    $b = new \phpseclib\Math\BigInteger('20');
      *
      *    list($quotient, $remainder) = $a->divide($b);
      *
@@ -1325,17 +1411,17 @@ class Math_BigInteger {
      * ?>
      * </code>
      *
-     * @param Math_BigInteger $y
-     * @return Array
+     * @param \phpseclib\Math\BigInteger $y
+     * @return array
      * @access public
      * @internal This function is based off of {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=9 HAC 14.20}.
      */
     function divide($y)
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
-                $quotient = new Math_BigInteger();
-                $remainder = new Math_BigInteger();
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
+                $quotient = new static();
+                $remainder = new static();
 
                 list($quotient->value, $remainder->value) = gmp_div_qr($this->value, $y->value);
 
@@ -1344,9 +1430,9 @@ class Math_BigInteger {
                 }
 
                 return array($this->_normalize($quotient), $this->_normalize($remainder));
-            case MATH_BIGINTEGER_MODE_BCMATH:
-                $quotient = new Math_BigInteger();
-                $remainder = new Math_BigInteger();
+            case self::MODE_BCMATH:
+                $quotient = new static();
+                $remainder = new static();
 
                 $quotient->value = bcdiv($this->value, $y->value, 0);
                 $remainder->value = bcmod($this->value, $y->value);
@@ -1360,8 +1446,8 @@ class Math_BigInteger {
 
         if (count($y->value) == 1) {
             list($q, $r) = $this->_divide_digit($this->value, $y->value[0]);
-            $quotient = new Math_BigInteger();
-            $remainder = new Math_BigInteger();
+            $quotient = new static();
+            $remainder = new static();
             $quotient->value = $q;
             $remainder->value = array($r);
             $quotient->is_negative = $this->is_negative != $y->is_negative;
@@ -1369,8 +1455,8 @@ class Math_BigInteger {
         }
 
         static $zero;
-        if ( !isset($zero) ) {
-            $zero = new Math_BigInteger();
+        if (!isset($zero)) {
+            $zero = new static();
         }
 
         $x = $this->copy();
@@ -1383,24 +1469,24 @@ class Math_BigInteger {
 
         $diff = $x->compare($y);
 
-        if ( !$diff ) {
-            $temp = new Math_BigInteger();
+        if (!$diff) {
+            $temp = new static();
             $temp->value = array(1);
             $temp->is_negative = $x_sign != $y_sign;
-            return array($this->_normalize($temp), $this->_normalize(new Math_BigInteger()));
+            return array($this->_normalize($temp), $this->_normalize(new static()));
         }
 
-        if ( $diff < 0 ) {
+        if ($diff < 0) {
             // if $x is negative, "add" $y.
-            if ( $x_sign ) {
+            if ($x_sign) {
                 $x = $y->subtract($x);
             }
-            return array($this->_normalize(new Math_BigInteger()), $this->_normalize($x));
+            return array($this->_normalize(new static()), $this->_normalize($x));
         }
 
         // normalize $x and $y as described in HAC 14.23 / 14.24
         $msb = $y->value[count($y->value) - 1];
-        for ($shift = 0; !($msb & 0x2000000); ++$shift) {
+        for ($shift = 0; !($msb & self::$msb); ++$shift) {
             $msb <<= 1;
         }
         $x->_lshift($shift);
@@ -1410,15 +1496,15 @@ class Math_BigInteger {
         $x_max = count($x->value) - 1;
         $y_max = count($y->value) - 1;
 
-        $quotient = new Math_BigInteger();
+        $quotient = new static();
         $quotient_value = &$quotient->value;
         $quotient_value = $this->_array_repeat(0, $x_max - $y_max + 1);
 
         static $temp, $lhs, $rhs;
         if (!isset($temp)) {
-            $temp = new Math_BigInteger();
-            $lhs =  new Math_BigInteger();
-            $rhs =  new Math_BigInteger();
+            $temp = new static();
+            $lhs =  new static();
+            $rhs =  new static();
         }
         $temp_value = &$temp->value;
         $rhs_value =  &$rhs->value;
@@ -1426,7 +1512,7 @@ class Math_BigInteger {
         // $temp = $y << ($x_max - $y_max-1) in base 2**26
         $temp_value = array_merge($this->_array_repeat(0, $x_max - $y_max), $y_value);
 
-        while ( $x->compare($temp) >= 0 ) {
+        while ($x->compare($temp) >= 0) {
             // calculate the "common residue"
             ++$quotient_value[$x_max - $y_max];
             $x = $x->subtract($temp);
@@ -1442,16 +1528,15 @@ class Math_BigInteger {
             );
             $y_window = array(
                 $y_value[$y_max],
-                ( $y_max > 0 ) ? $y_value[$y_max - 1] : 0
+                ($y_max > 0) ? $y_value[$y_max - 1] : 0
             );
 
             $q_index = $i - $y_max - 1;
             if ($x_window[0] == $y_window[0]) {
-                $quotient_value[$q_index] = 0x3FFFFFF;
+                $quotient_value[$q_index] = self::$maxDigit;
             } else {
-                $quotient_value[$q_index] = (int) (
-                    ($x_window[0] * 0x4000000 + $x_window[1])
-                    /
+                $quotient_value[$q_index] = $this->_safe_divide(
+                    $x_window[0] * self::$baseFull + $x_window[1],
                     $y_window[0]
                 );
             }
@@ -1463,7 +1548,7 @@ class Math_BigInteger {
 
             $rhs_value = array($x_window[2], $x_window[1], $x_window[0]);
 
-            while ( $lhs->compare($rhs) > 0 ) {
+            while ($lhs->compare($rhs) > 0) {
                 --$quotient_value[$q_index];
 
                 $lhs->value = array($quotient_value[$q_index]);
@@ -1494,7 +1579,7 @@ class Math_BigInteger {
         $quotient->is_negative = $x_sign != $y_sign;
 
         // calculate the "common residue", if appropriate
-        if ( $x_sign ) {
+        if ($x_sign) {
             $y->_rshift($shift);
             $x = $y->subtract($x);
         }
@@ -1507,9 +1592,9 @@ class Math_BigInteger {
      *
      * abc / x = a00 / x + b0 / x + c / x
      *
-     * @param Array $dividend
-     * @param Array $divisor
-     * @return Array
+     * @param array $dividend
+     * @param array $divisor
+     * @return array
      * @access private
      */
     function _divide_digit($dividend, $divisor)
@@ -1518,8 +1603,8 @@ class Math_BigInteger {
         $result = array();
 
         for ($i = count($dividend) - 1; $i >= 0; --$i) {
-            $temp = 0x4000000 * $carry + $dividend[$i];
-            $result[$i] = (int) ($temp / $divisor);
+            $temp = self::$baseFull * $carry + $dividend[$i];
+            $result[$i] = $this->_safe_divide($temp, $divisor);
             $carry = (int) ($temp - $divisor * $result[$i]);
         }
 
@@ -1532,11 +1617,9 @@ class Math_BigInteger {
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger('10');
-     *    $b = new Math_BigInteger('20');
-     *    $c = new Math_BigInteger('30');
+     *    $a = new \phpseclib\Math\BigInteger('10');
+     *    $b = new \phpseclib\Math\BigInteger('20');
+     *    $c = new \phpseclib\Math\BigInteger('30');
      *
      *    $c = $a->modPow($b, $c);
      *
@@ -1544,9 +1627,9 @@ class Math_BigInteger {
      * ?>
      * </code>
      *
-     * @param Math_BigInteger $e
-     * @param Math_BigInteger $n
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $e
+     * @param \phpseclib\Math\BigInteger $n
+     * @return \phpseclib\Math\BigInteger
      * @access public
      * @internal The most naive approach to modular exponentiation has very unreasonable requirements, and
      *    and although the approach involving repeated squaring does vastly better, it, too, is impractical
@@ -1572,7 +1655,7 @@ class Math_BigInteger {
     {
         $n = $this->bitmask !== false && $this->bitmask->compare($n) < 0 ? $this->bitmask : $n->abs();
 
-        if ($e->compare(new Math_BigInteger()) < 0) {
+        if ($e->compare(new static()) < 0) {
             $e = $e->abs();
 
             $temp = $this->modInverse($n);
@@ -1583,48 +1666,100 @@ class Math_BigInteger {
             return $this->_normalize($temp->modPow($e, $n));
         }
 
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
-                $temp = new Math_BigInteger();
-                $temp->value = gmp_powm($this->value, $e->value, $n->value);
+        if (MATH_BIGINTEGER_MODE == self::MODE_GMP) {
+            $temp = new static();
+            $temp->value = gmp_powm($this->value, $e->value, $n->value);
 
-                return $this->_normalize($temp);
-            case MATH_BIGINTEGER_MODE_BCMATH:
-                $temp = new Math_BigInteger();
-                $temp->value = bcpowmod($this->value, $e->value, $n->value, 0);
+            return $this->_normalize($temp);
+        }
 
-                return $this->_normalize($temp);
+        if ($this->compare(new static()) < 0 || $this->compare($n) > 0) {
+            list(, $temp) = $this->divide($n);
+            return $temp->modPow($e, $n);
+        }
+
+        if (defined('MATH_BIGINTEGER_OPENSSL_ENABLED')) {
+            $components = array(
+                'modulus' => $n->toBytes(true),
+                'publicExponent' => $e->toBytes(true)
+            );
+
+            $components = array(
+                'modulus' => pack('Ca*a*', 2, $this->_encodeASN1Length(strlen($components['modulus'])), $components['modulus']),
+                'publicExponent' => pack('Ca*a*', 2, $this->_encodeASN1Length(strlen($components['publicExponent'])), $components['publicExponent'])
+            );
+
+            $RSAPublicKey = pack(
+                'Ca*a*a*',
+                48,
+                $this->_encodeASN1Length(strlen($components['modulus']) + strlen($components['publicExponent'])),
+                $components['modulus'],
+                $components['publicExponent']
+            );
+
+            $rsaOID = pack('H*', '300d06092a864886f70d0101010500'); // hex version of MA0GCSqGSIb3DQEBAQUA
+            $RSAPublicKey = chr(0) . $RSAPublicKey;
+            $RSAPublicKey = chr(3) . $this->_encodeASN1Length(strlen($RSAPublicKey)) . $RSAPublicKey;
+
+            $encapsulated = pack(
+                'Ca*a*',
+                48,
+                $this->_encodeASN1Length(strlen($rsaOID . $RSAPublicKey)),
+                $rsaOID . $RSAPublicKey
+            );
+
+            $RSAPublicKey = "-----BEGIN PUBLIC KEY-----\r\n" .
+                             chunk_split(base64_encode($encapsulated)) .
+                             '-----END PUBLIC KEY-----';
+
+            $plaintext = str_pad($this->toBytes(), strlen($n->toBytes(true)) - 1, "\0", STR_PAD_LEFT);
+
+            if (openssl_public_encrypt($plaintext, $result, $RSAPublicKey, OPENSSL_NO_PADDING)) {
+                return new static($result, 256);
+            }
+        }
+
+        if (MATH_BIGINTEGER_MODE == self::MODE_BCMATH) {
+            $temp = new static();
+            $temp->value = bcpowmod($this->value, $e->value, $n->value, 0);
+
+            return $this->_normalize($temp);
         }
 
-        if ( empty($e->value) ) {
-            $temp = new Math_BigInteger();
+        if (empty($e->value)) {
+            $temp = new static();
             $temp->value = array(1);
             return $this->_normalize($temp);
         }
 
-        if ( $e->value == array(1) ) {
+        if ($e->value == array(1)) {
             list(, $temp) = $this->divide($n);
             return $this->_normalize($temp);
         }
 
-        if ( $e->value == array(2) ) {
-            $temp = new Math_BigInteger();
+        if ($e->value == array(2)) {
+            $temp = new static();
             $temp->value = $this->_square($this->value);
             list(, $temp) = $temp->divide($n);
             return $this->_normalize($temp);
         }
 
-        return $this->_normalize($this->_slidingWindow($e, $n, MATH_BIGINTEGER_BARRETT));
+        return $this->_normalize($this->_slidingWindow($e, $n, self::BARRETT));
+
+        // the following code, although not callable, can be run independently of the above code
+        // although the above code performed better in my benchmarks the following could might
+        // perform better under different circumstances. in lieu of deleting it it's just been
+        // made uncallable
 
         // is the modulo odd?
-        if ( $n->value[0] & 1 ) {
-            return $this->_normalize($this->_slidingWindow($e, $n, MATH_BIGINTEGER_MONTGOMERY));
+        if ($n->value[0] & 1) {
+            return $this->_normalize($this->_slidingWindow($e, $n, self::MONTGOMERY));
         }
         // if it's not, it's even
 
         // find the lowest set bit (eg. the max pow of 2 that divides $n)
         for ($i = 0; $i < count($n->value); ++$i) {
-            if ( $n->value[$i] ) {
+            if ($n->value[$i]) {
                 $temp = decbin($n->value[$i]);
                 $j = strlen($temp) - strrpos($temp, '1') - 1;
                 $j+= 26 * $i;
@@ -1635,12 +1770,12 @@ class Math_BigInteger {
 
         $mod1 = $n->copy();
         $mod1->_rshift($j);
-        $mod2 = new Math_BigInteger();
+        $mod2 = new static();
         $mod2->value = array(1);
         $mod2->_lshift($j);
 
-        $part1 = ( $mod1->value != array(1) ) ? $this->_slidingWindow($e, $mod1, MATH_BIGINTEGER_MONTGOMERY) : new Math_BigInteger();
-        $part2 = $this->_slidingWindow($e, $mod2, MATH_BIGINTEGER_POWEROF2);
+        $part1 = ($mod1->value != array(1)) ? $this->_slidingWindow($e, $mod1, self::MONTGOMERY) : new static();
+        $part2 = $this->_slidingWindow($e, $mod2, self::POWEROF2);
 
         $y1 = $mod2->modInverse($mod1);
         $y2 = $mod1->modInverse($mod2);
@@ -1660,11 +1795,11 @@ class Math_BigInteger {
     /**
      * Performs modular exponentiation.
      *
-     * Alias for Math_BigInteger::modPow()
+     * Alias for modPow().
      *
-     * @param Math_BigInteger $e
-     * @param Math_BigInteger $n
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $e
+     * @param \phpseclib\Math\BigInteger $n
+     * @return \phpseclib\Math\BigInteger
      * @access public
      */
     function powMod($e, $n)
@@ -1680,10 +1815,10 @@ class Math_BigInteger {
      * however, this function performs a modular reduction after every multiplication and squaring operation.
      * As such, this function has the same preconditions that the reductions being used do.
      *
-     * @param Math_BigInteger $e
-     * @param Math_BigInteger $n
-     * @param Integer $mode
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $e
+     * @param \phpseclib\Math\BigInteger $n
+     * @param int $mode
+     * @return \phpseclib\Math\BigInteger
      * @access private
      */
     function _slidingWindow($e, $n, $mode)
@@ -1695,14 +1830,15 @@ class Math_BigInteger {
         $e_length = count($e_value) - 1;
         $e_bits = decbin($e_value[$e_length]);
         for ($i = $e_length - 1; $i >= 0; --$i) {
-            $e_bits.= str_pad(decbin($e_value[$i]), 26, '0', STR_PAD_LEFT);
+            $e_bits.= str_pad(decbin($e_value[$i]), self::$base, '0', STR_PAD_LEFT);
         }
 
         $e_length = strlen($e_bits);
 
         // calculate the appropriate window size.
         // $window_size == 3 if $window_ranges is between 25 and 81, for example.
-        for ($i = 0, $window_size = 1; $e_length > $window_ranges[$i] && $i < count($window_ranges); ++$window_size, ++$i);
+        for ($i = 0, $window_size = 1; $i < count($window_ranges) && $e_length > $window_ranges[$i]; ++$window_size, ++$i) {
+        }
 
         $n_value = $n->value;
 
@@ -1722,28 +1858,29 @@ class Math_BigInteger {
         $result = array(1);
         $result = $this->_prepareReduce($result, $n_value, $mode);
 
-        for ($i = 0; $i < $e_length; ) {
-            if ( !$e_bits[$i] ) {
+        for ($i = 0; $i < $e_length;) {
+            if (!$e_bits[$i]) {
                 $result = $this->_squareReduce($result, $n_value, $mode);
                 ++$i;
             } else {
                 for ($j = $window_size - 1; $j > 0; --$j) {
-                    if ( !empty($e_bits[$i + $j]) ) {
+                    if (!empty($e_bits[$i + $j])) {
                         break;
                     }
                 }
 
-                for ($k = 0; $k <= $j; ++$k) {// eg. the length of substr($e_bits, $i, $j+1)
+                // eg. the length of substr($e_bits, $i, $j + 1)
+                for ($k = 0; $k <= $j; ++$k) {
                     $result = $this->_squareReduce($result, $n_value, $mode);
                 }
 
                 $result = $this->_multiplyReduce($result, $powers[bindec(substr($e_bits, $i, $j + 1))], $n_value, $mode);
 
-                $i+=$j + 1;
+                $i += $j + 1;
             }
         }
 
-        $temp = new Math_BigInteger();
+        $temp = new static();
         $temp->value = $this->_reduce($result, $n_value, $mode);
 
         return $temp;
@@ -1754,34 +1891,34 @@ class Math_BigInteger {
      *
      * For most $modes this will return the remainder.
      *
-     * @see _slidingWindow()
+     * @see self::_slidingWindow()
      * @access private
-     * @param Array $x
-     * @param Array $n
-     * @param Integer $mode
-     * @return Array
+     * @param array $x
+     * @param array $n
+     * @param int $mode
+     * @return array
      */
     function _reduce($x, $n, $mode)
     {
         switch ($mode) {
-            case MATH_BIGINTEGER_MONTGOMERY:
+            case self::MONTGOMERY:
                 return $this->_montgomery($x, $n);
-            case MATH_BIGINTEGER_BARRETT:
+            case self::BARRETT:
                 return $this->_barrett($x, $n);
-            case MATH_BIGINTEGER_POWEROF2:
-                $lhs = new Math_BigInteger();
+            case self::POWEROF2:
+                $lhs = new static();
                 $lhs->value = $x;
-                $rhs = new Math_BigInteger();
+                $rhs = new static();
                 $rhs->value = $n;
                 return $x->_mod2($n);
-            case MATH_BIGINTEGER_CLASSIC:
-                $lhs = new Math_BigInteger();
+            case self::CLASSIC:
+                $lhs = new static();
                 $lhs->value = $x;
-                $rhs = new Math_BigInteger();
+                $rhs = new static();
                 $rhs->value = $n;
                 list(, $temp) = $lhs->divide($rhs);
                 return $temp->value;
-            case MATH_BIGINTEGER_NONE:
+            case self::NONE:
                 return $x;
             default:
                 // an invalid $mode was provided
@@ -1791,16 +1928,16 @@ class Math_BigInteger {
     /**
      * Modular reduction preperation
      *
-     * @see _slidingWindow()
+     * @see self::_slidingWindow()
      * @access private
-     * @param Array $x
-     * @param Array $n
-     * @param Integer $mode
-     * @return Array
+     * @param array $x
+     * @param array $n
+     * @param int $mode
+     * @return array
      */
     function _prepareReduce($x, $n, $mode)
     {
-        if ($mode == MATH_BIGINTEGER_MONTGOMERY) {
+        if ($mode == self::MONTGOMERY) {
             return $this->_prepMontgomery($x, $n);
         }
         return $this->_reduce($x, $n, $mode);
@@ -1809,36 +1946,36 @@ class Math_BigInteger {
     /**
      * Modular multiply
      *
-     * @see _slidingWindow()
+     * @see self::_slidingWindow()
      * @access private
-     * @param Array $x
-     * @param Array $y
-     * @param Array $n
-     * @param Integer $mode
-     * @return Array
+     * @param array $x
+     * @param array $y
+     * @param array $n
+     * @param int $mode
+     * @return array
      */
     function _multiplyReduce($x, $y, $n, $mode)
     {
-        if ($mode == MATH_BIGINTEGER_MONTGOMERY) {
+        if ($mode == self::MONTGOMERY) {
             return $this->_montgomeryMultiply($x, $y, $n);
         }
         $temp = $this->_multiply($x, false, $y, false);
-        return $this->_reduce($temp[MATH_BIGINTEGER_VALUE], $n, $mode);
+        return $this->_reduce($temp[self::VALUE], $n, $mode);
     }
 
     /**
      * Modular square
      *
-     * @see _slidingWindow()
+     * @see self::_slidingWindow()
      * @access private
-     * @param Array $x
-     * @param Array $n
-     * @param Integer $mode
-     * @return Array
+     * @param array $x
+     * @param array $n
+     * @param int $mode
+     * @return array
      */
     function _squareReduce($x, $n, $mode)
     {
-        if ($mode == MATH_BIGINTEGER_MONTGOMERY) {
+        if ($mode == self::MONTGOMERY) {
             return $this->_montgomeryMultiply($x, $x, $n);
         }
         return $this->_reduce($this->_square($x), $n, $mode);
@@ -1850,14 +1987,14 @@ class Math_BigInteger {
      * Calculates $x%$n, where $n = 2**$e, for some $e.  Since this is basically the same as doing $x & ($n-1),
      * we'll just use this function as a wrapper for doing that.
      *
-     * @see _slidingWindow()
+     * @see self::_slidingWindow()
      * @access private
-     * @param Math_BigInteger
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger
+     * @return \phpseclib\Math\BigInteger
      */
     function _mod2($n)
     {
-        $temp = new Math_BigInteger();
+        $temp = new static();
         $temp->value = array(1);
         return $this->bitwise_and($n->subtract($temp));
     }
@@ -1880,25 +2017,25 @@ class Math_BigInteger {
      * (x >> 1) + (x >> 1) != x / 2 + x / 2.  If x is even, they're the same, but if x is odd, they're not.  See the in-line
      * comments for details.
      *
-     * @see _slidingWindow()
+     * @see self::_slidingWindow()
      * @access private
-     * @param Array $n
-     * @param Array $m
-     * @return Array
+     * @param array $n
+     * @param array $m
+     * @return array
      */
     function _barrett($n, $m)
     {
         static $cache = array(
-            MATH_BIGINTEGER_VARIABLE => array(),
-            MATH_BIGINTEGER_DATA => array()
+            self::VARIABLE => array(),
+            self::DATA => array()
         );
 
         $m_length = count($m);
 
         // if ($this->_compare($n, $this->_square($m)) >= 0) {
         if (count($n) > 2 * $m_length) {
-            $lhs = new Math_BigInteger();
-            $rhs = new Math_BigInteger();
+            $lhs = new static();
+            $rhs = new static();
             $lhs->value = $n;
             $rhs->value = $m;
             list(, $temp) = $lhs->divide($rhs);
@@ -1912,27 +2049,27 @@ class Math_BigInteger {
 
         // n = 2 * m.length
 
-        if ( ($key = array_search($m, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
-            $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
-            $cache[MATH_BIGINTEGER_VARIABLE][] = $m;
+        if (($key = array_search($m, $cache[self::VARIABLE])) === false) {
+            $key = count($cache[self::VARIABLE]);
+            $cache[self::VARIABLE][] = $m;
 
-            $lhs = new Math_BigInteger();
+            $lhs = new static();
             $lhs_value = &$lhs->value;
             $lhs_value = $this->_array_repeat(0, $m_length + ($m_length >> 1));
             $lhs_value[] = 1;
-            $rhs = new Math_BigInteger();
+            $rhs = new static();
             $rhs->value = $m;
 
             list($u, $m1) = $lhs->divide($rhs);
             $u = $u->value;
             $m1 = $m1->value;
 
-            $cache[MATH_BIGINTEGER_DATA][] = array(
+            $cache[self::DATA][] = array(
                 'u' => $u, // m.length >> 1 (technically (m.length >> 1) + 1)
                 'm1'=> $m1 // m.length
             );
         } else {
-            extract($cache[MATH_BIGINTEGER_DATA][$key]);
+            extract($cache[self::DATA][$key]);
         }
 
         $cutoff = $m_length + ($m_length >> 1);
@@ -1940,20 +2077,20 @@ class Math_BigInteger {
         $msd = array_slice($n, $cutoff);    // m.length >> 1
         $lsd = $this->_trim($lsd);
         $temp = $this->_multiply($msd, false, $m1, false);
-        $n = $this->_add($lsd, false, $temp[MATH_BIGINTEGER_VALUE], false); // m.length + (m.length >> 1) + 1
+        $n = $this->_add($lsd, false, $temp[self::VALUE], false); // m.length + (m.length >> 1) + 1
 
         if ($m_length & 1) {
-            return $this->_regularBarrett($n[MATH_BIGINTEGER_VALUE], $m);
+            return $this->_regularBarrett($n[self::VALUE], $m);
         }
 
         // (m.length + (m.length >> 1) + 1) - (m.length - 1) == (m.length >> 1) + 2
-        $temp = array_slice($n[MATH_BIGINTEGER_VALUE], $m_length - 1);
+        $temp = array_slice($n[self::VALUE], $m_length - 1);
         // if even: ((m.length >> 1) + 2) + (m.length >> 1) == m.length + 2
         // if odd:  ((m.length >> 1) + 2) + (m.length >> 1) == (m.length - 1) + 2 == m.length + 1
         $temp = $this->_multiply($temp, false, $u, false);
         // if even: (m.length + 2) - ((m.length >> 1) + 1) = m.length - (m.length >> 1) + 1
         // if odd:  (m.length + 1) - ((m.length >> 1) + 1) = m.length - (m.length >> 1)
-        $temp = array_slice($temp[MATH_BIGINTEGER_VALUE], ($m_length >> 1) + 1);
+        $temp = array_slice($temp[self::VALUE], ($m_length >> 1) + 1);
         // if even: (m.length - (m.length >> 1) + 1) + m.length = 2 * m.length - (m.length >> 1) + 1
         // if odd:  (m.length - (m.length >> 1)) + m.length     = 2 * m.length - (m.length >> 1)
         $temp = $this->_multiply($temp, false, $m, false);
@@ -1962,64 +2099,64 @@ class Math_BigInteger {
         // number from a m.length + (m.length >> 1) + 1 digit number.  ie. there'd be an extra digit and the while loop
         // following this comment would loop a lot (hence our calling _regularBarrett() in that situation).
 
-        $result = $this->_subtract($n[MATH_BIGINTEGER_VALUE], false, $temp[MATH_BIGINTEGER_VALUE], false);
+        $result = $this->_subtract($n[self::VALUE], false, $temp[self::VALUE], false);
 
-        while ($this->_compare($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $m, false) >= 0) {
-            $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $m, false);
+        while ($this->_compare($result[self::VALUE], $result[self::SIGN], $m, false) >= 0) {
+            $result = $this->_subtract($result[self::VALUE], $result[self::SIGN], $m, false);
         }
 
-        return $result[MATH_BIGINTEGER_VALUE];
+        return $result[self::VALUE];
     }
 
     /**
      * (Regular) Barrett Modular Reduction
      *
-     * For numbers with more than four digits Math_BigInteger::_barrett() is faster.  The difference between that and this
+     * For numbers with more than four digits BigInteger::_barrett() is faster.  The difference between that and this
      * is that this function does not fold the denominator into a smaller form.
      *
-     * @see _slidingWindow()
+     * @see self::_slidingWindow()
      * @access private
-     * @param Array $x
-     * @param Array $n
-     * @return Array
+     * @param array $x
+     * @param array $n
+     * @return array
      */
     function _regularBarrett($x, $n)
     {
         static $cache = array(
-            MATH_BIGINTEGER_VARIABLE => array(),
-            MATH_BIGINTEGER_DATA => array()
+            self::VARIABLE => array(),
+            self::DATA => array()
         );
 
         $n_length = count($n);
 
         if (count($x) > 2 * $n_length) {
-            $lhs = new Math_BigInteger();
-            $rhs = new Math_BigInteger();
+            $lhs = new static();
+            $rhs = new static();
             $lhs->value = $x;
             $rhs->value = $n;
             list(, $temp) = $lhs->divide($rhs);
             return $temp->value;
         }
 
-        if ( ($key = array_search($n, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
-            $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
-            $cache[MATH_BIGINTEGER_VARIABLE][] = $n;
-            $lhs = new Math_BigInteger();
+        if (($key = array_search($n, $cache[self::VARIABLE])) === false) {
+            $key = count($cache[self::VARIABLE]);
+            $cache[self::VARIABLE][] = $n;
+            $lhs = new static();
             $lhs_value = &$lhs->value;
             $lhs_value = $this->_array_repeat(0, 2 * $n_length);
             $lhs_value[] = 1;
-            $rhs = new Math_BigInteger();
+            $rhs = new static();
             $rhs->value = $n;
             list($temp, ) = $lhs->divide($rhs); // m.length
-            $cache[MATH_BIGINTEGER_DATA][] = $temp->value;
+            $cache[self::DATA][] = $temp->value;
         }
 
         // 2 * m.length - (m.length - 1) = m.length + 1
         $temp = array_slice($x, $n_length - 1);
         // (m.length + 1) + m.length = 2 * m.length + 1
-        $temp = $this->_multiply($temp, false, $cache[MATH_BIGINTEGER_DATA][$key], false);
+        $temp = $this->_multiply($temp, false, $cache[self::DATA][$key], false);
         // (2 * m.length + 1) - (m.length - 1) = m.length + 2
-        $temp = array_slice($temp[MATH_BIGINTEGER_VALUE], $n_length + 1);
+        $temp = array_slice($temp[self::VALUE], $n_length + 1);
 
         // m.length + 1
         $result = array_slice($x, 0, $n_length + 1);
@@ -2027,20 +2164,20 @@ class Math_BigInteger {
         $temp = $this->_multiplyLower($temp, false, $n, false, $n_length + 1);
         // $temp == array_slice($temp->_multiply($temp, false, $n, false)->value, 0, $n_length + 1)
 
-        if ($this->_compare($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]) < 0) {
+        if ($this->_compare($result, false, $temp[self::VALUE], $temp[self::SIGN]) < 0) {
             $corrector_value = $this->_array_repeat(0, $n_length + 1);
-            $corrector_value[] = 1;
-            $result = $this->_add($result, false, $corrector, false);
-            $result = $result[MATH_BIGINTEGER_VALUE];
+            $corrector_value[count($corrector_value)] = 1;
+            $result = $this->_add($result, false, $corrector_value, false);
+            $result = $result[self::VALUE];
         }
 
         // at this point, we're subtracting a number with m.length + 1 digits from another number with m.length + 1 digits
-        $result = $this->_subtract($result, false, $temp[MATH_BIGINTEGER_VALUE], $temp[MATH_BIGINTEGER_SIGN]);
-        while ($this->_compare($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $n, false) > 0) {
-            $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], $result[MATH_BIGINTEGER_SIGN], $n, false);
+        $result = $this->_subtract($result, false, $temp[self::VALUE], $temp[self::SIGN]);
+        while ($this->_compare($result[self::VALUE], $result[self::SIGN], $n, false) > 0) {
+            $result = $this->_subtract($result[self::VALUE], $result[self::SIGN], $n, false);
         }
 
-        return $result[MATH_BIGINTEGER_VALUE];
+        return $result[self::VALUE];
     }
 
     /**
@@ -2048,12 +2185,13 @@ class Math_BigInteger {
      *
      * If you're going to be doing array_slice($product->value, 0, $stop), some cycles can be saved.
      *
-     * @see _regularBarrett()
-     * @param Array $x_value
-     * @param Boolean $x_negative
-     * @param Array $y_value
-     * @param Boolean $y_negative
-     * @return Array
+     * @see self::_regularBarrett()
+     * @param array $x_value
+     * @param bool $x_negative
+     * @param array $y_value
+     * @param bool $y_negative
+     * @param int $stop
+     * @return array
      * @access private
      */
     function _multiplyLower($x_value, $x_negative, $y_value, $y_negative, $stop)
@@ -2061,14 +2199,14 @@ class Math_BigInteger {
         $x_length = count($x_value);
         $y_length = count($y_value);
 
-        if ( !$x_length || !$y_length ) { // a 0 is being multiplied
+        if (!$x_length || !$y_length) { // a 0 is being multiplied
             return array(
-                MATH_BIGINTEGER_VALUE => array(),
-                MATH_BIGINTEGER_SIGN => false
+                self::VALUE => array(),
+                self::SIGN => false
             );
         }
 
-        if ( $x_length < $y_length ) {
+        if ($x_length < $y_length) {
             $temp = $x_value;
             $x_value = $y_value;
             $y_value = $temp;
@@ -2089,8 +2227,8 @@ class Math_BigInteger {
 
         for ($j = 0; $j < $x_length; ++$j) { // ie. $i = 0, $k = $i
             $temp = $x_value[$j] * $y_value[0] + $carry; // $product_value[$k] == 0
-            $carry = (int) ($temp / 0x4000000);
-            $product_value[$j] = (int) ($temp - 0x4000000 * $carry);
+            $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
+            $product_value[$j] = (int) ($temp - self::$baseFull * $carry);
         }
 
         if ($j < $stop) {
@@ -2105,8 +2243,8 @@ class Math_BigInteger {
 
             for ($j = 0, $k = $i; $j < $x_length && $k < $stop; ++$j, ++$k) {
                 $temp = $product_value[$k] + $x_value[$j] * $y_value[$i] + $carry;
-                $carry = (int) ($temp / 0x4000000);
-                $product_value[$k] = (int) ($temp - 0x4000000 * $carry);
+                $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
+                $product_value[$k] = (int) ($temp - self::$baseFull * $carry);
             }
 
             if ($k < $stop) {
@@ -2115,8 +2253,8 @@ class Math_BigInteger {
         }
 
         return array(
-            MATH_BIGINTEGER_VALUE => $this->_trim($product_value),
-            MATH_BIGINTEGER_SIGN => $x_negative != $y_negative
+            self::VALUE => $this->_trim($product_value),
+            self::SIGN => $x_negative != $y_negative
         );
     }
 
@@ -2128,112 +2266,117 @@ class Math_BigInteger {
      * improved upon (basically, by using the comba method).  gcd($n, 2) must be equal to one for this function
      * to work correctly.
      *
-     * @see _prepMontgomery()
-     * @see _slidingWindow()
+     * @see self::_prepMontgomery()
+     * @see self::_slidingWindow()
      * @access private
-     * @param Array $x
-     * @param Array $n
-     * @return Array
+     * @param array $x
+     * @param array $n
+     * @return array
      */
     function _montgomery($x, $n)
     {
         static $cache = array(
-            MATH_BIGINTEGER_VARIABLE => array(),
-            MATH_BIGINTEGER_DATA => array()
+            self::VARIABLE => array(),
+            self::DATA => array()
         );
 
-        if ( ($key = array_search($n, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
-            $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
-            $cache[MATH_BIGINTEGER_VARIABLE][] = $x;
-            $cache[MATH_BIGINTEGER_DATA][] = $this->_modInverse67108864($n);
+        if (($key = array_search($n, $cache[self::VARIABLE])) === false) {
+            $key = count($cache[self::VARIABLE]);
+            $cache[self::VARIABLE][] = $x;
+            $cache[self::DATA][] = $this->_modInverse67108864($n);
         }
 
         $k = count($n);
 
-        $result = array(MATH_BIGINTEGER_VALUE => $x);
+        $result = array(self::VALUE => $x);
 
         for ($i = 0; $i < $k; ++$i) {
-            $temp = $result[MATH_BIGINTEGER_VALUE][$i] * $cache[MATH_BIGINTEGER_DATA][$key];
-            $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000)));
+            $temp = $result[self::VALUE][$i] * $cache[self::DATA][$key];
+            $temp = $temp - self::$baseFull * (self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31));
             $temp = $this->_regularMultiply(array($temp), $n);
             $temp = array_merge($this->_array_repeat(0, $i), $temp);
-            $result = $this->_add($result[MATH_BIGINTEGER_VALUE], false, $temp, false);
+            $result = $this->_add($result[self::VALUE], false, $temp, false);
         }
 
-        $result[MATH_BIGINTEGER_VALUE] = array_slice($result[MATH_BIGINTEGER_VALUE], $k);
+        $result[self::VALUE] = array_slice($result[self::VALUE], $k);
 
         if ($this->_compare($result, false, $n, false) >= 0) {
-            $result = $this->_subtract($result[MATH_BIGINTEGER_VALUE], false, $n, false);
+            $result = $this->_subtract($result[self::VALUE], false, $n, false);
         }
 
-        return $result[MATH_BIGINTEGER_VALUE];
+        return $result[self::VALUE];
     }
 
     /**
      * Montgomery Multiply
      *
-     * Interleaves the montgomery reduction and long multiplication algorithms together as described in 
+     * Interleaves the montgomery reduction and long multiplication algorithms together as described in
      * {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=13 HAC 14.36}
      *
-     * @see _prepMontgomery()
-     * @see _montgomery()
+     * @see self::_prepMontgomery()
+     * @see self::_montgomery()
      * @access private
-     * @param Array $x
-     * @param Array $y
-     * @param Array $m
-     * @return Array
+     * @param array $x
+     * @param array $y
+     * @param array $m
+     * @return array
      */
     function _montgomeryMultiply($x, $y, $m)
     {
         $temp = $this->_multiply($x, false, $y, false);
-        return $this->_montgomery($temp[MATH_BIGINTEGER_VALUE], $m);
+        return $this->_montgomery($temp[self::VALUE], $m);
+
+        // the following code, although not callable, can be run independently of the above code
+        // although the above code performed better in my benchmarks the following could might
+        // perform better under different circumstances. in lieu of deleting it it's just been
+        // made uncallable
 
         static $cache = array(
-            MATH_BIGINTEGER_VARIABLE => array(),
-            MATH_BIGINTEGER_DATA => array()
+            self::VARIABLE => array(),
+            self::DATA => array()
         );
 
-        if ( ($key = array_search($m, $cache[MATH_BIGINTEGER_VARIABLE])) === false ) {
-            $key = count($cache[MATH_BIGINTEGER_VARIABLE]);
-            $cache[MATH_BIGINTEGER_VARIABLE][] = $m;
-            $cache[MATH_BIGINTEGER_DATA][] = $this->_modInverse67108864($m);
+        if (($key = array_search($m, $cache[self::VARIABLE])) === false) {
+            $key = count($cache[self::VARIABLE]);
+            $cache[self::VARIABLE][] = $m;
+            $cache[self::DATA][] = $this->_modInverse67108864($m);
         }
 
         $n = max(count($x), count($y), count($m));
         $x = array_pad($x, $n, 0);
         $y = array_pad($y, $n, 0);
         $m = array_pad($m, $n, 0);
-        $a = array(MATH_BIGINTEGER_VALUE => $this->_array_repeat(0, $n + 1));
+        $a = array(self::VALUE => $this->_array_repeat(0, $n + 1));
         for ($i = 0; $i < $n; ++$i) {
-            $temp = $a[MATH_BIGINTEGER_VALUE][0] + $x[$i] * $y[0];
-            $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000)));
-            $temp = $temp * $cache[MATH_BIGINTEGER_DATA][$key];
-            $temp = (int) ($temp - 0x4000000 * ((int) ($temp / 0x4000000)));
+            $temp = $a[self::VALUE][0] + $x[$i] * $y[0];
+            $temp = $temp - self::$baseFull * (self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31));
+            $temp = $temp * $cache[self::DATA][$key];
+            $temp = $temp - self::$baseFull * (self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31));
             $temp = $this->_add($this->_regularMultiply(array($x[$i]), $y), false, $this->_regularMultiply(array($temp), $m), false);
-            $a = $this->_add($a[MATH_BIGINTEGER_VALUE], false, $temp[MATH_BIGINTEGER_VALUE], false);
-            $a[MATH_BIGINTEGER_VALUE] = array_slice($a[MATH_BIGINTEGER_VALUE], 1);
+            $a = $this->_add($a[self::VALUE], false, $temp[self::VALUE], false);
+            $a[self::VALUE] = array_slice($a[self::VALUE], 1);
         }
-        if ($this->_compare($a[MATH_BIGINTEGER_VALUE], false, $m, false) >= 0) {
-            $a = $this->_subtract($a[MATH_BIGINTEGER_VALUE], false, $m, false);
+        if ($this->_compare($a[self::VALUE], false, $m, false) >= 0) {
+            $a = $this->_subtract($a[self::VALUE], false, $m, false);
         }
-        return $a[MATH_BIGINTEGER_VALUE];
+        return $a[self::VALUE];
     }
 
     /**
      * Prepare a number for use in Montgomery Modular Reductions
      *
-     * @see _montgomery()
-     * @see _slidingWindow()
+     * @see self::_montgomery()
+     * @see self::_slidingWindow()
      * @access private
-     * @param Array $x
-     * @param Array $n
-     * @return Array
+     * @param array $x
+     * @param array $n
+     * @return array
      */
     function _prepMontgomery($x, $n)
     {
-        $lhs = new Math_BigInteger();
+        $lhs = new static();
         $lhs->value = array_merge($this->_array_repeat(0, count($n)), $x);
-        $rhs = new Math_BigInteger();
+        $rhs = new static();
         $rhs->value = $n;
 
         list(, $temp) = $lhs->divide($rhs);
@@ -2252,7 +2395,7 @@ class Math_BigInteger {
      * {@link http://groups.google.com/group/sci.crypt/msg/7a137205c1be7d85}
      *
      * As for why we do all the bitmasking...  strange things can happen when converting from floats to ints. For
-     * instance, on some computers, var_dump((int) -4294967297) yields int(-1) and on others, it yields 
+     * instance, on some computers, var_dump((int) -4294967297) yields int(-1) and on others, it yields
      * int(-2147483648).  To avoid problems stemming from this, we use bitmasks to guarantee that ints aren't
      * auto-converted to floats.  The outermost bitmask is present because without it, there's no guarantee that
      * the "residue" returned would be the so-called "common residue".  We use fmod, in the last step, because the
@@ -2261,20 +2404,20 @@ class Math_BigInteger {
      *
      * Thanks to Pedro Gimeno Fortea for input!
      *
-     * @see _montgomery()
+     * @see self::_montgomery()
      * @access private
-     * @param Array $x
-     * @return Integer
+     * @param array $x
+     * @return int
      */
-    function _modInverse67108864($x) // 2**26 == 67108864
+    function _modInverse67108864($x) // 2**26 == 67,108,864
     {
         $x = -$x[0];
         $result = $x & 0x3; // x**-1 mod 2**2
         $result = ($result * (2 - $x * $result)) & 0xF; // x**-1 mod 2**4
         $result = ($result * (2 - ($x & 0xFF) * $result))  & 0xFF; // x**-1 mod 2**8
         $result = ($result * ((2 - ($x & 0xFFFF) * $result) & 0xFFFF)) & 0xFFFF; // x**-1 mod 2**16
-        $result = fmod($result * (2 - fmod($x * $result, 0x4000000)), 0x4000000); // x**-1 mod 2**26
-        return $result & 0x3FFFFFF;
+        $result = fmod($result * (2 - fmod($x * $result, self::$baseFull)), self::$baseFull); // x**-1 mod 2**26
+        return $result & self::$maxDigit;
     }
 
     /**
@@ -2285,10 +2428,8 @@ class Math_BigInteger {
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger(30);
-     *    $b = new Math_BigInteger(17);
+     *    $a = new \phpseclib\Math\BigInteger(30);
+     *    $b = new \phpseclib\Math\BigInteger(17);
      *
      *    $c = $a->modInverse($b);
      *    echo $c->toString(); // outputs 4
@@ -2301,34 +2442,34 @@ class Math_BigInteger {
      * ?>
      * </code>
      *
-     * @param Math_BigInteger $n
-     * @return mixed false, if no modular inverse exists, Math_BigInteger, otherwise.
+     * @param \phpseclib\Math\BigInteger $n
+     * @return \phpseclib\Math\BigInteger|false
      * @access public
      * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=21 HAC 14.64} for more information.
      */
     function modInverse($n)
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
-                $temp = new Math_BigInteger();
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
+                $temp = new static();
                 $temp->value = gmp_invert($this->value, $n->value);
 
-                return ( $temp->value === false ) ? false : $this->_normalize($temp);
+                return ($temp->value === false) ? false : $this->_normalize($temp);
         }
 
         static $zero, $one;
         if (!isset($zero)) {
-            $zero = new Math_BigInteger();
-            $one = new Math_BigInteger(1);
+            $zero = new static();
+            $one = new static(1);
         }
 
-        // $x mod $n == $x mod -$n.
+        // $x mod -$n == $x mod $n.
         $n = $n->abs();
 
         if ($this->compare($zero) < 0) {
             $temp = $this->abs();
             $temp = $temp->modInverse($n);
-            return $negated === false ? false : $this->_normalize($n->subtract($temp));
+            return $this->_normalize($n->subtract($temp));
         }
 
         extract($this->extendedGCD($n));
@@ -2343,20 +2484,18 @@ class Math_BigInteger {
     }
 
     /**
-     * Calculates the greatest common divisor and B�zout's identity.
+     * Calculates the greatest common divisor and Bezout's identity.
      *
-     * Say you have 693 and 609.  The GCD is 21.  B�zout's identity states that there exist integers x and y such that
+     * Say you have 693 and 609.  The GCD is 21.  Bezout's identity states that there exist integers x and y such that
      * 693*x + 609*y == 21.  In point of fact, there are actually an infinite number of x and y combinations and which
-     * combination is returned is dependant upon which mode is in use.  See
-     * {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity B�zout's identity - Wikipedia} for more information.
+     * combination is returned is dependent upon which mode is in use.  See
+     * {@link http://en.wikipedia.org/wiki/B%C3%A9zout%27s_identity Bezout's identity - Wikipedia} for more information.
      *
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger(693);
-     *    $b = new Math_BigInteger(609);
+     *    $a = new \phpseclib\Math\BigInteger(693);
+     *    $b = new \phpseclib\Math\BigInteger(609);
      *
      *    extract($a->extendedGCD($b));
      *
@@ -2365,8 +2504,8 @@ class Math_BigInteger {
      * ?>
      * </code>
      *
-     * @param Math_BigInteger $n
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $n
+     * @return \phpseclib\Math\BigInteger
      * @access public
      * @internal Calculates the GCD using the binary xGCD algorithim described in
      *    {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf#page=19 HAC 14.61}.  As the text above 14.61 notes,
@@ -2374,16 +2513,16 @@ class Math_BigInteger {
      */
     function extendedGCD($n)
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
                 extract(gmp_gcdext($this->value, $n->value));
 
                 return array(
-                    'gcd' => $this->_normalize(new Math_BigInteger($g)),
-                    'x'   => $this->_normalize(new Math_BigInteger($s)),
-                    'y'   => $this->_normalize(new Math_BigInteger($t))
+                    'gcd' => $this->_normalize(new static($g)),
+                    'x'   => $this->_normalize(new static($s)),
+                    'y'   => $this->_normalize(new static($t))
                 );
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 // it might be faster to use the binary xGCD algorithim here, as well, but (1) that algorithim works
                 // best when the base is a power of 2 and (2) i don't think it'd make much difference, anyway.  as is,
                 // the basic extended euclidean algorithim is what we're using.
@@ -2413,18 +2552,18 @@ class Math_BigInteger {
                 }
 
                 return array(
-                    'gcd' => $this->_normalize(new Math_BigInteger($u)),
-                    'x'   => $this->_normalize(new Math_BigInteger($a)),
-                    'y'   => $this->_normalize(new Math_BigInteger($b))
+                    'gcd' => $this->_normalize(new static($u)),
+                    'x'   => $this->_normalize(new static($a)),
+                    'y'   => $this->_normalize(new static($b))
                 );
         }
 
         $y = $n->copy();
         $x = $this->copy();
-        $g = new Math_BigInteger();
+        $g = new static();
         $g->value = array(1);
 
-        while ( !(($x->value[0] & 1)|| ($y->value[0] & 1)) ) {
+        while (!(($x->value[0] & 1)|| ($y->value[0] & 1))) {
             $x->_rshift(1);
             $y->_rshift(1);
             $g->_lshift(1);
@@ -2433,18 +2572,18 @@ class Math_BigInteger {
         $u = $x->copy();
         $v = $y->copy();
 
-        $a = new Math_BigInteger();
-        $b = new Math_BigInteger();
-        $c = new Math_BigInteger();
-        $d = new Math_BigInteger();
+        $a = new static();
+        $b = new static();
+        $c = new static();
+        $d = new static();
 
         $a->value = $d->value = $g->value = array(1);
         $b->value = $c->value = array();
 
-        while ( !empty($u->value) ) {
-            while ( !($u->value[0] & 1) ) {
+        while (!empty($u->value)) {
+            while (!($u->value[0] & 1)) {
                 $u->_rshift(1);
-                if ( (!empty($a->value) && ($a->value[0] & 1)) || (!empty($b->value) && ($b->value[0] & 1)) ) {
+                if ((!empty($a->value) && ($a->value[0] & 1)) || (!empty($b->value) && ($b->value[0] & 1))) {
                     $a = $a->add($y);
                     $b = $b->subtract($x);
                 }
@@ -2452,9 +2591,9 @@ class Math_BigInteger {
                 $b->_rshift(1);
             }
 
-            while ( !($v->value[0] & 1) ) {
+            while (!($v->value[0] & 1)) {
                 $v->_rshift(1);
-                if ( (!empty($d->value) && ($d->value[0] & 1)) || (!empty($c->value) && ($c->value[0] & 1)) ) {
+                if ((!empty($d->value) && ($d->value[0] & 1)) || (!empty($c->value) && ($c->value[0] & 1))) {
                     $c = $c->add($y);
                     $d = $d->subtract($x);
                 }
@@ -2488,10 +2627,8 @@ class Math_BigInteger {
      * Here's an example:
      * <code>
      * <?php
-     *    include('Math/BigInteger.php');
-     *
-     *    $a = new Math_BigInteger(693);
-     *    $b = new Math_BigInteger(609);
+     *    $a = new \phpseclib\Math\BigInteger(693);
+     *    $b = new \phpseclib\Math\BigInteger(609);
      *
      *    $gcd = a->extendedGCD($b);
      *
@@ -2499,8 +2636,8 @@ class Math_BigInteger {
      * ?>
      * </code>
      *
-     * @param Math_BigInteger $n
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $n
+     * @return \phpseclib\Math\BigInteger
      * @access public
      */
     function gcd($n)
@@ -2512,18 +2649,18 @@ class Math_BigInteger {
     /**
      * Absolute value.
      *
-     * @return Math_BigInteger
+     * @return \phpseclib\Math\BigInteger
      * @access public
      */
     function abs()
     {
-        $temp = new Math_BigInteger();
+        $temp = new static();
 
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
                 $temp->value = gmp_abs($this->value);
                 break;
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 $temp->value = (bccomp($this->value, '0', 0) < 0) ? substr($this->value, 1) : $this->value;
                 break;
             default:
@@ -2545,18 +2682,18 @@ class Math_BigInteger {
      *
      * Note how the same comparison operator is used.  If you want to test for equality, use $x->equals($y).
      *
-     * @param Math_BigInteger $x
-     * @return Integer < 0 if $this is less than $x; > 0 if $this is greater than $x, and 0 if they are equal.
+     * @param \phpseclib\Math\BigInteger $y
+     * @return int < 0 if $this is less than $y; > 0 if $this is greater than $y, and 0 if they are equal.
      * @access public
-     * @see equals()
+     * @see self::equals()
      * @internal Could return $this->subtract($x), but that's not as fast as what we do do.
      */
     function compare($y)
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
                 return gmp_cmp($this->value, $y->value);
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 return bccomp($this->value, $y->value, 0);
         }
 
@@ -2566,24 +2703,24 @@ class Math_BigInteger {
     /**
      * Compares two numbers.
      *
-     * @param Array $x_value
-     * @param Boolean $x_negative
-     * @param Array $y_value
-     * @param Boolean $y_negative
-     * @return Integer
-     * @see compare()
+     * @param array $x_value
+     * @param bool $x_negative
+     * @param array $y_value
+     * @param bool $y_negative
+     * @return int
+     * @see self::compare()
      * @access private
      */
     function _compare($x_value, $x_negative, $y_value, $y_negative)
     {
-        if ( $x_negative != $y_negative ) {
-            return ( !$x_negative && $y_negative ) ? 1 : -1;
+        if ($x_negative != $y_negative) {
+            return (!$x_negative && $y_negative) ? 1 : -1;
         }
 
         $result = $x_negative ? -1 : 1;
 
-        if ( count($x_value) != count($y_value) ) {
-            return ( count($x_value) > count($y_value) ) ? $result : -$result;
+        if (count($x_value) != count($y_value)) {
+            return (count($x_value) > count($y_value)) ? $result : -$result;
         }
         $size = max(count($x_value), count($y_value));
 
@@ -2592,7 +2729,7 @@ class Math_BigInteger {
 
         for ($i = count($x_value) - 1; $i >= 0; --$i) {
             if ($x_value[$i] != $y_value[$i]) {
-                return ( $x_value[$i] > $y_value[$i] ) ? $result : -$result;
+                return ($x_value[$i] > $y_value[$i]) ? $result : -$result;
             }
         }
 
@@ -2602,17 +2739,17 @@ class Math_BigInteger {
     /**
      * Tests the equality of two numbers.
      *
-     * If you need to see if one number is greater than or less than another number, use Math_BigInteger::compare()
+     * If you need to see if one number is greater than or less than another number, use BigInteger::compare()
      *
-     * @param Math_BigInteger $x
-     * @return Boolean
+     * @param \phpseclib\Math\BigInteger $x
+     * @return bool
      * @access public
-     * @see compare()
+     * @see self::compare()
      */
     function equals($x)
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
                 return gmp_cmp($this->value, $x->value) == 0;
             default:
                 return $this->value === $x->value && $this->is_negative == $x->is_negative;
@@ -2625,17 +2762,16 @@ class Math_BigInteger {
      * Some bitwise operations give different results depending on the precision being used.  Examples include left
      * shift, not, and rotates.
      *
-     * @param Math_BigInteger $x
+     * @param int $bits
      * @access public
-     * @return Math_BigInteger
      */
     function setPrecision($bits)
     {
         $this->precision = $bits;
-        if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_BCMATH ) {
-            $this->bitmask = new Math_BigInteger(chr((1 << ($bits & 0x7)) - 1) . str_repeat(chr(0xFF), $bits >> 3), 256);
+        if (MATH_BIGINTEGER_MODE != self::MODE_BCMATH) {
+            $this->bitmask = new static(chr((1 << ($bits & 0x7)) - 1) . str_repeat(chr(0xFF), $bits >> 3), 256);
         } else {
-            $this->bitmask = new Math_BigInteger(bcpow('2', $bits, 0));
+            $this->bitmask = new static(bcpow('2', $bits, 0));
         }
 
         $temp = $this->_normalize($this);
@@ -2645,20 +2781,20 @@ class Math_BigInteger {
     /**
      * Logical And
      *
-     * @param Math_BigInteger $x
+     * @param \phpseclib\Math\BigInteger $x
      * @access public
      * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
-     * @return Math_BigInteger
+     * @return \phpseclib\Math\BigInteger
      */
     function bitwise_and($x)
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
-                $temp = new Math_BigInteger();
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
+                $temp = new static();
                 $temp->value = gmp_and($this->value, $x->value);
 
                 return $this->_normalize($temp);
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 $left = $this->toBytes();
                 $right = $x->toBytes();
 
@@ -2667,7 +2803,7 @@ class Math_BigInteger {
                 $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
                 $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
 
-                return $this->_normalize(new Math_BigInteger($left & $right, 256));
+                return $this->_normalize(new static($left & $right, 256));
         }
 
         $result = $this->copy();
@@ -2677,7 +2813,7 @@ class Math_BigInteger {
         $result->value = array_slice($result->value, 0, $length);
 
         for ($i = 0; $i < $length; ++$i) {
-            $result->value[$i] = $result->value[$i] & $x->value[$i];
+            $result->value[$i]&= $x->value[$i];
         }
 
         return $this->_normalize($result);
@@ -2686,20 +2822,20 @@ class Math_BigInteger {
     /**
      * Logical Or
      *
-     * @param Math_BigInteger $x
+     * @param \phpseclib\Math\BigInteger $x
      * @access public
      * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
-     * @return Math_BigInteger
+     * @return \phpseclib\Math\BigInteger
      */
     function bitwise_or($x)
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
-                $temp = new Math_BigInteger();
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
+                $temp = new static();
                 $temp->value = gmp_or($this->value, $x->value);
 
                 return $this->_normalize($temp);
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 $left = $this->toBytes();
                 $right = $x->toBytes();
 
@@ -2708,16 +2844,16 @@ class Math_BigInteger {
                 $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
                 $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
 
-                return $this->_normalize(new Math_BigInteger($left | $right, 256));
+                return $this->_normalize(new static($left | $right, 256));
         }
 
         $length = max(count($this->value), count($x->value));
         $result = $this->copy();
-        $result->value = array_pad($result->value, 0, $length);
-        $x->value = array_pad($x->value, 0, $length);
+        $result->value = array_pad($result->value, $length, 0);
+        $x->value = array_pad($x->value, $length, 0);
 
         for ($i = 0; $i < $length; ++$i) {
-            $result->value[$i] = $this->value[$i] | $x->value[$i];
+            $result->value[$i]|= $x->value[$i];
         }
 
         return $this->_normalize($result);
@@ -2726,20 +2862,19 @@ class Math_BigInteger {
     /**
      * Logical Exclusive-Or
      *
-     * @param Math_BigInteger $x
+     * @param \phpseclib\Math\BigInteger $x
      * @access public
      * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
-     * @return Math_BigInteger
+     * @return \phpseclib\Math\BigInteger
      */
     function bitwise_xor($x)
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
-                $temp = new Math_BigInteger();
-                $temp->value = gmp_xor($this->value, $x->value);
-
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
+                $temp = new static();
+                $temp->value = gmp_xor(gmp_abs($this->value), gmp_abs($x->value));
                 return $this->_normalize($temp);
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 $left = $this->toBytes();
                 $right = $x->toBytes();
 
@@ -2748,16 +2883,17 @@ class Math_BigInteger {
                 $left = str_pad($left, $length, chr(0), STR_PAD_LEFT);
                 $right = str_pad($right, $length, chr(0), STR_PAD_LEFT);
 
-                return $this->_normalize(new Math_BigInteger($left ^ $right, 256));
+                return $this->_normalize(new static($left ^ $right, 256));
         }
 
         $length = max(count($this->value), count($x->value));
         $result = $this->copy();
-        $result->value = array_pad($result->value, 0, $length);
-        $x->value = array_pad($x->value, 0, $length);
+        $result->is_negative = false;
+        $result->value = array_pad($result->value, $length, 0);
+        $x->value = array_pad($x->value, $length, 0);
 
         for ($i = 0; $i < $length; ++$i) {
-            $result->value[$i] = $this->value[$i] ^ $x->value[$i];
+            $result->value[$i]^= $x->value[$i];
         }
 
         return $this->_normalize($result);
@@ -2768,13 +2904,16 @@ class Math_BigInteger {
      *
      * @access public
      * @internal Implemented per a request by Lluis Pamies i Juarez <lluis _a_ pamies.cat>
-     * @return Math_BigInteger
+     * @return \phpseclib\Math\BigInteger
      */
     function bitwise_not()
     {
         // calculuate "not" without regard to $this->precision
         // (will always result in a smaller number.  ie. ~1 isn't 1111 1110 - it's 0)
         $temp = $this->toBytes();
+        if ($temp == '') {
+            return $this->_normalize(new static());
+        }
         $pre_msb = decbin(ord($temp[0]));
         $temp = ~$temp;
         $msb = decbin(ord($temp[0]));
@@ -2787,16 +2926,16 @@ class Math_BigInteger {
         $current_bits = strlen($pre_msb) + 8 * strlen($temp) - 8;
         $new_bits = $this->precision - $current_bits;
         if ($new_bits <= 0) {
-            return $this->_normalize(new Math_BigInteger($temp, 256));
+            return $this->_normalize(new static($temp, 256));
         }
 
         // generate as many leading 1's as we need to.
         $leading_ones = chr((1 << ($new_bits & 0x7)) - 1) . str_repeat(chr(0xFF), $new_bits >> 3);
         $this->_base256_lshift($leading_ones, $current_bits);
 
-        $temp = str_pad($temp, ceil($this->bits / 8), chr(0), STR_PAD_LEFT);
+        $temp = str_pad($temp, strlen($leading_ones), chr(0), STR_PAD_LEFT);
 
-        return $this->_normalize(new Math_BigInteger($leading_ones | $temp, 256));
+        return $this->_normalize(new static($leading_ones | $temp, 256));
     }
 
     /**
@@ -2804,17 +2943,17 @@ class Math_BigInteger {
      *
      * Shifts BigInteger's by $shift bits, effectively dividing by 2**$shift.
      *
-     * @param Integer $shift
-     * @return Math_BigInteger
+     * @param int $shift
+     * @return \phpseclib\Math\BigInteger
      * @access public
      * @internal The only version that yields any speed increases is the internal version.
      */
     function bitwise_rightShift($shift)
     {
-        $temp = new Math_BigInteger();
+        $temp = new static();
 
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
                 static $two;
 
                 if (!isset($two)) {
@@ -2824,7 +2963,7 @@ class Math_BigInteger {
                 $temp->value = gmp_div_q($this->value, gmp_pow($two, $shift));
 
                 break;
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 $temp->value = bcdiv($this->value, bcpow('2', $shift, 0), 0);
 
                 break;
@@ -2842,17 +2981,17 @@ class Math_BigInteger {
      *
      * Shifts BigInteger's by $shift bits, effectively multiplying by 2**$shift.
      *
-     * @param Integer $shift
-     * @return Math_BigInteger
+     * @param int $shift
+     * @return \phpseclib\Math\BigInteger
      * @access public
      * @internal The only version that yields any speed increases is the internal version.
      */
     function bitwise_leftShift($shift)
     {
-        $temp = new Math_BigInteger();
+        $temp = new static();
 
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
                 static $two;
 
                 if (!isset($two)) {
@@ -2862,7 +3001,7 @@ class Math_BigInteger {
                 $temp->value = gmp_mul($this->value, gmp_pow($two, $shift));
 
                 break;
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 $temp->value = bcmul($this->value, bcpow('2', $shift, 0), 0);
 
                 break;
@@ -2880,8 +3019,8 @@ class Math_BigInteger {
      *
      * Instead of the top x bits being dropped they're appended to the shifted bit string.
      *
-     * @param Integer $shift
-     * @return Math_BigInteger
+     * @param int $shift
+     * @return \phpseclib\Math\BigInteger
      * @access public
      */
     function bitwise_leftRotate($shift)
@@ -2890,15 +3029,16 @@ class Math_BigInteger {
 
         if ($this->precision > 0) {
             $precision = $this->precision;
-            if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) {
-                $mask = $this->bitmask->subtract(new Math_BigInteger(1));
+            if (MATH_BIGINTEGER_MODE == self::MODE_BCMATH) {
+                $mask = $this->bitmask->subtract(new static(1));
                 $mask = $mask->toBytes();
             } else {
                 $mask = $this->bitmask->toBytes();
             }
         } else {
             $temp = ord($bits[0]);
-            for ($i = 0; $temp >> $i; ++$i);
+            for ($i = 0; $temp >> $i; ++$i) {
+            }
             $precision = 8 * strlen($bits) - 8 + $i;
             $mask = chr((1 << ($precision & 0x7)) - 1) . str_repeat(chr(0xFF), $precision >> 3);
         }
@@ -2913,9 +3053,9 @@ class Math_BigInteger {
         }
 
         $left = $this->bitwise_leftShift($shift);
-        $left = $left->bitwise_and(new Math_BigInteger($mask, 256));
+        $left = $left->bitwise_and(new static($mask, 256));
         $right = $this->bitwise_rightShift($precision - $shift);
-        $result = MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_BCMATH ? $left->bitwise_or($right) : $left->add($right);
+        $result = MATH_BIGINTEGER_MODE != self::MODE_BCMATH ? $left->bitwise_or($right) : $left->add($right);
         return $this->_normalize($result);
     }
 
@@ -2924,8 +3064,8 @@ class Math_BigInteger {
      *
      * Instead of the bottom x bits being dropped they're prepended to the shifted bit string.
      *
-     * @param Integer $shift
-     * @return Math_BigInteger
+     * @param int $shift
+     * @return \phpseclib\Math\BigInteger
      * @access public
      */
     function bitwise_rightRotate($shift)
@@ -2934,79 +3074,115 @@ class Math_BigInteger {
     }
 
     /**
-     * Set random number generator function
-     *
-     * $generator should be the name of a random generating function whose first parameter is the minimum
-     * value and whose second parameter is the maximum value.  If this function needs to be seeded, it should
-     * be seeded prior to calling Math_BigInteger::random() or Math_BigInteger::randomPrime()
+     * Generates a random BigInteger
      *
-     * If the random generating function is not explicitly set, it'll be assumed to be mt_rand().
+     * Byte length is equal to $length. Uses \phpseclib\Crypt\Random if it's loaded and mt_rand if it's not.
      *
-     * @see random()
-     * @see randomPrime()
-     * @param optional String $generator
-     * @access public
+     * @param int $length
+     * @return \phpseclib\Math\BigInteger
+     * @access private
      */
-    function setRandomGenerator($generator)
+    function _random_number_helper($size)
     {
-        $this->generator = $generator;
+        if (class_exists('\phpseclib\Crypt\Random')) {
+            $random = Random::string($size);
+        } else {
+            $random = '';
+
+            if ($size & 1) {
+                $random.= chr(mt_rand(0, 255));
+            }
+
+            $blocks = $size >> 1;
+            for ($i = 0; $i < $blocks; ++$i) {
+                // mt_rand(-2147483648, 0x7FFFFFFF) always produces -2147483648 on some systems
+                $random.= pack('n', mt_rand(0, 0xFFFF));
+            }
+        }
+
+        return new static($random, 256);
     }
 
     /**
      * Generate a random number
      *
-     * @param optional Integer $min
-     * @param optional Integer $max
-     * @return Math_BigInteger
+     * Returns a random number between $min and $max where $min and $max
+     * can be defined using one of the two methods:
+     *
+     * $min->random($max)
+     * $max->random($min)
+     *
+     * @param \phpseclib\Math\BigInteger $arg1
+     * @param \phpseclib\Math\BigInteger $arg2
+     * @return \phpseclib\Math\BigInteger
      * @access public
+     * @internal The API for creating random numbers used to be $a->random($min, $max), where $a was a BigInteger object.
+     *           That method is still supported for BC purposes.
      */
-    function random($min = false, $max = false)
+    function random($arg1, $arg2 = false)
     {
-        if ($min === false) {
-            $min = new Math_BigInteger(0);
+        if ($arg1 === false) {
+            return false;
         }
 
-        if ($max === false) {
-            $max = new Math_BigInteger(0x7FFFFFFF);
+        if ($arg2 === false) {
+            $max = $arg1;
+            $min = $this;
+        } else {
+            $min = $arg1;
+            $max = $arg2;
         }
 
         $compare = $max->compare($min);
 
         if (!$compare) {
             return $this->_normalize($min);
-        } else if ($compare < 0) {
+        } elseif ($compare < 0) {
             // if $min is bigger then $max, swap $min and $max
             $temp = $max;
             $max = $min;
             $min = $temp;
         }
 
-        $generator = $this->generator;
+        static $one;
+        if (!isset($one)) {
+            $one = new static(1);
+        }
 
-        $max = $max->subtract($min);
-        $max = ltrim($max->toBytes(), chr(0));
-        $size = strlen($max) - 1;
-        $random = '';
+        $max = $max->subtract($min->subtract($one));
+        $size = strlen(ltrim($max->toBytes(), chr(0)));
 
-        $bytes = $size & 1;
-        for ($i = 0; $i < $bytes; ++$i) {
-            $random.= chr($generator(0, 255));
-        }
+        /*
+            doing $random % $max doesn't work because some numbers will be more likely to occur than others.
+            eg. if $max is 140 and $random's max is 255 then that'd mean both $random = 5 and $random = 145
+            would produce 5 whereas the only value of random that could produce 139 would be 139. ie.
+            not all numbers would be equally likely. some would be more likely than others.
 
-        $blocks = $size >> 1;
-        for ($i = 0; $i < $blocks; ++$i) {
-            // mt_rand(-2147483648, 0x7FFFFFFF) always produces -2147483648 on some systems
-            $random.= pack('n', $generator(0, 0xFFFF));
-        }
+            creating a whole new random number until you find one that is within the range doesn't work
+            because, for sufficiently small ranges, the likelihood that you'd get a number within that range
+            would be pretty small. eg. with $random's max being 255 and if your $max being 1 the probability
+            would be pretty high that $random would be greater than $max.
 
-        $temp = new Math_BigInteger($random, 256);
-        if ($temp->compare(new Math_BigInteger(substr($max, 1), 256)) > 0) {
-            $random = chr($generator(0, ord($max[0]) - 1)) . $random;
-        } else {
-            $random = chr($generator(0, ord($max[0])    )) . $random;
-        }
+            phpseclib works around this using the technique described here:
+
+            http://crypto.stackexchange.com/questions/5708/creating-a-small-number-from-a-cryptographically-secure-random-string
+        */
+        $random_max = new static(chr(1) . str_repeat("\0", $size), 256);
+        $random = $this->_random_number_helper($size);
+
+        list($max_multiple) = $random_max->divide($max);
+        $max_multiple = $max_multiple->multiply($max);
 
-        $random = new Math_BigInteger($random, 256);
+        while ($random->compare($max_multiple) >= 0) {
+            $random = $random->subtract($max_multiple);
+            $random_max = $random_max->subtract($max_multiple);
+            $random = $random->bitwise_leftShift(8);
+            $random = $random->add($this->_random_number_helper(1));
+            $random_max = $random_max->bitwise_leftShift(8);
+            list($max_multiple) = $random_max->divide($max);
+            $max_multiple = $max_multiple->multiply($max);
+        }
+        list(, $random) = $random->divide($max);
 
         return $this->_normalize($random->add($min));
     }
@@ -3014,68 +3190,67 @@ class Math_BigInteger {
     /**
      * Generate a random prime number.
      *
-     * If there's not a prime within the given range, false will be returned.  If more than $timeout seconds have elapsed,
-     * give up and return false.
+     * If there's not a prime within the given range, false will be returned.
+     * If more than $timeout seconds have elapsed, give up and return false.
      *
-     * @param optional Integer $min
-     * @param optional Integer $max
-     * @param optional Integer $timeout
-     * @return Math_BigInteger
+     * @param \phpseclib\Math\BigInteger $arg1
+     * @param \phpseclib\Math\BigInteger $arg2
+     * @param int $timeout
+     * @return Math_BigInteger|false
      * @access public
      * @internal See {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=15 HAC 4.44}.
      */
-    function randomPrime($min = false, $max = false, $timeout = false)
+    function randomPrime($arg1, $arg2 = false, $timeout = false)
     {
+        if ($arg1 === false) {
+            return false;
+        }
+
+        if ($arg2 === false) {
+            $max = $arg1;
+            $min = $this;
+        } else {
+            $min = $arg1;
+            $max = $arg2;
+        }
+
         $compare = $max->compare($min);
 
         if (!$compare) {
-            return $min;
-        } else if ($compare < 0) {
+            return $min->isPrime() ? $min : false;
+        } elseif ($compare < 0) {
             // if $min is bigger then $max, swap $min and $max
             $temp = $max;
             $max = $min;
             $min = $temp;
         }
 
-        // gmp_nextprime() requires PHP 5 >= 5.2.0 per <http://php.net/gmp-nextprime>.
-        if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_GMP && function_exists('gmp_nextprime') ) {
-            // we don't rely on Math_BigInteger::random()'s min / max when gmp_nextprime() is being used since this function
-            // does its own checks on $max / $min when gmp_nextprime() is used.  When gmp_nextprime() is not used, however,
-            // the same $max / $min checks are not performed.
-            if ($min === false) {
-                $min = new Math_BigInteger(0);
-            }
+        static $one, $two;
+        if (!isset($one)) {
+            $one = new static(1);
+            $two = new static(2);
+        }
 
-            if ($max === false) {
-                $max = new Math_BigInteger(0x7FFFFFFF);
-            }
+        $start = time();
 
-            $x = $this->random($min, $max);
+        $x = $this->random($min, $max);
 
-            $x->value = gmp_nextprime($x->value);
+        // gmp_nextprime() requires PHP 5 >= 5.2.0 per <http://php.net/gmp-nextprime>.
+        if (MATH_BIGINTEGER_MODE == self::MODE_GMP && extension_loaded('gmp')) {
+            $p = new static();
+            $p->value = gmp_nextprime($x->value);
 
-            if ($x->compare($max) <= 0) {
-                return $x;
+            if ($p->compare($max) <= 0) {
+                return $p;
             }
 
-            $x->value = gmp_nextprime($min->value);
-
-            if ($x->compare($max) <= 0) {
-                return $x;
+            if (!$min->equals($x)) {
+                $x = $x->subtract($one);
             }
 
-            return false;
+            return $x->randomPrime($min, $x);
         }
 
-        static $one, $two;
-        if (!isset($one)) {
-            $one = new Math_BigInteger(1);
-            $two = new Math_BigInteger(2);
-        }
-
-        $start = time();
-
-        $x = $this->random($min, $max);
         if ($x->equals($two)) {
             return $x;
         }
@@ -3122,16 +3297,16 @@ class Math_BigInteger {
      *
      * If the current number is odd it'll be unchanged.  If it's even, one will be added to it.
      *
-     * @see randomPrime()
+     * @see self::randomPrime()
      * @access private
      */
     function _make_odd()
     {
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
                 gmp_setbit($this->value, 0);
                 break;
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 if ($this->value[strlen($this->value) - 1] % 2 == 0) {
                     $this->value = bcadd($this->value, '1');
                 }
@@ -3145,14 +3320,14 @@ class Math_BigInteger {
      * Checks a numer to see if it's prime
      *
      * Assuming the $t parameter is not set, this function has an error rate of 2**-80.  The main motivation for the
-     * $t parameter is distributability.  Math_BigInteger::randomPrime() can be distributed accross multiple pageloads
+     * $t parameter is distributability.  BigInteger::randomPrime() can be distributed across multiple pageloads
      * on a website instead of just one.
      *
-     * @param optional Integer $t
-     * @return Boolean
+     * @param \phpseclib\Math\BigInteger $t
+     * @return bool
      * @access public
      * @internal Uses the
-     *     {@link http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test Miller-Rabin primality test}.  See 
+     *     {@link http://en.wikipedia.org/wiki/Miller%E2%80%93Rabin_primality_test Miller-Rabin primality test}.  See
      *     {@link http://www.cacr.math.uwaterloo.ca/hac/about/chap4.pdf#page=8 HAC 4.24}.
      */
     function isPrime($t = false)
@@ -3161,6 +3336,7 @@ class Math_BigInteger {
 
         if (!$t) {
             // see HAC 4.49 "Note (controlling the error probability)"
+            // @codingStandardsIgnoreStart
                  if ($length >= 163) { $t =  2; } // floor(1300 / 8)
             else if ($length >= 106) { $t =  3; } // floor( 850 / 8)
             else if ($length >= 81 ) { $t =  4; } // floor( 650 / 8)
@@ -3173,14 +3349,15 @@ class Math_BigInteger {
             else if ($length >= 25 ) { $t = 15; } // floor( 200 / 8)
             else if ($length >= 18 ) { $t = 18; } // floor( 150 / 8)
             else                     { $t = 27; }
+            // @codingStandardsIgnoreEnd
         }
 
         // ie. gmp_testbit($this, 0)
         // ie. isEven() or !isOdd()
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
                 return gmp_prob_prime($this->value, $t) != 0;
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 if ($this->value === '2') {
                     return true;
                 }
@@ -3201,28 +3378,28 @@ class Math_BigInteger {
 
         if (!isset($primes)) {
             $primes = array(
-                3,    5,    7,    11,   13,   17,   19,   23,   29,   31,   37,   41,   43,   47,   53,   59,   
-                61,   67,   71,   73,   79,   83,   89,   97,   101,  103,  107,  109,  113,  127,  131,  137,  
-                139,  149,  151,  157,  163,  167,  173,  179,  181,  191,  193,  197,  199,  211,  223,  227,  
-                229,  233,  239,  241,  251,  257,  263,  269,  271,  277,  281,  283,  293,  307,  311,  313,  
-                317,  331,  337,  347,  349,  353,  359,  367,  373,  379,  383,  389,  397,  401,  409,  419,  
-                421,  431,  433,  439,  443,  449,  457,  461,  463,  467,  479,  487,  491,  499,  503,  509,  
-                521,  523,  541,  547,  557,  563,  569,  571,  577,  587,  593,  599,  601,  607,  613,  617,  
-                619,  631,  641,  643,  647,  653,  659,  661,  673,  677,  683,  691,  701,  709,  719,  727,  
-                733,  739,  743,  751,  757,  761,  769,  773,  787,  797,  809,  811,  821,  823,  827,  829,  
-                839,  853,  857,  859,  863,  877,  881,  883,  887,  907,  911,  919,  929,  937,  941,  947,  
+                3,    5,    7,    11,   13,   17,   19,   23,   29,   31,   37,   41,   43,   47,   53,   59,
+                61,   67,   71,   73,   79,   83,   89,   97,   101,  103,  107,  109,  113,  127,  131,  137,
+                139,  149,  151,  157,  163,  167,  173,  179,  181,  191,  193,  197,  199,  211,  223,  227,
+                229,  233,  239,  241,  251,  257,  263,  269,  271,  277,  281,  283,  293,  307,  311,  313,
+                317,  331,  337,  347,  349,  353,  359,  367,  373,  379,  383,  389,  397,  401,  409,  419,
+                421,  431,  433,  439,  443,  449,  457,  461,  463,  467,  479,  487,  491,  499,  503,  509,
+                521,  523,  541,  547,  557,  563,  569,  571,  577,  587,  593,  599,  601,  607,  613,  617,
+                619,  631,  641,  643,  647,  653,  659,  661,  673,  677,  683,  691,  701,  709,  719,  727,
+                733,  739,  743,  751,  757,  761,  769,  773,  787,  797,  809,  811,  821,  823,  827,  829,
+                839,  853,  857,  859,  863,  877,  881,  883,  887,  907,  911,  919,  929,  937,  941,  947,
                 953,  967,  971,  977,  983,  991,  997
             );
 
-            if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL ) {
+            if (MATH_BIGINTEGER_MODE != self::MODE_INTERNAL) {
                 for ($i = 0; $i < count($primes); ++$i) {
-                    $primes[$i] = new Math_BigInteger($primes[$i]);
+                    $primes[$i] = new static($primes[$i]);
                 }
             }
 
-            $zero = new Math_BigInteger();
-            $one = new Math_BigInteger(1);
-            $two = new Math_BigInteger(2);
+            $zero = new static();
+            $one = new static(1);
+            $two = new static(2);
         }
 
         if ($this->equals($one)) {
@@ -3230,7 +3407,7 @@ class Math_BigInteger {
         }
 
         // see HAC 4.4.1 "Random search for probable primes"
-        if ( MATH_BIGINTEGER_MODE != MATH_BIGINTEGER_MODE_INTERNAL ) {
+        if (MATH_BIGINTEGER_MODE != self::MODE_INTERNAL) {
             foreach ($primes as $prime) {
                 list(, $r) = $this->divide($prime);
                 if ($r->equals($zero)) {
@@ -3254,7 +3431,7 @@ class Math_BigInteger {
         $r = $n_1->copy();
         $r_value = $r->value;
         // ie. $s = gmp_scan1($n, 0) and $r = gmp_div_q($n, gmp_pow(gmp_init('2'), $s));
-        if ( MATH_BIGINTEGER_MODE == MATH_BIGINTEGER_MODE_BCMATH ) {
+        if (MATH_BIGINTEGER_MODE == self::MODE_BCMATH) {
             $s = 0;
             // if $n was 1, $r would be 0 and this would be an infinite loop, hence our $this->equals($one) check earlier
             while ($r->value[strlen($r->value) - 1] % 2 == 0) {
@@ -3264,12 +3441,13 @@ class Math_BigInteger {
         } else {
             for ($i = 0, $r_length = count($r_value); $i < $r_length; ++$i) {
                 $temp = ~$r_value[$i] & 0xFFFFFF;
-                for ($j = 1; ($temp >> $j) & 1; ++$j);
+                for ($j = 1; ($temp >> $j) & 1; ++$j) {
+                }
                 if ($j != 25) {
                     break;
                 }
             }
-            $s = 26 * $i + $j - 1;
+            $s = 26 * $i + $j;
             $r->_rshift($s);
         }
 
@@ -3298,29 +3476,29 @@ class Math_BigInteger {
      *
      * Shifts BigInteger's by $shift bits.
      *
-     * @param Integer $shift
+     * @param int $shift
      * @access private
      */
     function _lshift($shift)
     {
-        if ( $shift == 0 ) {
+        if ($shift == 0) {
             return;
         }
 
-        $num_digits = (int) ($shift / 26);
-        $shift %= 26;
+        $num_digits = (int) ($shift / self::$base);
+        $shift %= self::$base;
         $shift = 1 << $shift;
 
         $carry = 0;
 
         for ($i = 0; $i < count($this->value); ++$i) {
             $temp = $this->value[$i] * $shift + $carry;
-            $carry = (int) ($temp / 0x4000000);
-            $this->value[$i] = (int) ($temp - $carry * 0x4000000);
+            $carry = self::$base === 26 ? intval($temp / 0x4000000) : ($temp >> 31);
+            $this->value[$i] = (int) ($temp - $carry * self::$baseFull);
         }
 
-        if ( $carry ) {
-            $this->value[] = $carry;
+        if ($carry) {
+            $this->value[count($this->value)] = $carry;
         }
 
         while ($num_digits--) {
@@ -3333,7 +3511,7 @@ class Math_BigInteger {
      *
      * Shifts BigInteger's by $shift bits.
      *
-     * @param Integer $shift
+     * @param int $shift
      * @access private
      */
     function _rshift($shift)
@@ -3342,12 +3520,12 @@ class Math_BigInteger {
             return;
         }
 
-        $num_digits = (int) ($shift / 26);
-        $shift %= 26;
-        $carry_shift = 26 - $shift;
+        $num_digits = (int) ($shift / self::$base);
+        $shift %= self::$base;
+        $carry_shift = self::$base - $shift;
         $carry_mask = (1 << $shift) - 1;
 
-        if ( $num_digits ) {
+        if ($num_digits) {
             $this->value = array_slice($this->value, $num_digits);
         }
 
@@ -3367,9 +3545,9 @@ class Math_BigInteger {
      *
      * Removes leading zeros and truncates (if necessary) to maintain the appropriate precision
      *
-     * @param Math_BigInteger
-     * @return Math_BigInteger
-     * @see _trim()
+     * @param \phpseclib\Math\BigInteger
+     * @return \phpseclib\Math\BigInteger
+     * @see self::_trim()
      * @access private
      */
     function _normalize($result)
@@ -3377,14 +3555,14 @@ class Math_BigInteger {
         $result->precision = $this->precision;
         $result->bitmask = $this->bitmask;
 
-        switch ( MATH_BIGINTEGER_MODE ) {
-            case MATH_BIGINTEGER_MODE_GMP:
-                if (!empty($result->bitmask->value)) {
+        switch (MATH_BIGINTEGER_MODE) {
+            case self::MODE_GMP:
+                if ($this->bitmask !== false) {
                     $result->value = gmp_and($result->value, $result->bitmask->value);
                 }
 
                 return $result;
-            case MATH_BIGINTEGER_MODE_BCMATH:
+            case self::MODE_BCMATH:
                 if (!empty($result->bitmask->value)) {
                     $result->value = bcmod($result->value, $result->bitmask->value);
                 }
@@ -3394,7 +3572,7 @@ class Math_BigInteger {
 
         $value = &$result->value;
 
-        if ( !count($value) ) {
+        if (!count($value)) {
             return $result;
         }
 
@@ -3417,13 +3595,14 @@ class Math_BigInteger {
      *
      * Removes leading zeros
      *
-     * @return Math_BigInteger
+     * @param array $value
+     * @return \phpseclib\Math\BigInteger
      * @access private
      */
     function _trim($value)
     {
         for ($i = count($value) - 1; $i >= 0; --$i) {
-            if ( $value[$i] ) {
+            if ($value[$i]) {
                 break;
             }
             unset($value[$i]);
@@ -3437,7 +3616,7 @@ class Math_BigInteger {
      *
      * @param $input Array
      * @param $multiplier mixed
-     * @return Array
+     * @return array
      * @access private
      */
     function _array_repeat($input, $multiplier)
@@ -3452,7 +3631,7 @@ class Math_BigInteger {
      *
      * @param $x String
      * @param $shift Integer
-     * @return String
+     * @return string
      * @access private
      */
     function _base256_lshift(&$x, $shift)
@@ -3481,7 +3660,7 @@ class Math_BigInteger {
      *
      * @param $x String
      * @param $shift Integer
-     * @return String
+     * @return string
      * @access private
      */
     function _base256_rshift(&$x, $shift)
@@ -3521,8 +3700,8 @@ class Math_BigInteger {
     /**
      * Converts 32-bit integers to bytes.
      *
-     * @param Integer $x
-     * @return String
+     * @param int $x
+     * @return string
      * @access private
      */
     function _int2bytes($x)
@@ -3533,8 +3712,8 @@ class Math_BigInteger {
     /**
      * Converts bytes to 32-bit integers
      *
-     * @param String $x
-     * @return Integer
+     * @param string $x
+     * @return int
      * @access private
      */
     function _bytes2int($x)
@@ -3542,4 +3721,47 @@ class Math_BigInteger {
         $temp = unpack('Nint', str_pad($x, 4, chr(0), STR_PAD_LEFT));
         return $temp['int'];
     }
+
+    /**
+     * DER-encode an integer
+     *
+     * The ability to DER-encode integers is needed to create RSA public keys for use with OpenSSL
+     *
+     * @see self::modPow()
+     * @access private
+     * @param int $length
+     * @return string
+     */
+    function _encodeASN1Length($length)
+    {
+        if ($length <= 0x7F) {
+            return chr($length);
+        }
+
+        $temp = ltrim(pack('N', $length), chr(0));
+        return pack('Ca*', 0x80 | strlen($temp), $temp);
+    }
+
+    /**
+     * Single digit division
+     *
+     * Even if int64 is being used the division operator will return a float64 value
+     * if the dividend is not evenly divisible by the divisor. Since a float64 doesn't
+     * have the precision of int64 this is a problem so, when int64 is being used,
+     * we'll guarantee that the dividend is divisible by first subtracting the remainder.
+     *
+     * @access private
+     * @param int $x
+     * @param int $y
+     * @return int
+     */
+    function _safe_divide($x, $y)
+    {
+        if (self::$base === 26) {
+            return (int) ($x / $y);
+        }
+
+        // self::$base === 31
+        return ($x - ($x % $y)) / $y;
+    }
 }
diff --git a/lib/phpseclib/Net/SCP.php b/lib/phpseclib/Net/SCP.php
new file mode 100644
index 0000000..f95bce6
--- /dev/null
+++ b/lib/phpseclib/Net/SCP.php
@@ -0,0 +1,337 @@
+<?php
+
+/**
+ * Pure-PHP implementation of SCP.
+ *
+ * PHP version 5
+ *
+ * The API for this library is modeled after the API from PHP's {@link http://php.net/book.ftp FTP extension}.
+ *
+ * Here's a short example of how to use this library:
+ * <code>
+ * <?php
+ *    include 'vendor/autoload.php';
+ *
+ *    $ssh = new \phpseclib\Net\SSH2('www.domain.tld');
+ *    if (!$ssh->login('username', 'password')) {
+ *        exit('bad login');
+ *    }
+ *    $scp = new \phpseclib\Net\SCP($ssh);
+ *
+ *    $scp->put('abcd', str_repeat('x', 1024*1024));
+ * ?>
+ * </code>
+ *
+ * @category  Net
+ * @package   SCP
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2010 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
+ */
+
+namespace phpseclib\Net;
+
+/**
+ * Pure-PHP implementations of SCP.
+ *
+ * @package SCP
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @access  public
+ */
+class SCP
+{
+    /**#@+
+     * @access public
+     * @see \phpseclib\Net\SCP::put()
+     */
+    /**
+     * Reads data from a local file.
+     */
+    const SOURCE_LOCAL_FILE = 1;
+    /**
+     * Reads data from a string.
+     */
+    const SOURCE_STRING = 2;
+    /**#@-*/
+
+    /**#@+
+     * @access private
+     * @see \phpseclib\Net\SCP::_send()
+     * @see \phpseclib\Net\SCP::_receive()
+    */
+    /**
+     * SSH1 is being used.
+     */
+    const MODE_SSH1 = 1;
+    /**
+     * SSH2 is being used.
+     */
+    const MODE_SSH2 =  2;
+    /**#@-*/
+
+    /**
+     * SSH Object
+     *
+     * @var object
+     * @access private
+     */
+    var $ssh;
+
+    /**
+     * Packet Size
+     *
+     * @var int
+     * @access private
+     */
+    var $packet_size;
+
+    /**
+     * Mode
+     *
+     * @var int
+     * @access private
+     */
+    var $mode;
+
+    /**
+     * Default Constructor.
+     *
+     * Connects to an SSH server
+     *
+     * @param \phpseclib\Net\SSH1|\phpseclib\Net\SSH2 $ssh
+     * @return \phpseclib\Net\SCP
+     * @access public
+     */
+    function __construct($ssh)
+    {
+        if ($ssh instanceof SSH2) {
+            $this->mode = self::MODE_SSH2;
+        } elseif ($ssh instanceof SSH1) {
+            $this->packet_size = 50000;
+            $this->mode = self::MODE_SSH1;
+        } else {
+            return;
+        }
+
+        $this->ssh = $ssh;
+    }
+
+    /**
+     * Uploads a file to the SCP server.
+     *
+     * By default, \phpseclib\Net\SCP::put() does not read from the local filesystem.  $data is dumped directly into $remote_file.
+     * So, for example, if you set $data to 'filename.ext' and then do \phpseclib\Net\SCP::get(), you will get a file, twelve bytes
+     * long, containing 'filename.ext' as its contents.
+     *
+     * Setting $mode to self::SOURCE_LOCAL_FILE will change the above behavior.  With self::SOURCE_LOCAL_FILE, $remote_file will
+     * contain as many bytes as filename.ext does on your local filesystem.  If your filename.ext is 1MB then that is how
+     * large $remote_file will be, as well.
+     *
+     * Currently, only binary mode is supported.  As such, if the line endings need to be adjusted, you will need to take
+     * care of that, yourself.
+     *
+     * @param string $remote_file
+     * @param string $data
+     * @param int $mode
+     * @param callable $callback
+     * @return bool
+     * @access public
+     */
+    function put($remote_file, $data, $mode = self::SOURCE_STRING, $callback = null)
+    {
+        if (!isset($this->ssh)) {
+            return false;
+        }
+
+        if (!$this->ssh->exec('scp -t ' . escapeshellarg($remote_file), false)) { // -t = to
+            return false;
+        }
+
+        $temp = $this->_receive();
+        if ($temp !== chr(0)) {
+            return false;
+        }
+
+        if ($this->mode == self::MODE_SSH2) {
+            $this->packet_size = $this->ssh->packet_size_client_to_server[SSH2::CHANNEL_EXEC] - 4;
+        }
+
+        $remote_file = basename($remote_file);
+
+        if ($mode == self::SOURCE_STRING) {
+            $size = strlen($data);
+        } else {
+            if (!is_file($data)) {
+                user_error("$data is not a valid file", E_USER_NOTICE);
+                return false;
+            }
+
+            $fp = @fopen($data, 'rb');
+            if (!$fp) {
+                return false;
+            }
+            $size = filesize($data);
+        }
+
+        $this->_send('C0644 ' . $size . ' ' . $remote_file . "\n");
+
+        $temp = $this->_receive();
+        if ($temp !== chr(0)) {
+            return false;
+        }
+
+        $sent = 0;
+        while ($sent < $size) {
+            $temp = $mode & self::SOURCE_STRING ? substr($data, $sent, $this->packet_size) : fread($fp, $this->packet_size);
+            $this->_send($temp);
+            $sent+= strlen($temp);
+
+            if (is_callable($callback)) {
+                call_user_func($callback, $sent);
+            }
+        }
+        $this->_close();
+
+        if ($mode != self::SOURCE_STRING) {
+            fclose($fp);
+        }
+
+        return true;
+    }
+
+    /**
+     * Downloads a file from the SCP server.
+     *
+     * Returns a string containing the contents of $remote_file if $local_file is left undefined or a boolean false if
+     * the operation was unsuccessful.  If $local_file is defined, returns true or false depending on the success of the
+     * operation
+     *
+     * @param string $remote_file
+     * @param string $local_file
+     * @return mixed
+     * @access public
+     */
+    function get($remote_file, $local_file = false)
+    {
+        if (!isset($this->ssh)) {
+            return false;
+        }
+
+        if (!$this->ssh->exec('scp -f ' . escapeshellarg($remote_file), false)) { // -f = from
+            return false;
+        }
+
+        $this->_send("\0");
+
+        if (!preg_match('#(?<perms>[^ ]+) (?<size>\d+) (?<name>.+)#', rtrim($this->_receive()), $info)) {
+            return false;
+        }
+
+        $this->_send("\0");
+
+        $size = 0;
+
+        if ($local_file !== false) {
+            $fp = @fopen($local_file, 'wb');
+            if (!$fp) {
+                return false;
+            }
+        }
+
+        $content = '';
+        while ($size < $info['size']) {
+            $data = $this->_receive();
+            // SCP usually seems to split stuff out into 16k chunks
+            $size+= strlen($data);
+
+            if ($local_file === false) {
+                $content.= $data;
+            } else {
+                fputs($fp, $data);
+            }
+        }
+
+        $this->_close();
+
+        if ($local_file !== false) {
+            fclose($fp);
+            return true;
+        }
+
+        return $content;
+    }
+
+    /**
+     * Sends a packet to an SSH server
+     *
+     * @param string $data
+     * @access private
+     */
+    function _send($data)
+    {
+        switch ($this->mode) {
+            case self::MODE_SSH2:
+                $this->ssh->_send_channel_packet(SSH2::CHANNEL_EXEC, $data);
+                break;
+            case self::MODE_SSH1:
+                $data = pack('CNa*', NET_SSH1_CMSG_STDIN_DATA, strlen($data), $data);
+                $this->ssh->_send_binary_packet($data);
+        }
+    }
+
+    /**
+     * Receives a packet from an SSH server
+     *
+     * @return string
+     * @access private
+     */
+    function _receive()
+    {
+        switch ($this->mode) {
+            case self::MODE_SSH2:
+                return $this->ssh->_get_channel_packet(SSH2::CHANNEL_EXEC, true);
+            case self::MODE_SSH1:
+                if (!$this->ssh->bitmap) {
+                    return false;
+                }
+                while (true) {
+                    $response = $this->ssh->_get_binary_packet();
+                    switch ($response[SSH1::RESPONSE_TYPE]) {
+                        case NET_SSH1_SMSG_STDOUT_DATA:
+                            if (strlen($response[SSH1::RESPONSE_DATA]) < 4) {
+                                return false;
+                            }
+                            extract(unpack('Nlength', $response[SSH1::RESPONSE_DATA]));
+                            return $this->ssh->_string_shift($response[SSH1::RESPONSE_DATA], $length);
+                        case NET_SSH1_SMSG_STDERR_DATA:
+                            break;
+                        case NET_SSH1_SMSG_EXITSTATUS:
+                            $this->ssh->_send_binary_packet(chr(NET_SSH1_CMSG_EXIT_CONFIRMATION));
+                            fclose($this->ssh->fsock);
+                            $this->ssh->bitmap = 0;
+                            return false;
+                        default:
+                            user_error('Unknown packet received', E_USER_NOTICE);
+                            return false;
+                    }
+                }
+        }
+    }
+
+    /**
+     * Closes the connection to an SSH server
+     *
+     * @access private
+     */
+    function _close()
+    {
+        switch ($this->mode) {
+            case self::MODE_SSH2:
+                $this->ssh->_close_channel(SSH2::CHANNEL_EXEC, true);
+                break;
+            case self::MODE_SSH1:
+                $this->ssh->disconnect();
+        }
+    }
+}
diff --git a/lib/phpseclib/Net/SFTP.php b/lib/phpseclib/Net/SFTP.php
index ad75056..8825f30 100644
--- a/lib/phpseclib/Net/SFTP.php
+++ b/lib/phpseclib/Net/SFTP.php
@@ -1,12 +1,11 @@
 <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
  * Pure-PHP implementation of SFTP.
  *
- * PHP versions 4 and 5
+ * PHP version 5
  *
- * Currently only supports SFTPv3, which, according to wikipedia.org, "is the most widely used version,
+ * Currently only supports SFTPv2 and v3, which, according to wikipedia.org, "is the most widely used version,
  * implemented by the popular OpenSSH SFTP server".  If you want SFTPv4/5/6 support, provide me with access
  * to an SFTPv4/5/6 server.
  *
@@ -15,9 +14,9 @@
  * Here's a short example of how to use this library:
  * <code>
  * <?php
- *    include('Net/SFTP.php');
+ *    include 'vendor/autoload.php';
  *
- *    $sftp = new Net_SFTP('www.domain.tld');
+ *    $sftp = new \phpseclib\Net\SFTP('www.domain.tld');
  *    if (!$sftp->login('username', 'password')) {
  *        exit('Login Failed');
  *    }
@@ -28,88 +27,69 @@
  * ?>
  * </code>
  *
- * LICENSE: This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- *
- * @category   Net
- * @package    Net_SFTP
- * @author     Jim Wigginton <terrafrost@php.net>
- * @copyright  MMIX Jim Wigginton
- * @license    http://www.gnu.org/licenses/lgpl.txt
- * @version    $Id: SFTP.php,v 1.21 2010/04/09 02:31:34 terrafrost Exp $
- * @link       http://phpseclib.sourceforge.net
- */
-
-/**
- * Include Net_SSH2
- */
-require_once('phpseclib/Net/SSH2.php');
-
-/**#@+
- * @access public
- * @see Net_SFTP::getLog()
- */
-/**
- * Returns the message numbers
- */
-define('NET_SFTP_LOG_SIMPLE',  NET_SSH2_LOG_SIMPLE);
-/**
- * Returns the message content
- */
-define('NET_SFTP_LOG_COMPLEX', NET_SSH2_LOG_COMPLEX);
-/**#@-*/
-
-/**
- * SFTP channel constant
- *
- * Net_SSH2::exec() uses 0 and Net_SSH2::interactiveRead() / Net_SSH2::interactiveWrite() use 1.
- *
- * @see Net_SSH2::_send_channel_packet()
- * @see Net_SSH2::_get_channel_packet()
- * @access private
+ * @category  Net
+ * @package   SFTP
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2009 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
  */
-define('NET_SFTP_CHANNEL', 2);
 
-/**#@+
- * @access public
- * @see Net_SFTP::put()
- */
-/**
- * Reads data from a local file.
- */
-define('NET_SFTP_LOCAL_FILE', 1);
-/**
- * Reads data from a string.
- */
-define('NET_SFTP_STRING',  2);
-/**#@-*/
+namespace phpseclib\Net;
 
 /**
  * Pure-PHP implementations of SFTP.
  *
+ * @package SFTP
  * @author  Jim Wigginton <terrafrost@php.net>
- * @version 0.1.0
  * @access  public
- * @package Net_SFTP
  */
-class Net_SFTP extends Net_SSH2 {
+class SFTP extends SSH2
+{
+    /**
+     * SFTP channel constant
+     *
+     * \phpseclib\Net\SSH2::exec() uses 0 and \phpseclib\Net\SSH2::read() / \phpseclib\Net\SSH2::write() use 1.
+     *
+     * @see \phpseclib\Net\SSH2::_send_channel_packet()
+     * @see \phpseclib\Net\SSH2::_get_channel_packet()
+     * @access private
+     */
+    const CHANNEL = 0x100;
+
+    /**#@+
+     * @access public
+     * @see \phpseclib\Net\SFTP::put()
+    */
+    /**
+     * Reads data from a local file.
+     */
+    const SOURCE_LOCAL_FILE = 1;
+    /**
+     * Reads data from a string.
+     */
+    // this value isn't really used anymore but i'm keeping it reserved for historical reasons
+    const SOURCE_STRING = 2;
+    /**
+     * Reads data from callback:
+     * function callback($length) returns string to proceed, null for EOF
+     */
+    const SOURCE_CALLBACK = 16;
+    /**
+     * Resumes an upload
+     */
+    const RESUME = 4;
+    /**
+     * Append a local file to an already existing remote file
+     */
+    const RESUME_START = 8;
+    /**#@-*/
+
     /**
      * Packet Types
      *
-     * @see Net_SFTP::Net_SFTP()
-     * @var Array
+     * @see self::__construct()
+     * @var array
      * @access private
      */
     var $packet_types = array();
@@ -117,8 +97,8 @@ class Net_SFTP extends Net_SSH2 {
     /**
      * Status Codes
      *
-     * @see Net_SFTP::Net_SFTP()
-     * @var Array
+     * @see self::__construct()
+     * @var array
      * @access private
      */
     var $status_codes = array();
@@ -129,8 +109,8 @@ class Net_SFTP extends Net_SSH2 {
      * The request ID exists in the off chance that a packet is sent out-of-order.  Of course, this library doesn't support
      * concurrent actions, so it's somewhat academic, here.
      *
-     * @var Integer
-     * @see Net_SFTP::_send_sftp_packet()
+     * @var int
+     * @see self::_send_sftp_packet()
      * @access private
      */
     var $request_id = false;
@@ -141,8 +121,8 @@ class Net_SFTP extends Net_SSH2 {
      * The request ID exists in the off chance that a packet is sent out-of-order.  Of course, this library doesn't support
      * concurrent actions, so it's somewhat academic, here.
      *
-     * @var Integer
-     * @see Net_SFTP::_get_sftp_packet()
+     * @var int
+     * @see self::_get_sftp_packet()
      * @access private
      */
     var $packet_type = -1;
@@ -150,8 +130,8 @@ class Net_SFTP extends Net_SSH2 {
     /**
      * Packet Buffer
      *
-     * @var String
-     * @see Net_SFTP::_get_sftp_packet()
+     * @var string
+     * @see self::_get_sftp_packet()
      * @access private
      */
     var $packet_buffer = '';
@@ -159,8 +139,8 @@ class Net_SFTP extends Net_SSH2 {
     /**
      * Extensions supported by the server
      *
-     * @var Array
-     * @see Net_SFTP::_initChannel()
+     * @var array
+     * @see self::_initChannel()
      * @access private
      */
     var $extensions = array();
@@ -168,8 +148,8 @@ class Net_SFTP extends Net_SSH2 {
     /**
      * Server SFTP version
      *
-     * @var Integer
-     * @see Net_SFTP::_initChannel()
+     * @var int
+     * @see self::_initChannel()
      * @access private
      */
     var $version;
@@ -177,9 +157,9 @@ class Net_SFTP extends Net_SSH2 {
     /**
      * Current working directory
      *
-     * @var String
-     * @see Net_SFTP::_realpath()
-     * @see Net_SFTP::chdir()
+     * @var string
+     * @see self::realpath()
+     * @see self::chdir()
      * @access private
      */
     var $pwd = false;
@@ -187,8 +167,8 @@ class Net_SFTP extends Net_SSH2 {
     /**
      * Packet Type Log
      *
-     * @see Net_SFTP::getLog()
-     * @var Array
+     * @see self::getLog()
+     * @var array
      * @access private
      */
     var $packet_type_log = array();
@@ -196,8 +176,8 @@ class Net_SFTP extends Net_SSH2 {
     /**
      * Packet Log
      *
-     * @see Net_SFTP::getLog()
-     * @var Array
+     * @see self::getLog()
+     * @var array
      * @access private
      */
     var $packet_log = array();
@@ -205,27 +185,88 @@ class Net_SFTP extends Net_SSH2 {
     /**
      * Error information
      *
-     * @see Net_SFTP::getSFTPErrors()
-     * @see Net_SFTP::getLastSFTPError()
-     * @var String
+     * @see self::getSFTPErrors()
+     * @see self::getLastSFTPError()
+     * @var array
+     * @access private
+     */
+    var $sftp_errors = array();
+
+    /**
+     * Stat Cache
+     *
+     * Rather than always having to open a directory and close it immediately there after to see if a file is a directory
+     * we'll cache the results.
+     *
+     * @see self::_update_stat_cache()
+     * @see self::_remove_from_stat_cache()
+     * @see self::_query_stat_cache()
+     * @var array
+     * @access private
+     */
+    var $stat_cache = array();
+
+    /**
+     * Max SFTP Packet Size
+     *
+     * @see self::__construct()
+     * @see self::get()
+     * @var array
+     * @access private
+     */
+    var $max_sftp_packet;
+
+    /**
+     * Stat Cache Flag
+     *
+     * @see self::disableStatCache()
+     * @see self::enableStatCache()
+     * @var bool
+     * @access private
+     */
+    var $use_stat_cache = true;
+
+    /**
+     * Sort Options
+     *
+     * @see self::_comparator()
+     * @see self::setListOrder()
+     * @var array
+     * @access private
+     */
+    var $sortOptions = array();
+
+    /**
+     * Canonicalization Flag
+     *
+     * Determines whether or not paths should be canonicalized before being
+     * passed on to the remote server.
+     *
+     * @see self::enablePathCanonicalization()
+     * @see self::disablePathCanonicalization()
+     * @see self::realpath()
+     * @var bool
      * @access private
      */
-    var $errors = array();
+    var $canonicalize_paths = true;
 
     /**
      * Default Constructor.
      *
      * Connects to an SFTP server
      *
-     * @param String $host
-     * @param optional Integer $port
-     * @param optional Integer $timeout
-     * @return Net_SFTP
+     * @param string $host
+     * @param int $port
+     * @param int $timeout
+     * @return \phpseclib\Net\SFTP
      * @access public
      */
-    function Net_SFTP($host, $port = 22, $timeout = 10)
+    function __construct($host, $port = 22, $timeout = 10)
     {
-        parent::Net_SSH2($host, $port, $timeout);
+        parent::__construct($host, $port, $timeout);
+
+        $this->max_sftp_packet = 1 << 15;
+
         $this->packet_types = array(
             1  => 'NET_SFTP_INIT',
             2  => 'NET_SFTP_VERSION',
@@ -236,7 +277,7 @@ class Net_SFTP extends Net_SSH2 {
             4  => 'NET_SFTP_CLOSE',
             5  => 'NET_SFTP_READ',
             6  => 'NET_SFTP_WRITE',
-            8  => 'NET_SFTP_FSTAT',
+            7  => 'NET_SFTP_LSTAT',
             9  => 'NET_SFTP_SETSTAT',
             11 => 'NET_SFTP_OPENDIR',
             12 => 'NET_SFTP_READDIR',
@@ -249,6 +290,8 @@ class Net_SFTP extends Net_SSH2 {
                    SFTPv5+: http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3
                pre-SFTPv5 : http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.5 */
             18 => 'NET_SFTP_RENAME',
+            19 => 'NET_SFTP_READLINK',
+            20 => 'NET_SFTP_SYMLINK',
 
             101=> 'NET_SFTP_STATUS',
             102=> 'NET_SFTP_HANDLE',
@@ -270,78 +313,168 @@ class Net_SFTP extends Net_SSH2 {
             5 => 'NET_SFTP_STATUS_BAD_MESSAGE',
             6 => 'NET_SFTP_STATUS_NO_CONNECTION',
             7 => 'NET_SFTP_STATUS_CONNECTION_LOST',
-            8 => 'NET_SFTP_STATUS_OP_UNSUPPORTED'
+            8 => 'NET_SFTP_STATUS_OP_UNSUPPORTED',
+            9 => 'NET_SFTP_STATUS_INVALID_HANDLE',
+            10 => 'NET_SFTP_STATUS_NO_SUCH_PATH',
+            11 => 'NET_SFTP_STATUS_FILE_ALREADY_EXISTS',
+            12 => 'NET_SFTP_STATUS_WRITE_PROTECT',
+            13 => 'NET_SFTP_STATUS_NO_MEDIA',
+            14 => 'NET_SFTP_STATUS_NO_SPACE_ON_FILESYSTEM',
+            15 => 'NET_SFTP_STATUS_QUOTA_EXCEEDED',
+            16 => 'NET_SFTP_STATUS_UNKNOWN_PRINCIPAL',
+            17 => 'NET_SFTP_STATUS_LOCK_CONFLICT',
+            18 => 'NET_SFTP_STATUS_DIR_NOT_EMPTY',
+            19 => 'NET_SFTP_STATUS_NOT_A_DIRECTORY',
+            20 => 'NET_SFTP_STATUS_INVALID_FILENAME',
+            21 => 'NET_SFTP_STATUS_LINK_LOOP',
+            22 => 'NET_SFTP_STATUS_CANNOT_DELETE',
+            23 => 'NET_SFTP_STATUS_INVALID_PARAMETER',
+            24 => 'NET_SFTP_STATUS_FILE_IS_A_DIRECTORY',
+            25 => 'NET_SFTP_STATUS_BYTE_RANGE_LOCK_CONFLICT',
+            26 => 'NET_SFTP_STATUS_BYTE_RANGE_LOCK_REFUSED',
+            27 => 'NET_SFTP_STATUS_DELETE_PENDING',
+            28 => 'NET_SFTP_STATUS_FILE_CORRUPT',
+            29 => 'NET_SFTP_STATUS_OWNER_INVALID',
+            30 => 'NET_SFTP_STATUS_GROUP_INVALID',
+            31 => 'NET_SFTP_STATUS_NO_MATCHING_BYTE_RANGE_LOCK'
         );
         // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-7.1
-        // the order, in this case, matters quite a lot - see Net_SFTP::_parseAttributes() to understand why
+        // the order, in this case, matters quite a lot - see \phpseclib\Net\SFTP::_parseAttributes() to understand why
         $this->attributes = array(
             0x00000001 => 'NET_SFTP_ATTR_SIZE',
             0x00000002 => 'NET_SFTP_ATTR_UIDGID', // defined in SFTPv3, removed in SFTPv4+
             0x00000004 => 'NET_SFTP_ATTR_PERMISSIONS',
             0x00000008 => 'NET_SFTP_ATTR_ACCESSTIME',
-                    -1 => 'NET_SFTP_ATTR_EXTENDED' // unpack('N', "\xFF\xFF\xFF\xFF") == array(1 => int(-1))
+            // 0x80000000 will yield a floating point on 32-bit systems and converting floating points to integers
+            // yields inconsistent behavior depending on how php is compiled.  so we left shift -1 (which, in
+            // two's compliment, consists of all 1 bits) by 31.  on 64-bit systems this'll yield 0xFFFFFFFF80000000.
+            // that's not a problem, however, and 'anded' and a 32-bit number, as all the leading 1 bits are ignored.
+            (-1 << 31) & 0xFFFFFFFF => 'NET_SFTP_ATTR_EXTENDED'
         );
         // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-6.3
         // the flag definitions change somewhat in SFTPv5+.  if SFTPv5+ support is added to this library, maybe name
-        // the array for that $this->open5_flags and similarily alter the constant names.
+        // the array for that $this->open5_flags and similarly alter the constant names.
         $this->open_flags = array(
             0x00000001 => 'NET_SFTP_OPEN_READ',
             0x00000002 => 'NET_SFTP_OPEN_WRITE',
+            0x00000004 => 'NET_SFTP_OPEN_APPEND',
             0x00000008 => 'NET_SFTP_OPEN_CREATE',
-            0x00000010 => 'NET_SFTP_OPEN_TRUNCATE'
+            0x00000010 => 'NET_SFTP_OPEN_TRUNCATE',
+            0x00000020 => 'NET_SFTP_OPEN_EXCL'
+        );
+        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2
+        // see \phpseclib\Net\SFTP::_parseLongname() for an explanation
+        $this->file_types = array(
+            1 => 'NET_SFTP_TYPE_REGULAR',
+            2 => 'NET_SFTP_TYPE_DIRECTORY',
+            3 => 'NET_SFTP_TYPE_SYMLINK',
+            4 => 'NET_SFTP_TYPE_SPECIAL',
+            5 => 'NET_SFTP_TYPE_UNKNOWN',
+            // the followin types were first defined for use in SFTPv5+
+            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-05#section-5.2
+            6 => 'NET_SFTP_TYPE_SOCKET',
+            7 => 'NET_SFTP_TYPE_CHAR_DEVICE',
+            8 => 'NET_SFTP_TYPE_BLOCK_DEVICE',
+            9 => 'NET_SFTP_TYPE_FIFO'
         );
         $this->_define_array(
             $this->packet_types,
             $this->status_codes,
             $this->attributes,
-            $this->open_flags
+            $this->open_flags,
+            $this->file_types
         );
+
+        if (!defined('NET_SFTP_QUEUE_SIZE')) {
+            define('NET_SFTP_QUEUE_SIZE', 32);
+        }
     }
 
     /**
      * Login
      *
-     * @param String $username
-     * @param optional String $password
-     * @return Boolean
+     * @param string $username
+     * @param string $password
+     * @return bool
      * @access public
      */
-    function login($username, $password = '')
+    function login($username)
     {
-        if (!parent::login($username, $password)) {
+        $args = func_get_args();
+        if (!call_user_func_array(array(&$this, '_login'), $args)) {
             return false;
         }
 
-        $this->window_size_client_to_server[NET_SFTP_CHANNEL] = $this->window_size;
+        $this->window_size_server_to_client[self::CHANNEL] = $this->window_size;
 
-        $packet = pack('CNa*N3',
-            NET_SSH2_MSG_CHANNEL_OPEN, strlen('session'), 'session', NET_SFTP_CHANNEL, $this->window_size, 0x4000);
+        $packet = pack(
+            'CNa*N3',
+            NET_SSH2_MSG_CHANNEL_OPEN,
+            strlen('session'),
+            'session',
+            self::CHANNEL,
+            $this->window_size,
+            0x4000
+        );
 
         if (!$this->_send_binary_packet($packet)) {
             return false;
         }
 
-        $this->channel_status[NET_SFTP_CHANNEL] = NET_SSH2_MSG_CHANNEL_OPEN;
+        $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_OPEN;
 
-        $response = $this->_get_channel_packet(NET_SFTP_CHANNEL);
+        $response = $this->_get_channel_packet(self::CHANNEL, true);
         if ($response === false) {
             return false;
         }
 
-        $packet = pack('CNNa*CNa*',
-            NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SFTP_CHANNEL], strlen('subsystem'), 'subsystem', 1, strlen('sftp'), 'sftp');
+        $packet = pack(
+            'CNNa*CNa*',
+            NET_SSH2_MSG_CHANNEL_REQUEST,
+            $this->server_channels[self::CHANNEL],
+            strlen('subsystem'),
+            'subsystem',
+            1,
+            strlen('sftp'),
+            'sftp'
+        );
         if (!$this->_send_binary_packet($packet)) {
             return false;
         }
 
-        $this->channel_status[NET_SFTP_CHANNEL] = NET_SSH2_MSG_CHANNEL_REQUEST;
+        $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_REQUEST;
 
-        $response = $this->_get_channel_packet(NET_SFTP_CHANNEL);
+        $response = $this->_get_channel_packet(self::CHANNEL, true);
         if ($response === false) {
-            return false;
+            // from PuTTY's psftp.exe
+            $command = "test -x /usr/lib/sftp-server && exec /usr/lib/sftp-server\n" .
+                       "test -x /usr/local/lib/sftp-server && exec /usr/local/lib/sftp-server\n" .
+                       "exec sftp-server";
+            // we don't do $this->exec($command, false) because exec() operates on a different channel and plus the SSH_MSG_CHANNEL_OPEN that exec() does
+            // is redundant
+            $packet = pack(
+                'CNNa*CNa*',
+                NET_SSH2_MSG_CHANNEL_REQUEST,
+                $this->server_channels[self::CHANNEL],
+                strlen('exec'),
+                'exec',
+                1,
+                strlen($command),
+                $command
+            );
+            if (!$this->_send_binary_packet($packet)) {
+                return false;
+            }
+
+            $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_REQUEST;
+
+            $response = $this->_get_channel_packet(self::CHANNEL, true);
+            if ($response === false) {
+                return false;
+            }
         }
 
-        $this->channel_status[NET_SFTP_CHANNEL] = NET_SSH2_MSG_CHANNEL_DATA;
+        $this->channel_status[self::CHANNEL] = NET_SSH2_MSG_CHANNEL_DATA;
 
         if (!$this->_send_sftp_packet(NET_SFTP_INIT, "\0\0\0\3")) {
             return false;
@@ -349,15 +482,24 @@ class Net_SFTP extends Net_SSH2 {
 
         $response = $this->_get_sftp_packet();
         if ($this->packet_type != NET_SFTP_VERSION) {
-            user_error('Expected SSH_FXP_VERSION', E_USER_NOTICE);
+            user_error('Expected SSH_FXP_VERSION');
             return false;
         }
 
+        if (strlen($response) < 4) {
+            return false;
+        }
         extract(unpack('Nversion', $this->_string_shift($response, 4)));
         $this->version = $version;
         while (!empty($response)) {
+            if (strlen($response) < 4) {
+                return false;
+            }
             extract(unpack('Nlength', $this->_string_shift($response, 4)));
             $key = $this->_string_shift($response, $length);
+            if (strlen($response) < 4) {
+                return false;
+            }
             extract(unpack('Nlength', $this->_string_shift($response, 4)));
             $value = $this->_string_shift($response, $length);
             $this->extensions[$key] = $value;
@@ -399,22 +541,78 @@ class Net_SFTP extends Net_SSH2 {
          So what do you do if you have a client whose initial SSH_FXP_INIT packet says it implements v3 and
          a server whose initial SSH_FXP_VERSION reply says it implements v4 and only v4?  If it only implements
          v4, the "versions" extension is likely not going to have been sent so version re-negotiation as discussed
-         in draft-ietf-secsh-filexfer-13 would be quite impossible.  As such, what Net_SFTP would do is close the
+         in draft-ietf-secsh-filexfer-13 would be quite impossible.  As such, what \phpseclib\Net\SFTP would do is close the
          channel and reopen it with a new and updated SSH_FXP_INIT packet.
         */
-        if ($this->version != 3) {
-            return false;
+        switch ($this->version) {
+            case 2:
+            case 3:
+                break;
+            default:
+                return false;
         }
 
         $this->pwd = $this->_realpath('.');
 
+        $this->_update_stat_cache($this->pwd, array());
+
         return true;
     }
 
     /**
+     * Disable the stat cache
+     *
+     * @access public
+     */
+    function disableStatCache()
+    {
+        $this->use_stat_cache = false;
+    }
+
+    /**
+     * Enable the stat cache
+     *
+     * @access public
+     */
+    function enableStatCache()
+    {
+        $this->use_stat_cache = true;
+    }
+
+    /**
+     * Clear the stat cache
+     *
+     * @access public
+     */
+    function clearStatCache()
+    {
+        $this->stat_cache = array();
+    }
+
+    /**
+     * Enable path canonicalization
+     *
+     * @access public
+     */
+    function enablePathCanonicalization()
+    {
+        $this->canonicalize_paths = true;
+    }
+
+    /**
+     * Enable path canonicalization
+     *
+     * @access public
+     */
+    function disablePathCanonicalization()
+    {
+        $this->canonicalize_paths = false;
+    }
+
+    /**
      * Returns the current directory name
      *
-     * @return Mixed
+     * @return mixed
      * @access public
      */
     function pwd()
@@ -423,144 +621,173 @@ class Net_SFTP extends Net_SSH2 {
     }
 
     /**
+     * Logs errors
+     *
+     * @param string $response
+     * @param int $status
+     * @access public
+     */
+    function _logError($response, $status = -1)
+    {
+        if ($status == -1) {
+            if (strlen($response) < 4) {
+                return;
+            }
+            extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        }
+
+        $error = $this->status_codes[$status];
+
+        if ($this->version > 2 || strlen($response) < 4) {
+            extract(unpack('Nlength', $this->_string_shift($response, 4)));
+            $this->sftp_errors[] = $error . ': ' . $this->_string_shift($response, $length);
+        } else {
+            $this->sftp_errors[] = $error;
+        }
+    }
+
+    /**
+     * Returns canonicalized absolute pathname
+     *
+     * realpath() expands all symbolic links and resolves references to '/./', '/../' and extra '/' characters in the input
+     * path and returns the canonicalized absolute pathname.
+     *
+     * @param string $path
+     * @return mixed
+     * @access public
+     */
+    function realpath($path)
+    {
+        return $this->_realpath($path);
+    }
+
+    /**
      * Canonicalize the Server-Side Path Name
      *
      * SFTP doesn't provide a mechanism by which the current working directory can be changed, so we'll emulate it.  Returns
-     * the absolute (canonicalized) path.  If $mode is set to NET_SFTP_CONFIRM_DIR (as opposed to NET_SFTP_CONFIRM_NONE,
-     * which is what it is set to by default), false is returned if $dir is not a valid directory.
+     * the absolute (canonicalized) path.
      *
-     * @see Net_SFTP::chdir()
-     * @param String $dir
-     * @param optional Integer $mode
-     * @return Mixed
+     * If canonicalize_paths has been disabled using disablePathCanonicalization(), $path is returned as-is.
+     *
+     * @see self::chdir()
+     * @see self::disablePathCanonicalization()
+     * @param string $path
+     * @return mixed
      * @access private
      */
-    function _realpath($dir)
+    function _realpath($path)
     {
-        /*
-        "This protocol represents file names as strings.  File names are
-         assumed to use the slash ('/') character as a directory separator.
-
-         File names starting with a slash are "absolute", and are relative to
-         the root of the file system.  Names starting with any other character
-         are relative to the user's default directory (home directory).  Note
-         that identifying the user is assumed to take place outside of this
-         protocol."
-
-         -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-6
-        */
-        $file = '';
-        if ($this->pwd !== false) {
-            // if the SFTP server returned the canonicalized path even for non-existant files this wouldn't be necessary
-            // on OpenSSH it isn't necessary but on other SFTP servers it is.  that and since the specs say nothing on
-            // the subject, we'll go ahead and work around it with the following.
-            if ($dir[strlen($dir) - 1] != '/') {
-                $file = basename($dir);
-                $dir = dirname($dir);
-            }
+        if (!$this->canonicalize_paths) {
+            return $path;
+        }
 
-            if ($dir == '.' || $dir == $this->pwd) {
-                return $this->pwd . $file;
+        if ($this->pwd === false) {
+            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.9
+            if (!$this->_send_sftp_packet(NET_SFTP_REALPATH, pack('Na*', strlen($path), $path))) {
+                return false;
             }
 
-            if ($dir[0] != '/') {
-                $dir = $this->pwd . '/' . $dir;
+            $response = $this->_get_sftp_packet();
+            switch ($this->packet_type) {
+                case NET_SFTP_NAME:
+                    // although SSH_FXP_NAME is implemented differently in SFTPv3 than it is in SFTPv4+, the following
+                    // should work on all SFTP versions since the only part of the SSH_FXP_NAME packet the following looks
+                    // at is the first part and that part is defined the same in SFTP versions 3 through 6.
+                    $this->_string_shift($response, 4); // skip over the count - it should be 1, anyway
+                    if (strlen($response) < 4) {
+                        return false;
+                    }
+                    extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                    return $this->_string_shift($response, $length);
+                case NET_SFTP_STATUS:
+                    $this->_logError($response);
+                    return false;
+                default:
+                    user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS');
+                    return false;
             }
-            // on the surface it seems like maybe resolving a path beginning with / is unnecessary, but such paths
-            // can contain .'s and ..'s just like any other.  we could parse those out as appropriate or we can let
-            // the server do it.  we'll do the latter.
         }
 
-        /*
-         that SSH_FXP_REALPATH returns SSH_FXP_NAME does not necessarily mean that anything actually exists at the
-         specified path.  generally speaking, no attributes are returned with this particular SSH_FXP_NAME packet
-         regardless of whether or not a file actually exists.  and in SFTPv3, the longname field and the filename
-         field match for this particular SSH_FXP_NAME packet.  for other SSH_FXP_NAME packets, this will likely
-         not be the case, but for this one, it is.
-        */
-        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.9
-        if (!$this->_send_sftp_packet(NET_SFTP_REALPATH, pack('Na*', strlen($dir), $dir))) {
-            return false;
+        if ($path[0] != '/') {
+            $path = $this->pwd . '/' . $path;
         }
 
-        $response = $this->_get_sftp_packet();
-        switch ($this->packet_type) {
-            case NET_SFTP_NAME:
-                // although SSH_FXP_NAME is implemented differently in SFTPv3 than it is in SFTPv4+, the following
-                // should work on all SFTP versions since the only part of the SSH_FXP_NAME packet the following looks
-                // at is the first part and that part is defined the same in SFTP versions 3 through 6.
-                $this->_string_shift($response, 4); // skip over the count - it should be 1, anyway
-                extract(unpack('Nlength', $this->_string_shift($response, 4)));
-                $realpath = $this->_string_shift($response, $length);
-                break;
-            case NET_SFTP_STATUS:
-                extract(unpack('Nstatus/Nlength', $this->_string_shift($response, 8)));
-                $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
-                return false;
-            default:
-                user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS', E_USER_NOTICE);
-                return false;
+        $path = explode('/', $path);
+        $new = array();
+        foreach ($path as $dir) {
+            if (!strlen($dir)) {
+                continue;
+            }
+            switch ($dir) {
+                case '..':
+                    array_pop($new);
+                case '.':
+                    break;
+                default:
+                    $new[] = $dir;
+            }
         }
 
-        // if $this->pwd isn't set than the only thing $realpath could be is for '.', which is pretty much guaranteed to
-        // be a bonafide directory
-        return $realpath . '/' . $file;
+        return '/' . implode('/', $new);
     }
 
     /**
      * Changes the current directory
      *
-     * @param String $dir
-     * @return Boolean
+     * @param string $dir
+     * @return bool
      * @access public
      */
     function chdir($dir)
     {
-        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
             return false;
         }
 
-        if ($dir[strlen($dir) - 1] != '/') {
+        // assume current dir if $dir is empty
+        if ($dir === '') {
+            $dir = './';
+        // suffix a slash if needed
+        } elseif ($dir[strlen($dir) - 1] != '/') {
             $dir.= '/';
         }
+
         $dir = $this->_realpath($dir);
 
         // confirm that $dir is, in fact, a valid directory
+        if ($this->use_stat_cache && is_array($this->_query_stat_cache($dir))) {
+            $this->pwd = $dir;
+            return true;
+        }
+
+        // we could do a stat on the alleged $dir to see if it's a directory but that doesn't tell us
+        // the currently logged in user has the appropriate permissions or not. maybe you could see if
+        // the file's uid / gid match the currently logged in user's uid / gid but how there's no easy
+        // way to get those with SFTP
+
         if (!$this->_send_sftp_packet(NET_SFTP_OPENDIR, pack('Na*', strlen($dir), $dir))) {
             return false;
         }
 
-        // see Net_SFTP::nlist() for a more thorough explanation of the following
+        // see \phpseclib\Net\SFTP::nlist() for a more thorough explanation of the following
         $response = $this->_get_sftp_packet();
         switch ($this->packet_type) {
             case NET_SFTP_HANDLE:
                 $handle = substr($response, 4);
                 break;
             case NET_SFTP_STATUS:
-                extract(unpack('Nstatus/Nlength', $this->_string_shift($response, 8)));
-                $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
+                $this->_logError($response);
                 return false;
             default:
-                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS', E_USER_NOTICE);
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
                 return false;
         }
 
-        if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
-            return false;
-        }
-
-        $response = $this->_get_sftp_packet();
-        if ($this->packet_type != NET_SFTP_STATUS) {
-            user_error('Expected SSH_FXP_STATUS', E_USER_NOTICE);
+        if (!$this->_close_handle($handle)) {
             return false;
         }
 
-        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
-        if ($status != NET_SFTP_STATUS_OK) {
-            extract(unpack('Nlength', $this->_string_shift($response, 4)));
-            $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
-            return false;
-        }
+        $this->_update_stat_cache($dir, array());
 
         $this->pwd = $dir;
         return true;
@@ -569,34 +796,101 @@ class Net_SFTP extends Net_SSH2 {
     /**
      * Returns a list of files in the given directory
      *
-     * @param optional String $dir
-     * @return Mixed
+     * @param string $dir
+     * @param bool $recursive
+     * @return mixed
      * @access public
      */
-    function nlist($dir = '.')
+    function nlist($dir = '.', $recursive = false)
     {
-        return $this->_list($dir, false);
+        return $this->_nlist_helper($dir, $recursive, '');
     }
 
     /**
-     * Returns a list of files in the given directory
+     * Helper method for nlist
+     *
+     * @param string $dir
+     * @param bool $recursive
+     * @param string $relativeDir
+     * @return mixed
+     * @access private
+     */
+    function _nlist_helper($dir, $recursive, $relativeDir)
+    {
+        $files = $this->_list($dir, false);
+
+        if (!$recursive || $files === false) {
+            return $files;
+        }
+
+        $result = array();
+        foreach ($files as $value) {
+            if ($value == '.' || $value == '..') {
+                if ($relativeDir == '') {
+                    $result[] = $value;
+                }
+                continue;
+            }
+            if (is_array($this->_query_stat_cache($this->_realpath($dir . '/' . $value)))) {
+                $temp = $this->_nlist_helper($dir . '/' . $value, true, $relativeDir . $value . '/');
+                $result = array_merge($result, $temp);
+            } else {
+                $result[] = $relativeDir . $value;
+            }
+        }
+
+        return $result;
+    }
+
+    /**
+     * Returns a detailed list of files in the given directory
      *
-     * @param optional String $dir
-     * @return Mixed
+     * @param string $dir
+     * @param bool $recursive
+     * @return mixed
      * @access public
      */
-    function rawlist($dir = '.')
+    function rawlist($dir = '.', $recursive = false)
     {
-        return $this->_list($dir, true);
+        $files = $this->_list($dir, true);
+        if (!$recursive || $files === false) {
+            return $files;
+        }
+
+        static $depth = 0;
+
+        foreach ($files as $key => $value) {
+            if ($depth != 0 && $key == '..') {
+                unset($files[$key]);
+                continue;
+            }
+            if ($key != '.' && $key != '..' && is_array($this->_query_stat_cache($this->_realpath($dir . '/' . $key)))) {
+                $depth++;
+                $files[$key] = $this->rawlist($dir . '/' . $key, true);
+                $depth--;
+            } else {
+                $files[$key] = (object) $value;
+            }
+        }
+
+        return $files;
     }
 
+    /**
+     * Reads a list, be it detailed or not, of files in the given directory
+     *
+     * @param string $dir
+     * @param bool $raw
+     * @return mixed
+     * @access private
+     */
     function _list($dir, $raw = true)
     {
-        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
             return false;
         }
 
-        $dir = $this->_realpath($dir);
+        $dir = $this->_realpath($dir . '/');
         if ($dir === false) {
             return false;
         }
@@ -616,14 +910,15 @@ class Net_SFTP extends Net_SSH2 {
                 break;
             case NET_SFTP_STATUS:
                 // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
-                extract(unpack('Nstatus/Nlength', $this->_string_shift($response, 8)));
-                $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
+                $this->_logError($response);
                 return false;
             default:
-                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS', E_USER_NOTICE);
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
                 return false;
         }
 
+        $this->_update_stat_cache($dir, array());
+
         $contents = array();
         while (true) {
             // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.2
@@ -636,112 +931,468 @@ class Net_SFTP extends Net_SSH2 {
             $response = $this->_get_sftp_packet();
             switch ($this->packet_type) {
                 case NET_SFTP_NAME:
+                    if (strlen($response) < 4) {
+                        return false;
+                    }
                     extract(unpack('Ncount', $this->_string_shift($response, 4)));
                     for ($i = 0; $i < $count; $i++) {
+                        if (strlen($response) < 4) {
+                            return false;
+                        }
                         extract(unpack('Nlength', $this->_string_shift($response, 4)));
                         $shortname = $this->_string_shift($response, $length);
+                        if (strlen($response) < 4) {
+                            return false;
+                        }
                         extract(unpack('Nlength', $this->_string_shift($response, 4)));
-                        $this->_string_shift($response, $length); // SFTPv4+ drop this field - the "longname" field
-                        $attributes = $this->_parseAttributes($response); // we also don't care about the attributes
-                        if (!$raw) {
-                            $contents[] = $shortname;
+                        $longname = $this->_string_shift($response, $length);
+                        $attributes = $this->_parseAttributes($response);
+                        if (!isset($attributes['type'])) {
+                            $fileType = $this->_parseLongname($longname);
+                            if ($fileType) {
+                                $attributes['type'] = $fileType;
+                            }
+                        }
+                        $contents[$shortname] = $attributes + array('filename' => $shortname);
+
+                        if (isset($attributes['type']) && $attributes['type'] == NET_SFTP_TYPE_DIRECTORY && ($shortname != '.' && $shortname != '..')) {
+                            $this->_update_stat_cache($dir . '/' . $shortname, array());
                         } else {
-                            $contents[$shortname] = $attributes;
+                            if ($shortname == '..') {
+                                $temp = $this->_realpath($dir . '/..') . '/.';
+                            } else {
+                                $temp = $dir . '/' . $shortname;
+                            }
+                            $this->_update_stat_cache($temp, (object) array('lstat' => $attributes));
                         }
                         // SFTPv6 has an optional boolean end-of-list field, but we'll ignore that, since the
                         // final SSH_FXP_STATUS packet should tell us that, already.
                     }
                     break;
                 case NET_SFTP_STATUS:
+                    if (strlen($response) < 4) {
+                        return false;
+                    }
                     extract(unpack('Nstatus', $this->_string_shift($response, 4)));
                     if ($status != NET_SFTP_STATUS_EOF) {
-                        extract(unpack('Nlength', $this->_string_shift($response, 4)));
-                        $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
+                        $this->_logError($response, $status);
                         return false;
                     }
                     break 2;
                 default:
-                    user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS', E_USER_NOTICE);
+                    user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS');
                     return false;
             }
         }
 
-        if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
-            return false;
-        }
-
-        // "The client MUST release all resources associated with the handle regardless of the status."
-        //  -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.3
-        $response = $this->_get_sftp_packet();
-        if ($this->packet_type != NET_SFTP_STATUS) {
-            user_error('Expected SSH_FXP_STATUS', E_USER_NOTICE);
+        if (!$this->_close_handle($handle)) {
             return false;
         }
 
-        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
-        if ($status != NET_SFTP_STATUS_OK) {
-            extract(unpack('Nlength', $this->_string_shift($response, 4)));
-            $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
-            return false;
+        if (count($this->sortOptions)) {
+            uasort($contents, array(&$this, '_comparator'));
         }
 
-        return $contents;
+        return $raw ? $contents : array_keys($contents);
     }
 
     /**
-     * Returns the file size, in bytes, or false, on failure
+     * Compares two rawlist entries using parameters set by setListOrder()
      *
-     * Files larger than 4GB will show up as being exactly 4GB.
+     * Intended for use with uasort()
      *
-     * @param optional String $dir
-     * @return Mixed
-     * @access public
+     * @param array $a
+     * @param array $b
+     * @return int
+     * @access private
      */
-    function size($filename)
+    function _comparator($a, $b)
     {
-        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
-            return false;
-        }
-
+        switch (true) {
+            case $a['filename'] === '.' || $b['filename'] === '.':
+                if ($a['filename'] === $b['filename']) {
+                    return 0;
+                }
+                return $a['filename'] === '.' ? -1 : 1;
+            case $a['filename'] === '..' || $b['filename'] === '..':
+                if ($a['filename'] === $b['filename']) {
+                    return 0;
+                }
+                return $a['filename'] === '..' ? -1 : 1;
+            case isset($a['type']) && $a['type'] === NET_SFTP_TYPE_DIRECTORY:
+                if (!isset($b['type'])) {
+                    return 1;
+                }
+                if ($b['type'] !== $a['type']) {
+                    return -1;
+                }
+                break;
+            case isset($b['type']) && $b['type'] === NET_SFTP_TYPE_DIRECTORY:
+                return 1;
+        }
+        foreach ($this->sortOptions as $sort => $order) {
+            if (!isset($a[$sort]) || !isset($b[$sort])) {
+                if (isset($a[$sort])) {
+                    return -1;
+                }
+                if (isset($b[$sort])) {
+                    return 1;
+                }
+                return 0;
+            }
+            switch ($sort) {
+                case 'filename':
+                    $result = strcasecmp($a['filename'], $b['filename']);
+                    if ($result) {
+                        return $order === SORT_DESC ? -$result : $result;
+                    }
+                    break;
+                case 'permissions':
+                case 'mode':
+                    $a[$sort]&= 07777;
+                    $b[$sort]&= 07777;
+                default:
+                    if ($a[$sort] === $b[$sort]) {
+                        break;
+                    }
+                    return $order === SORT_ASC ? $a[$sort] - $b[$sort] : $b[$sort] - $a[$sort];
+            }
+        }
+    }
+
+    /**
+     * Defines how nlist() and rawlist() will be sorted - if at all.
+     *
+     * If sorting is enabled directories and files will be sorted independently with
+     * directories appearing before files in the resultant array that is returned.
+     *
+     * Any parameter returned by stat is a valid sort parameter for this function.
+     * Filename comparisons are case insensitive.
+     *
+     * Examples:
+     *
+     * $sftp->setListOrder('filename', SORT_ASC);
+     * $sftp->setListOrder('size', SORT_DESC, 'filename', SORT_ASC);
+     * $sftp->setListOrder(true);
+     *    Separates directories from files but doesn't do any sorting beyond that
+     * $sftp->setListOrder();
+     *    Don't do any sort of sorting
+     *
+     * @access public
+     */
+    function setListOrder()
+    {
+        $this->sortOptions = array();
+        $args = func_get_args();
+        if (empty($args)) {
+            return;
+        }
+        $len = count($args) & 0x7FFFFFFE;
+        for ($i = 0; $i < $len; $i+=2) {
+            $this->sortOptions[$args[$i]] = $args[$i + 1];
+        }
+        if (!count($this->sortOptions)) {
+            $this->sortOptions = array('bogus' => true);
+        }
+    }
+
+    /**
+     * Returns the file size, in bytes, or false, on failure
+     *
+     * Files larger than 4GB will show up as being exactly 4GB.
+     *
+     * @param string $filename
+     * @return mixed
+     * @access public
+     */
+    function size($filename)
+    {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
+            return false;
+        }
+
+        $result = $this->stat($filename);
+        if ($result === false) {
+            return false;
+        }
+        return isset($result['size']) ? $result['size'] : -1;
+    }
+
+    /**
+     * Save files / directories to cache
+     *
+     * @param string $path
+     * @param mixed $value
+     * @access private
+     */
+    function _update_stat_cache($path, $value)
+    {
+        if ($this->use_stat_cache === false) {
+            return;
+        }
+
+        // preg_replace('#^/|/(?=/)|/$#', '', $dir) == str_replace('//', '/', trim($path, '/'))
+        $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $path));
+
+        $temp = &$this->stat_cache;
+        $max = count($dirs) - 1;
+        foreach ($dirs as $i => $dir) {
+            // if $temp is an object that means one of two things.
+            //  1. a file was deleted and changed to a directory behind phpseclib's back
+            //  2. it's a symlink. when lstat is done it's unclear what it's a symlink to
+            if (is_object($temp)) {
+                $temp = array();
+            }
+            if (!isset($temp[$dir])) {
+                $temp[$dir] = array();
+            }
+            if ($i === $max) {
+                if (is_object($temp[$dir]) && is_object($value)) {
+                    if (!isset($value->stat) && isset($temp[$dir]->stat)) {
+                        $value->stat = $temp[$dir]->stat;
+                    }
+                    if (!isset($value->lstat) && isset($temp[$dir]->lstat)) {
+                        $value->lstat = $temp[$dir]->lstat;
+                    }
+                }
+                $temp[$dir] = $value;
+                break;
+            }
+            $temp = &$temp[$dir];
+        }
+    }
+
+    /**
+     * Remove files / directories from cache
+     *
+     * @param string $path
+     * @return bool
+     * @access private
+     */
+    function _remove_from_stat_cache($path)
+    {
+        $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $path));
+
+        $temp = &$this->stat_cache;
+        $max = count($dirs) - 1;
+        foreach ($dirs as $i => $dir) {
+            if ($i === $max) {
+                unset($temp[$dir]);
+                return true;
+            }
+            if (!isset($temp[$dir])) {
+                return false;
+            }
+            $temp = &$temp[$dir];
+        }
+    }
+
+    /**
+     * Checks cache for path
+     *
+     * Mainly used by file_exists
+     *
+     * @param string $dir
+     * @return mixed
+     * @access private
+     */
+    function _query_stat_cache($path)
+    {
+        $dirs = explode('/', preg_replace('#^/|/(?=/)|/$#', '', $path));
+
+        $temp = &$this->stat_cache;
+        foreach ($dirs as $dir) {
+            if (!isset($temp[$dir])) {
+                return null;
+            }
+            $temp = &$temp[$dir];
+        }
+        return $temp;
+    }
+
+    /**
+     * Returns general information about a file.
+     *
+     * Returns an array on success and false otherwise.
+     *
+     * @param string $filename
+     * @return mixed
+     * @access public
+     */
+    function stat($filename)
+    {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
+            return false;
+        }
+
+        $filename = $this->_realpath($filename);
+        if ($filename === false) {
+            return false;
+        }
+
+        if ($this->use_stat_cache) {
+            $result = $this->_query_stat_cache($filename);
+            if (is_array($result) && isset($result['.']) && isset($result['.']->stat)) {
+                return $result['.']->stat;
+            }
+            if (is_object($result) && isset($result->stat)) {
+                return $result->stat;
+            }
+        }
+
+        $stat = $this->_stat($filename, NET_SFTP_STAT);
+        if ($stat === false) {
+            $this->_remove_from_stat_cache($filename);
+            return false;
+        }
+        if (isset($stat['type'])) {
+            if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) {
+                $filename.= '/.';
+            }
+            $this->_update_stat_cache($filename, (object) array('stat' => $stat));
+            return $stat;
+        }
+
+        $pwd = $this->pwd;
+        $stat['type'] = $this->chdir($filename) ?
+            NET_SFTP_TYPE_DIRECTORY :
+            NET_SFTP_TYPE_REGULAR;
+        $this->pwd = $pwd;
+
+        if ($stat['type'] == NET_SFTP_TYPE_DIRECTORY) {
+            $filename.= '/.';
+        }
+        $this->_update_stat_cache($filename, (object) array('stat' => $stat));
+
+        return $stat;
+    }
+
+    /**
+     * Returns general information about a file or symbolic link.
+     *
+     * Returns an array on success and false otherwise.
+     *
+     * @param string $filename
+     * @return mixed
+     * @access public
+     */
+    function lstat($filename)
+    {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
+            return false;
+        }
+
         $filename = $this->_realpath($filename);
         if ($filename === false) {
             return false;
         }
 
+        if ($this->use_stat_cache) {
+            $result = $this->_query_stat_cache($filename);
+            if (is_array($result) && isset($result['.']) && isset($result['.']->lstat)) {
+                return $result['.']->lstat;
+            }
+            if (is_object($result) && isset($result->lstat)) {
+                return $result->lstat;
+            }
+        }
+
+        $lstat = $this->_stat($filename, NET_SFTP_LSTAT);
+        if ($lstat === false) {
+            $this->_remove_from_stat_cache($filename);
+            return false;
+        }
+        if (isset($lstat['type'])) {
+            if ($lstat['type'] == NET_SFTP_TYPE_DIRECTORY) {
+                $filename.= '/.';
+            }
+            $this->_update_stat_cache($filename, (object) array('lstat' => $lstat));
+            return $lstat;
+        }
+
+        $stat = $this->_stat($filename, NET_SFTP_STAT);
+
+        if ($lstat != $stat) {
+            $lstat = array_merge($lstat, array('type' => NET_SFTP_TYPE_SYMLINK));
+            $this->_update_stat_cache($filename, (object) array('lstat' => $lstat));
+            return $stat;
+        }
+
+        $pwd = $this->pwd;
+        $lstat['type'] = $this->chdir($filename) ?
+            NET_SFTP_TYPE_DIRECTORY :
+            NET_SFTP_TYPE_REGULAR;
+        $this->pwd = $pwd;
+
+        if ($lstat['type'] == NET_SFTP_TYPE_DIRECTORY) {
+            $filename.= '/.';
+        }
+        $this->_update_stat_cache($filename, (object) array('lstat' => $lstat));
+
+        return $lstat;
+    }
+
+    /**
+     * Returns general information about a file or symbolic link
+     *
+     * Determines information without calling \phpseclib\Net\SFTP::realpath().
+     * The second parameter can be either NET_SFTP_STAT or NET_SFTP_LSTAT.
+     *
+     * @param string $filename
+     * @param int $type
+     * @return mixed
+     * @access private
+     */
+    function _stat($filename, $type)
+    {
         // SFTPv4+ adds an additional 32-bit integer field - flags - to the following:
         $packet = pack('Na*', strlen($filename), $filename);
-        if (!$this->_send_sftp_packet(NET_SFTP_STAT, $packet)) {
+        if (!$this->_send_sftp_packet($type, $packet)) {
             return false;
         }
 
         $response = $this->_get_sftp_packet();
         switch ($this->packet_type) {
             case NET_SFTP_ATTRS:
-                $attrs = $this->_parseAttributes($response);
-                return $attrs['size'];
+                return $this->_parseAttributes($response);
             case NET_SFTP_STATUS:
-                extract(unpack('Nstatus/Nlength', $this->_string_shift($response, 8)));
-                $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
+                $this->_logError($response);
                 return false;
         }
 
-        user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS', E_USER_NOTICE);
+        user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS');
         return false;
     }
 
     /**
-     * Set permissions on a file.
+     * Truncates a file to a given length
+     *
+     * @param string $filename
+     * @param int $new_size
+     * @return bool
+     * @access public
+     */
+    function truncate($filename, $new_size)
+    {
+        $attr = pack('N3', NET_SFTP_ATTR_SIZE, $new_size / 4294967296, $new_size); // 4294967296 == 0x100000000 == 1<<32
+
+        return $this->_setstat($filename, $attr, false);
+    }
+
+    /**
+     * Sets access and modification time of file.
      *
-     * Returns the new file permissions on success or FALSE on error.
+     * If the file does not exist, it will be created.
      *
-     * @param Integer $mode
-     * @param String $filename
-     * @return Mixed
+     * @param string $filename
+     * @param int $time
+     * @param int $atime
+     * @return bool
      * @access public
      */
-    function chmod($mode, $filename)
+    function touch($filename, $time = null, $atime = null)
     {
-        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
             return false;
         }
 
@@ -750,32 +1401,102 @@ class Net_SFTP extends Net_SSH2 {
             return false;
         }
 
-        // SFTPv4+ has an additional byte field - type - that would need to be sent, as well. setting it to
-        // SSH_FILEXFER_TYPE_UNKNOWN might work. if not, we'd have to do an SSH_FXP_STAT before doing an SSH_FXP_SETSTAT.
-        $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777);
-        if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($filename), $filename, $attr))) {
-            return false;
+        if (!isset($time)) {
+            $time = time();
+        }
+        if (!isset($atime)) {
+            $atime = $time;
         }
 
-        /*
-         "Because some systems must use separate system calls to set various attributes, it is possible that a failure 
-          response will be returned, but yet some of the attributes may be have been successfully modified.  If possible,
-          servers SHOULD avoid this situation; however, clients MUST be aware that this is possible."
+        $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE | NET_SFTP_OPEN_EXCL;
+        $attr = pack('N3', NET_SFTP_ATTR_ACCESSTIME, $time, $atime);
+        $packet = pack('Na*Na*', strlen($filename), $filename, $flags, $attr);
+        if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
+            return false;
+        }
 
-          -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.6
-        */
         $response = $this->_get_sftp_packet();
-        if ($this->packet_type != NET_SFTP_STATUS) {
-            user_error('Expected SSH_FXP_STATUS', E_USER_NOTICE);
-            return false;
+        switch ($this->packet_type) {
+            case NET_SFTP_HANDLE:
+                return $this->_close_handle(substr($response, 4));
+            case NET_SFTP_STATUS:
+                $this->_logError($response);
+                break;
+            default:
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
+                return false;
         }
 
-        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
-        if ($status != NET_SFTP_STATUS_EOF) {
-            extract(unpack('Nlength', $this->_string_shift($response, 4)));
-            $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
+        return $this->_setstat($filename, $attr, false);
+    }
+
+    /**
+     * Changes file or directory owner
+     *
+     * Returns true on success or false on error.
+     *
+     * @param string $filename
+     * @param int $uid
+     * @param bool $recursive
+     * @return bool
+     * @access public
+     */
+    function chown($filename, $uid, $recursive = false)
+    {
+        // quoting from <http://www.kernel.org/doc/man-pages/online/pages/man2/chown.2.html>,
+        // "if the owner or group is specified as -1, then that ID is not changed"
+        $attr = pack('N3', NET_SFTP_ATTR_UIDGID, $uid, -1);
+
+        return $this->_setstat($filename, $attr, $recursive);
+    }
+
+    /**
+     * Changes file or directory group
+     *
+     * Returns true on success or false on error.
+     *
+     * @param string $filename
+     * @param int $gid
+     * @param bool $recursive
+     * @return bool
+     * @access public
+     */
+    function chgrp($filename, $gid, $recursive = false)
+    {
+        $attr = pack('N3', NET_SFTP_ATTR_UIDGID, -1, $gid);
+
+        return $this->_setstat($filename, $attr, $recursive);
+    }
+
+    /**
+     * Set permissions on a file.
+     *
+     * Returns the new file permissions on success or false on error.
+     * If $recursive is true than this just returns true or false.
+     *
+     * @param int $mode
+     * @param string $filename
+     * @param bool $recursive
+     * @return mixed
+     * @access public
+     */
+    function chmod($mode, $filename, $recursive = false)
+    {
+        if (is_string($mode) && is_int($filename)) {
+            $temp = $mode;
+            $mode = $filename;
+            $filename = $temp;
+        }
+
+        $attr = pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777);
+        if (!$this->_setstat($filename, $attr, $recursive)) {
+            return false;
+        }
+        if ($recursive) {
+            return true;
         }
 
+        $filename = $this->realpath($filename);
         // rather than return what the permissions *should* be, we'll return what they actually are.  this will also
         // tell us if the file actually exists.
         // incidentally, SFTPv4+ adds an additional 32-bit integer field - flags - to the following:
@@ -790,49 +1511,68 @@ class Net_SFTP extends Net_SSH2 {
                 $attrs = $this->_parseAttributes($response);
                 return $attrs['permissions'];
             case NET_SFTP_STATUS:
-                extract(unpack('Nstatus/Nlength', $this->_string_shift($response, 8)));
-                $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
+                $this->_logError($response);
                 return false;
         }
 
-        user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS', E_USER_NOTICE);
+        user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS');
         return false;
     }
 
     /**
-     * Creates a directory.
+     * Sets information about a file
      *
-     * @param String $dir
-     * @return Boolean
-     * @access public
+     * @param string $filename
+     * @param string $attr
+     * @param bool $recursive
+     * @return bool
+     * @access private
      */
-    function mkdir($dir)
+    function _setstat($filename, $attr, $recursive)
     {
-        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
             return false;
         }
 
-        $dir = $this->_realpath(rtrim($dir, '/'));
-        if ($dir === false) {
+        $filename = $this->_realpath($filename);
+        if ($filename === false) {
             return false;
         }
 
-        // by not providing any permissions, hopefully the server will use the logged in users umask - their 
-        // default permissions.
-        if (!$this->_send_sftp_packet(NET_SFTP_MKDIR, pack('Na*N', strlen($dir), $dir, 0))) {
+        $this->_remove_from_stat_cache($filename);
+
+        if ($recursive) {
+            $i = 0;
+            $result = $this->_setstat_recursive($filename, $attr, $i);
+            $this->_read_put_responses($i);
+            return $result;
+        }
+
+        // SFTPv4+ has an additional byte field - type - that would need to be sent, as well. setting it to
+        // SSH_FILEXFER_TYPE_UNKNOWN might work. if not, we'd have to do an SSH_FXP_STAT before doing an SSH_FXP_SETSTAT.
+        if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($filename), $filename, $attr))) {
             return false;
         }
 
+        /*
+         "Because some systems must use separate system calls to set various attributes, it is possible that a failure
+          response will be returned, but yet some of the attributes may be have been successfully modified.  If possible,
+          servers SHOULD avoid this situation; however, clients MUST be aware that this is possible."
+
+          -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.6
+        */
         $response = $this->_get_sftp_packet();
         if ($this->packet_type != NET_SFTP_STATUS) {
-            user_error('Expected SSH_FXP_STATUS', E_USER_NOTICE);
+            user_error('Expected SSH_FXP_STATUS');
             return false;
         }
 
+        if (strlen($response) < 4) {
+            return false;
+        }
         extract(unpack('Nstatus', $this->_string_shift($response, 4)));
         if ($status != NET_SFTP_STATUS_OK) {
-            extract(unpack('Nlength', $this->_string_shift($response, 4)));
-            $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
+            $this->_logError($response, $status);
             return false;
         }
 
@@ -840,38 +1580,226 @@ class Net_SFTP extends Net_SSH2 {
     }
 
     /**
-     * Removes a directory.
+     * Recursively sets information on directories on the SFTP server
      *
-     * @param String $dir
-     * @return Boolean
-     * @access public
+     * Minimizes directory lookups and SSH_FXP_STATUS requests for speed.
+     *
+     * @param string $path
+     * @param string $attr
+     * @param int $i
+     * @return bool
+     * @access private
      */
-    function rmdir($dir)
+    function _setstat_recursive($path, $attr, &$i)
     {
-        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+        if (!$this->_read_put_responses($i)) {
             return false;
         }
+        $i = 0;
+        $entries = $this->_list($path, true);
 
-        $dir = $this->_realpath($dir);
-        if ($dir === false) {
-            return false;
+        if ($entries === false) {
+            return $this->_setstat($path, $attr, false);
         }
 
-        if (!$this->_send_sftp_packet(NET_SFTP_RMDIR, pack('Na*', strlen($dir), $dir))) {
+        // normally $entries would have at least . and .. but it might not if the directories
+        // permissions didn't allow reading
+        if (empty($entries)) {
             return false;
         }
 
-        $response = $this->_get_sftp_packet();
-        if ($this->packet_type != NET_SFTP_STATUS) {
-            user_error('Expected SSH_FXP_STATUS', E_USER_NOTICE);
-            return false;
-        }
+        unset($entries['.'], $entries['..']);
+        foreach ($entries as $filename => $props) {
+            if (!isset($props['type'])) {
+                return false;
+            }
 
-        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
-        if ($status != NET_SFTP_STATUS_OK) {
-            // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED?
-            extract(unpack('Nlength', $this->_string_shift($response, 4)));
-            $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
+            $temp = $path . '/' . $filename;
+            if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) {
+                if (!$this->_setstat_recursive($temp, $attr, $i)) {
+                    return false;
+                }
+            } else {
+                if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($temp), $temp, $attr))) {
+                    return false;
+                }
+
+                $i++;
+
+                if ($i >= NET_SFTP_QUEUE_SIZE) {
+                    if (!$this->_read_put_responses($i)) {
+                        return false;
+                    }
+                    $i = 0;
+                }
+            }
+        }
+
+        if (!$this->_send_sftp_packet(NET_SFTP_SETSTAT, pack('Na*a*', strlen($path), $path, $attr))) {
+            return false;
+        }
+
+        $i++;
+
+        if ($i >= NET_SFTP_QUEUE_SIZE) {
+            if (!$this->_read_put_responses($i)) {
+                return false;
+            }
+            $i = 0;
+        }
+
+        return true;
+    }
+
+    /**
+     * Return the target of a symbolic link
+     *
+     * @param string $link
+     * @return mixed
+     * @access public
+     */
+    function readlink($link)
+    {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
+            return false;
+        }
+
+        $link = $this->_realpath($link);
+
+        if (!$this->_send_sftp_packet(NET_SFTP_READLINK, pack('Na*', strlen($link), $link))) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        switch ($this->packet_type) {
+            case NET_SFTP_NAME:
+                break;
+            case NET_SFTP_STATUS:
+                $this->_logError($response);
+                return false;
+            default:
+                user_error('Expected SSH_FXP_NAME or SSH_FXP_STATUS');
+                return false;
+        }
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        extract(unpack('Ncount', $this->_string_shift($response, 4)));
+        // the file isn't a symlink
+        if (!$count) {
+            return false;
+        }
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        extract(unpack('Nlength', $this->_string_shift($response, 4)));
+        return $this->_string_shift($response, $length);
+    }
+
+    /**
+     * Create a symlink
+     *
+     * symlink() creates a symbolic link to the existing target with the specified name link.
+     *
+     * @param string $target
+     * @param string $link
+     * @return bool
+     * @access public
+     */
+    function symlink($target, $link)
+    {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
+            return false;
+        }
+
+        //$target = $this->_realpath($target);
+        $link = $this->_realpath($link);
+
+        $packet = pack('Na*Na*', strlen($target), $target, strlen($link), $link);
+        if (!$this->_send_sftp_packet(NET_SFTP_SYMLINK, $packet)) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            $this->_logError($response, $status);
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Creates a directory.
+     *
+     * @param string $dir
+     * @return bool
+     * @access public
+     */
+    function mkdir($dir, $mode = -1, $recursive = false)
+    {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
+            return false;
+        }
+
+        $dir = $this->_realpath($dir);
+        // by not providing any permissions, hopefully the server will use the logged in users umask - their
+        // default permissions.
+        $attr = $mode == -1 ? "\0\0\0\0" : pack('N2', NET_SFTP_ATTR_PERMISSIONS, $mode & 07777);
+
+        if ($recursive) {
+            $dirs = explode('/', preg_replace('#/(?=/)|/$#', '', $dir));
+            if (empty($dirs[0])) {
+                array_shift($dirs);
+                $dirs[0] = '/' . $dirs[0];
+            }
+            for ($i = 0; $i < count($dirs); $i++) {
+                $temp = array_slice($dirs, 0, $i + 1);
+                $temp = implode('/', $temp);
+                $result = $this->_mkdir_helper($temp, $attr);
+            }
+            return $result;
+        }
+
+        return $this->_mkdir_helper($dir, $attr);
+    }
+
+    /**
+     * Helper function for directory creation
+     *
+     * @param string $dir
+     * @return bool
+     * @access private
+     */
+    function _mkdir_helper($dir, $attr)
+    {
+        if (!$this->_send_sftp_packet(NET_SFTP_MKDIR, pack('Na*a*', strlen($dir), $dir, $attr))) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            $this->_logError($response, $status);
             return false;
         }
 
@@ -879,29 +1807,100 @@ class Net_SFTP extends Net_SSH2 {
     }
 
     /**
+     * Removes a directory.
+     *
+     * @param string $dir
+     * @return bool
+     * @access public
+     */
+    function rmdir($dir)
+    {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
+            return false;
+        }
+
+        $dir = $this->_realpath($dir);
+        if ($dir === false) {
+            return false;
+        }
+
+        if (!$this->_send_sftp_packet(NET_SFTP_RMDIR, pack('Na*', strlen($dir), $dir))) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED?
+            $this->_logError($response, $status);
+            return false;
+        }
+
+        $this->_remove_from_stat_cache($dir);
+        // the following will do a soft delete, which would be useful if you deleted a file
+        // and then tried to do a stat on the deleted file. the above, in contrast, does
+        // a hard delete
+        //$this->_update_stat_cache($dir, false);
+
+        return true;
+    }
+
+    /**
      * Uploads a file to the SFTP server.
      *
-     * By default, Net_SFTP::put() does not read from the local filesystem.  $data is dumped directly into $remote_file.
-     * So, for example, if you set $data to 'filename.ext' and then do Net_SFTP::get(), you will get a file, twelve bytes
+     * By default, \phpseclib\Net\SFTP::put() does not read from the local filesystem.  $data is dumped directly into $remote_file.
+     * So, for example, if you set $data to 'filename.ext' and then do \phpseclib\Net\SFTP::get(), you will get a file, twelve bytes
      * long, containing 'filename.ext' as its contents.
      *
-     * Setting $mode to NET_SFTP_LOCAL_FILE will change the above behavior.  With NET_SFTP_LOCAL_FILE, $remote_file will 
+     * Setting $mode to self::SOURCE_LOCAL_FILE will change the above behavior.  With self::SOURCE_LOCAL_FILE, $remote_file will
      * contain as many bytes as filename.ext does on your local filesystem.  If your filename.ext is 1MB then that is how
      * large $remote_file will be, as well.
      *
+     * Setting $mode to self::SOURCE_CALLBACK will use $data as callback function, which gets only one parameter -- number of bytes to return, and returns a string if there is some data or null if there is no more data
+     *
+     * If $data is a resource then it'll be used as a resource instead.
+     *
      * Currently, only binary mode is supported.  As such, if the line endings need to be adjusted, you will need to take
      * care of that, yourself.
      *
-     * @param String $remote_file
-     * @param String $data
-     * @param optional Integer $flags
-     * @return Boolean
+     * $mode can take an additional two parameters - self::RESUME and self::RESUME_START. These are bitwise AND'd with
+     * $mode. So if you want to resume upload of a 300mb file on the local file system you'd set $mode to the following:
+     *
+     * self::SOURCE_LOCAL_FILE | self::RESUME
+     *
+     * If you wanted to simply append the full contents of a local file to the full contents of a remote file you'd replace
+     * self::RESUME with self::RESUME_START.
+     *
+     * If $mode & (self::RESUME | self::RESUME_START) then self::RESUME_START will be assumed.
+     *
+     * $start and $local_start give you more fine grained control over this process and take precident over self::RESUME
+     * when they're non-negative. ie. $start could let you write at the end of a file (like self::RESUME) or in the middle
+     * of one. $local_start could let you start your reading from the end of a file (like self::RESUME_START) or in the
+     * middle of one.
+     *
+     * Setting $local_start to > 0 or $mode | self::RESUME_START doesn't do anything unless $mode | self::SOURCE_LOCAL_FILE.
+     *
+     * @param string $remote_file
+     * @param string|resource $data
+     * @param int $mode
+     * @param int $start
+     * @param int $local_start
+     * @param callable|null $progressCallback
+     * @return bool
      * @access public
-     * @internal ASCII mode for SFTPv4/5/6 can be supported by adding a new function - Net_SFTP::setMode().
+     * @internal ASCII mode for SFTPv4/5/6 can be supported by adding a new function - \phpseclib\Net\SFTP::setMode().
      */
-    function put($remote_file, $data, $mode = NET_SFTP_STRING)
+    function put($remote_file, $data, $mode = self::SOURCE_STRING, $start = -1, $local_start = -1, $progressCallback = null)
     {
-        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
             return false;
         }
 
@@ -910,7 +1909,25 @@ class Net_SFTP extends Net_SSH2 {
             return false;
         }
 
-        $packet = pack('Na*N2', strlen($remote_file), $remote_file, NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE | NET_SFTP_OPEN_TRUNCATE, 0);
+        $this->_remove_from_stat_cache($remote_file);
+
+        $flags = NET_SFTP_OPEN_WRITE | NET_SFTP_OPEN_CREATE;
+        // according to the SFTP specs, NET_SFTP_OPEN_APPEND should "force all writes to append data at the end of the file."
+        // in practice, it doesn't seem to do that.
+        //$flags|= ($mode & self::RESUME) ? NET_SFTP_OPEN_APPEND : NET_SFTP_OPEN_TRUNCATE;
+
+        if ($start >= 0) {
+            $offset = $start;
+        } elseif ($mode & self::RESUME) {
+            // if NET_SFTP_OPEN_APPEND worked as it should _size() wouldn't need to be called
+            $size = $this->size($remote_file);
+            $offset = $size !== false ? $size : 0;
+        } else {
+            $offset = 0;
+            $flags|= NET_SFTP_OPEN_TRUNCATE;
+        }
+
+        $packet = pack('Na*N2', strlen($remote_file), $remote_file, $flags, 0);
         if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
             return false;
         }
@@ -921,137 +1938,545 @@ class Net_SFTP extends Net_SSH2 {
                 $handle = substr($response, 4);
                 break;
             case NET_SFTP_STATUS:
-                extract(unpack('Nstatus/Nlength', $this->_string_shift($response, 8)));
-                $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
+                $this->_logError($response);
                 return false;
             default:
-                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS', E_USER_NOTICE);
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
                 return false;
         }
 
-        $initialize = true;
-
         // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.2.3
-        if ($mode == NET_SFTP_LOCAL_FILE) {
-            if (!is_file($data)) {
-                user_error("$data is not a valid file", E_USER_NOTICE);
+        $dataCallback = false;
+        switch (true) {
+            case $mode & self::SOURCE_CALLBACK:
+                if (!is_callable($data)) {
+                    user_error("\$data should be is_callable() if you specify SOURCE_CALLBACK flag");
+                }
+                $dataCallback = $data;
+                // do nothing
+                break;
+            case is_resource($data):
+                $mode = $mode & ~self::SOURCE_LOCAL_FILE;
+                $info = stream_get_meta_data($data);
+                if ($info['wrapper_type'] == 'PHP' && $info['stream_type'] == 'Input') {
+                    $fp = fopen('php://memory', 'w+');
+                    stream_copy_to_stream($data, $fp);
+                    rewind($fp);
+                } else {
+                    $fp = $data;
+                }
+                break;
+            case $mode & self::SOURCE_LOCAL_FILE:
+                if (!is_file($data)) {
+                    user_error("$data is not a valid file");
+                    return false;
+                }
+                $fp = @fopen($data, 'rb');
+                if (!$fp) {
+                    return false;
+                }
+        }
+
+        if (isset($fp)) {
+            $stat = fstat($fp);
+            $size = !empty($stat) ? $stat['size'] : 0;
+
+            if ($local_start >= 0) {
+                fseek($fp, $local_start);
+                $size-= $local_start;
+            }
+        } elseif ($dataCallback) {
+            $size = 0;
+        } else {
+            $size = strlen($data);
+        }
+
+        $sent = 0;
+        $size = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size;
+
+        $sftp_packet_size = 4096; // PuTTY uses 4096
+        // make the SFTP packet be exactly 4096 bytes by including the bytes in the NET_SFTP_WRITE packets "header"
+        $sftp_packet_size-= strlen($handle) + 25;
+        $i = 0;
+        while ($dataCallback || ($size === 0 || $sent < $size)) {
+            if ($dataCallback) {
+                $temp = call_user_func($dataCallback, $sftp_packet_size);
+                if (is_null($temp)) {
+                    break;
+                }
+            } else {
+                $temp = isset($fp) ? fread($fp, $sftp_packet_size) : substr($data, $sent, $sftp_packet_size);
+                if ($temp === false || $temp === '') {
+                    break;
+                }
+            }
+
+            $subtemp = $offset + $sent;
+            $packet = pack('Na*N3a*', strlen($handle), $handle, $subtemp / 4294967296, $subtemp, strlen($temp), $temp);
+            if (!$this->_send_sftp_packet(NET_SFTP_WRITE, $packet)) {
+                if ($mode & self::SOURCE_LOCAL_FILE) {
+                    fclose($fp);
+                }
                 return false;
             }
-            $fp = fopen($data, 'rb');
-            if (!$fp) {
+            $sent+= strlen($temp);
+            if (is_callable($progressCallback)) {
+                call_user_func($progressCallback, $sent);
+            }
+
+            $i++;
+
+            if ($i == NET_SFTP_QUEUE_SIZE) {
+                if (!$this->_read_put_responses($i)) {
+                    $i = 0;
+                    break;
+                }
+                $i = 0;
+            }
+        }
+
+        if (!$this->_read_put_responses($i)) {
+            if ($mode & self::SOURCE_LOCAL_FILE) {
+                fclose($fp);
+            }
+            $this->_close_handle($handle);
+            return false;
+        }
+
+        if ($mode & self::SOURCE_LOCAL_FILE) {
+            fclose($fp);
+        }
+
+        return $this->_close_handle($handle);
+    }
+
+    /**
+     * Reads multiple successive SSH_FXP_WRITE responses
+     *
+     * Sending an SSH_FXP_WRITE packet and immediately reading its response isn't as efficient as blindly sending out $i
+     * SSH_FXP_WRITEs, in succession, and then reading $i responses.
+     *
+     * @param int $i
+     * @return bool
+     * @access private
+     */
+    function _read_put_responses($i)
+    {
+        while ($i--) {
+            $response = $this->_get_sftp_packet();
+            if ($this->packet_type != NET_SFTP_STATUS) {
+                user_error('Expected SSH_FXP_STATUS');
+                return false;
+            }
+
+            if (strlen($response) < 4) {
                 return false;
             }
-            $sent = 0;
-            $size = filesize($data);
+            extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+            if ($status != NET_SFTP_STATUS_OK) {
+                $this->_logError($response, $status);
+                break;
+            }
+        }
+
+        return $i < 0;
+    }
+
+    /**
+     * Close handle
+     *
+     * @param string $handle
+     * @return bool
+     * @access private
+     */
+    function _close_handle($handle)
+    {
+        if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
+            return false;
+        }
+
+        // "The client MUST release all resources associated with the handle regardless of the status."
+        //  -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.1.3
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            $this->_logError($response, $status);
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Downloads a file from the SFTP server.
+     *
+     * Returns a string containing the contents of $remote_file if $local_file is left undefined or a boolean false if
+     * the operation was unsuccessful.  If $local_file is defined, returns true or false depending on the success of the
+     * operation.
+     *
+     * $offset and $length can be used to download files in chunks.
+     *
+     * @param string $remote_file
+     * @param string $local_file
+     * @param int $offset
+     * @param int $length
+     * @return mixed
+     * @access public
+     */
+    function get($remote_file, $local_file = false, $offset = 0, $length = -1)
+    {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
+            return false;
+        }
+
+        $remote_file = $this->_realpath($remote_file);
+        if ($remote_file === false) {
+            return false;
+        }
+
+        $packet = pack('Na*N2', strlen($remote_file), $remote_file, NET_SFTP_OPEN_READ, 0);
+        if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        switch ($this->packet_type) {
+            case NET_SFTP_HANDLE:
+                $handle = substr($response, 4);
+                break;
+            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
+                $this->_logError($response);
+                return false;
+            default:
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
+                return false;
+        }
+
+        if (is_resource($local_file)) {
+            $fp = $local_file;
+            $stat = fstat($fp);
+            $res_offset = $stat['size'];
         } else {
-            $sent = 0;
-            $size = strlen($data);
+            $res_offset = 0;
+            if ($local_file !== false) {
+                $fp = fopen($local_file, 'wb');
+                if (!$fp) {
+                    return false;
+                }
+            } else {
+                $content = '';
+            }
+        }
+
+        $fclose_check = $local_file !== false && !is_resource($local_file);
+
+        $start = $offset;
+        $read = 0;
+        while (true) {
+            $i = 0;
+
+            while ($i < NET_SFTP_QUEUE_SIZE && ($length < 0 || $read < $length)) {
+                $tempoffset = $start + $read;
+
+                $packet_size = $length > 0 ? min($this->max_sftp_packet, $length - $read) : $this->max_sftp_packet;
+
+                $packet = pack('Na*N3', strlen($handle), $handle, $tempoffset / 4294967296, $tempoffset, $packet_size);
+                if (!$this->_send_sftp_packet(NET_SFTP_READ, $packet)) {
+                    if ($fclose_check) {
+                        fclose($fp);
+                    }
+                    return false;
+                }
+                $packet = null;
+                $read+= $packet_size;
+                $i++;
+            }
+
+            if (!$i) {
+                break;
+            }
+
+            $clear_responses = false;
+            while ($i > 0) {
+                $i--;
+
+                if ($clear_responses) {
+                    $this->_get_sftp_packet();
+                    continue;
+                } else {
+                    $response = $this->_get_sftp_packet();
+                }
+
+                switch ($this->packet_type) {
+                    case NET_SFTP_DATA:
+                        $temp = substr($response, 4);
+                        $offset+= strlen($temp);
+                        if ($local_file === false) {
+                            $content.= $temp;
+                        } else {
+                            fputs($fp, $temp);
+                        }
+                        $temp = null;
+                        break;
+                    case NET_SFTP_STATUS:
+                        // could, in theory, return false if !strlen($content) but we'll hold off for the time being
+                        $this->_logError($response);
+                        $clear_responses = true; // don't break out of the loop yet, so we can read the remaining responses
+                        break;
+                    default:
+                        if ($fclose_check) {
+                            fclose($fp);
+                        }
+                        user_error('Expected SSH_FX_DATA or SSH_FXP_STATUS');
+                }
+                $response = null;
+            }
+
+            if ($clear_responses) {
+                break;
+            }
+        }
+
+        if ($length > 0 && $length <= $offset - $start) {
+            if ($local_file === false) {
+                $content = substr($content, 0, $length);
+            } else {
+                ftruncate($fp, $length + $res_offset);
+            }
+        }
+
+        if ($fclose_check) {
+            fclose($fp);
+        }
+
+        if (!$this->_close_handle($handle)) {
+            return false;
+        }
+
+        // if $content isn't set that means a file was written to
+        return isset($content) ? $content : true;
+    }
+
+    /**
+     * Deletes a file on the SFTP server.
+     *
+     * @param string $path
+     * @param bool $recursive
+     * @return bool
+     * @access public
+     */
+    function delete($path, $recursive = true)
+    {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
+            return false;
+        }
+
+        if (is_object($path)) {
+            // It's an object. Cast it as string before we check anything else.
+            $path = (string) $path;
+        }
+
+        if (!is_string($path) || $path == '') {
+            return false;
+        }
+
+        $path = $this->_realpath($path);
+        if ($path === false) {
+            return false;
+        }
+
+        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3
+        if (!$this->_send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($path), $path))) {
+            return false;
+        }
+
+        $response = $this->_get_sftp_packet();
+        if ($this->packet_type != NET_SFTP_STATUS) {
+            user_error('Expected SSH_FXP_STATUS');
+            return false;
+        }
+
+        // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
+        if (strlen($response) < 4) {
+            return false;
+        }
+        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
+        if ($status != NET_SFTP_STATUS_OK) {
+            $this->_logError($response, $status);
+            if (!$recursive) {
+                return false;
+            }
+            $i = 0;
+            $result = $this->_delete_recursive($path, $i);
+            $this->_read_put_responses($i);
+            return $result;
+        }
+
+        $this->_remove_from_stat_cache($path);
+
+        return true;
+    }
+
+    /**
+     * Recursively deletes directories on the SFTP server
+     *
+     * Minimizes directory lookups and SSH_FXP_STATUS requests for speed.
+     *
+     * @param string $path
+     * @param int $i
+     * @return bool
+     * @access private
+     */
+    function _delete_recursive($path, &$i)
+    {
+        if (!$this->_read_put_responses($i)) {
+            return false;
         }
+        $i = 0;
+        $entries = $this->_list($path, true);
 
-        $size = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size;
+        // normally $entries would have at least . and .. but it might not if the directories
+        // permissions didn't allow reading
+        if (empty($entries)) {
+            return false;
+        }
 
-        $sftp_packet_size = 34000; // PuTTY uses 4096
-        $i = 0;
-        while ($sent < $size) {
-            $temp = $mode == NET_SFTP_LOCAL_FILE ? fread($fp, $sftp_packet_size) : $this->_string_shift($data, $sftp_packet_size);
-            $packet = pack('Na*N3a*', strlen($handle), $handle, 0, $sent, strlen($temp), $temp);
-            if (!$this->_send_sftp_packet(NET_SFTP_WRITE, $packet)) {
-                fclose($fp);
+        unset($entries['.'], $entries['..']);
+        foreach ($entries as $filename => $props) {
+            if (!isset($props['type'])) {
                 return false;
             }
-            $sent+= strlen($temp);
 
-            $i++;
+            $temp = $path . '/' . $filename;
+            if ($props['type'] == NET_SFTP_TYPE_DIRECTORY) {
+                if (!$this->_delete_recursive($temp, $i)) {
+                    return false;
+                }
+            } else {
+                if (!$this->_send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($temp), $temp))) {
+                    return false;
+                }
+                $this->_remove_from_stat_cache($temp);
 
-            if ($i == 50) {
-                if (!$this->_read_put_responses($i)) {
+                $i++;
+
+                if ($i >= NET_SFTP_QUEUE_SIZE) {
+                    if (!$this->_read_put_responses($i)) {
+                        return false;
+                    }
                     $i = 0;
-                    break;
                 }
-                $i = 0;
             }
         }
 
-        $this->_read_put_responses($i);
-
-        if ($mode == NET_SFTP_LOCAL_FILE) {
-            fclose($fp);
-        }
-
-        if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
+        if (!$this->_send_sftp_packet(NET_SFTP_RMDIR, pack('Na*', strlen($path), $path))) {
             return false;
         }
+        $this->_remove_from_stat_cache($path);
 
-        $response = $this->_get_sftp_packet();
-        if ($this->packet_type != NET_SFTP_STATUS) {
-            user_error('Expected SSH_FXP_STATUS', E_USER_NOTICE);
-            return false;
-        }
+        $i++;
 
-        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
-        if ($status != NET_SFTP_STATUS_OK) {
-            extract(unpack('Nlength', $this->_string_shift($response, 4)));
-            $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
-            return false;
+        if ($i >= NET_SFTP_QUEUE_SIZE) {
+            if (!$this->_read_put_responses($i)) {
+                return false;
+            }
+            $i = 0;
         }
 
         return true;
     }
 
     /**
-     * Reads multiple successive SSH_FXP_WRITE responses
+     * Checks whether a file or directory exists
      *
-     * Sending an SSH_FXP_WRITE packet and immediately reading its response isn't as efficient as blindly sending out $i
-     * SSH_FXP_WRITEs, in succession, and then reading $i responses.
-     *
-     * @param Integer $i
-     * @return Boolean
-     * @access private
+     * @param string $path
+     * @return bool
+     * @access public
      */
-    function _read_put_responses($i)
+    function file_exists($path)
     {
-        while ($i--) {
-            $response = $this->_get_sftp_packet();
-            if ($this->packet_type != NET_SFTP_STATUS) {
-                user_error('Expected SSH_FXP_STATUS', E_USER_NOTICE);
-                return false;
-            }
+        if ($this->use_stat_cache) {
+            $path = $this->_realpath($path);
 
-            extract(unpack('Nstatus', $this->_string_shift($response, 4)));
-            if ($status != NET_SFTP_STATUS_OK) {
-                extract(unpack('Nlength', $this->_string_shift($response, 4)));
-                $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
-                break;
+            $result = $this->_query_stat_cache($path);
+
+            if (isset($result)) {
+                // return true if $result is an array or if it's an stdClass object
+                return $result !== false;
             }
         }
 
-        return $i < 0;
+        return $this->stat($path) !== false;
     }
 
     /**
-     * Downloads a file from the SFTP server.
+     * Tells whether the filename is a directory
      *
-     * Returns a string containing the contents of $remote_file if $local_file is left undefined or a boolean false if
-     * the operation was unsuccessful.  If $local_file is defined, returns true or false depending on the success of the
-     * operation
+     * @param string $path
+     * @return bool
+     * @access public
+     */
+    function is_dir($path)
+    {
+        $result = $this->_get_stat_cache_prop($path, 'type');
+        if ($result === false) {
+            return false;
+        }
+        return $result === NET_SFTP_TYPE_DIRECTORY;
+    }
+
+    /**
+     * Tells whether the filename is a regular file
      *
-     * @param String $remote_file
-     * @param optional String $local_file
-     * @return Mixed
+     * @param string $path
+     * @return bool
      * @access public
      */
-    function get($remote_file, $local_file = false)
+    function is_file($path)
     {
-        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+        $result = $this->_get_stat_cache_prop($path, 'type');
+        if ($result === false) {
             return false;
         }
+        return $result === NET_SFTP_TYPE_REGULAR;
+    }
 
-        $remote_file = $this->_realpath($remote_file);
-        if ($remote_file === false) {
+    /**
+     * Tells whether the filename is a symbolic link
+     *
+     * @param string $path
+     * @return bool
+     * @access public
+     */
+    function is_link($path)
+    {
+        $result = $this->_get_lstat_cache_prop($path, 'type');
+        if ($result === false) {
             return false;
         }
+        return $result === NET_SFTP_TYPE_SYMLINK;
+    }
 
-        $packet = pack('Na*N2', strlen($remote_file), $remote_file, NET_SFTP_OPEN_READ, 0);
+    /**
+     * Tells whether a file exists and is readable
+     *
+     * @param string $path
+     * @return bool
+     * @access public
+     */
+    function is_readable($path)
+    {
+        $path = $this->_realpath($path);
+
+        $packet = pack('Na*N2', strlen($path), $path, NET_SFTP_OPEN_READ, 0);
         if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
             return false;
         }
@@ -1059,149 +2484,233 @@ class Net_SFTP extends Net_SSH2 {
         $response = $this->_get_sftp_packet();
         switch ($this->packet_type) {
             case NET_SFTP_HANDLE:
-                $handle = substr($response, 4);
-                break;
+                return true;
             case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
-                extract(unpack('Nstatus/Nlength', $this->_string_shift($response, 8)));
-                $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
                 return false;
             default:
-                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS', E_USER_NOTICE);
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
                 return false;
         }
+    }
+
+    /**
+     * Tells whether the filename is writable
+     *
+     * @param string $path
+     * @return bool
+     * @access public
+     */
+    function is_writable($path)
+    {
+        $path = $this->_realpath($path);
 
-        $packet = pack('Na*', strlen($handle), $handle);
-        if (!$this->_send_sftp_packet(NET_SFTP_FSTAT, $packet)) {
+        $packet = pack('Na*N2', strlen($path), $path, NET_SFTP_OPEN_WRITE, 0);
+        if (!$this->_send_sftp_packet(NET_SFTP_OPEN, $packet)) {
             return false;
         }
 
         $response = $this->_get_sftp_packet();
         switch ($this->packet_type) {
-            case NET_SFTP_ATTRS:
-                $attrs = $this->_parseAttributes($response);
-                break;
-            case NET_SFTP_STATUS:
-                extract(unpack('Nstatus/Nlength', $this->_string_shift($response, 8)));
-                $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
+            case NET_SFTP_HANDLE:
+                return true;
+            case NET_SFTP_STATUS: // presumably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
                 return false;
             default:
-                user_error('Expected SSH_FXP_ATTRS or SSH_FXP_STATUS', E_USER_NOTICE);
-                return false;
-        }
-
-        if ($local_file !== false) {
-            $fp = fopen($local_file, 'wb');
-            if (!$fp) {
+                user_error('Expected SSH_FXP_HANDLE or SSH_FXP_STATUS');
                 return false;
-            }
-        } else {
-            $content = '';
         }
+    }
 
-        $read = 0;
-        while ($read < $attrs['size']) {
-            $packet = pack('Na*N3', strlen($handle), $handle, 0, $read, 1 << 20);
-            if (!$this->_send_sftp_packet(NET_SFTP_READ, $packet)) {
-                return false;
-            }
+    /**
+     * Tells whether the filename is writeable
+     *
+     * Alias of is_writable
+     *
+     * @param string $path
+     * @return bool
+     * @access public
+     */
+    function is_writeable($path)
+    {
+        return $this->is_writable($path);
+    }
 
-            $response = $this->_get_sftp_packet();
-            switch ($this->packet_type) {
-                case NET_SFTP_DATA:
-                    $temp = substr($response, 4);
-                    $read+= strlen($temp);
-                    if ($local_file === false) {
-                        $content.= $temp;
-                    } else {
-                        fputs($fp, $temp);
-                    }
-                    break;
-                case NET_SFTP_STATUS:
-                    extract(unpack('Nstatus/Nlength', $this->_string_shift($response, 8)));
-                    $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
-                    break 2;
-                default:
-                    user_error('Expected SSH_FXP_DATA or SSH_FXP_STATUS', E_USER_NOTICE);
-                    return false;
-            }
-        }
+    /**
+     * Gets last access time of file
+     *
+     * @param string $path
+     * @return mixed
+     * @access public
+     */
+    function fileatime($path)
+    {
+        return $this->_get_stat_cache_prop($path, 'atime');
+    }
 
-        if (!$this->_send_sftp_packet(NET_SFTP_CLOSE, pack('Na*', strlen($handle), $handle))) {
-            return false;
-        }
+    /**
+     * Gets file modification time
+     *
+     * @param string $path
+     * @return mixed
+     * @access public
+     */
+    function filemtime($path)
+    {
+        return $this->_get_stat_cache_prop($path, 'mtime');
+    }
 
-        $response = $this->_get_sftp_packet();
-        if ($this->packet_type != NET_SFTP_STATUS) {
-            user_error('Expected SSH_FXP_STATUS', E_USER_NOTICE);
-            return false;
-        }
+    /**
+     * Gets file permissions
+     *
+     * @param string $path
+     * @return mixed
+     * @access public
+     */
+    function fileperms($path)
+    {
+        return $this->_get_stat_cache_prop($path, 'permissions');
+    }
 
-        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
-        if ($status != NET_SFTP_STATUS_OK) {
-            extract(unpack('Nlength', $this->_string_shift($response, 4)));
-            $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
-            return false;
-        }
+    /**
+     * Gets file owner
+     *
+     * @param string $path
+     * @return mixed
+     * @access public
+     */
+    function fileowner($path)
+    {
+        return $this->_get_stat_cache_prop($path, 'uid');
+    }
 
-        if (isset($content)) {
-            return $content;
-        }
+    /**
+     * Gets file group
+     *
+     * @param string $path
+     * @return mixed
+     * @access public
+     */
+    function filegroup($path)
+    {
+        return $this->_get_stat_cache_prop($path, 'gid');
+    }
 
-        fclose($fp);
-        return true;
+    /**
+     * Gets file size
+     *
+     * @param string $path
+     * @return mixed
+     * @access public
+     */
+    function filesize($path)
+    {
+        return $this->_get_stat_cache_prop($path, 'size');
     }
 
     /**
-     * Deletes a file on the SFTP server.
+     * Gets file type
      *
-     * @param String $path
-     * @return Boolean
+     * @param string $path
+     * @return mixed
      * @access public
      */
-    function delete($path)
+    function filetype($path)
     {
-        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+        $type = $this->_get_stat_cache_prop($path, 'type');
+        if ($type === false) {
             return false;
         }
 
-        $remote_file = $this->_realpath($path);
-        if ($path === false) {
-            return false;
+        switch ($type) {
+            case NET_SFTP_TYPE_BLOCK_DEVICE:
+                return 'block';
+            case NET_SFTP_TYPE_CHAR_DEVICE:
+                return 'char';
+            case NET_SFTP_TYPE_DIRECTORY:
+                return 'dir';
+            case NET_SFTP_TYPE_FIFO:
+                return 'fifo';
+            case NET_SFTP_TYPE_REGULAR:
+                return 'file';
+            case NET_SFTP_TYPE_SYMLINK:
+                return 'link';
+            default:
+                return false;
         }
+    }
 
-        // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-13#section-8.3
-        if (!$this->_send_sftp_packet(NET_SFTP_REMOVE, pack('Na*', strlen($path), $path))) {
-            return false;
-        }
+    /**
+     * Return a stat properity
+     *
+     * Uses cache if appropriate.
+     *
+     * @param string $path
+     * @param string $prop
+     * @return mixed
+     * @access private
+     */
+    function _get_stat_cache_prop($path, $prop)
+    {
+        return $this->_get_xstat_cache_prop($path, $prop, 'stat');
+    }
 
-        $response = $this->_get_sftp_packet();
-        if ($this->packet_type != NET_SFTP_STATUS) {
-            user_error('Expected SSH_FXP_STATUS', E_USER_NOTICE);
-            return false;
+    /**
+     * Return an lstat properity
+     *
+     * Uses cache if appropriate.
+     *
+     * @param string $path
+     * @param string $prop
+     * @return mixed
+     * @access private
+     */
+    function _get_lstat_cache_prop($path, $prop)
+    {
+        return $this->_get_xstat_cache_prop($path, $prop, 'lstat');
+    }
+
+    /**
+     * Return a stat or lstat properity
+     *
+     * Uses cache if appropriate.
+     *
+     * @param string $path
+     * @param string $prop
+     * @return mixed
+     * @access private
+     */
+    function _get_xstat_cache_prop($path, $prop, $type)
+    {
+        if ($this->use_stat_cache) {
+            $path = $this->_realpath($path);
+
+            $result = $this->_query_stat_cache($path);
+
+            if (is_object($result) && isset($result->$type)) {
+                return $result->{$type}[$prop];
+            }
         }
 
-        // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
-        extract(unpack('Nstatus', $this->_string_shift($response, 4)));
-        if ($status != NET_SFTP_STATUS_OK) {
-            extract(unpack('Nlength', $this->_string_shift($response, 4)));
-            $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
+        $result = $this->$type($path);
+
+        if ($result === false || !isset($result[$prop])) {
             return false;
         }
 
-        return true;
+        return $result[$prop];
     }
 
     /**
      * Renames a file or a directory on the SFTP server
      *
-     * @param String $oldname
-     * @param String $newname
-     * @return Boolean
+     * @param string $oldname
+     * @param string $newname
+     * @return bool
      * @access public
      */
     function rename($oldname, $newname)
     {
-        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+        if (!($this->bitmap & SSH2::MASK_LOGIN)) {
             return false;
         }
 
@@ -1219,18 +2728,26 @@ class Net_SFTP extends Net_SSH2 {
 
         $response = $this->_get_sftp_packet();
         if ($this->packet_type != NET_SFTP_STATUS) {
-            user_error('Expected SSH_FXP_STATUS', E_USER_NOTICE);
+            user_error('Expected SSH_FXP_STATUS');
             return false;
         }
 
         // if $status isn't SSH_FX_OK it's probably SSH_FX_NO_SUCH_FILE or SSH_FX_PERMISSION_DENIED
+        if (strlen($response) < 4) {
+            return false;
+        }
         extract(unpack('Nstatus', $this->_string_shift($response, 4)));
         if ($status != NET_SFTP_STATUS_OK) {
-            extract(unpack('Nlength', $this->_string_shift($response, 4)));
-            $this->sftp_errors[] = $this->status_codes[$status] . ': ' . $this->_string_shift($response, $length);
+            $this->_logError($response, $status);
             return false;
         }
 
+        // don't move the stat cache entry over since this operation could very well change the
+        // atime and mtime attributes
+        //$this->_update_stat_cache($newname, $this->_query_stat_cache($oldname));
+        $this->_remove_from_stat_cache($oldname);
+        $this->_remove_from_stat_cache($newname);
+
         return true;
     }
 
@@ -1239,46 +2756,77 @@ class Net_SFTP extends Net_SSH2 {
      *
      * See '7.  File Attributes' of draft-ietf-secsh-filexfer-13 for more info.
      *
-     * @param String $response
-     * @return Array
+     * @param string $response
+     * @return array
      * @access private
      */
     function _parseAttributes(&$response)
     {
         $attr = array();
+        if (strlen($response) < 4) {
+            user_error('Malformed file attributes');
+            return array();
+        }
         extract(unpack('Nflags', $this->_string_shift($response, 4)));
         // SFTPv4+ have a type field (a byte) that follows the above flag field
         foreach ($this->attributes as $key => $value) {
             switch ($flags & $key) {
                 case NET_SFTP_ATTR_SIZE: // 0x00000001
-                    // size is represented by a 64-bit integer, so we perhaps ought to be doing the following:
-                    // $attr['size'] = new Math_BigInteger($this->_string_shift($response, 8), 256);
-                    // of course, you shouldn't be using Net_SFTP to transfer files that are in excess of 4GB
-                    // (0xFFFFFFFF bytes), anyway.  as such, we'll just represent all file sizes that are bigger than
-                    // 4GB as being 4GB.
-                    extract(unpack('Nupper/Nsize', $this->_string_shift($response, 8)));
-                    if ($upper) {
-                        $attr['size'] = 0xFFFFFFFF;
-                    } else {
-                        $attr['size'] = $size < 0 ? ($size & 0x7FFFFFFF) + 0x80000000 : $size;
-                    }
+                    // The size attribute is defined as an unsigned 64-bit integer.
+                    // The following will use floats on 32-bit platforms, if necessary.
+                    // As can be seen in the BigInteger class, floats are generally
+                    // IEEE 754 binary64 "double precision" on such platforms and
+                    // as such can represent integers of at least 2^50 without loss
+                    // of precision. Interpreted in filesize, 2^50 bytes = 1024 TiB.
+                    $attr['size'] = hexdec(bin2hex($this->_string_shift($response, 8)));
                     break;
                 case NET_SFTP_ATTR_UIDGID: // 0x00000002 (SFTPv3 only)
+                    if (strlen($response) < 8) {
+                        user_error('Malformed file attributes');
+                        return $attr;
+                    }
                     $attr+= unpack('Nuid/Ngid', $this->_string_shift($response, 8));
                     break;
                 case NET_SFTP_ATTR_PERMISSIONS: // 0x00000004
+                    if (strlen($response) < 4) {
+                        user_error('Malformed file attributes');
+                        return $attr;
+                    }
                     $attr+= unpack('Npermissions', $this->_string_shift($response, 4));
+                    // mode == permissions; permissions was the original array key and is retained for bc purposes.
+                    // mode was added because that's the more industry standard terminology
+                    $attr+= array('mode' => $attr['permissions']);
+                    $fileType = $this->_parseMode($attr['permissions']);
+                    if ($fileType !== false) {
+                        $attr+= array('type' => $fileType);
+                    }
                     break;
                 case NET_SFTP_ATTR_ACCESSTIME: // 0x00000008
+                    if (strlen($response) < 8) {
+                        user_error('Malformed file attributes');
+                        return $attr;
+                    }
                     $attr+= unpack('Natime/Nmtime', $this->_string_shift($response, 8));
                     break;
                 case NET_SFTP_ATTR_EXTENDED: // 0x80000000
+                    if (strlen($response) < 4) {
+                        user_error('Malformed file attributes');
+                        return $attr;
+                    }
                     extract(unpack('Ncount', $this->_string_shift($response, 4)));
                     for ($i = 0; $i < $count; $i++) {
+                        if (strlen($response) < 4) {
+                            user_error('Malformed file attributes');
+                            return $attr;
+                        }
                         extract(unpack('Nlength', $this->_string_shift($response, 4)));
                         $key = $this->_string_shift($response, $length);
+                        if (strlen($response) < 4) {
+                            user_error('Malformed file attributes');
+                            return $attr;
+                        }
                         extract(unpack('Nlength', $this->_string_shift($response, 4)));
-                        $attr[$key] = $this->_string_shift($response, $length);                        
+                        $attr[$key] = $this->_string_shift($response, $length);
                     }
             }
         }
@@ -1286,15 +2834,91 @@ class Net_SFTP extends Net_SSH2 {
     }
 
     /**
+     * Attempt to identify the file type
+     *
+     * Quoting the SFTP RFC, "Implementations MUST NOT send bits that are not defined" but they seem to anyway
+     *
+     * @param int $mode
+     * @return int
+     * @access private
+     */
+    function _parseMode($mode)
+    {
+        // values come from http://lxr.free-electrons.com/source/include/uapi/linux/stat.h#L12
+        // see, also, http://linux.die.net/man/2/stat
+        switch ($mode & 0170000) {// ie. 1111 0000 0000 0000
+            case 0000000: // no file type specified - figure out the file type using alternative means
+                return false;
+            case 0040000:
+                return NET_SFTP_TYPE_DIRECTORY;
+            case 0100000:
+                return NET_SFTP_TYPE_REGULAR;
+            case 0120000:
+                return NET_SFTP_TYPE_SYMLINK;
+            // new types introduced in SFTPv5+
+            // http://tools.ietf.org/html/draft-ietf-secsh-filexfer-05#section-5.2
+            case 0010000: // named pipe (fifo)
+                return NET_SFTP_TYPE_FIFO;
+            case 0020000: // character special
+                return NET_SFTP_TYPE_CHAR_DEVICE;
+            case 0060000: // block special
+                return NET_SFTP_TYPE_BLOCK_DEVICE;
+            case 0140000: // socket
+                return NET_SFTP_TYPE_SOCKET;
+            case 0160000: // whiteout
+                // "SPECIAL should be used for files that are of
+                //  a known type which cannot be expressed in the protocol"
+                return NET_SFTP_TYPE_SPECIAL;
+            default:
+                return NET_SFTP_TYPE_UNKNOWN;
+        }
+    }
+
+    /**
+     * Parse Longname
+     *
+     * SFTPv3 doesn't provide any easy way of identifying a file type.  You could try to open
+     * a file as a directory and see if an error is returned or you could try to parse the
+     * SFTPv3-specific longname field of the SSH_FXP_NAME packet.  That's what this function does.
+     * The result is returned using the
+     * {@link http://tools.ietf.org/html/draft-ietf-secsh-filexfer-04#section-5.2 SFTPv4 type constants}.
+     *
+     * If the longname is in an unrecognized format bool(false) is returned.
+     *
+     * @param string $longname
+     * @return mixed
+     * @access private
+     */
+    function _parseLongname($longname)
+    {
+        // http://en.wikipedia.org/wiki/Unix_file_types
+        // http://en.wikipedia.org/wiki/Filesystem_permissions#Notation_of_traditional_Unix_permissions
+        if (preg_match('#^[^/]([r-][w-][xstST-]){3}#', $longname)) {
+            switch ($longname[0]) {
+                case '-':
+                    return NET_SFTP_TYPE_REGULAR;
+                case 'd':
+                    return NET_SFTP_TYPE_DIRECTORY;
+                case 'l':
+                    return NET_SFTP_TYPE_SYMLINK;
+                default:
+                    return NET_SFTP_TYPE_SPECIAL;
+            }
+        }
+
+        return false;
+    }
+
+    /**
      * Sends SFTP Packets
      *
      * See '6. General Packet Format' of draft-ietf-secsh-filexfer-13 for more info.
      *
-     * @param Integer $type
-     * @param String $data
-     * @see Net_SFTP::_get_sftp_packet()
-     * @see Net_SSH2::_send_channel_packet()
-     * @return Boolean
+     * @param int $type
+     * @param string $data
+     * @see self::_get_sftp_packet()
+     * @see self::_send_channel_packet()
+     * @return bool
      * @access private
      */
     function _send_sftp_packet($type, $data)
@@ -1304,14 +2928,21 @@ class Net_SFTP extends Net_SSH2 {
             pack('NCa*',  strlen($data) + 1, $type, $data);
 
         $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
-        $result = $this->_send_channel_packet(NET_SFTP_CHANNEL, $packet);
+        $result = $this->_send_channel_packet(self::CHANNEL, $packet);
         $stop = strtok(microtime(), ' ') + strtok('');
 
         if (defined('NET_SFTP_LOGGING')) {
-            $this->packet_type_log[] = '-> ' . $this->packet_types[$type] . 
-                                       ' (' . round($stop - $start, 4) . 's)';
-            if (NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX) {
-                $this->packet_log[] = $data;
+            $packet_type = '-> ' . $this->packet_types[$type] .
+                           ' (' . round($stop - $start, 4) . 's)';
+            if (NET_SFTP_LOGGING == self::LOG_REALTIME) {
+                echo "<pre>\r\n" . $this->_format_log(array($data), array($packet_type)) . "\r\n</pre>\r\n";
+                flush();
+                ob_flush();
+            } else {
+                $this->packet_type_log[] = $packet_type;
+                if (NET_SFTP_LOGGING == self::LOG_COMPLEX) {
+                    $this->packet_log[] = $data;
+                }
             }
         }
 
@@ -1327,17 +2958,19 @@ class Net_SFTP extends Net_SSH2 {
      * There can be one SSH_MSG_CHANNEL_DATA messages containing two SFTP packets or there can be two SSH_MSG_CHANNEL_DATA
      * messages containing one SFTP packet.
      *
-     * @see Net_SFTP::_send_sftp_packet()
-     * @return String
+     * @see self::_send_sftp_packet()
+     * @return string
      * @access private
      */
     function _get_sftp_packet()
     {
+        $this->curTimeout = false;
+
         $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
 
         // SFTP packet length
         while (strlen($this->packet_buffer) < 4) {
-            $temp = $this->_get_channel_packet(NET_SFTP_CHANNEL);
+            $temp = $this->_get_channel_packet(self::CHANNEL, true);
             if (is_bool($temp)) {
                 $this->packet_type = false;
                 $this->packet_buffer = '';
@@ -1345,13 +2978,16 @@ class Net_SFTP extends Net_SSH2 {
             }
             $this->packet_buffer.= $temp;
         }
+        if (strlen($this->packet_buffer) < 4) {
+            return false;
+        }
         extract(unpack('Nlength', $this->_string_shift($this->packet_buffer, 4)));
         $tempLength = $length;
         $tempLength-= strlen($this->packet_buffer);
 
         // SFTP packet type and data payload
         while ($tempLength > 0) {
-            $temp = $this->_get_channel_packet(NET_SFTP_CHANNEL);
+            $temp = $this->_get_channel_packet(self::CHANNEL, true);
             if (is_bool($temp)) {
                 $this->packet_type = false;
                 $this->packet_buffer = '';
@@ -1375,10 +3011,17 @@ class Net_SFTP extends Net_SSH2 {
         $packet = $this->_string_shift($this->packet_buffer, $length);
 
         if (defined('NET_SFTP_LOGGING')) {
-            $this->packet_type_log[] = '<- ' . $this->packet_types[$this->packet_type] . 
-                                       ' (' . round($stop - $start, 4) . 's)';
-            if (NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX) {
-                $this->packet_log[] = $packet;
+            $packet_type = '<- ' . $this->packet_types[$this->packet_type] .
+                           ' (' . round($stop - $start, 4) . 's)';
+            if (NET_SFTP_LOGGING == self::LOG_REALTIME) {
+                echo "<pre>\r\n" . $this->_format_log(array($packet), array($packet_type)) . "\r\n</pre>\r\n";
+                flush();
+                ob_flush();
+            } else {
+                $this->packet_type_log[] = $packet_type;
+                if (NET_SFTP_LOGGING == self::LOG_COMPLEX) {
+                    $this->packet_log[] = $packet;
+                }
             }
         }
 
@@ -1391,7 +3034,7 @@ class Net_SFTP extends Net_SSH2 {
      * Returns a string if NET_SFTP_LOGGING == NET_SFTP_LOG_COMPLEX, an array if NET_SFTP_LOGGING == NET_SFTP_LOG_SIMPLE and false if !defined('NET_SFTP_LOGGING')
      *
      * @access public
-     * @return String or Array
+     * @return string or Array
      */
     function getSFTPLog()
     {
@@ -1400,10 +3043,10 @@ class Net_SFTP extends Net_SSH2 {
         }
 
         switch (NET_SFTP_LOGGING) {
-            case NET_SFTP_LOG_COMPLEX:
+            case self::LOG_COMPLEX:
                 return $this->_format_log($this->packet_log, $this->packet_type_log);
                 break;
-            //case NET_SFTP_LOG_SIMPLE:
+            //case self::LOG_SIMPLE:
             default:
                 return $this->packet_type_log;
         }
@@ -1412,7 +3055,7 @@ class Net_SFTP extends Net_SSH2 {
     /**
      * Returns all errors
      *
-     * @return String
+     * @return array
      * @access public
      */
     function getSFTPErrors()
@@ -1423,18 +3066,18 @@ class Net_SFTP extends Net_SSH2 {
     /**
      * Returns the last error
      *
-     * @return String
+     * @return string
      * @access public
      */
     function getLastSFTPError()
     {
-        return $this->sftp_errors[count($this->sftp_errors) - 1];
+        return count($this->sftp_errors) ? $this->sftp_errors[count($this->sftp_errors) - 1] : '';
     }
 
     /**
      * Get supported SFTP versions
      *
-     * @return Array
+     * @return array
      * @access public
      */
     function getSupportedVersions()
@@ -1449,8 +3092,8 @@ class Net_SFTP extends Net_SSH2 {
     /**
      * Disconnect
      *
-     * @param Integer $reason
-     * @return Boolean
+     * @param int $reason
+     * @return bool
      * @access private
      */
     function _disconnect($reason)
diff --git a/lib/phpseclib/Net/SFTP/Stream.php b/lib/phpseclib/Net/SFTP/Stream.php
new file mode 100644
index 0000000..d2c4425
--- /dev/null
+++ b/lib/phpseclib/Net/SFTP/Stream.php
@@ -0,0 +1,795 @@
+<?php
+
+/**
+ * SFTP Stream Wrapper
+ *
+ * Creates an sftp:// protocol handler that can be used with, for example, fopen(), dir(), etc.
+ *
+ * PHP version 5
+ *
+ * @category  Net
+ * @package   SFTP
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2013 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
+ */
+
+namespace phpseclib\Net\SFTP;
+
+use phpseclib\Crypt\RSA;
+use phpseclib\Net\SFTP;
+
+/**
+ * SFTP Stream Wrapper
+ *
+ * @package SFTP
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @access  public
+ */
+class Stream
+{
+    /**
+     * SFTP instances
+     *
+     * Rather than re-create the connection we re-use instances if possible
+     *
+     * @var array
+     */
+    static $instances;
+
+    /**
+     * SFTP instance
+     *
+     * @var object
+     * @access private
+     */
+    var $sftp;
+
+    /**
+     * Path
+     *
+     * @var string
+     * @access private
+     */
+    var $path;
+
+    /**
+     * Mode
+     *
+     * @var string
+     * @access private
+     */
+    var $mode;
+
+    /**
+     * Position
+     *
+     * @var int
+     * @access private
+     */
+    var $pos;
+
+    /**
+     * Size
+     *
+     * @var int
+     * @access private
+     */
+    var $size;
+
+    /**
+     * Directory entries
+     *
+     * @var array
+     * @access private
+     */
+    var $entries;
+
+    /**
+     * EOF flag
+     *
+     * @var bool
+     * @access private
+     */
+    var $eof;
+
+    /**
+     * Context resource
+     *
+     * Technically this needs to be publically accessible so PHP can set it directly
+     *
+     * @var resource
+     * @access public
+     */
+    var $context;
+
+    /**
+     * Notification callback function
+     *
+     * @var callable
+     * @access public
+     */
+    var $notification;
+
+    /**
+     * Registers this class as a URL wrapper.
+     *
+     * @param string $protocol The wrapper name to be registered.
+     * @return bool True on success, false otherwise.
+     * @access public
+     */
+    static function register($protocol = 'sftp')
+    {
+        if (in_array($protocol, stream_get_wrappers(), true)) {
+            return false;
+        }
+        return stream_wrapper_register($protocol, get_called_class());
+    }
+
+    /**
+     * The Constructor
+     *
+     * @access public
+     */
+    function __construct()
+    {
+        if (defined('NET_SFTP_STREAM_LOGGING')) {
+            echo "__construct()\r\n";
+        }
+    }
+
+    /**
+     * Path Parser
+     *
+     * Extract a path from a URI and actually connect to an SSH server if appropriate
+     *
+     * If "notification" is set as a context parameter the message code for successful login is
+     * NET_SSH2_MSG_USERAUTH_SUCCESS. For a failed login it's NET_SSH2_MSG_USERAUTH_FAILURE.
+     *
+     * @param string $path
+     * @return string
+     * @access private
+     */
+    function _parse_path($path)
+    {
+        $orig = $path;
+        extract(parse_url($path) + array('port' => 22));
+        if (isset($query)) {
+            $path.= '?' . $query;
+        } elseif (preg_match('/(\?|\?#)$/', $orig)) {
+            $path.= '?';
+        }
+        if (isset($fragment)) {
+            $path.= '#' . $fragment;
+        } elseif ($orig[strlen($orig) - 1] == '#') {
+            $path.= '#';
+        }
+
+        if (!isset($host)) {
+            return false;
+        }
+
+        if (isset($this->context)) {
+            $context = stream_context_get_params($this->context);
+            if (isset($context['notification'])) {
+                $this->notification = $context['notification'];
+            }
+        }
+
+        if ($host[0] == '$') {
+            $host = substr($host, 1);
+            global ${$host};
+            if (($$host instanceof SFTP) === false) {
+                return false;
+            }
+            $this->sftp = $$host;
+        } else {
+            if (isset($this->context)) {
+                $context = stream_context_get_options($this->context);
+            }
+            if (isset($context[$scheme]['session'])) {
+                $sftp = $context[$scheme]['session'];
+            }
+            if (isset($context[$scheme]['sftp'])) {
+                $sftp = $context[$scheme]['sftp'];
+            }
+            if (isset($sftp) && $sftp instanceof SFTP) {
+                $this->sftp = $sftp;
+                return $path;
+            }
+            if (isset($context[$scheme]['username'])) {
+                $user = $context[$scheme]['username'];
+            }
+            if (isset($context[$scheme]['password'])) {
+                $pass = $context[$scheme]['password'];
+            }
+            if (isset($context[$scheme]['privkey']) && $context[$scheme]['privkey'] instanceof RSA) {
+                $pass = $context[$scheme]['privkey'];
+            }
+
+            if (!isset($user) || !isset($pass)) {
+                return false;
+            }
+
+            // casting $pass to a string is necessary in the event that it's a \phpseclib\Crypt\RSA object
+            if (isset(self::$instances[$host][$port][$user][(string) $pass])) {
+                $this->sftp = self::$instances[$host][$port][$user][(string) $pass];
+            } else {
+                $this->sftp = new SFTP($host, $port);
+                $this->sftp->disableStatCache();
+                if (isset($this->notification) && is_callable($this->notification)) {
+                    /* if !is_callable($this->notification) we could do this:
+
+                       user_error('fopen(): failed to call user notifier', E_USER_WARNING);
+
+                       the ftp wrapper gives errors like that when the notifier isn't callable.
+                       i've opted not to do that, however, since the ftp wrapper gives the line
+                       on which the fopen occurred as the line number - not the line that the
+                       user_error is on.
+                    */
+                    call_user_func($this->notification, STREAM_NOTIFY_CONNECT, STREAM_NOTIFY_SEVERITY_INFO, '', 0, 0, 0);
+                    call_user_func($this->notification, STREAM_NOTIFY_AUTH_REQUIRED, STREAM_NOTIFY_SEVERITY_INFO, '', 0, 0, 0);
+                    if (!$this->sftp->login($user, $pass)) {
+                        call_user_func($this->notification, STREAM_NOTIFY_AUTH_RESULT, STREAM_NOTIFY_SEVERITY_ERR, 'Login Failure', NET_SSH2_MSG_USERAUTH_FAILURE, 0, 0);
+                        return false;
+                    }
+                    call_user_func($this->notification, STREAM_NOTIFY_AUTH_RESULT, STREAM_NOTIFY_SEVERITY_INFO, 'Login Success', NET_SSH2_MSG_USERAUTH_SUCCESS, 0, 0);
+                } else {
+                    if (!$this->sftp->login($user, $pass)) {
+                        return false;
+                    }
+                }
+                self::$instances[$host][$port][$user][(string) $pass] = $this->sftp;
+            }
+        }
+
+        return $path;
+    }
+
+    /**
+     * Opens file or URL
+     *
+     * @param string $path
+     * @param string $mode
+     * @param int $options
+     * @param string $opened_path
+     * @return bool
+     * @access public
+     */
+    function _stream_open($path, $mode, $options, &$opened_path)
+    {
+        $path = $this->_parse_path($path);
+
+        if ($path === false) {
+            return false;
+        }
+        $this->path = $path;
+
+        $this->size = $this->sftp->size($path);
+        $this->mode = preg_replace('#[bt]$#', '', $mode);
+        $this->eof = false;
+
+        if ($this->size === false) {
+            if ($this->mode[0] == 'r') {
+                return false;
+            } else {
+                $this->sftp->touch($path);
+                $this->size = 0;
+            }
+        } else {
+            switch ($this->mode[0]) {
+                case 'x':
+                    return false;
+                case 'w':
+                    $this->sftp->truncate($path, 0);
+                    $this->size = 0;
+            }
+        }
+
+        $this->pos = $this->mode[0] != 'a' ? 0 : $this->size;
+
+        return true;
+    }
+
+    /**
+     * Read from stream
+     *
+     * @param int $count
+     * @return mixed
+     * @access public
+     */
+    function _stream_read($count)
+    {
+        switch ($this->mode) {
+            case 'w':
+            case 'a':
+            case 'x':
+            case 'c':
+                return false;
+        }
+
+        // commented out because some files - eg. /dev/urandom - will say their size is 0 when in fact it's kinda infinite
+        //if ($this->pos >= $this->size) {
+        //    $this->eof = true;
+        //    return false;
+        //}
+
+        $result = $this->sftp->get($this->path, false, $this->pos, $count);
+        if (isset($this->notification) && is_callable($this->notification)) {
+            if ($result === false) {
+                call_user_func($this->notification, STREAM_NOTIFY_FAILURE, STREAM_NOTIFY_SEVERITY_ERR, $this->sftp->getLastSFTPError(), NET_SFTP_OPEN, 0, 0);
+                return 0;
+            }
+            // seems that PHP calls stream_read in 8k chunks
+            call_user_func($this->notification, STREAM_NOTIFY_PROGRESS, STREAM_NOTIFY_SEVERITY_INFO, '', 0, strlen($result), $this->size);
+        }
+
+        if (empty($result)) { // ie. false or empty string
+            $this->eof = true;
+            return false;
+        }
+        $this->pos+= strlen($result);
+
+        return $result;
+    }
+
+    /**
+     * Write to stream
+     *
+     * @param string $data
+     * @return mixed
+     * @access public
+     */
+    function _stream_write($data)
+    {
+        switch ($this->mode) {
+            case 'r':
+                return false;
+        }
+
+        $result = $this->sftp->put($this->path, $data, SFTP::SOURCE_STRING, $this->pos);
+        if (isset($this->notification) && is_callable($this->notification)) {
+            if (!$result) {
+                call_user_func($this->notification, STREAM_NOTIFY_FAILURE, STREAM_NOTIFY_SEVERITY_ERR, $this->sftp->getLastSFTPError(), NET_SFTP_OPEN, 0, 0);
+                return 0;
+            }
+            // seems that PHP splits up strings into 8k blocks before calling stream_write
+            call_user_func($this->notification, STREAM_NOTIFY_PROGRESS, STREAM_NOTIFY_SEVERITY_INFO, '', 0, strlen($data), strlen($data));
+        }
+
+        if ($result === false) {
+            return false;
+        }
+        $this->pos+= strlen($data);
+        if ($this->pos > $this->size) {
+            $this->size = $this->pos;
+        }
+        $this->eof = false;
+        return strlen($data);
+    }
+
+    /**
+     * Retrieve the current position of a stream
+     *
+     * @return int
+     * @access public
+     */
+    function _stream_tell()
+    {
+        return $this->pos;
+    }
+
+    /**
+     * Tests for end-of-file on a file pointer
+     *
+     * In my testing there are four classes functions that normally effect the pointer:
+     * fseek, fputs  / fwrite, fgets / fread and ftruncate.
+     *
+     * Only fgets / fread, however, results in feof() returning true. do fputs($fp, 'aaa') on a blank file and feof()
+     * will return false. do fread($fp, 1) and feof() will then return true. do fseek($fp, 10) on ablank file and feof()
+     * will return false. do fread($fp, 1) and feof() will then return true.
+     *
+     * @return bool
+     * @access public
+     */
+    function _stream_eof()
+    {
+        return $this->eof;
+    }
+
+    /**
+     * Seeks to specific location in a stream
+     *
+     * @param int $offset
+     * @param int $whence
+     * @return bool
+     * @access public
+     */
+    function _stream_seek($offset, $whence)
+    {
+        switch ($whence) {
+            case SEEK_SET:
+                if ($offset >= $this->size || $offset < 0) {
+                    return false;
+                }
+                break;
+            case SEEK_CUR:
+                $offset+= $this->pos;
+                break;
+            case SEEK_END:
+                $offset+= $this->size;
+        }
+
+        $this->pos = $offset;
+        $this->eof = false;
+        return true;
+    }
+
+    /**
+     * Change stream options
+     *
+     * @param string $path
+     * @param int $option
+     * @param mixed $var
+     * @return bool
+     * @access public
+     */
+    function _stream_metadata($path, $option, $var)
+    {
+        $path = $this->_parse_path($path);
+        if ($path === false) {
+            return false;
+        }
+
+        // stream_metadata was introduced in PHP 5.4.0 but as of 5.4.11 the constants haven't been defined
+        // see http://www.php.net/streamwrapper.stream-metadata and https://bugs.php.net/64246
+        //     and https://github.com/php/php-src/blob/master/main/php_streams.h#L592
+        switch ($option) {
+            case 1: // PHP_STREAM_META_TOUCH
+                return $this->sftp->touch($path, $var[0], $var[1]);
+            case 2: // PHP_STREAM_OWNER_NAME
+            case 3: // PHP_STREAM_GROUP_NAME
+                return false;
+            case 4: // PHP_STREAM_META_OWNER
+                return $this->sftp->chown($path, $var);
+            case 5: // PHP_STREAM_META_GROUP
+                return $this->sftp->chgrp($path, $var);
+            case 6: // PHP_STREAM_META_ACCESS
+                return $this->sftp->chmod($path, $var) !== false;
+        }
+    }
+
+    /**
+     * Retrieve the underlaying resource
+     *
+     * @param int $cast_as
+     * @return resource
+     * @access public
+     */
+    function _stream_cast($cast_as)
+    {
+        return $this->sftp->fsock;
+    }
+
+    /**
+     * Advisory file locking
+     *
+     * @param int $operation
+     * @return bool
+     * @access public
+     */
+    function _stream_lock($operation)
+    {
+        return false;
+    }
+
+    /**
+     * Renames a file or directory
+     *
+     * Attempts to rename oldname to newname, moving it between directories if necessary.
+     * If newname exists, it will be overwritten.  This is a departure from what \phpseclib\Net\SFTP
+     * does.
+     *
+     * @param string $path_from
+     * @param string $path_to
+     * @return bool
+     * @access public
+     */
+    function _rename($path_from, $path_to)
+    {
+        $path1 = parse_url($path_from);
+        $path2 = parse_url($path_to);
+        unset($path1['path'], $path2['path']);
+        if ($path1 != $path2) {
+            return false;
+        }
+
+        $path_from = $this->_parse_path($path_from);
+        $path_to = parse_url($path_to);
+        if ($path_from === false) {
+            return false;
+        }
+
+        $path_to = $path_to['path']; // the $component part of parse_url() was added in PHP 5.1.2
+        // "It is an error if there already exists a file with the name specified by newpath."
+        //  -- http://tools.ietf.org/html/draft-ietf-secsh-filexfer-02#section-6.5
+        if (!$this->sftp->rename($path_from, $path_to)) {
+            if ($this->sftp->stat($path_to)) {
+                return $this->sftp->delete($path_to, true) && $this->sftp->rename($path_from, $path_to);
+            }
+            return false;
+        }
+
+        return true;
+    }
+
+    /**
+     * Open directory handle
+     *
+     * The only $options is "whether or not to enforce safe_mode (0x04)". Since safe mode was deprecated in 5.3 and
+     * removed in 5.4 I'm just going to ignore it.
+     *
+     * Also, nlist() is the best that this function is realistically going to be able to do. When an SFTP client
+     * sends a SSH_FXP_READDIR packet you don't generally get info on just one file but on multiple files. Quoting
+     * the SFTP specs:
+     *
+     *    The SSH_FXP_NAME response has the following format:
+     *
+     *        uint32     id
+     *        uint32     count
+     *        repeats count times:
+     *                string     filename
+     *                string     longname
+     *                ATTRS      attrs
+     *
+     * @param string $path
+     * @param int $options
+     * @return bool
+     * @access public
+     */
+    function _dir_opendir($path, $options)
+    {
+        $path = $this->_parse_path($path);
+        if ($path === false) {
+            return false;
+        }
+        $this->pos = 0;
+        $this->entries = $this->sftp->nlist($path);
+        return $this->entries !== false;
+    }
+
+    /**
+     * Read entry from directory handle
+     *
+     * @return mixed
+     * @access public
+     */
+    function _dir_readdir()
+    {
+        if (isset($this->entries[$this->pos])) {
+            return $this->entries[$this->pos++];
+        }
+        return false;
+    }
+
+    /**
+     * Rewind directory handle
+     *
+     * @return bool
+     * @access public
+     */
+    function _dir_rewinddir()
+    {
+        $this->pos = 0;
+        return true;
+    }
+
+    /**
+     * Close directory handle
+     *
+     * @return bool
+     * @access public
+     */
+    function _dir_closedir()
+    {
+        return true;
+    }
+
+    /**
+     * Create a directory
+     *
+     * Only valid $options is STREAM_MKDIR_RECURSIVE
+     *
+     * @param string $path
+     * @param int $mode
+     * @param int $options
+     * @return bool
+     * @access public
+     */
+    function _mkdir($path, $mode, $options)
+    {
+        $path = $this->_parse_path($path);
+        if ($path === false) {
+            return false;
+        }
+
+        return $this->sftp->mkdir($path, $mode, $options & STREAM_MKDIR_RECURSIVE);
+    }
+
+    /**
+     * Removes a directory
+     *
+     * Only valid $options is STREAM_MKDIR_RECURSIVE per <http://php.net/streamwrapper.rmdir>, however,
+     * <http://php.net/rmdir>  does not have a $recursive parameter as mkdir() does so I don't know how
+     * STREAM_MKDIR_RECURSIVE is supposed to be set. Also, when I try it out with rmdir() I get 8 as
+     * $options. What does 8 correspond to?
+     *
+     * @param string $path
+     * @param int $mode
+     * @param int $options
+     * @return bool
+     * @access public
+     */
+    function _rmdir($path, $options)
+    {
+        $path = $this->_parse_path($path);
+        if ($path === false) {
+            return false;
+        }
+
+        return $this->sftp->rmdir($path);
+    }
+
+    /**
+     * Flushes the output
+     *
+     * See <http://php.net/fflush>. Always returns true because \phpseclib\Net\SFTP doesn't cache stuff before writing
+     *
+     * @return bool
+     * @access public
+     */
+    function _stream_flush()
+    {
+        return true;
+    }
+
+    /**
+     * Retrieve information about a file resource
+     *
+     * @return mixed
+     * @access public
+     */
+    function _stream_stat()
+    {
+        $results = $this->sftp->stat($this->path);
+        if ($results === false) {
+            return false;
+        }
+        return $results;
+    }
+
+    /**
+     * Delete a file
+     *
+     * @param string $path
+     * @return bool
+     * @access public
+     */
+    function _unlink($path)
+    {
+        $path = $this->_parse_path($path);
+        if ($path === false) {
+            return false;
+        }
+
+        return $this->sftp->delete($path, false);
+    }
+
+    /**
+     * Retrieve information about a file
+     *
+     * Ignores the STREAM_URL_STAT_QUIET flag because the entirety of \phpseclib\Net\SFTP\Stream is quiet by default
+     * might be worthwhile to reconstruct bits 12-16 (ie. the file type) if mode doesn't have them but we'll
+     * cross that bridge when and if it's reached
+     *
+     * @param string $path
+     * @param int $flags
+     * @return mixed
+     * @access public
+     */
+    function _url_stat($path, $flags)
+    {
+        $path = $this->_parse_path($path);
+        if ($path === false) {
+            return false;
+        }
+
+        $results = $flags & STREAM_URL_STAT_LINK ? $this->sftp->lstat($path) : $this->sftp->stat($path);
+        if ($results === false) {
+            return false;
+        }
+
+        return $results;
+    }
+
+    /**
+     * Truncate stream
+     *
+     * @param int $new_size
+     * @return bool
+     * @access public
+     */
+    function _stream_truncate($new_size)
+    {
+        if (!$this->sftp->truncate($this->path, $new_size)) {
+            return false;
+        }
+
+        $this->eof = false;
+        $this->size = $new_size;
+
+        return true;
+    }
+
+    /**
+     * Change stream options
+     *
+     * STREAM_OPTION_WRITE_BUFFER isn't supported for the same reason stream_flush isn't.
+     * The other two aren't supported because of limitations in \phpseclib\Net\SFTP.
+     *
+     * @param int $option
+     * @param int $arg1
+     * @param int $arg2
+     * @return bool
+     * @access public
+     */
+    function _stream_set_option($option, $arg1, $arg2)
+    {
+        return false;
+    }
+
+    /**
+     * Close an resource
+     *
+     * @access public
+     */
+    function _stream_close()
+    {
+    }
+
+    /**
+     * __call Magic Method
+     *
+     * When you're utilizing an SFTP stream you're not calling the methods in this class directly - PHP is calling them for you.
+     * Which kinda begs the question... what methods is PHP calling and what parameters is it passing to them? This function
+     * lets you figure that out.
+     *
+     * If NET_SFTP_STREAM_LOGGING is defined all calls will be output on the screen and then (regardless of whether or not
+     * NET_SFTP_STREAM_LOGGING is enabled) the parameters will be passed through to the appropriate method.
+     *
+     * @param string
+     * @param array
+     * @return mixed
+     * @access public
+     */
+    function __call($name, $arguments)
+    {
+        if (defined('NET_SFTP_STREAM_LOGGING')) {
+            echo $name . '(';
+            $last = count($arguments) - 1;
+            foreach ($arguments as $i => $argument) {
+                var_export($argument);
+                if ($i != $last) {
+                    echo ',';
+                }
+            }
+            echo ")\r\n";
+        }
+        $name = '_' . $name;
+        if (!method_exists($this, $name)) {
+            return false;
+        }
+        return call_user_func_array(array($this, $name), $arguments);
+    }
+}
diff --git a/lib/phpseclib/Net/SSH1.php b/lib/phpseclib/Net/SSH1.php
index 1872700..514b20a 100644
--- a/lib/phpseclib/Net/SSH1.php
+++ b/lib/phpseclib/Net/SSH1.php
@@ -1,263 +1,230 @@
 <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
  * Pure-PHP implementation of SSHv1.
  *
- * PHP versions 4 and 5
+ * PHP version 5
  *
  * Here's a short example of how to use this library:
  * <code>
  * <?php
- *    include('Net/SSH1.php');
+ *    include 'vendor/autoload.php';
  *
- *    $ssh = new Net_SSH1('www.domain.tld');
+ *    $ssh = new \phpseclib\Net\SSH1('www.domain.tld');
  *    if (!$ssh->login('username', 'password')) {
  *        exit('Login Failed');
  *    }
  *
- *    while (true) {
- *        echo $ssh->interactiveRead();
- *
- *        $read = array(STDIN);
- *        $write = $except = NULL;
- *        if (stream_select($read, $write, $except, 0)) {
- *            $ssh->interactiveWrite(fread(STDIN, 1));
- *        }
- *    }
+ *    echo $ssh->exec('ls -la');
  * ?>
  * </code>
  *
  * Here's another short example:
  * <code>
  * <?php
- *    include('Net/SSH1.php');
+ *    include 'vendor/autoload.php';
  *
- *    $ssh = new Net_SSH1('www.domain.tld');
+ *    $ssh = new \phpseclib\Net\SSH1('www.domain.tld');
  *    if (!$ssh->login('username', 'password')) {
  *        exit('Login Failed');
  *    }
  *
- *    echo $ssh->exec('ls -la');
+ *    echo $ssh->read('username@username:~$');
+ *    $ssh->write("ls -la\n");
+ *    echo $ssh->read('username@username:~$');
  * ?>
  * </code>
  *
- * More information on the SSHv1 specification can be found by reading 
+ * More information on the SSHv1 specification can be found by reading
  * {@link http://www.snailbook.com/docs/protocol-1.5.txt protocol-1.5.txt}.
  *
- * LICENSE: This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- *
- * @category   Net
- * @package    Net_SSH1
- * @author     Jim Wigginton <terrafrost@php.net>
- * @copyright  MMVII Jim Wigginton
- * @license    http://www.gnu.org/licenses/lgpl.txt
- * @version    $Id: SSH1.php,v 1.15 2010/03/22 22:01:38 terrafrost Exp $
- * @link       http://phpseclib.sourceforge.net
- */
-
-/**
- * Include Math_BigInteger
- *
- * Used to do RSA encryption.
- */
-require_once('phpseclib/Math/BigInteger.php');
-
-/**
- * Include Crypt_Null
+ * @category  Net
+ * @package   SSH1
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2007 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
  */
-//require_once('Crypt/Null.php');
 
-/**
- * Include Crypt_DES
- */
-require_once('phpseclib/Crypt/DES.php');
+namespace phpseclib\Net;
 
-/**
- * Include Crypt_TripleDES
- */
-require_once('phpseclib/Crypt/TripleDES.php');
+use phpseclib\Crypt\DES;
+use phpseclib\Crypt\Random;
+use phpseclib\Crypt\TripleDES;
+use phpseclib\Math\BigInteger;
 
 /**
- * Include Crypt_RC4
- */
-require_once('phpseclib/Crypt/RC4.php');
-
-/**
- * Include Crypt_Random
- */
-require_once('phpseclib/Crypt/Random.php');
-
-/**#@+
- * Protocol Flags
- *
- * @access private
- */
-define('NET_SSH1_MSG_DISCONNECT',          1);
-define('NET_SSH1_SMSG_PUBLIC_KEY',         2);
-define('NET_SSH1_CMSG_SESSION_KEY',        3);
-define('NET_SSH1_CMSG_USER',               4);
-define('NET_SSH1_CMSG_AUTH_PASSWORD',      9);
-define('NET_SSH1_CMSG_REQUEST_PTY',       10);
-define('NET_SSH1_CMSG_EXEC_SHELL',        12);
-define('NET_SSH1_CMSG_EXEC_CMD',          13);
-define('NET_SSH1_SMSG_SUCCESS',           14);
-define('NET_SSH1_SMSG_FAILURE',           15);
-define('NET_SSH1_CMSG_STDIN_DATA',        16);
-define('NET_SSH1_SMSG_STDOUT_DATA',       17);
-define('NET_SSH1_SMSG_STDERR_DATA',       18);
-define('NET_SSH1_SMSG_EXITSTATUS',        20);
-define('NET_SSH1_CMSG_EXIT_CONFIRMATION', 33);
-/**#@-*/
-
-/**#@+
- * Encryption Methods
- *
- * @see Net_SSH1::getSupportedCiphers()
- * @access public
- */
-/**
- * No encryption
- *
- * Not supported.
- */
-define('NET_SSH1_CIPHER_NONE',       0);
-/**
- * IDEA in CFB mode
- *
- * Not supported.
- */
-define('NET_SSH1_CIPHER_IDEA',       1);
-/**
- * DES in CBC mode
- */
-define('NET_SSH1_CIPHER_DES',        2);
-/**
- * Triple-DES in CBC mode
- *
- * All implementations are required to support this
- */
-define('NET_SSH1_CIPHER_3DES',       3);
-/**
- * TRI's Simple Stream encryption CBC
- *
- * Not supported nor is it defined in the official SSH1 specs.  OpenSSH, however, does define it (see cipher.h),
- * although it doesn't use it (see cipher.c)
- */
-define('NET_SSH1_CIPHER_BROKEN_TSS', 4);
-/**
- * RC4
- *
- * Not supported.
- *
- * @internal According to the SSH1 specs:
- *
- *        "The first 16 bytes of the session key are used as the key for
- *         the server to client direction.  The remaining 16 bytes are used
- *         as the key for the client to server direction.  This gives
- *         independent 128-bit keys for each direction."
- *
- *     This library currently only supports encryption when the same key is being used for both directions.  This is
- *     because there's only one $crypto object.  Two could be added ($encrypt and $decrypt, perhaps).
- */
-define('NET_SSH1_CIPHER_RC4',        5);
-/**
- * Blowfish
+ * Pure-PHP implementation of SSHv1.
  *
- * Not supported nor is it defined in the official SSH1 specs.  OpenSSH, however, defines it (see cipher.h) and
- * uses it (see cipher.c)
+ * @package SSH1
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @access  public
  */
-define('NET_SSH1_CIPHER_BLOWFISH',   6);
-/**#@-*/
+class SSH1
+{
+    /**#@+
+     * Encryption Methods
+     *
+     * @see \phpseclib\Net\SSH1::getSupportedCiphers()
+     * @access public
+     */
+    /**
+     * No encryption
+     *
+     * Not supported.
+     */
+    const CIPHER_NONE = 0;
+    /**
+     * IDEA in CFB mode
+     *
+     * Not supported.
+     */
+    const CIPHER_IDEA = 1;
+    /**
+     * DES in CBC mode
+     */
+    const CIPHER_DES = 2;
+    /**
+     * Triple-DES in CBC mode
+     *
+     * All implementations are required to support this
+     */
+    const CIPHER_3DES = 3;
+    /**
+     * TRI's Simple Stream encryption CBC
+     *
+     * Not supported nor is it defined in the official SSH1 specs.  OpenSSH, however, does define it (see cipher.h),
+     * although it doesn't use it (see cipher.c)
+     */
+    const CIPHER_BROKEN_TSS = 4;
+    /**
+     * RC4
+     *
+     * Not supported.
+     *
+     * @internal According to the SSH1 specs:
+     *
+     *        "The first 16 bytes of the session key are used as the key for
+     *         the server to client direction.  The remaining 16 bytes are used
+     *         as the key for the client to server direction.  This gives
+     *         independent 128-bit keys for each direction."
+     *
+     *     This library currently only supports encryption when the same key is being used for both directions.  This is
+     *     because there's only one $crypto object.  Two could be added ($encrypt and $decrypt, perhaps).
+     */
+    const CIPHER_RC4 = 5;
+    /**
+     * Blowfish
+     *
+     * Not supported nor is it defined in the official SSH1 specs.  OpenSSH, however, defines it (see cipher.h) and
+     * uses it (see cipher.c)
+     */
+    const CIPHER_BLOWFISH = 6;
+    /**#@-*/
 
-/**#@+
- * Authentication Methods
- *
- * @see Net_SSH1::getSupportedAuthentications()
- * @access public
- */
-/**
- * .rhosts or /etc/hosts.equiv
- */
-define('NET_SSH1_AUTH_RHOSTS',     1);
-/**
- * pure RSA authentication
- */
-define('NET_SSH1_AUTH_RSA',        2);
-/**
- * password authentication
- *
- * This is the only method that is supported by this library.
- */
-define('NET_SSH1_AUTH_PASSWORD',   3);
-/**
- * .rhosts with RSA host authentication
- */
-define('NET_SSH1_AUTH_RHOSTS_RSA', 4);
-/**#@-*/
+    /**#@+
+     * Authentication Methods
+     *
+     * @see \phpseclib\Net\SSH1::getSupportedAuthentications()
+     * @access public
+    */
+    /**
+     * .rhosts or /etc/hosts.equiv
+     */
+    const AUTH_RHOSTS = 1;
+    /**
+     * pure RSA authentication
+     */
+    const AUTH_RSA = 2;
+    /**
+     * password authentication
+     *
+     * This is the only method that is supported by this library.
+     */
+    const AUTH_PASSWORD = 3;
+    /**
+     * .rhosts with RSA host authentication
+     */
+    const AUTH_RHOSTS_RSA = 4;
+    /**#@-*/
 
-/**#@+
- * Terminal Modes
- *
- * @link http://3sp.com/content/developer/maverick-net/docs/Maverick.SSH.PseudoTerminalModesMembers.html
- * @access private
- */
-define('NET_SSH1_TTY_OP_END',  0);
-/**#@-*/
+    /**#@+
+     * Terminal Modes
+     *
+     * @link http://3sp.com/content/developer/maverick-net/docs/Maverick.SSH.PseudoTerminalModesMembers.html
+     * @access private
+    */
+    const TTY_OP_END = 0;
+    /**#@-*/
 
-/**
- * The Response Type
- *
- * @see Net_SSH1::_get_binary_packet()
- * @access private
- */
-define('NET_SSH1_RESPONSE_TYPE', 1);
+    /**
+     * The Response Type
+     *
+     * @see \phpseclib\Net\SSH1::_get_binary_packet()
+     * @access private
+     */
+    const RESPONSE_TYPE = 1;
 
-/**
- * The Response Data
- *
- * @see Net_SSH1::_get_binary_packet()
- * @access private
- */
-define('NET_SSH1_RESPONSE_DATA', 2);
+    /**
+     * The Response Data
+     *
+     * @see \phpseclib\Net\SSH1::_get_binary_packet()
+     * @access private
+     */
+    const RESPONSE_DATA = 2;
 
-/**#@+
- * Execution Bitmap Masks
- *
- * @see Net_SSH1::bitmap
- * @access private
- */
-define('NET_SSH1_MASK_CONSTRUCTOR', 0x00000001);
-define('NET_SSH1_MASK_LOGIN',       0x00000002);
-define('NET_SSH1_MASK_SHELL',       0x00000004);
-/**#@-*/
+    /**#@+
+     * Execution Bitmap Masks
+     *
+     * @see \phpseclib\Net\SSH1::bitmap
+     * @access private
+    */
+    const MASK_CONSTRUCTOR = 0x00000001;
+    const MASK_CONNECTED   = 0x00000002;
+    const MASK_LOGIN       = 0x00000004;
+    const MASK_SHELL       = 0x00000008;
+    /**#@-*/
+
+    /**#@+
+     * @access public
+     * @see \phpseclib\Net\SSH1::getLog()
+    */
+    /**
+     * Returns the message numbers
+     */
+    const LOG_SIMPLE = 1;
+    /**
+     * Returns the message content
+     */
+    const LOG_COMPLEX = 2;
+    /**
+     * Outputs the content real-time
+     */
+    const LOG_REALTIME = 3;
+    /**
+     * Dumps the content real-time to a file
+     */
+    const LOG_REALTIME_FILE = 4;
+    /**#@-*/
+
+    /**#@+
+     * @access public
+     * @see \phpseclib\Net\SSH1::read()
+    */
+    /**
+     * Returns when a string matching $expect exactly is found
+     */
+    const READ_SIMPLE = 1;
+    /**
+     * Returns when a string matching the regular expression $expect is found
+     */
+    const READ_REGEX = 2;
+    /**#@-*/
 
-/**
- * Pure-PHP implementation of SSHv1.
- *
- * @author  Jim Wigginton <terrafrost@php.net>
- * @version 0.1.0
- * @access  public
- * @package Net_SSH1
- */
-class Net_SSH1 {
     /**
      * The SSH identifier
      *
-     * @var String
+     * @var string
      * @access private
      */
     var $identifier = 'SSH-1.5-phpseclib';
@@ -265,7 +232,7 @@ class Net_SSH1 {
     /**
      * The Socket Object
      *
-     * @var Object
+     * @var object
      * @access private
      */
     var $fsock;
@@ -273,7 +240,7 @@ class Net_SSH1 {
     /**
      * The cryptography object
      *
-     * @var Object
+     * @var object
      * @access private
      */
     var $crypto = false;
@@ -281,10 +248,10 @@ class Net_SSH1 {
     /**
      * Execution Bitmap
      *
-     * The bits that are set reprsent functions that have been called already.  This is used to determine
+     * The bits that are set represent functions that have been called already.  This is used to determine
      * if a requisite function has been successfully executed.  If not, an error should be thrown.
      *
-     * @var Integer
+     * @var int
      * @access private
      */
     var $bitmap = 0;
@@ -294,8 +261,8 @@ class Net_SSH1 {
      *
      * Logged for debug purposes
      *
-     * @see Net_SSH1::getServerKeyPublicExponent()
-     * @var String
+     * @see self::getServerKeyPublicExponent()
+     * @var string
      * @access private
      */
     var $server_key_public_exponent;
@@ -305,8 +272,8 @@ class Net_SSH1 {
      *
      * Logged for debug purposes
      *
-     * @see Net_SSH1::getServerKeyPublicModulus()
-     * @var String
+     * @see self::getServerKeyPublicModulus()
+     * @var string
      * @access private
      */
     var $server_key_public_modulus;
@@ -316,8 +283,8 @@ class Net_SSH1 {
      *
      * Logged for debug purposes
      *
-     * @see Net_SSH1::getHostKeyPublicExponent()
-     * @var String
+     * @see self::getHostKeyPublicExponent()
+     * @var string
      * @access private
      */
     var $host_key_public_exponent;
@@ -327,8 +294,8 @@ class Net_SSH1 {
      *
      * Logged for debug purposes
      *
-     * @see Net_SSH1::getHostKeyPublicModulus()
-     * @var String
+     * @see self::getHostKeyPublicModulus()
+     * @var string
      * @access private
      */
     var $host_key_public_modulus;
@@ -338,18 +305,18 @@ class Net_SSH1 {
      *
      * Logged for debug purposes
      *
-     * @see Net_SSH1::getSupportedCiphers()
-     * @var Array
+     * @see self::getSupportedCiphers()
+     * @var array
      * @access private
      */
     var $supported_ciphers = array(
-        NET_SSH1_CIPHER_NONE       => 'No encryption',
-        NET_SSH1_CIPHER_IDEA       => 'IDEA in CFB mode',
-        NET_SSH1_CIPHER_DES        => 'DES in CBC mode',
-        NET_SSH1_CIPHER_3DES       => 'Triple-DES in CBC mode',
-        NET_SSH1_CIPHER_BROKEN_TSS => 'TRI\'s Simple Stream encryption CBC',
-        NET_SSH1_CIPHER_RC4        => 'RC4',
-        NET_SSH1_CIPHER_BLOWFISH   => 'Blowfish'
+        self::CIPHER_NONE       => 'No encryption',
+        self::CIPHER_IDEA       => 'IDEA in CFB mode',
+        self::CIPHER_DES        => 'DES in CBC mode',
+        self::CIPHER_3DES       => 'Triple-DES in CBC mode',
+        self::CIPHER_BROKEN_TSS => 'TRI\'s Simple Stream encryption CBC',
+        self::CIPHER_RC4        => 'RC4',
+        self::CIPHER_BLOWFISH   => 'Blowfish'
     );
 
     /**
@@ -357,99 +324,309 @@ class Net_SSH1 {
      *
      * Logged for debug purposes
      *
-     * @see Net_SSH1::getSupportedAuthentications()
-     * @var Array
+     * @see self::getSupportedAuthentications()
+     * @var array
      * @access private
      */
     var $supported_authentications = array(
-        NET_SSH1_AUTH_RHOSTS     => '.rhosts or /etc/hosts.equiv',
-        NET_SSH1_AUTH_RSA        => 'pure RSA authentication',
-        NET_SSH1_AUTH_PASSWORD   => 'password authentication',
-        NET_SSH1_AUTH_RHOSTS_RSA => '.rhosts with RSA host authentication'
+        self::AUTH_RHOSTS     => '.rhosts or /etc/hosts.equiv',
+        self::AUTH_RSA        => 'pure RSA authentication',
+        self::AUTH_PASSWORD   => 'password authentication',
+        self::AUTH_RHOSTS_RSA => '.rhosts with RSA host authentication'
     );
 
     /**
      * Server Identification
      *
-     * @see Net_SSH1::getServerIdentification()
-     * @var String
+     * @see self::getServerIdentification()
+     * @var string
      * @access private
      */
     var $server_identification = '';
 
     /**
+     * Protocol Flags
+     *
+     * @see self::__construct()
+     * @var array
+     * @access private
+     */
+    var $protocol_flags = array();
+
+    /**
+     * Protocol Flag Log
+     *
+     * @see self::getLog()
+     * @var array
+     * @access private
+     */
+    var $protocol_flag_log = array();
+
+    /**
+     * Message Log
+     *
+     * @see self::getLog()
+     * @var array
+     * @access private
+     */
+    var $message_log = array();
+
+    /**
+     * Real-time log file pointer
+     *
+     * @see self::_append_log()
+     * @var resource
+     * @access private
+     */
+    var $realtime_log_file;
+
+    /**
+     * Real-time log file size
+     *
+     * @see self::_append_log()
+     * @var int
+     * @access private
+     */
+    var $realtime_log_size;
+
+    /**
+     * Real-time log file wrap boolean
+     *
+     * @see self::_append_log()
+     * @var bool
+     * @access private
+     */
+    var $realtime_log_wrap;
+
+    /**
+     * Interactive Buffer
+     *
+     * @see self::read()
+     * @var array
+     * @access private
+     */
+    var $interactiveBuffer = '';
+
+    /**
+     * Timeout
+     *
+     * @see self::setTimeout()
+     * @access private
+     */
+    var $timeout;
+
+    /**
+     * Current Timeout
+     *
+     * @see self::_get_channel_packet()
+     * @access private
+     */
+    var $curTimeout;
+
+    /**
+     * Log Boundary
+     *
+     * @see self::_format_log()
+     * @access private
+     */
+    var $log_boundary = ':';
+
+    /**
+     * Log Long Width
+     *
+     * @see self::_format_log()
+     * @access private
+     */
+    var $log_long_width = 65;
+
+    /**
+     * Log Short Width
+     *
+     * @see self::_format_log()
+     * @access private
+     */
+    var $log_short_width = 16;
+
+    /**
+     * Hostname
+     *
+     * @see self::__construct()
+     * @see self::_connect()
+     * @var string
+     * @access private
+     */
+    var $host;
+
+    /**
+     * Port Number
+     *
+     * @see self::__construct()
+     * @see self::_connect()
+     * @var int
+     * @access private
+     */
+    var $port;
+
+    /**
+     * Timeout for initial connection
+     *
+     * Set by the constructor call. Calling setTimeout() is optional. If it's not called functions like
+     * exec() won't timeout unless some PHP setting forces it too. The timeout specified in the constructor,
+     * however, is non-optional. There will be a timeout, whether or not you set it. If you don't it'll be
+     * 10 seconds. It is used by fsockopen() in that function.
+     *
+     * @see self::__construct()
+     * @see self::_connect()
+     * @var int
+     * @access private
+     */
+    var $connectionTimeout;
+
+    /**
+     * Default cipher
+     *
+     * @see self::__construct()
+     * @see self::_connect()
+     * @var int
+     * @access private
+     */
+    var $cipher;
+
+    /**
      * Default Constructor.
      *
      * Connects to an SSHv1 server
      *
-     * @param String $host
-     * @param optional Integer $port
-     * @param optional Integer $timeout
-     * @param optional Integer $cipher
-     * @return Net_SSH1
+     * @param string $host
+     * @param int $port
+     * @param int $timeout
+     * @param int $cipher
+     * @return \phpseclib\Net\SSH1
      * @access public
      */
-    function Net_SSH1($host, $port = 22, $timeout = 10, $cipher = NET_SSH1_CIPHER_3DES)
+    function __construct($host, $port = 22, $timeout = 10, $cipher = self::CIPHER_3DES)
     {
-        $this->fsock = @fsockopen($host, $port, $errno, $errstr, $timeout);
+        $this->protocol_flags = array(
+            1  => 'NET_SSH1_MSG_DISCONNECT',
+            2  => 'NET_SSH1_SMSG_PUBLIC_KEY',
+            3  => 'NET_SSH1_CMSG_SESSION_KEY',
+            4  => 'NET_SSH1_CMSG_USER',
+            9  => 'NET_SSH1_CMSG_AUTH_PASSWORD',
+            10 => 'NET_SSH1_CMSG_REQUEST_PTY',
+            12 => 'NET_SSH1_CMSG_EXEC_SHELL',
+            13 => 'NET_SSH1_CMSG_EXEC_CMD',
+            14 => 'NET_SSH1_SMSG_SUCCESS',
+            15 => 'NET_SSH1_SMSG_FAILURE',
+            16 => 'NET_SSH1_CMSG_STDIN_DATA',
+            17 => 'NET_SSH1_SMSG_STDOUT_DATA',
+            18 => 'NET_SSH1_SMSG_STDERR_DATA',
+            19 => 'NET_SSH1_CMSG_EOF',
+            20 => 'NET_SSH1_SMSG_EXITSTATUS',
+            33 => 'NET_SSH1_CMSG_EXIT_CONFIRMATION'
+        );
+
+        $this->_define_array($this->protocol_flags);
+
+        $this->host = $host;
+        $this->port = $port;
+        $this->connectionTimeout = $timeout;
+        $this->cipher = $cipher;
+    }
+
+    /**
+     * Connect to an SSHv1 server
+     *
+     * @return bool
+     * @access private
+     */
+    function _connect()
+    {
+        $this->fsock = @fsockopen($this->host, $this->port, $errno, $errstr, $this->connectionTimeout);
         if (!$this->fsock) {
-            user_error(rtrim("Cannot connect to $host. Error $errno. $errstr"), E_USER_NOTICE);
-            return;
+            user_error(rtrim("Cannot connect to {$this->host}:{$this->port}. Error $errno. $errstr"));
+            return false;
         }
 
         $this->server_identification = $init_line = fgets($this->fsock, 255);
+
+        if (defined('NET_SSH1_LOGGING')) {
+            $this->_append_log('<-', $this->server_identification);
+            $this->_append_log('->', $this->identifier . "\r\n");
+        }
+
         if (!preg_match('#SSH-([0-9\.]+)-(.+)#', $init_line, $parts)) {
-            user_error('Can only connect to SSH servers', E_USER_NOTICE);
-            return;
+            user_error('Can only connect to SSH servers');
+            return false;
         }
         if ($parts[1][0] != 1) {
-            user_error("Cannot connect to SSH $parts[1] servers", E_USER_NOTICE);
-            return;
+            user_error("Cannot connect to SSH $parts[1] servers");
+            return false;
         }
 
         fputs($this->fsock, $this->identifier."\r\n");
 
         $response = $this->_get_binary_packet();
-        if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_PUBLIC_KEY) {
-            user_error('Expected SSH_SMSG_PUBLIC_KEY', E_USER_NOTICE);
-            return;
+        if ($response[self::RESPONSE_TYPE] != NET_SSH1_SMSG_PUBLIC_KEY) {
+            user_error('Expected SSH_SMSG_PUBLIC_KEY');
+            return false;
         }
 
-        $anti_spoofing_cookie = $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 8);
+        $anti_spoofing_cookie = $this->_string_shift($response[self::RESPONSE_DATA], 8);
 
-        $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4);
+        $this->_string_shift($response[self::RESPONSE_DATA], 4);
 
-        $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2));
-        $server_key_public_exponent = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+        if (strlen($response[self::RESPONSE_DATA]) < 2) {
+            return false;
+        }
+        $temp = unpack('nlen', $this->_string_shift($response[self::RESPONSE_DATA], 2));
+        $server_key_public_exponent = new BigInteger($this->_string_shift($response[self::RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
         $this->server_key_public_exponent = $server_key_public_exponent;
 
-        $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2));
-        $server_key_public_modulus = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+        if (strlen($response[self::RESPONSE_DATA]) < 2) {
+            return false;
+        }
+        $temp = unpack('nlen', $this->_string_shift($response[self::RESPONSE_DATA], 2));
+        $server_key_public_modulus = new BigInteger($this->_string_shift($response[self::RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+
         $this->server_key_public_modulus = $server_key_public_modulus;
 
-        $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4);
+        $this->_string_shift($response[self::RESPONSE_DATA], 4);
 
-        $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2));
-        $host_key_public_exponent = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+        if (strlen($response[self::RESPONSE_DATA]) < 2) {
+            return false;
+        }
+        $temp = unpack('nlen', $this->_string_shift($response[self::RESPONSE_DATA], 2));
+        $host_key_public_exponent = new BigInteger($this->_string_shift($response[self::RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
         $this->host_key_public_exponent = $host_key_public_exponent;
 
-        $temp = unpack('nlen', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 2));
-        $host_key_public_modulus = new Math_BigInteger($this->_string_shift($response[NET_SSH1_RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+        if (strlen($response[self::RESPONSE_DATA]) < 2) {
+            return false;
+        }
+        $temp = unpack('nlen', $this->_string_shift($response[self::RESPONSE_DATA], 2));
+        $host_key_public_modulus = new BigInteger($this->_string_shift($response[self::RESPONSE_DATA], ceil($temp['len'] / 8)), 256);
+
         $this->host_key_public_modulus = $host_key_public_modulus;
 
-        $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4);
+        $this->_string_shift($response[self::RESPONSE_DATA], 4);
 
         // get a list of the supported ciphers
-        extract(unpack('Nsupported_ciphers_mask', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4)));
-        foreach ($this->supported_ciphers as $mask=>$name) {
+        if (strlen($response[self::RESPONSE_DATA]) < 4) {
+            return false;
+        }
+        extract(unpack('Nsupported_ciphers_mask', $this->_string_shift($response[self::RESPONSE_DATA], 4)));
+
+        foreach ($this->supported_ciphers as $mask => $name) {
             if (($supported_ciphers_mask & (1 << $mask)) == 0) {
                 unset($this->supported_ciphers[$mask]);
             }
         }
 
         // get a list of the supported authentications
-        extract(unpack('Nsupported_authentications_mask', $this->_string_shift($response[NET_SSH1_RESPONSE_DATA], 4)));
-        foreach ($this->supported_authentications as $mask=>$name) {
+        if (strlen($response[self::RESPONSE_DATA]) < 4) {
+            return false;
+        }
+        extract(unpack('Nsupported_authentications_mask', $this->_string_shift($response[self::RESPONSE_DATA], 4)));
+        foreach ($this->supported_authentications as $mask => $name) {
             if (($supported_authentications_mask & (1 << $mask)) == 0) {
                 unset($this->supported_authentications[$mask]);
             }
@@ -457,10 +634,7 @@ class Net_SSH1 {
 
         $session_id = pack('H*', md5($host_key_public_modulus->toBytes() . $server_key_public_modulus->toBytes() . $anti_spoofing_cookie));
 
-        $session_key = '';
-        for ($i = 0; $i < 32; $i++) {
-            $session_key.= chr(crypt_random(0, 255));
-        }
+        $session_key = Random::string(32);
         $double_encrypted_session_key = $session_key ^ str_pad($session_id, 32, chr(0));
 
         if ($server_key_public_modulus->compare($host_key_public_modulus) < 0) {
@@ -495,32 +669,32 @@ class Net_SSH1 {
             );
         }
 
-        $cipher = isset($this->supported_ciphers[$cipher]) ? $cipher : NET_SSH1_CIPHER_3DES;
+        $cipher = isset($this->supported_ciphers[$this->cipher]) ? $this->cipher : self::CIPHER_3DES;
         $data = pack('C2a*na*N', NET_SSH1_CMSG_SESSION_KEY, $cipher, $anti_spoofing_cookie, 8 * strlen($double_encrypted_session_key), $double_encrypted_session_key, 0);
 
         if (!$this->_send_binary_packet($data)) {
-            user_error('Error sending SSH_CMSG_SESSION_KEY', E_USER_NOTICE);
-            return;
+            user_error('Error sending SSH_CMSG_SESSION_KEY');
+            return false;
         }
 
         switch ($cipher) {
-            //case NET_SSH1_CIPHER_NONE:
-            //    $this->crypto = new Crypt_Null();
+            //case self::CIPHER_NONE:
+            //    $this->crypto = new \phpseclib\Crypt\Null();
             //    break;
-            case NET_SSH1_CIPHER_DES:
-                $this->crypto = new Crypt_DES();
+            case self::CIPHER_DES:
+                $this->crypto = new DES();
                 $this->crypto->disablePadding();
                 $this->crypto->enableContinuousBuffer();
                 $this->crypto->setKey(substr($session_key, 0,  8));
                 break;
-            case NET_SSH1_CIPHER_3DES:
-                $this->crypto = new Crypt_TripleDES(CRYPT_DES_MODE_3CBC);
+            case self::CIPHER_3DES:
+                $this->crypto = new TripleDES(TripleDES::MODE_3CBC);
                 $this->crypto->disablePadding();
                 $this->crypto->enableContinuousBuffer();
                 $this->crypto->setKey(substr($session_key, 0, 24));
                 break;
-            //case NET_SSH1_CIPHER_RC4:
-            //    $this->crypto = new Crypt_RC4();
+            //case self::CIPHER_RC4:
+            //    $this->crypto = new RC4();
             //    $this->crypto->enableContinuousBuffer();
             //    $this->crypto->setKey(substr($session_key, 0,  16));
             //    break;
@@ -528,66 +702,100 @@ class Net_SSH1 {
 
         $response = $this->_get_binary_packet();
 
-        if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) {
-            user_error('Expected SSH_SMSG_SUCCESS', E_USER_NOTICE);
-            return;
+        if ($response[self::RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) {
+            user_error('Expected SSH_SMSG_SUCCESS');
+            return false;
         }
 
-        $this->bitmap = NET_SSH1_MASK_CONSTRUCTOR;
+        $this->bitmap = self::MASK_CONNECTED;
+
+        return true;
     }
 
     /**
      * Login
      *
-     * @param String $username
-     * @param optional String $password
-     * @return Boolean
+     * @param string $username
+     * @param string $password
+     * @return bool
      * @access public
      */
     function login($username, $password = '')
     {
-        if (!($this->bitmap & NET_SSH1_MASK_CONSTRUCTOR)) {
+        if (!($this->bitmap & self::MASK_CONSTRUCTOR)) {
+            $this->bitmap |= self::MASK_CONSTRUCTOR;
+            if (!$this->_connect()) {
+                return false;
+            }
+        }
+
+        if (!($this->bitmap & self::MASK_CONNECTED)) {
             return false;
         }
 
         $data = pack('CNa*', NET_SSH1_CMSG_USER, strlen($username), $username);
 
         if (!$this->_send_binary_packet($data)) {
-            user_error('Error sending SSH_CMSG_USER', E_USER_NOTICE);
+            user_error('Error sending SSH_CMSG_USER');
             return false;
         }
 
         $response = $this->_get_binary_packet();
 
-        if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) {
-            $this->bitmap |= NET_SSH1_MASK_LOGIN;
+        if ($response === true) {
+            return false;
+        }
+        if ($response[self::RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) {
+            $this->bitmap |= self::MASK_LOGIN;
             return true;
-        } else if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_FAILURE) {
-            user_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE', E_USER_NOTICE);
+        } elseif ($response[self::RESPONSE_TYPE] != NET_SSH1_SMSG_FAILURE) {
+            user_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE');
             return false;
         }
 
         $data = pack('CNa*', NET_SSH1_CMSG_AUTH_PASSWORD, strlen($password), $password);
 
         if (!$this->_send_binary_packet($data)) {
-            user_error('Error sending SSH_CMSG_AUTH_PASSWORD', E_USER_NOTICE);
+            user_error('Error sending SSH_CMSG_AUTH_PASSWORD');
             return false;
         }
 
+        // remove the username and password from the last logged packet
+        if (defined('NET_SSH1_LOGGING') && NET_SSH1_LOGGING == self::LOG_COMPLEX) {
+            $data = pack('CNa*', NET_SSH1_CMSG_AUTH_PASSWORD, strlen('password'), 'password');
+            $this->message_log[count($this->message_log) - 1] = $data;
+        }
+
         $response = $this->_get_binary_packet();
 
-        if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) {
-            $this->bitmap |= NET_SSH1_MASK_LOGIN;
+        if ($response === true) {
+            return false;
+        }
+        if ($response[self::RESPONSE_TYPE] == NET_SSH1_SMSG_SUCCESS) {
+            $this->bitmap |= self::MASK_LOGIN;
             return true;
-        } else if ($response[NET_SSH1_RESPONSE_TYPE] == NET_SSH1_SMSG_FAILURE) {
+        } elseif ($response[self::RESPONSE_TYPE] == NET_SSH1_SMSG_FAILURE) {
             return false;
         } else {
-            user_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE', E_USER_NOTICE);
+            user_error('Expected SSH_SMSG_SUCCESS or SSH_SMSG_FAILURE');
             return false;
         }
     }
 
     /**
+     * Set Timeout
+     *
+     * $ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely.  setTimeout() makes it so it'll timeout.
+     * Setting $timeout to false or 0 will mean there is no timeout.
+     *
+     * @param mixed $timeout
+     */
+    function setTimeout($timeout)
+    {
+        $this->timeout = $this->curTimeout = $timeout;
+    }
+
+    /**
      * Executes a command on a non-interactive shell, returns the output, and quits.
      *
      * An SSH1 server will close the connection after a command has been executed on a non-interactive shell.  SSH2
@@ -597,54 +805,43 @@ class Net_SSH1 {
      * {@link http://www.faqs.org/docs/bashman/bashref_65.html http://www.faqs.org/docs/bashman/bashref_65.html}
      * {@link http://www.faqs.org/docs/bashman/bashref_62.html http://www.faqs.org/docs/bashman/bashref_62.html}
      *
-     * To execute further commands, a new Net_SSH1 object will need to be created.
+     * To execute further commands, a new \phpseclib\Net\SSH1 object will need to be created.
      *
      * Returns false on failure and the output, otherwise.
      *
-     * @see Net_SSH1::interactiveRead()
-     * @see Net_SSH1::interactiveWrite()
-     * @param String $cmd
+     * @see self::interactiveRead()
+     * @see self::interactiveWrite()
+     * @param string $cmd
      * @return mixed
      * @access public
      */
-    function exec($cmd)
+    function exec($cmd, $block = true)
     {
-        if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) {
-            user_error('Operation disallowed prior to login()', E_USER_NOTICE);
+        if (!($this->bitmap & self::MASK_LOGIN)) {
+            user_error('Operation disallowed prior to login()');
             return false;
         }
 
-        // connect using the sample parameters in protocol-1.5.txt.
-        // according to wikipedia.org's entry on text terminals, "the fundamental type of application running on a text
-        // terminal is a command line interpreter or shell".  thus, opening a terminal session to run the shell.
-        $data = pack('CNa*N4C', NET_SSH1_CMSG_REQUEST_PTY, strlen('vt100'), 'vt100', 24, 80, 0, 0, NET_SSH1_TTY_OP_END);
+        $data = pack('CNa*', NET_SSH1_CMSG_EXEC_CMD, strlen($cmd), $cmd);
 
         if (!$this->_send_binary_packet($data)) {
-            user_error('Error sending SSH_CMSG_REQUEST_PTY', E_USER_NOTICE);
-            return false;
-        }
-
-        $response = $this->_get_binary_packet();
-
-        if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) {
-            user_error('Expected SSH_SMSG_SUCCESS', E_USER_NOTICE);
+            user_error('Error sending SSH_CMSG_EXEC_CMD');
             return false;
         }
 
-        $data = pack('CNa*', NET_SSH1_CMSG_EXEC_CMD, strlen($cmd), $cmd);
-
-        if (!$this->_send_binary_packet($data)) {
-            user_error('Error sending SSH_CMSG_EXEC_CMD', E_USER_NOTICE);
-            return false;
+        if (!$block) {
+            return true;
         }
 
         $output = '';
         $response = $this->_get_binary_packet();
 
-        do {
-            $output.= substr($response[NET_SSH1_RESPONSE_DATA], 4);
-            $response = $this->_get_binary_packet();
-        } while ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_EXITSTATUS);
+        if ($response !== false) {
+            do {
+                $output.= substr($response[self::RESPONSE_DATA], 4);
+                $response = $this->_get_binary_packet();
+            } while (is_array($response) && $response[self::RESPONSE_TYPE] != NET_SSH1_SMSG_EXITSTATUS);
+        }
 
         $data = pack('C', NET_SSH1_CMSG_EXIT_CONFIRMATION);
 
@@ -653,7 +850,7 @@ class Net_SSH1 {
 
         fclose($this->fsock);
 
-        // reset the execution bitmap - a new Net_SSH1 object needs to be created.
+        // reset the execution bitmap - a new \phpseclib\Net\SSH1 object needs to be created.
         $this->bitmap = 0;
 
         return $output;
@@ -662,35 +859,41 @@ class Net_SSH1 {
     /**
      * Creates an interactive shell
      *
-     * @see Net_SSH1::interactiveRead()
-     * @see Net_SSH1::interactiveWrite()
-     * @return Boolean
+     * @see self::interactiveRead()
+     * @see self::interactiveWrite()
+     * @return bool
      * @access private
      */
     function _initShell()
     {
-        $data = pack('CNa*N4C', NET_SSH1_CMSG_REQUEST_PTY, strlen('vt100'), 'vt100', 24, 80, 0, 0, NET_SSH1_TTY_OP_END);
+        // connect using the sample parameters in protocol-1.5.txt.
+        // according to wikipedia.org's entry on text terminals, "the fundamental type of application running on a text
+        // terminal is a command line interpreter or shell".  thus, opening a terminal session to run the shell.
+        $data = pack('CNa*N4C', NET_SSH1_CMSG_REQUEST_PTY, strlen('vt100'), 'vt100', 24, 80, 0, 0, self::TTY_OP_END);
 
         if (!$this->_send_binary_packet($data)) {
-            user_error('Error sending SSH_CMSG_REQUEST_PTY', E_USER_NOTICE);
+            user_error('Error sending SSH_CMSG_REQUEST_PTY');
             return false;
         }
 
         $response = $this->_get_binary_packet();
 
-        if ($response[NET_SSH1_RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) {
-            user_error('Expected SSH_SMSG_SUCCESS', E_USER_NOTICE);
+        if ($response === true) {
+            return false;
+        }
+        if ($response[self::RESPONSE_TYPE] != NET_SSH1_SMSG_SUCCESS) {
+            user_error('Expected SSH_SMSG_SUCCESS');
             return false;
         }
 
         $data = pack('C', NET_SSH1_CMSG_EXEC_SHELL);
 
         if (!$this->_send_binary_packet($data)) {
-            user_error('Error sending SSH_CMSG_EXEC_SHELL', E_USER_NOTICE);
+            user_error('Error sending SSH_CMSG_EXEC_SHELL');
             return false;
         }
 
-        $this->bitmap |= NET_SSH1_MASK_SHELL;
+        $this->bitmap |= self::MASK_SHELL;
 
         //stream_set_blocking($this->fsock, 0);
 
@@ -700,27 +903,83 @@ class Net_SSH1 {
     /**
      * Inputs a command into an interactive shell.
      *
-     * @see Net_SSH1::interactiveRead()
-     * @param String $cmd
-     * @return Boolean
+     * @see self::interactiveWrite()
+     * @param string $cmd
+     * @return bool
+     * @access public
+     */
+    function write($cmd)
+    {
+        return $this->interactiveWrite($cmd);
+    }
+
+    /**
+     * Returns the output of an interactive shell when there's a match for $expect
+     *
+     * $expect can take the form of a string literal or, if $mode == self::READ_REGEX,
+     * a regular expression.
+     *
+     * @see self::write()
+     * @param string $expect
+     * @param int $mode
+     * @return bool
+     * @access public
+     */
+    function read($expect, $mode = self::READ_SIMPLE)
+    {
+        if (!($this->bitmap & self::MASK_LOGIN)) {
+            user_error('Operation disallowed prior to login()');
+            return false;
+        }
+
+        if (!($this->bitmap & self::MASK_SHELL) && !$this->_initShell()) {
+            user_error('Unable to initiate an interactive shell session');
+            return false;
+        }
+
+        $match = $expect;
+        while (true) {
+            if ($mode == self::READ_REGEX) {
+                preg_match($expect, $this->interactiveBuffer, $matches);
+                $match = isset($matches[0]) ? $matches[0] : '';
+            }
+            $pos = strlen($match) ? strpos($this->interactiveBuffer, $match) : false;
+            if ($pos !== false) {
+                return $this->_string_shift($this->interactiveBuffer, $pos + strlen($match));
+            }
+            $response = $this->_get_binary_packet();
+
+            if ($response === true) {
+                return $this->_string_shift($this->interactiveBuffer, strlen($this->interactiveBuffer));
+            }
+            $this->interactiveBuffer.= substr($response[self::RESPONSE_DATA], 4);
+        }
+    }
+
+    /**
+     * Inputs a command into an interactive shell.
+     *
+     * @see self::interactiveRead()
+     * @param string $cmd
+     * @return bool
      * @access public
      */
     function interactiveWrite($cmd)
     {
-        if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) {
-            user_error('Operation disallowed prior to login()', E_USER_NOTICE);
+        if (!($this->bitmap & self::MASK_LOGIN)) {
+            user_error('Operation disallowed prior to login()');
             return false;
         }
 
-        if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) {
-            user_error('Unable to initiate an interactive shell session', E_USER_NOTICE);
+        if (!($this->bitmap & self::MASK_SHELL) && !$this->_initShell()) {
+            user_error('Unable to initiate an interactive shell session');
             return false;
         }
 
         $data = pack('CNa*', NET_SSH1_CMSG_STDIN_DATA, strlen($cmd), $cmd);
 
         if (!$this->_send_binary_packet($data)) {
-            user_error('Error sending SSH_CMSG_STDIN', E_USER_NOTICE);
+            user_error('Error sending SSH_CMSG_STDIN');
             return false;
         }
 
@@ -728,27 +987,27 @@ class Net_SSH1 {
     }
 
     /**
-     * Reads the output of an interactive shell.
+     * Returns the output of an interactive shell when no more output is available.
      *
      * Requires PHP 4.3.0 or later due to the use of the stream_select() function.  If you see stuff like
-     * "[00m", you're seeing ANSI escape codes.  According to
+     * "^[[00m", you're seeing ANSI escape codes.  According to
      * {@link http://support.microsoft.com/kb/101875 How to Enable ANSI.SYS in a Command Window}, "Windows NT
      * does not support ANSI escape sequences in Win32 Console applications", so if you're a Windows user,
      * there's not going to be much recourse.
      *
-     * @see Net_SSH1::interactiveRead()
-     * @return String
+     * @see self::interactiveRead()
+     * @return string
      * @access public
      */
     function interactiveRead()
     {
-        if (!($this->bitmap & NET_SSH1_MASK_LOGIN)) {
-            user_error('Operation disallowed prior to login()', E_USER_NOTICE);
+        if (!($this->bitmap & self::MASK_LOGIN)) {
+            user_error('Operation disallowed prior to login()');
             return false;
         }
 
-        if (!($this->bitmap & NET_SSH1_MASK_SHELL) && !$this->_initShell()) {
-            user_error('Unable to initiate an interactive shell session', E_USER_NOTICE);
+        if (!($this->bitmap & self::MASK_SHELL) && !$this->_initShell()) {
+            user_error('Unable to initiate an interactive shell session');
             return false;
         }
 
@@ -756,7 +1015,7 @@ class Net_SSH1 {
         $write = $except = null;
         if (stream_select($read, $write, $except, 0)) {
             $response = $this->_get_binary_packet();
-            return substr($response[NET_SSH1_RESPONSE_DATA], 4);
+            return substr($response[self::RESPONSE_DATA], 4);
         } else {
             return '';
         }
@@ -788,13 +1047,29 @@ class Net_SSH1 {
     /**
      * Disconnect
      *
-     * @param String $msg
+     * @param string $msg
      * @access private
      */
     function _disconnect($msg = 'Client Quit')
     {
         if ($this->bitmap) {
+            $data = pack('C', NET_SSH1_CMSG_EOF);
+            $this->_send_binary_packet($data);
+            /*
+            $response = $this->_get_binary_packet();
+            if ($response === true) {
+                $response = array(self::RESPONSE_TYPE => -1);
+            }
+            switch ($response[self::RESPONSE_TYPE]) {
+                case NET_SSH1_SMSG_EXITSTATUS:
+                    $data = pack('C', NET_SSH1_CMSG_EXIT_CONFIRMATION);
+                    break;
+                default:
+                    $data = pack('CNa*', NET_SSH1_MSG_DISCONNECT, strlen($msg), $msg);
+            }
+            */
             $data = pack('CNa*', NET_SSH1_MSG_DISCONNECT, strlen($msg), $msg);
+
             $this->_send_binary_packet($data);
             fclose($this->fsock);
             $this->bitmap = 0;
@@ -809,25 +1084,52 @@ class Net_SSH1 {
      * Also, this function could be improved upon by adding detection for the following exploit:
      * http://www.securiteam.com/securitynews/5LP042K3FY.html
      *
-     * @see Net_SSH1::_send_binary_packet()
-     * @return Array
+     * @see self::_send_binary_packet()
+     * @return array
      * @access private
      */
     function _get_binary_packet()
     {
         if (feof($this->fsock)) {
-            //user_error('connection closed prematurely', E_USER_NOTICE);
+            //user_error('connection closed prematurely');
             return false;
         }
 
-        $temp = unpack('Nlength', fread($this->fsock, 4));
+        if ($this->curTimeout) {
+            $read = array($this->fsock);
+            $write = $except = null;
+
+            $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+            $sec = floor($this->curTimeout);
+            $usec = 1000000 * ($this->curTimeout - $sec);
+            // on windows this returns a "Warning: Invalid CRT parameters detected" error
+            if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) {
+                //$this->_disconnect('Timeout');
+                return true;
+            }
+            $elapsed = strtok(microtime(), ' ') + strtok('') - $start;
+            $this->curTimeout-= $elapsed;
+        }
+
+        $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+        $data = fread($this->fsock, 4);
+        if (strlen($data) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $data);
 
         $padding_length = 8 - ($temp['length'] & 7);
         $length = $temp['length'] + $padding_length;
+        $raw = '';
 
-        $raw = fread($this->fsock, $length);
+        while ($length > 0) {
+            $temp = fread($this->fsock, $length);
+            $raw.= $temp;
+            $length-= strlen($temp);
+        }
+        $stop = strtok(microtime(), ' ') + strtok('');
 
-        if ($this->crypto !== false) {
+        if (strlen($raw) && $this->crypto !== false) {
             $raw = $this->crypto->decrypt($raw);
         }
 
@@ -835,16 +1137,28 @@ class Net_SSH1 {
         $type = $raw[$padding_length];
         $data = substr($raw, $padding_length + 1, -4);
 
+        if (strlen($raw) < 4) {
+            return false;
+        }
         $temp = unpack('Ncrc', substr($raw, -4));
 
         //if ( $temp['crc'] != $this->_crc($padding . $type . $data) ) {
-        //    user_error('Bad CRC in packet from server', E_USER_NOTICE);
+        //    user_error('Bad CRC in packet from server');
         //    return false;
         //}
 
+        $type = ord($type);
+
+        if (defined('NET_SSH1_LOGGING')) {
+            $temp = isset($this->protocol_flags[$type]) ? $this->protocol_flags[$type] : 'UNKNOWN';
+            $temp = '<- ' . $temp .
+                    ' (' . round($stop - $start, 4) . 's)';
+            $this->_append_log($temp, $data);
+        }
+
         return array(
-            NET_SSH1_RESPONSE_TYPE => ord($type),
-            NET_SSH1_RESPONSE_DATA => $data
+            self::RESPONSE_TYPE => $type,
+            self::RESPONSE_DATA => $data
         );
     }
 
@@ -853,25 +1167,23 @@ class Net_SSH1 {
      *
      * Returns true on success, false on failure.
      *
-     * @see Net_SSH1::_get_binary_packet()
-     * @param String $data
-     * @return Boolean
+     * @see self::_get_binary_packet()
+     * @param string $data
+     * @return bool
      * @access private
      */
-    function _send_binary_packet($data) {
+    function _send_binary_packet($data)
+    {
         if (feof($this->fsock)) {
-            //user_error('connection closed prematurely', E_USER_NOTICE);
+            //user_error('connection closed prematurely');
             return false;
         }
 
         $length = strlen($data) + 4;
 
-        $padding_length = 8 - ($length & 7);
-        $padding = '';
-        for ($i = 0; $i < $padding_length; $i++) {
-            $padding.= chr(crypt_random(0, 255));
-        }
+        $padding = Random::string(8 - ($length & 7));
 
+        $orig = $data;
         $data = $padding . $data;
         $data.= pack('N', $this->_crc($data));
 
@@ -881,7 +1193,18 @@ class Net_SSH1 {
 
         $packet = pack('Na*', $length, $data);
 
-        return strlen($packet) == fputs($this->fsock, $packet);
+        $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+        $result = strlen($packet) == fputs($this->fsock, $packet);
+        $stop = strtok(microtime(), ' ') + strtok('');
+
+        if (defined('NET_SSH1_LOGGING')) {
+            $temp = isset($this->protocol_flags[ord($orig[0])]) ? $this->protocol_flags[ord($orig[0])] : 'UNKNOWN';
+            $temp = '-> ' . $temp .
+                    ' (' . round($stop - $start, 4) . 's)';
+            $this->_append_log($temp, $orig);
+        }
+
+        return $result;
     }
 
     /**
@@ -891,10 +1214,10 @@ class Net_SSH1 {
      * we've reimplemented it. A more detailed discussion of the differences can be found after
      * $crc_lookup_table's initialization.
      *
-     * @see Net_SSH1::_get_binary_packet()
-     * @see Net_SSH1::_send_binary_packet()
-     * @param String $data
-     * @return Integer
+     * @see self::_get_binary_packet()
+     * @see self::_send_binary_packet()
+     * @param string $data
+     * @return int
      * @access private
      */
     function _crc($data)
@@ -971,7 +1294,7 @@ class Net_SSH1 {
         $crc = 0x00000000;
         $length = strlen($data);
 
-        for ($i=0;$i<$length;$i++) {
+        for ($i=0; $i<$length; $i++) {
             // We AND $crc >> 8 with 0x00FFFFFF because we want the eight newly added bits to all
             // be zero.  PHP, unfortunately, doesn't always do this.  0x80000000 >> 8, as an example,
             // yields 0xFF800000 - not 0x00800000.  The following link elaborates:
@@ -989,9 +1312,9 @@ class Net_SSH1 {
      *
      * Inspired by array_shift
      *
-     * @param String $string
-     * @param optional Integer $index
-     * @return String
+     * @param string $string
+     * @param int $index
+     * @return string
      * @access private
      */
     function _string_shift(&$string, $index = 1)
@@ -1008,22 +1331,18 @@ class Net_SSH1 {
      * should be a number with the property that gcd($e, ($p - 1) * ($q - 1)) == 1.  Could just make anything that
      * calls this call modexp, instead, but I think this makes things clearer, maybe...
      *
-     * @see Net_SSH1::Net_SSH1()
-     * @param Math_BigInteger $m
-     * @param Array $key
-     * @return Math_BigInteger
+     * @see self::__construct()
+     * @param BigInteger $m
+     * @param array $key
+     * @return BigInteger
      * @access private
      */
     function _rsa_crypt($m, $key)
     {
         /*
-        if (!class_exists('Crypt_RSA')) {
-            require_once('Crypt/RSA.php');
-        }
-
-        $rsa = new Crypt_RSA();
-        $rsa->loadKey($key, CRYPT_RSA_PUBLIC_FORMAT_RAW);
-        $rsa->setEncryptionMode(CRYPT_RSA_ENCRYPTION_PKCS1);
+        $rsa = new RSA();
+        $rsa->loadKey($key, RSA::PUBLIC_FORMAT_RAW);
+        $rsa->setEncryptionMode(RSA::ENCRYPTION_PKCS1);
         return $rsa->encrypt($m);
         */
 
@@ -1040,28 +1359,128 @@ class Net_SSH1 {
         // Presumably the part of PKCS#1 they're refering to is "Section 7.2.1 Encryption Operation",
         // under "7.2 RSAES-PKCS1-v1.5" and "7 Encryption schemes" of the following URL:
         // ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf
-        $temp = chr(0) . chr(2);
         $modulus = $key[1]->toBytes();
         $length = strlen($modulus) - strlen($m) - 3;
-        for ($i = 0; $i < $length; $i++) {
-            $temp.= chr(crypt_random(1, 255));
+        $random = '';
+        while (strlen($random) != $length) {
+            $block = Random::string($length - strlen($random));
+            $block = str_replace("\x00", '', $block);
+            $random.= $block;
         }
-        $temp.= chr(0) . $m;
+        $temp = chr(0) . chr(2) . $random . chr(0) . $m;
 
-        $m = new Math_BigInteger($temp, 256);
+        $m = new BigInteger($temp, 256);
         $m = $m->modPow($key[0], $key[1]);
 
         return $m->toBytes();
     }
 
     /**
+     * Define Array
+     *
+     * Takes any number of arrays whose indices are integers and whose values are strings and defines a bunch of
+     * named constants from it, using the value as the name of the constant and the index as the value of the constant.
+     * If any of the constants that would be defined already exists, none of the constants will be defined.
+     *
+     * @param array $array
+     * @access private
+     */
+    function _define_array()
+    {
+        $args = func_get_args();
+        foreach ($args as $arg) {
+            foreach ($arg as $key => $value) {
+                if (!defined($value)) {
+                    define($value, $key);
+                } else {
+                    break 2;
+                }
+            }
+        }
+    }
+
+    /**
+     * Returns a log of the packets that have been sent and received.
+     *
+     * Returns a string if NET_SSH1_LOGGING == self::LOG_COMPLEX, an array if NET_SSH1_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SSH1_LOGGING')
+     *
+     * @access public
+     * @return array|false|string
+     */
+    function getLog()
+    {
+        if (!defined('NET_SSH1_LOGGING')) {
+            return false;
+        }
+
+        switch (NET_SSH1_LOGGING) {
+            case self::LOG_SIMPLE:
+                return $this->message_number_log;
+                break;
+            case self::LOG_COMPLEX:
+                return $this->_format_log($this->message_log, $this->protocol_flags_log);
+                break;
+            default:
+                return false;
+        }
+    }
+
+    /**
+     * Formats a log for printing
+     *
+     * @param array $message_log
+     * @param array $message_number_log
+     * @access private
+     * @return string
+     */
+    function _format_log($message_log, $message_number_log)
+    {
+        $output = '';
+        for ($i = 0; $i < count($message_log); $i++) {
+            $output.= $message_number_log[$i] . "\r\n";
+            $current_log = $message_log[$i];
+            $j = 0;
+            do {
+                if (strlen($current_log)) {
+                    $output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0  ';
+                }
+                $fragment = $this->_string_shift($current_log, $this->log_short_width);
+                $hex = substr(preg_replace_callback('#.#s', array($this, '_format_log_helper'), $fragment), strlen($this->log_boundary));
+                // replace non ASCII printable characters with dots
+                // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
+                // also replace < with a . since < messes up the output on web browsers
+                $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment);
+                $output.= str_pad($hex, $this->log_long_width - $this->log_short_width, ' ') . $raw . "\r\n";
+                $j++;
+            } while (strlen($current_log));
+            $output.= "\r\n";
+        }
+
+        return $output;
+    }
+
+    /**
+     * Helper function for _format_log
+     *
+     * For use with preg_replace_callback()
+     *
+     * @param array $matches
+     * @access private
+     * @return string
+     */
+    function _format_log_helper($matches)
+    {
+        return $this->log_boundary . str_pad(dechex(ord($matches[0])), 2, '0', STR_PAD_LEFT);
+    }
+
+    /**
      * Return the server key public exponent
      *
      * Returns, by default, the base-10 representation.  If $raw_output is set to true, returns, instead,
      * the raw bytes.  This behavior is similar to PHP's md5() function.
      *
-     * @param optional Boolean $raw_output
-     * @return String
+     * @param bool $raw_output
+     * @return string
      * @access public
      */
     function getServerKeyPublicExponent($raw_output = false)
@@ -1075,8 +1494,8 @@ class Net_SSH1 {
      * Returns, by default, the base-10 representation.  If $raw_output is set to true, returns, instead,
      * the raw bytes.  This behavior is similar to PHP's md5() function.
      *
-     * @param optional Boolean $raw_output
-     * @return String
+     * @param bool $raw_output
+     * @return string
      * @access public
      */
     function getServerKeyPublicModulus($raw_output = false)
@@ -1090,8 +1509,8 @@ class Net_SSH1 {
      * Returns, by default, the base-10 representation.  If $raw_output is set to true, returns, instead,
      * the raw bytes.  This behavior is similar to PHP's md5() function.
      *
-     * @param optional Boolean $raw_output
-     * @return String
+     * @param bool $raw_output
+     * @return string
      * @access public
      */
     function getHostKeyPublicExponent($raw_output = false)
@@ -1105,8 +1524,8 @@ class Net_SSH1 {
      * Returns, by default, the base-10 representation.  If $raw_output is set to true, returns, instead,
      * the raw bytes.  This behavior is similar to PHP's md5() function.
      *
-     * @param optional Boolean $raw_output
-     * @return String
+     * @param bool $raw_output
+     * @return string
      * @access public
      */
     function getHostKeyPublicModulus($raw_output = false)
@@ -1119,10 +1538,10 @@ class Net_SSH1 {
      *
      * Just because a cipher is supported by an SSH1 server doesn't mean it's supported by this library. If $raw_output
      * is set to true, returns, instead, an array of constants.  ie. instead of array('Triple-DES in CBC mode'), you'll
-     * get array(NET_SSH1_CIPHER_3DES).
+     * get array(self::CIPHER_3DES).
      *
-     * @param optional Boolean $raw_output
-     * @return Array
+     * @param bool $raw_output
+     * @return array
      * @access public
      */
     function getSupportedCiphers($raw_output = false)
@@ -1135,10 +1554,10 @@ class Net_SSH1 {
      *
      * Just because a cipher is supported by an SSH1 server doesn't mean it's supported by this library. If $raw_output
      * is set to true, returns, instead, an array of constants.  ie. instead of array('password authentication'), you'll
-     * get array(NET_SSH1_AUTH_PASSWORD).
+     * get array(self::AUTH_PASSWORD).
      *
-     * @param optional Boolean $raw_output
-     * @return Array
+     * @param bool $raw_output
+     * @return array
      * @access public
      */
     function getSupportedAuthentications($raw_output = false)
@@ -1149,11 +1568,75 @@ class Net_SSH1 {
     /**
      * Return the server identification.
      *
-     * @return String
+     * @return string
      * @access public
      */
     function getServerIdentification()
     {
         return rtrim($this->server_identification);
     }
+
+    /**
+     * Logs data packets
+     *
+     * Makes sure that only the last 1MB worth of packets will be logged
+     *
+     * @param string $data
+     * @access private
+     */
+    function _append_log($protocol_flags, $message)
+    {
+        switch (NET_SSH1_LOGGING) {
+            // useful for benchmarks
+            case self::LOG_SIMPLE:
+                $this->protocol_flags_log[] = $protocol_flags;
+                break;
+            // the most useful log for SSH1
+            case self::LOG_COMPLEX:
+                $this->protocol_flags_log[] = $protocol_flags;
+                $this->_string_shift($message);
+                $this->log_size+= strlen($message);
+                $this->message_log[] = $message;
+                while ($this->log_size > self::LOG_MAX_SIZE) {
+                    $this->log_size-= strlen(array_shift($this->message_log));
+                    array_shift($this->protocol_flags_log);
+                }
+                break;
+            // dump the output out realtime; packets may be interspersed with non packets,
+            // passwords won't be filtered out and select other packets may not be correctly
+            // identified
+            case self::LOG_REALTIME:
+                echo "<pre>\r\n" . $this->_format_log(array($message), array($protocol_flags)) . "\r\n</pre>\r\n";
+                @flush();
+                @ob_flush();
+                break;
+            // basically the same thing as self::LOG_REALTIME with the caveat that self::LOG_REALTIME_FILE
+            // needs to be defined and that the resultant log file will be capped out at self::LOG_MAX_SIZE.
+            // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily
+            // at the beginning of the file
+            case self::LOG_REALTIME_FILE:
+                if (!isset($this->realtime_log_file)) {
+                    // PHP doesn't seem to like using constants in fopen()
+                    $filename = self::LOG_REALTIME_FILE;
+                    $fp = fopen($filename, 'w');
+                    $this->realtime_log_file = $fp;
+                }
+                if (!is_resource($this->realtime_log_file)) {
+                    break;
+                }
+                $entry = $this->_format_log(array($message), array($protocol_flags));
+                if ($this->realtime_log_wrap) {
+                    $temp = "<<< START >>>\r\n";
+                    $entry.= $temp;
+                    fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp));
+                }
+                $this->realtime_log_size+= strlen($entry);
+                if ($this->realtime_log_size > self::LOG_MAX_SIZE) {
+                    fseek($this->realtime_log_file, 0);
+                    $this->realtime_log_size = strlen($entry);
+                    $this->realtime_log_wrap = true;
+                }
+                fputs($this->realtime_log_file, $entry);
+        }
+    }
 }
diff --git a/lib/phpseclib/Net/SSH2.php b/lib/phpseclib/Net/SSH2.php
index 93a5905..cdb7cb3 100644
--- a/lib/phpseclib/Net/SSH2.php
+++ b/lib/phpseclib/Net/SSH2.php
@@ -1,17 +1,16 @@
 <?php
-/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
 /**
  * Pure-PHP implementation of SSHv2.
  *
- * PHP versions 4 and 5
+ * PHP version 5
  *
  * Here are some examples of how to use this library:
  * <code>
  * <?php
- *    include('Net/SSH2.php');
+ *    include 'vendor/autoload.php';
  *
- *    $ssh = new Net_SSH2('www.domain.tld');
+ *    $ssh = new \phpseclib\Net\SSH2('www.domain.tld');
  *    if (!$ssh->login('username', 'password')) {
  *        exit('Login Failed');
  *    }
@@ -23,143 +22,146 @@
  *
  * <code>
  * <?php
- *    include('Crypt/RSA.php');
- *    include('Net/SSH2.php');
+ *    include 'vendor/autoload.php';
  *
- *    $key = new Crypt_RSA();
+ *    $key = new \phpseclib\Crypt\RSA();
  *    //$key->setPassword('whatever');
  *    $key->loadKey(file_get_contents('privatekey'));
  *
- *    $ssh = new Net_SSH2('www.domain.tld');
+ *    $ssh = new \phpseclib\Net\SSH2('www.domain.tld');
  *    if (!$ssh->login('username', $key)) {
  *        exit('Login Failed');
  *    }
  *
- *    echo $ssh->exec('pwd');
- *    echo $ssh->exec('ls -la');
+ *    echo $ssh->read('username@username:~$');
+ *    $ssh->write("ls -la\n");
+ *    echo $ssh->read('username@username:~$');
  * ?>
  * </code>
  *
- * LICENSE: This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA  02111-1307  USA
- *
- * @category   Net
- * @package    Net_SSH2
- * @author     Jim Wigginton <terrafrost@php.net>
- * @copyright  MMVII Jim Wigginton
- * @license    http://www.gnu.org/licenses/lgpl.txt
- * @version    $Id: SSH2.php,v 1.46 2010/04/27 21:29:36 terrafrost Exp $
- * @link       http://phpseclib.sourceforge.net
- */
-
-/**
- * Include Math_BigInteger
- *
- * Used to do Diffie-Hellman key exchange and DSA/RSA signature verification.
- */
-require_once('phpseclib/Math/BigInteger.php');
-
-/**
- * Include Crypt_Random
- */
-require_once('phpseclib/Crypt/Random.php');
-
-/**
- * Include Crypt_Hash
- */
-require_once('phpseclib/Crypt/Hash.php');
-
-/**
- * Include Crypt_TripleDES
- */
-require_once('phpseclib/Crypt/TripleDES.php');
-
-/**
- * Include Crypt_RC4
- */
-require_once('phpseclib/Crypt/RC4.php');
-
-/**
- * Include Crypt_AES
- */
-require_once('phpseclib/Crypt/AES.php');
-
-/**#@+
- * Execution Bitmap Masks
- *
- * @see Net_SSH2::bitmap
- * @access private
+ * @category  Net
+ * @package   SSH2
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2007 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
  */
-define('NET_SSH2_MASK_CONSTRUCTOR', 0x00000001);
-define('NET_SSH2_MASK_LOGIN',       0x00000002);
-/**#@-*/
 
-/**#@+
- * Channel constants
- *
- * RFC4254 refers not to client and server channels but rather to sender and recipient channels.  we don't refer
- * to them in that way because RFC4254 toggles the meaning. the client sends a SSH_MSG_CHANNEL_OPEN message with
- * a sender channel and the server sends a SSH_MSG_CHANNEL_OPEN_CONFIRMATION in response, with a sender and a
- * recepient channel.  at first glance, you might conclude that SSH_MSG_CHANNEL_OPEN_CONFIRMATION's sender channel
- * would be the same thing as SSH_MSG_CHANNEL_OPEN's sender channel, but it's not, per this snipet:
- *     The 'recipient channel' is the channel number given in the original
- *     open request, and 'sender channel' is the channel number allocated by
- *     the other side.
- *
- * @see Net_SSH2::_send_channel_packet()
- * @see Net_SSH2::_get_channel_packet()
- * @access private
- */
-define('NET_SSH2_CHANNEL_EXEC', 0); // PuTTy uses 0x100
-/**#@-*/
+namespace phpseclib\Net;
 
-/**#@+
- * @access public
- * @see Net_SSH2::getLog()
- */
-/**
- * Returns the message numbers
- */
-define('NET_SSH2_LOG_SIMPLE',  1);
-/**
- * Returns the message content
- */
-define('NET_SSH2_LOG_COMPLEX', 2);
-/**#@-*/
+use phpseclib\Crypt\Base;
+use phpseclib\Crypt\Blowfish;
+use phpseclib\Crypt\Hash;
+use phpseclib\Crypt\Random;
+use phpseclib\Crypt\RC4;
+use phpseclib\Crypt\Rijndael;
+use phpseclib\Crypt\RSA;
+use phpseclib\Crypt\TripleDES;
+use phpseclib\Crypt\Twofish;
+use phpseclib\Math\BigInteger; // Used to do Diffie-Hellman key exchange and DSA/RSA signature verification.
+use phpseclib\System\SSH\Agent;
 
 /**
  * Pure-PHP implementation of SSHv2.
  *
+ * @package SSH2
  * @author  Jim Wigginton <terrafrost@php.net>
- * @version 0.1.0
  * @access  public
- * @package Net_SSH2
  */
-class Net_SSH2 {
+class SSH2
+{
+    /**#@+
+     * Execution Bitmap Masks
+     *
+     * @see \phpseclib\Net\SSH2::bitmap
+     * @access private
+     */
+    const MASK_CONSTRUCTOR   = 0x00000001;
+    const MASK_CONNECTED     = 0x00000002;
+    const MASK_LOGIN_REQ     = 0x00000004;
+    const MASK_LOGIN         = 0x00000008;
+    const MASK_SHELL         = 0x00000010;
+    const MASK_WINDOW_ADJUST = 0x00000020;
+    /**#@-*/
+
+    /**#@+
+     * Channel constants
+     *
+     * RFC4254 refers not to client and server channels but rather to sender and recipient channels.  we don't refer
+     * to them in that way because RFC4254 toggles the meaning. the client sends a SSH_MSG_CHANNEL_OPEN message with
+     * a sender channel and the server sends a SSH_MSG_CHANNEL_OPEN_CONFIRMATION in response, with a sender and a
+     * recepient channel.  at first glance, you might conclude that SSH_MSG_CHANNEL_OPEN_CONFIRMATION's sender channel
+     * would be the same thing as SSH_MSG_CHANNEL_OPEN's sender channel, but it's not, per this snipet:
+     *     The 'recipient channel' is the channel number given in the original
+     *     open request, and 'sender channel' is the channel number allocated by
+     *     the other side.
+     *
+     * @see \phpseclib\Net\SSH2::_send_channel_packet()
+     * @see \phpseclib\Net\SSH2::_get_channel_packet()
+     * @access private
+    */
+    const CHANNEL_EXEC          = 1; // PuTTy uses 0x100
+    const CHANNEL_SHELL         = 2;
+    const CHANNEL_SUBSYSTEM     = 3;
+    const CHANNEL_AGENT_FORWARD = 4;
+    /**#@-*/
+
+    /**#@+
+     * @access public
+     * @see \phpseclib\Net\SSH2::getLog()
+    */
+    /**
+     * Returns the message numbers
+     */
+    const LOG_SIMPLE = 1;
+    /**
+     * Returns the message content
+     */
+    const LOG_COMPLEX = 2;
+    /**
+     * Outputs the content real-time
+     */
+    const LOG_REALTIME = 3;
+    /**
+     * Dumps the content real-time to a file
+     */
+    const LOG_REALTIME_FILE = 4;
+    /**
+     * Make sure that the log never gets larger than this
+     */
+    const LOG_MAX_SIZE = 1048576; // 1024 * 1024
+    /**#@-*/
+
+    /**#@+
+     * @access public
+     * @see \phpseclib\Net\SSH2::read()
+    */
+    /**
+     * Returns when a string matching $expect exactly is found
+     */
+    const READ_SIMPLE = 1;
+    /**
+     * Returns when a string matching the regular expression $expect is found
+     */
+    const READ_REGEX = 2;
+    /**
+     * Returns when a string matching the regular expression $expect is found
+     */
+    const READ_NEXT = 3;
+    /**#@-*/
+
     /**
      * The SSH identifier
      *
-     * @var String
+     * @var string
      * @access private
      */
-    var $identifier = 'SSH-2.0-phpseclib_0.2';
+    var $identifier;
 
     /**
      * The Socket Object
      *
-     * @var Object
+     * @var object
      * @access private
      */
     var $fsock;
@@ -167,10 +169,10 @@ class Net_SSH2 {
     /**
      * Execution Bitmap
      *
-     * The bits that are set reprsent functions that have been called already.  This is used to determine
+     * The bits that are set represent functions that have been called already.  This is used to determine
      * if a requisite function has been successfully executed.  If not, an error should be thrown.
      *
-     * @var Integer
+     * @var int
      * @access private
      */
     var $bitmap = 0;
@@ -178,9 +180,9 @@ class Net_SSH2 {
     /**
      * Error information
      *
-     * @see Net_SSH2::getErrors()
-     * @see Net_SSH2::getLastError()
-     * @var String
+     * @see self::getErrors()
+     * @see self::getLastError()
+     * @var string
      * @access private
      */
     var $errors = array();
@@ -188,101 +190,128 @@ class Net_SSH2 {
     /**
      * Server Identifier
      *
-     * @see Net_SSH2::getServerIdentification()
-     * @var String
+     * @see self::getServerIdentification()
+     * @var array|false
      * @access private
      */
-    var $server_identifier = '';
+    var $server_identifier = false;
 
     /**
      * Key Exchange Algorithms
      *
-     * @see Net_SSH2::getKexAlgorithims()
-     * @var Array
+     * @see self::getKexAlgorithims()
+     * @var array|false
+     * @access private
+     */
+    var $kex_algorithms = false;
+
+    /**
+     * Minimum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods
+     *
+     * @see self::_key_exchange()
+     * @var int
+     * @access private
+     */
+    var $kex_dh_group_size_min = 1536;
+
+    /**
+     * Preferred Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods
+     *
+     * @see self::_key_exchange()
+     * @var int
+     * @access private
+     */
+    var $kex_dh_group_size_preferred = 2048;
+
+    /**
+     * Maximum Diffie-Hellman Group Bit Size in RFC 4419 Key Exchange Methods
+     *
+     * @see self::_key_exchange()
+     * @var int
      * @access private
      */
-    var $kex_algorithms;
+    var $kex_dh_group_size_max = 4096;
 
     /**
      * Server Host Key Algorithms
      *
-     * @see Net_SSH2::getServerHostKeyAlgorithms()
-     * @var Array
+     * @see self::getServerHostKeyAlgorithms()
+     * @var array|false
      * @access private
      */
-    var $server_host_key_algorithms;
+    var $server_host_key_algorithms = false;
 
     /**
      * Encryption Algorithms: Client to Server
      *
-     * @see Net_SSH2::getEncryptionAlgorithmsClient2Server()
-     * @var Array
+     * @see self::getEncryptionAlgorithmsClient2Server()
+     * @var array|false
      * @access private
      */
-    var $encryption_algorithms_client_to_server;
+    var $encryption_algorithms_client_to_server = false;
 
     /**
      * Encryption Algorithms: Server to Client
      *
-     * @see Net_SSH2::getEncryptionAlgorithmsServer2Client()
-     * @var Array
+     * @see self::getEncryptionAlgorithmsServer2Client()
+     * @var array|false
      * @access private
      */
-    var $encryption_algorithms_server_to_client;
+    var $encryption_algorithms_server_to_client = false;
 
     /**
      * MAC Algorithms: Client to Server
      *
-     * @see Net_SSH2::getMACAlgorithmsClient2Server()
-     * @var Array
+     * @see self::getMACAlgorithmsClient2Server()
+     * @var array|false
      * @access private
      */
-    var $mac_algorithms_client_to_server;
+    var $mac_algorithms_client_to_server = false;
 
     /**
      * MAC Algorithms: Server to Client
      *
-     * @see Net_SSH2::getMACAlgorithmsServer2Client()
-     * @var Array
+     * @see self::getMACAlgorithmsServer2Client()
+     * @var array|false
      * @access private
      */
-    var $mac_algorithms_server_to_client;
+    var $mac_algorithms_server_to_client = false;
 
     /**
      * Compression Algorithms: Client to Server
      *
-     * @see Net_SSH2::getCompressionAlgorithmsClient2Server()
-     * @var Array
+     * @see self::getCompressionAlgorithmsClient2Server()
+     * @var array|false
      * @access private
      */
-    var $compression_algorithms_client_to_server;
+    var $compression_algorithms_client_to_server = false;
 
     /**
      * Compression Algorithms: Server to Client
      *
-     * @see Net_SSH2::getCompressionAlgorithmsServer2Client()
-     * @var Array
+     * @see self::getCompressionAlgorithmsServer2Client()
+     * @var array|false
      * @access private
      */
-    var $compression_algorithms_server_to_client;
+    var $compression_algorithms_server_to_client = false;
 
     /**
      * Languages: Server to Client
      *
-     * @see Net_SSH2::getLanguagesServer2Client()
-     * @var Array
+     * @see self::getLanguagesServer2Client()
+     * @var array|false
      * @access private
      */
-    var $languages_server_to_client;
+    var $languages_server_to_client = false;
 
     /**
      * Languages: Client to Server
      *
-     * @see Net_SSH2::getLanguagesClient2Server()
-     * @var Array
+     * @see self::getLanguagesClient2Server()
+     * @var array|false
      * @access private
      */
-    var $languages_client_to_server;
+    var $languages_client_to_server = false;
 
     /**
      * Block Size for Server to Client Encryption
@@ -294,9 +323,9 @@ class Net_SSH2 {
      *
      *  -- http://tools.ietf.org/html/rfc4253#section-6
      *
-     * @see Net_SSH2::Net_SSH2()
-     * @see Net_SSH2::_send_binary_packet()
-     * @var Integer
+     * @see self::__construct()
+     * @see self::_send_binary_packet()
+     * @var int
      * @access private
      */
     var $encrypt_block_size = 8;
@@ -304,9 +333,9 @@ class Net_SSH2 {
     /**
      * Block Size for Client to Server Encryption
      *
-     * @see Net_SSH2::Net_SSH2()
-     * @see Net_SSH2::_get_binary_packet()
-     * @var Integer
+     * @see self::__construct()
+     * @see self::_get_binary_packet()
+     * @var int
      * @access private
      */
     var $decrypt_block_size = 8;
@@ -314,8 +343,8 @@ class Net_SSH2 {
     /**
      * Server to Client Encryption Object
      *
-     * @see Net_SSH2::_get_binary_packet()
-     * @var Object
+     * @see self::_get_binary_packet()
+     * @var object
      * @access private
      */
     var $decrypt = false;
@@ -323,8 +352,8 @@ class Net_SSH2 {
     /**
      * Client to Server Encryption Object
      *
-     * @see Net_SSH2::_send_binary_packet()
-     * @var Object
+     * @see self::_send_binary_packet()
+     * @var object
      * @access private
      */
     var $encrypt = false;
@@ -332,8 +361,8 @@ class Net_SSH2 {
     /**
      * Client to Server HMAC Object
      *
-     * @see Net_SSH2::_send_binary_packet()
-     * @var Object
+     * @see self::_send_binary_packet()
+     * @var object
      * @access private
      */
     var $hmac_create = false;
@@ -341,8 +370,8 @@ class Net_SSH2 {
     /**
      * Server to Client HMAC Object
      *
-     * @see Net_SSH2::_get_binary_packet()
-     * @var Object
+     * @see self::_get_binary_packet()
+     * @var object
      * @access private
      */
     var $hmac_check = false;
@@ -354,8 +383,8 @@ class Net_SSH2 {
      * For the client to server side, the HMAC object will make the HMAC as long as it needs to be.  All we need to do is
      * append it.
      *
-     * @see Net_SSH2::_get_binary_packet()
-     * @var Integer
+     * @see self::_get_binary_packet()
+     * @var int
      * @access private
      */
     var $hmac_size = false;
@@ -363,14 +392,14 @@ class Net_SSH2 {
     /**
      * Server Public Host Key
      *
-     * @see Net_SSH2::getServerPublicHostKey()
-     * @var String
+     * @see self::getServerPublicHostKey()
+     * @var string
      * @access private
      */
     var $server_public_host_key;
 
     /**
-     * Session identifer
+     * Session identifier
      *
      * "The exchange hash H from the first key exchange is additionally
      *  used as the session identifier, which is a unique identifier for
@@ -378,17 +407,28 @@ class Net_SSH2 {
      *
      *  -- http://tools.ietf.org/html/rfc4253#section-7.2
      *
-     * @see Net_SSH2::_key_exchange()
-     * @var String
+     * @see self::_key_exchange()
+     * @var string
      * @access private
      */
     var $session_id = false;
 
     /**
+     * Exchange hash
+     *
+     * The current exchange hash
+     *
+     * @see self::_key_exchange()
+     * @var string
+     * @access private
+     */
+    var $exchange_hash = false;
+
+    /**
      * Message Numbers
      *
-     * @see Net_SSH2::Net_SSH2()
-     * @var Array
+     * @see self::__construct()
+     * @var array
      * @access private
      */
     var $message_numbers = array();
@@ -396,8 +436,8 @@ class Net_SSH2 {
     /**
      * Disconnection Message 'reason codes' defined in RFC4253
      *
-     * @see Net_SSH2::Net_SSH2()
-     * @var Array
+     * @see self::__construct()
+     * @var array
      * @access private
      */
     var $disconnect_reasons = array();
@@ -405,8 +445,8 @@ class Net_SSH2 {
     /**
      * SSH_MSG_CHANNEL_OPEN_FAILURE 'reason codes', defined in RFC4254
      *
-     * @see Net_SSH2::Net_SSH2()
-     * @var Array
+     * @see self::__construct()
+     * @var array
      * @access private
      */
     var $channel_open_failure_reasons = array();
@@ -415,8 +455,8 @@ class Net_SSH2 {
      * Terminal Modes
      *
      * @link http://tools.ietf.org/html/rfc4254#section-8
-     * @see Net_SSH2::Net_SSH2()
-     * @var Array
+     * @see self::__construct()
+     * @var array
      * @access private
      */
     var $terminal_modes = array();
@@ -425,8 +465,8 @@ class Net_SSH2 {
      * SSH_MSG_CHANNEL_EXTENDED_DATA's data_type_codes
      *
      * @link http://tools.ietf.org/html/rfc4254#section-5.2
-     * @see Net_SSH2::Net_SSH2()
-     * @var Array
+     * @see self::__construct()
+     * @var array
      * @access private
      */
     var $channel_extended_data_type_codes = array();
@@ -436,8 +476,8 @@ class Net_SSH2 {
      *
      * See 'Section 6.4.  Data Integrity' of rfc4253 for more info.
      *
-     * @see Net_SSH2::_send_binary_packet()
-     * @var Integer
+     * @see self::_send_binary_packet()
+     * @var int
      * @access private
      */
     var $send_seq_no = 0;
@@ -447,8 +487,8 @@ class Net_SSH2 {
      *
      * See 'Section 6.4.  Data Integrity' of rfc4253 for more info.
      *
-     * @see Net_SSH2::_get_binary_packet()
-     * @var Integer
+     * @see self::_get_binary_packet()
+     * @var int
      * @access private
      */
     var $get_seq_no = 0;
@@ -458,9 +498,9 @@ class Net_SSH2 {
      *
      * Maps client channels to server channels
      *
-     * @see Net_SSH2::_get_channel_packet()
-     * @see Net_SSH2::exec()
-     * @var Array
+     * @see self::_get_channel_packet()
+     * @see self::exec()
+     * @var array
      * @access private
      */
     var $server_channels = array();
@@ -471,9 +511,9 @@ class Net_SSH2 {
      * If a client requests a packet from one channel but receives two packets from another those packets should
      * be placed in a buffer
      *
-     * @see Net_SSH2::_get_channel_packet()
-     * @see Net_SSH2::exec()
-     * @var Array
+     * @see self::_get_channel_packet()
+     * @see self::exec()
+     * @var array
      * @access private
      */
     var $channel_buffers = array();
@@ -483,8 +523,8 @@ class Net_SSH2 {
      *
      * Contains the type of the last sent message
      *
-     * @see Net_SSH2::_get_channel_packet()
-     * @var Array
+     * @see self::_get_channel_packet()
+     * @var array
      * @access private
      */
     var $channel_status = array();
@@ -494,8 +534,8 @@ class Net_SSH2 {
      *
      * Maximum packet size indexed by channel
      *
-     * @see Net_SSH2::_send_channel_packet()
-     * @var Array
+     * @see self::_send_channel_packet()
+     * @var array
      * @access private
      */
     var $packet_size_client_to_server = array();
@@ -503,8 +543,8 @@ class Net_SSH2 {
     /**
      * Message Number Log
      *
-     * @see Net_SSH2::getLog()
-     * @var Array
+     * @see self::getLog()
+     * @var array
      * @access private
      */
     var $message_number_log = array();
@@ -512,8 +552,8 @@ class Net_SSH2 {
     /**
      * Message Log
      *
-     * @see Net_SSH2::getLog()
-     * @var Array
+     * @see self::getLog()
+     * @var array
      * @access private
      */
     var $message_log = array();
@@ -521,22 +561,33 @@ class Net_SSH2 {
     /**
      * The Window Size
      *
-     * Bytes the other party can send before it must wait for the window to be adjusted (0x7FFFFFFF = 4GB)
+     * Bytes the other party can send before it must wait for the window to be adjusted (0x7FFFFFFF = 2GB)
      *
-     * @var Integer
-     * @see Net_SSH2::_send_channel_packet()
-     * @see Net_SSH2::exec()
+     * @var int
+     * @see self::_send_channel_packet()
+     * @see self::exec()
      * @access private
      */
     var $window_size = 0x7FFFFFFF;
 
     /**
-     * Window size
+     * Window size, server to client
+     *
+     * Window size indexed by channel
+     *
+     * @see self::_send_channel_packet()
+     * @var array
+     * @access private
+     */
+    var $window_size_server_to_client = array();
+
+    /**
+     * Window size, client to server
      *
      * Window size indexed by channel
      *
-     * @see Net_SSH2::_send_channel_packet()
-     * @var Array
+     * @see self::_get_channel_packet()
+     * @var array
      * @access private
      */
     var $window_size_client_to_server = array();
@@ -546,8 +597,8 @@ class Net_SSH2 {
      *
      * Verified against $this->session_id
      *
-     * @see Net_SSH2::getServerPublicHostKey()
-     * @var String
+     * @see self::getServerPublicHostKey()
+     * @var string
      * @access private
      */
     var $signature = '';
@@ -557,714 +608,2260 @@ class Net_SSH2 {
      *
      * ssh-rsa or ssh-dss.
      *
-     * @see Net_SSH2::getServerPublicHostKey()
-     * @var String
+     * @see self::getServerPublicHostKey()
+     * @var string
      * @access private
      */
     var $signature_format = '';
 
     /**
-     * Default Constructor.
+     * Interactive Buffer
      *
-     * Connects to an SSHv2 server
-     *
-     * @param String $host
-     * @param optional Integer $port
-     * @param optional Integer $timeout
-     * @return Net_SSH2
-     * @access public
+     * @see self::read()
+     * @var array
+     * @access private
      */
-    function Net_SSH2($host, $port = 22, $timeout = 10)
-    {
-        $this->message_numbers = array(
-            1 => 'NET_SSH2_MSG_DISCONNECT',
-            2 => 'NET_SSH2_MSG_IGNORE',
-            3 => 'NET_SSH2_MSG_UNIMPLEMENTED',
-            4 => 'NET_SSH2_MSG_DEBUG',
-            5 => 'NET_SSH2_MSG_SERVICE_REQUEST',
-            6 => 'NET_SSH2_MSG_SERVICE_ACCEPT',
-            20 => 'NET_SSH2_MSG_KEXINIT',
-            21 => 'NET_SSH2_MSG_NEWKEYS',
-            30 => 'NET_SSH2_MSG_KEXDH_INIT',
-            31 => 'NET_SSH2_MSG_KEXDH_REPLY',
-            50 => 'NET_SSH2_MSG_USERAUTH_REQUEST',
-            51 => 'NET_SSH2_MSG_USERAUTH_FAILURE',
-            52 => 'NET_SSH2_MSG_USERAUTH_SUCCESS',
-            53 => 'NET_SSH2_MSG_USERAUTH_BANNER',
-
-            80 => 'NET_SSH2_MSG_GLOBAL_REQUEST',
-            81 => 'NET_SSH2_MSG_REQUEST_SUCCESS',
-            82 => 'NET_SSH2_MSG_REQUEST_FAILURE',
-            90 => 'NET_SSH2_MSG_CHANNEL_OPEN',
-            91 => 'NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION',
-            92 => 'NET_SSH2_MSG_CHANNEL_OPEN_FAILURE',
-            93 => 'NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST',
-            94 => 'NET_SSH2_MSG_CHANNEL_DATA',
-            95 => 'NET_SSH2_MSG_CHANNEL_EXTENDED_DATA',
-            96 => 'NET_SSH2_MSG_CHANNEL_EOF',
-            97 => 'NET_SSH2_MSG_CHANNEL_CLOSE',
-            98 => 'NET_SSH2_MSG_CHANNEL_REQUEST',
-            99 => 'NET_SSH2_MSG_CHANNEL_SUCCESS',
-            100 => 'NET_SSH2_MSG_CHANNEL_FAILURE'
-        );
-        $this->disconnect_reasons = array(
-            1 => 'NET_SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT',
-            2 => 'NET_SSH2_DISCONNECT_PROTOCOL_ERROR',
-            3 => 'NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED',
-            4 => 'NET_SSH2_DISCONNECT_RESERVED',
-            5 => 'NET_SSH2_DISCONNECT_MAC_ERROR',
-            6 => 'NET_SSH2_DISCONNECT_COMPRESSION_ERROR',
-            7 => 'NET_SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE',
-            8 => 'NET_SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED',
-            9 => 'NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE',
-            10 => 'NET_SSH2_DISCONNECT_CONNECTION_LOST',
-            11 => 'NET_SSH2_DISCONNECT_BY_APPLICATION',
-            12 => 'NET_SSH2_DISCONNECT_TOO_MANY_CONNECTIONS',
-            13 => 'NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER',
-            14 => 'NET_SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE',
-            15 => 'NET_SSH2_DISCONNECT_ILLEGAL_USER_NAME'
-        );
-        $this->channel_open_failure_reasons = array(
-            1 => 'NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED'
-        );
-        $this->terminal_modes = array(
-            0 => 'NET_SSH2_TTY_OP_END'
-        );
-        $this->channel_extended_data_type_codes = array(
-            1 => 'NET_SSH2_EXTENDED_DATA_STDERR'
-        );
-
-        $this->_define_array(
-            $this->message_numbers,
-            $this->disconnect_reasons,
-            $this->channel_open_failure_reasons,
-            $this->terminal_modes,
-            $this->channel_extended_data_type_codes,
-            array(60 => 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ'),
-            array(60 => 'NET_SSH2_MSG_USERAUTH_PK_OK')
-        );
+    var $interactiveBuffer = '';
 
-        $this->fsock = @fsockopen($host, $port, $errno, $errstr, $timeout);
-        if (!$this->fsock) {
-            user_error(rtrim("Cannot connect to $host. Error $errno. $errstr"), E_USER_NOTICE);
-            return;
-        }
+    /**
+     * Current log size
+     *
+     * Should never exceed self::LOG_MAX_SIZE
+     *
+     * @see self::_send_binary_packet()
+     * @see self::_get_binary_packet()
+     * @var int
+     * @access private
+     */
+    var $log_size;
 
-        /* According to the SSH2 specs,
+    /**
+     * Timeout
+     *
+     * @see self::setTimeout()
+     * @access private
+     */
+    var $timeout;
 
-          "The server MAY send other lines of data before sending the version
-           string.  Each line SHOULD be terminated by a Carriage Return and Line
-           Feed.  Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
-           in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients
-           MUST be able to process such lines." */
-        $temp = '';
-        $extra = '';
-        while (!feof($this->fsock) && !preg_match('#^SSH-(\d\.\d+)#', $temp, $matches)) {
-            if (substr($temp, -2) == "\r\n") {
-                $extra.= $temp;
-                $temp = '';
-            }
-            $temp.= fgets($this->fsock, 255);
-        }
+    /**
+     * Current Timeout
+     *
+     * @see self::_get_channel_packet()
+     * @access private
+     */
+    var $curTimeout;
 
-        $ext = array();
-        if (extension_loaded('mcrypt')) {
-            $ext[] = 'mcrypt';
-        }
-        if (extension_loaded('gmp')) {
-            $ext[] = 'gmp';
-        } else if (extension_loaded('bcmath')) {
-            $ext[] = 'bcmath';
-        }
+    /**
+     * Real-time log file pointer
+     *
+     * @see self::_append_log()
+     * @var resource
+     * @access private
+     */
+    var $realtime_log_file;
 
-        if (!empty($ext)) {
-            $this->identifier.= ' (' . implode(', ', $ext) . ')';
-        }
+    /**
+     * Real-time log file size
+     *
+     * @see self::_append_log()
+     * @var int
+     * @access private
+     */
+    var $realtime_log_size;
 
-        if (defined('NET_SSH2_LOGGING')) {
-            $this->message_number_log[] = '<-';
-            $this->message_number_log[] = '->';
+    /**
+     * Has the signature been validated?
+     *
+     * @see self::getServerPublicHostKey()
+     * @var bool
+     * @access private
+     */
+    var $signature_validated = false;
 
-            if (NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX) {
-                $this->message_log[] = $temp;
-                $this->message_log[] = $this->identifier . "\r\n";
-            }
-        }
+    /**
+     * Real-time log file wrap boolean
+     *
+     * @see self::_append_log()
+     * @access private
+     */
+    var $realtime_log_wrap;
 
-        $this->server_identifier = trim($temp, "\r\n");
-        if (!empty($extra)) {
-            $this->errors[] = utf8_decode($extra);
-        }
+    /**
+     * Flag to suppress stderr from output
+     *
+     * @see self::enableQuietMode()
+     * @access private
+     */
+    var $quiet_mode = false;
 
-        if ($matches[1] != '1.99' && $matches[1] != '2.0') {
-            user_error("Cannot connect to SSH $matches[1] servers", E_USER_NOTICE);
-            return;
-        }
+    /**
+     * Time of first network activity
+     *
+     * @var int
+     * @access private
+     */
+    var $last_packet;
 
-        fputs($this->fsock, $this->identifier . "\r\n");
+    /**
+     * Exit status returned from ssh if any
+     *
+     * @var int
+     * @access private
+     */
+    var $exit_status;
 
-        $response = $this->_get_binary_packet();
-        if ($response === false) {
-            user_error('Connection closed by server', E_USER_NOTICE);
-            return;
-        }
+    /**
+     * Flag to request a PTY when using exec()
+     *
+     * @var bool
+     * @see self::enablePTY()
+     * @access private
+     */
+    var $request_pty = false;
 
-        if (ord($response[0]) != NET_SSH2_MSG_KEXINIT) {
-            user_error('Expected SSH_MSG_KEXINIT', E_USER_NOTICE);
-            return;
-        }
+    /**
+     * Flag set while exec() is running when using enablePTY()
+     *
+     * @var bool
+     * @access private
+     */
+    var $in_request_pty_exec = false;
 
-        if (!$this->_key_exchange($response)) {
-            return;
-        }
+    /**
+     * Flag set after startSubsystem() is called
+     *
+     * @var bool
+     * @access private
+     */
+    var $in_subsystem;
 
-        $this->bitmap = NET_SSH2_MASK_CONSTRUCTOR;
-    }
+    /**
+     * Contents of stdError
+     *
+     * @var string
+     * @access private
+     */
+    var $stdErrorLog;
 
     /**
-     * Key Exchange
+     * The Last Interactive Response
      *
-     * @param String $kexinit_payload_server
+     * @see self::_keyboard_interactive_process()
+     * @var string
      * @access private
      */
-    function _key_exchange($kexinit_payload_server)
-    {
-        static $kex_algorithms = array(
-            'diffie-hellman-group1-sha1', // REQUIRED
-            'diffie-hellman-group14-sha1' // REQUIRED
-        );
+    var $last_interactive_response = '';
 
-        static $server_host_key_algorithms = array(
+    /**
+     * Keyboard Interactive Request / Responses
+     *
+     * @see self::_keyboard_interactive_process()
+     * @var array
+     * @access private
+     */
+    var $keyboard_requests_responses = array();
+
+    /**
+     * Banner Message
+     *
+     * Quoting from the RFC, "in some jurisdictions, sending a warning message before
+     * authentication may be relevant for getting legal protection."
+     *
+     * @see self::_filter()
+     * @see self::getBannerMessage()
+     * @var string
+     * @access private
+     */
+    var $banner_message = '';
+
+    /**
+     * Did read() timeout or return normally?
+     *
+     * @see self::isTimeout()
+     * @var bool
+     * @access private
+     */
+    var $is_timeout = false;
+
+    /**
+     * Log Boundary
+     *
+     * @see self::_format_log()
+     * @var string
+     * @access private
+     */
+    var $log_boundary = ':';
+
+    /**
+     * Log Long Width
+     *
+     * @see self::_format_log()
+     * @var int
+     * @access private
+     */
+    var $log_long_width = 65;
+
+    /**
+     * Log Short Width
+     *
+     * @see self::_format_log()
+     * @var int
+     * @access private
+     */
+    var $log_short_width = 16;
+
+    /**
+     * Hostname
+     *
+     * @see self::__construct()
+     * @see self::_connect()
+     * @var string
+     * @access private
+     */
+    var $host;
+
+    /**
+     * Port Number
+     *
+     * @see self::__construct()
+     * @see self::_connect()
+     * @var int
+     * @access private
+     */
+    var $port;
+
+    /**
+     * Number of columns for terminal window size
+     *
+     * @see self::getWindowColumns()
+     * @see self::setWindowColumns()
+     * @see self::setWindowSize()
+     * @var int
+     * @access private
+     */
+    var $windowColumns = 80;
+
+    /**
+     * Number of columns for terminal window size
+     *
+     * @see self::getWindowRows()
+     * @see self::setWindowRows()
+     * @see self::setWindowSize()
+     * @var int
+     * @access private
+     */
+    var $windowRows = 24;
+
+    /**
+     * Crypto Engine
+     *
+     * @see self::setCryptoEngine()
+     * @see self::_key_exchange()
+     * @var int
+     * @access private
+     */
+    var $crypto_engine = false;
+
+    /**
+     * A System_SSH_Agent for use in the SSH2 Agent Forwarding scenario
+     *
+     * @var System_SSH_Agent
+     * @access private
+     */
+    var $agent;
+
+    /**
+     * Send the identification string first?
+     *
+     * @var bool
+     * @access private
+     */
+    var $send_id_string_first = true;
+
+    /**
+     * Send the key exchange initiation packet first?
+     *
+     * @var bool
+     * @access private
+     */
+    var $send_kex_first = true;
+
+    /**
+     * Some versions of OpenSSH incorrectly calculate the key size
+     *
+     * @var bool
+     * @access private
+     */
+    var $bad_key_size_fix = false;
+
+    /**
+     * The selected decryption algorithm
+     *
+     * @var string
+     * @access private
+     */
+    var $decrypt_algorithm = '';
+
+    /**
+     * Should we try to re-connect to re-establish keys?
+     *
+     * @var bool
+     * @access private
+     */
+    var $retry_connect = false;
+
+    /**
+     * Binary Packet Buffer
+     *
+     * @var string|false
+     * @access private
+     */
+    var $binary_packet_buffer = false;
+
+    /**
+     * Default Constructor.
+     *
+     * $host can either be a string, representing the host, or a stream resource.
+     *
+     * @param mixed $host
+     * @param int $port
+     * @param int $timeout
+     * @see self::login()
+     * @return \phpseclib\Net\SSH2
+     * @access public
+     */
+    function __construct($host, $port = 22, $timeout = 10)
+    {
+        $this->message_numbers = array(
+            1 => 'NET_SSH2_MSG_DISCONNECT',
+            2 => 'NET_SSH2_MSG_IGNORE',
+            3 => 'NET_SSH2_MSG_UNIMPLEMENTED',
+            4 => 'NET_SSH2_MSG_DEBUG',
+            5 => 'NET_SSH2_MSG_SERVICE_REQUEST',
+            6 => 'NET_SSH2_MSG_SERVICE_ACCEPT',
+            20 => 'NET_SSH2_MSG_KEXINIT',
+            21 => 'NET_SSH2_MSG_NEWKEYS',
+            30 => 'NET_SSH2_MSG_KEXDH_INIT',
+            31 => 'NET_SSH2_MSG_KEXDH_REPLY',
+            50 => 'NET_SSH2_MSG_USERAUTH_REQUEST',
+            51 => 'NET_SSH2_MSG_USERAUTH_FAILURE',
+            52 => 'NET_SSH2_MSG_USERAUTH_SUCCESS',
+            53 => 'NET_SSH2_MSG_USERAUTH_BANNER',
+
+            80 => 'NET_SSH2_MSG_GLOBAL_REQUEST',
+            81 => 'NET_SSH2_MSG_REQUEST_SUCCESS',
+            82 => 'NET_SSH2_MSG_REQUEST_FAILURE',
+            90 => 'NET_SSH2_MSG_CHANNEL_OPEN',
+            91 => 'NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION',
+            92 => 'NET_SSH2_MSG_CHANNEL_OPEN_FAILURE',
+            93 => 'NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST',
+            94 => 'NET_SSH2_MSG_CHANNEL_DATA',
+            95 => 'NET_SSH2_MSG_CHANNEL_EXTENDED_DATA',
+            96 => 'NET_SSH2_MSG_CHANNEL_EOF',
+            97 => 'NET_SSH2_MSG_CHANNEL_CLOSE',
+            98 => 'NET_SSH2_MSG_CHANNEL_REQUEST',
+            99 => 'NET_SSH2_MSG_CHANNEL_SUCCESS',
+            100 => 'NET_SSH2_MSG_CHANNEL_FAILURE'
+        );
+        $this->disconnect_reasons = array(
+            1 => 'NET_SSH2_DISCONNECT_HOST_NOT_ALLOWED_TO_CONNECT',
+            2 => 'NET_SSH2_DISCONNECT_PROTOCOL_ERROR',
+            3 => 'NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED',
+            4 => 'NET_SSH2_DISCONNECT_RESERVED',
+            5 => 'NET_SSH2_DISCONNECT_MAC_ERROR',
+            6 => 'NET_SSH2_DISCONNECT_COMPRESSION_ERROR',
+            7 => 'NET_SSH2_DISCONNECT_SERVICE_NOT_AVAILABLE',
+            8 => 'NET_SSH2_DISCONNECT_PROTOCOL_VERSION_NOT_SUPPORTED',
+            9 => 'NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE',
+            10 => 'NET_SSH2_DISCONNECT_CONNECTION_LOST',
+            11 => 'NET_SSH2_DISCONNECT_BY_APPLICATION',
+            12 => 'NET_SSH2_DISCONNECT_TOO_MANY_CONNECTIONS',
+            13 => 'NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER',
+            14 => 'NET_SSH2_DISCONNECT_NO_MORE_AUTH_METHODS_AVAILABLE',
+            15 => 'NET_SSH2_DISCONNECT_ILLEGAL_USER_NAME'
+        );
+        $this->channel_open_failure_reasons = array(
+            1 => 'NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED'
+        );
+        $this->terminal_modes = array(
+            0 => 'NET_SSH2_TTY_OP_END'
+        );
+        $this->channel_extended_data_type_codes = array(
+            1 => 'NET_SSH2_EXTENDED_DATA_STDERR'
+        );
+
+        $this->_define_array(
+            $this->message_numbers,
+            $this->disconnect_reasons,
+            $this->channel_open_failure_reasons,
+            $this->terminal_modes,
+            $this->channel_extended_data_type_codes,
+            array(60 => 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ'),
+            array(60 => 'NET_SSH2_MSG_USERAUTH_PK_OK'),
+            array(60 => 'NET_SSH2_MSG_USERAUTH_INFO_REQUEST',
+                  61 => 'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE'),
+            // RFC 4419 - diffie-hellman-group-exchange-sha{1,256}
+            array(30 => 'NET_SSH2_MSG_KEXDH_GEX_REQUEST_OLD',
+                  31 => 'NET_SSH2_MSG_KEXDH_GEX_GROUP',
+                  32 => 'NET_SSH2_MSG_KEXDH_GEX_INIT',
+                  33 => 'NET_SSH2_MSG_KEXDH_GEX_REPLY',
+                  34 => 'NET_SSH2_MSG_KEXDH_GEX_REQUEST'),
+            // RFC 5656 - Elliptic Curves (for curve25519-sha256@libssh.org)
+            array(30 => 'NET_SSH2_MSG_KEX_ECDH_INIT',
+                  31 => 'NET_SSH2_MSG_KEX_ECDH_REPLY')
+        );
+
+        if (is_resource($host)) {
+            $this->fsock = $host;
+            return;
+        }
+
+        if (is_string($host)) {
+            $this->host = $host;
+            $this->port = $port;
+            $this->timeout = $timeout;
+        }
+    }
+
+    /**
+     * Set Crypto Engine Mode
+     *
+     * Possible $engine values:
+     * CRYPT_MODE_INTERNAL, CRYPT_MODE_MCRYPT
+     *
+     * @param int $engine
+     * @access public
+     */
+    function setCryptoEngine($engine)
+    {
+        $this->crypto_engine = $engine;
+    }
+
+    /**
+     * Send Identification String First
+     *
+     * https://tools.ietf.org/html/rfc4253#section-4.2 says "when the connection has been established,
+     * both sides MUST send an identification string". It does not say which side sends it first. In
+     * theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy
+     *
+     * @access public
+     */
+    function sendIdentificationStringFirst()
+    {
+        $this->send_id_string_first = true;
+    }
+
+    /**
+     * Send Identification String Last
+     *
+     * https://tools.ietf.org/html/rfc4253#section-4.2 says "when the connection has been established,
+     * both sides MUST send an identification string". It does not say which side sends it first. In
+     * theory it shouldn't matter but it is a fact of life that some SSH servers are simply buggy
+     *
+     * @access public
+     */
+    function sendIdentificationStringLast()
+    {
+        $this->send_id_string_first = false;
+    }
+
+    /**
+     * Send SSH_MSG_KEXINIT First
+     *
+     * https://tools.ietf.org/html/rfc4253#section-7.1 says "key exchange begins by each sending
+     * sending the [SSH_MSG_KEXINIT] packet". It does not say which side sends it first. In theory
+     * it shouldn't matter but it is a fact of life that some SSH servers are simply buggy
+     *
+     * @access public
+     */
+    function sendKEXINITFirst()
+    {
+        $this->send_kex_first = true;
+    }
+
+    /**
+     * Send SSH_MSG_KEXINIT Last
+     *
+     * https://tools.ietf.org/html/rfc4253#section-7.1 says "key exchange begins by each sending
+     * sending the [SSH_MSG_KEXINIT] packet". It does not say which side sends it first. In theory
+     * it shouldn't matter but it is a fact of life that some SSH servers are simply buggy
+     *
+     * @access public
+     */
+    function sendKEXINITLast()
+    {
+        $this->send_kex_first = false;
+    }
+
+    /**
+     * Connect to an SSHv2 server
+     *
+     * @return bool
+     * @access private
+     */
+    function _connect()
+    {
+        if ($this->bitmap & self::MASK_CONSTRUCTOR) {
+            return false;
+        }
+
+        $this->bitmap |= self::MASK_CONSTRUCTOR;
+
+        $this->curTimeout = $this->timeout;
+
+        $this->last_packet = microtime(true);
+
+        if (!is_resource($this->fsock)) {
+            $start = microtime(true);
+            // with stream_select a timeout of 0 means that no timeout takes place;
+            // with fsockopen a timeout of 0 means that you instantly timeout
+            // to resolve this incompatibility a timeout of 100,000 will be used for fsockopen if timeout is 0
+            $this->fsock = @fsockopen($this->host, $this->port, $errno, $errstr, $this->curTimeout == 0 ? 100000 : $this->curTimeout);
+            if (!$this->fsock) {
+                $host = $this->host . ':' . $this->port;
+                user_error(rtrim("Cannot connect to $host. Error $errno. $errstr"));
+                return false;
+            }
+            $elapsed = microtime(true) - $start;
+
+            $this->curTimeout-= $elapsed;
+
+            if ($this->curTimeout <= 0) {
+                $this->is_timeout = true;
+                return false;
+            }
+        }
+
+        $this->identifier = $this->_generate_identifier();
+
+        if ($this->send_id_string_first) {
+            fputs($this->fsock, $this->identifier . "\r\n");
+        }
+
+        /* According to the SSH2 specs,
+
+          "The server MAY send other lines of data before sending the version
+           string.  Each line SHOULD be terminated by a Carriage Return and Line
+           Feed.  Such lines MUST NOT begin with "SSH-", and SHOULD be encoded
+           in ISO-10646 UTF-8 [RFC3629] (language is not specified).  Clients
+           MUST be able to process such lines." */
+        $data = '';
+        while (!feof($this->fsock) && !preg_match('#(.*)^(SSH-(\d\.\d+).*)#ms', $data, $matches)) {
+            $line = '';
+            while (true) {
+                if ($this->curTimeout) {
+                    if ($this->curTimeout < 0) {
+                        $this->is_timeout = true;
+                        return false;
+                    }
+                    $read = array($this->fsock);
+                    $write = $except = null;
+                    $start = microtime(true);
+                    $sec = floor($this->curTimeout);
+                    $usec = 1000000 * ($this->curTimeout - $sec);
+                    // on windows this returns a "Warning: Invalid CRT parameters detected" error
+                    // the !count() is done as a workaround for <https://bugs.php.net/42682>
+                    if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) {
+                        $this->is_timeout = true;
+                        return false;
+                    }
+                    $elapsed = microtime(true) - $start;
+                    $this->curTimeout-= $elapsed;
+                }
+
+                $temp = stream_get_line($this->fsock, 255, "\n");
+                if (strlen($temp) == 255) {
+                    continue;
+                }
+
+                $line.= "$temp\n";
+
+                // quoting RFC4253, "Implementers who wish to maintain
+                // compatibility with older, undocumented versions of this protocol may
+                // want to process the identification string without expecting the
+                // presence of the carriage return character for reasons described in
+                // Section 5 of this document."
+
+                //if (substr($line, -2) == "\r\n") {
+                //    break;
+                //}
+
+                break;
+            }
+
+            $data.= $line;
+        }
+
+        if (feof($this->fsock)) {
+            user_error('Connection closed by server');
+            return false;
+        }
+
+        $extra = $matches[1];
+
+        if (defined('NET_SSH2_LOGGING')) {
+            $this->_append_log('<-', $matches[0]);
+            $this->_append_log('->', $this->identifier . "\r\n");
+        }
+
+        $this->server_identifier = trim($temp, "\r\n");
+        if (strlen($extra)) {
+            $this->errors[] = utf8_decode($data);
+        }
+
+        if (version_compare($matches[3], '1.99', '<')) {
+            user_error("Cannot connect to SSH $matches[3] servers");
+            return false;
+        }
+
+        if (!$this->send_id_string_first) {
+            fputs($this->fsock, $this->identifier . "\r\n");
+        }
+
+        if (!$this->send_kex_first) {
+            $response = $this->_get_binary_packet();
+            if ($response === false) {
+                user_error('Connection closed by server');
+                return false;
+            }
+
+            if (!strlen($response) || ord($response[0]) != NET_SSH2_MSG_KEXINIT) {
+                user_error('Expected SSH_MSG_KEXINIT');
+                return false;
+            }
+
+            if (!$this->_key_exchange($response)) {
+                return false;
+            }
+        }
+
+        if ($this->send_kex_first && !$this->_key_exchange()) {
+            return false;
+        }
+
+        $this->bitmap|= self::MASK_CONNECTED;
+
+        return true;
+    }
+
+    /**
+     * Generates the SSH identifier
+     *
+     * You should overwrite this method in your own class if you want to use another identifier
+     *
+     * @access protected
+     * @return string
+     */
+    function _generate_identifier()
+    {
+        $identifier = 'SSH-2.0-phpseclib_2.0';
+
+        $ext = array();
+        if (function_exists('\\Sodium\\library_version_major')) {
+            $ext[] = 'libsodium';
+        }
+
+        if (extension_loaded('openssl')) {
+            $ext[] = 'openssl';
+        } elseif (extension_loaded('mcrypt')) {
+            $ext[] = 'mcrypt';
+        }
+
+        if (extension_loaded('gmp')) {
+            $ext[] = 'gmp';
+        } elseif (extension_loaded('bcmath')) {
+            $ext[] = 'bcmath';
+        }
+
+        if (!empty($ext)) {
+            $identifier .= ' (' . implode(', ', $ext) . ')';
+        }
+
+        return $identifier;
+    }
+
+    /**
+     * Key Exchange
+     *
+     * @param string $kexinit_payload_server optional
+     * @access private
+     */
+    function _key_exchange($kexinit_payload_server = false)
+    {
+        $kex_algorithms = array(
+            // Elliptic Curve Diffie-Hellman Key Agreement (ECDH) using
+            // Curve25519. See doc/curve25519-sha256@libssh.org.txt in the
+            // libssh repository for more information.
+            'curve25519-sha256@libssh.org',
+
+            // Diffie-Hellman Key Agreement (DH) using integer modulo prime
+            // groups.
+            'diffie-hellman-group1-sha1', // REQUIRED
+            'diffie-hellman-group14-sha1', // REQUIRED
+            'diffie-hellman-group-exchange-sha1', // RFC 4419
+            'diffie-hellman-group-exchange-sha256', // RFC 4419
+        );
+        if (!function_exists('\\Sodium\\library_version_major')) {
+            $kex_algorithms = array_diff(
+                $kex_algorithms,
+                array('curve25519-sha256@libssh.org')
+            );
+        }
+
+        $server_host_key_algorithms = array(
             'ssh-rsa', // RECOMMENDED  sign   Raw RSA Key
             'ssh-dss'  // REQUIRED     sign   Raw DSS Key
         );
 
-        static $encryption_algorithms = array(
-            // from <http://tools.ietf.org/html/rfc4345#section-4>:
-            'arcfour256',
-            'arcfour128',
+        $encryption_algorithms = array(
+            // from <http://tools.ietf.org/html/rfc4345#section-4>:
+            'arcfour256',
+            'arcfour128',
+
+            //'arcfour',      // OPTIONAL          the ARCFOUR stream cipher with a 128-bit key
+
+            // CTR modes from <http://tools.ietf.org/html/rfc4344#section-4>:
+            'aes128-ctr',     // RECOMMENDED       AES (Rijndael) in SDCTR mode, with 128-bit key
+            'aes192-ctr',     // RECOMMENDED       AES with 192-bit key
+            'aes256-ctr',     // RECOMMENDED       AES with 256-bit key
+
+            'twofish128-ctr', // OPTIONAL          Twofish in SDCTR mode, with 128-bit key
+            'twofish192-ctr', // OPTIONAL          Twofish with 192-bit key
+            'twofish256-ctr', // OPTIONAL          Twofish with 256-bit key
+
+            'aes128-cbc',     // RECOMMENDED       AES with a 128-bit key
+            'aes192-cbc',     // OPTIONAL          AES with a 192-bit key
+            'aes256-cbc',     // OPTIONAL          AES in CBC mode, with a 256-bit key
+
+            'twofish128-cbc', // OPTIONAL          Twofish with a 128-bit key
+            'twofish192-cbc', // OPTIONAL          Twofish with a 192-bit key
+            'twofish256-cbc',
+            'twofish-cbc',    // OPTIONAL          alias for "twofish256-cbc"
+                              //                   (this is being retained for historical reasons)
+
+            'blowfish-ctr',   // OPTIONAL          Blowfish in SDCTR mode
+
+            'blowfish-cbc',   // OPTIONAL          Blowfish in CBC mode
+
+            '3des-ctr',       // RECOMMENDED       Three-key 3DES in SDCTR mode
+
+            '3des-cbc',       // REQUIRED          three-key 3DES in CBC mode
+                //'none'         // OPTIONAL          no encryption; NOT RECOMMENDED
+        );
+
+        if (extension_loaded('openssl') && !extension_loaded('mcrypt')) {
+            // OpenSSL does not support arcfour256 in any capacity and arcfour128 / arcfour support is limited to
+            // instances that do not use continuous buffers
+            $encryption_algorithms = array_diff(
+                $encryption_algorithms,
+                array('arcfour256', 'arcfour128', 'arcfour')
+            );
+        }
+
+        if (class_exists('\phpseclib\Crypt\RC4') === false) {
+            $encryption_algorithms = array_diff(
+                $encryption_algorithms,
+                array('arcfour256', 'arcfour128', 'arcfour')
+            );
+        }
+        if (class_exists('\phpseclib\Crypt\Rijndael') === false) {
+            $encryption_algorithms = array_diff(
+                $encryption_algorithms,
+                array('aes128-ctr', 'aes192-ctr', 'aes256-ctr', 'aes128-cbc', 'aes192-cbc', 'aes256-cbc')
+            );
+        }
+        if (class_exists('\phpseclib\Crypt\Twofish') === false) {
+            $encryption_algorithms = array_diff(
+                $encryption_algorithms,
+                array('twofish128-ctr', 'twofish192-ctr', 'twofish256-ctr', 'twofish128-cbc', 'twofish192-cbc', 'twofish256-cbc', 'twofish-cbc')
+            );
+        }
+        if (class_exists('\phpseclib\Crypt\Blowfish') === false) {
+            $encryption_algorithms = array_diff(
+                $encryption_algorithms,
+                array('blowfish-ctr', 'blowfish-cbc')
+            );
+        }
+        if (class_exists('\phpseclib\Crypt\TripleDES') === false) {
+            $encryption_algorithms = array_diff(
+                $encryption_algorithms,
+                array('3des-ctr', '3des-cbc')
+            );
+        }
+        $encryption_algorithms = array_values($encryption_algorithms);
+
+        $mac_algorithms = array(
+            // from <http://www.ietf.org/rfc/rfc6668.txt>:
+            'hmac-sha2-256',// RECOMMENDED     HMAC-SHA256 (digest length = key length = 32)
+
+            'hmac-sha1-96', // RECOMMENDED     first 96 bits of HMAC-SHA1 (digest length = 12, key length = 20)
+            'hmac-sha1',    // REQUIRED        HMAC-SHA1 (digest length = key length = 20)
+            'hmac-md5-96',  // OPTIONAL        first 96 bits of HMAC-MD5 (digest length = 12, key length = 16)
+            'hmac-md5',     // OPTIONAL        HMAC-MD5 (digest length = key length = 16)
+            //'none'          // OPTIONAL        no MAC; NOT RECOMMENDED
+        );
+
+        $compression_algorithms = array(
+            'none'   // REQUIRED        no compression
+            //'zlib' // OPTIONAL        ZLIB (LZ77) compression
+        );
+
+        // some SSH servers have buggy implementations of some of the above algorithms
+        switch (true) {
+            case $this->server_identifier == 'SSH-2.0-SSHD':
+            case substr($this->server_identifier, 0, 13) == 'SSH-2.0-DLINK':
+                $mac_algorithms = array_values(array_diff(
+                    $mac_algorithms,
+                    array('hmac-sha1-96', 'hmac-md5-96')
+                ));
+        }
+
+        $str_kex_algorithms = implode(',', $kex_algorithms);
+        $str_server_host_key_algorithms = implode(',', $server_host_key_algorithms);
+        $encryption_algorithms_server_to_client = $encryption_algorithms_client_to_server = implode(',', $encryption_algorithms);
+        $mac_algorithms_server_to_client = $mac_algorithms_client_to_server = implode(',', $mac_algorithms);
+        $compression_algorithms_server_to_client = $compression_algorithms_client_to_server = implode(',', $compression_algorithms);
+
+        $client_cookie = Random::string(16);
+
+        $kexinit_payload_client = pack(
+            'Ca*Na*Na*Na*Na*Na*Na*Na*Na*Na*Na*CN',
+            NET_SSH2_MSG_KEXINIT,
+            $client_cookie,
+            strlen($str_kex_algorithms),
+            $str_kex_algorithms,
+            strlen($str_server_host_key_algorithms),
+            $str_server_host_key_algorithms,
+            strlen($encryption_algorithms_client_to_server),
+            $encryption_algorithms_client_to_server,
+            strlen($encryption_algorithms_server_to_client),
+            $encryption_algorithms_server_to_client,
+            strlen($mac_algorithms_client_to_server),
+            $mac_algorithms_client_to_server,
+            strlen($mac_algorithms_server_to_client),
+            $mac_algorithms_server_to_client,
+            strlen($compression_algorithms_client_to_server),
+            $compression_algorithms_client_to_server,
+            strlen($compression_algorithms_server_to_client),
+            $compression_algorithms_server_to_client,
+            0,
+            '',
+            0,
+            '',
+            0,
+            0
+        );
+
+        if ($this->send_kex_first) {
+            if (!$this->_send_binary_packet($kexinit_payload_client)) {
+                return false;
+            }
+
+            $kexinit_payload_server = $this->_get_binary_packet();
+            if ($kexinit_payload_server === false) {
+                user_error('Connection closed by server');
+                return false;
+            }
+
+            if (!strlen($kexinit_payload_server) || ord($kexinit_payload_server[0]) != NET_SSH2_MSG_KEXINIT) {
+                user_error('Expected SSH_MSG_KEXINIT');
+                return false;
+            }
+        }
+
+        $response = $kexinit_payload_server;
+        $this->_string_shift($response, 1); // skip past the message number (it should be SSH_MSG_KEXINIT)
+        $server_cookie = $this->_string_shift($response, 16);
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->kex_algorithms = explode(',', $this->_string_shift($response, $temp['length']));
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->server_host_key_algorithms = explode(',', $this->_string_shift($response, $temp['length']));
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->encryption_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->encryption_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->mac_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->mac_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->compression_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->compression_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->languages_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->languages_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+
+        if (!strlen($response)) {
+            return false;
+        }
+        extract(unpack('Cfirst_kex_packet_follows', $this->_string_shift($response, 1)));
+        $first_kex_packet_follows = $first_kex_packet_follows != 0;
+
+        if (!$this->send_kex_first && !$this->_send_binary_packet($kexinit_payload_client)) {
+            return false;
+        }
+
+        // we need to decide upon the symmetric encryption algorithms before we do the diffie-hellman key exchange
+        // we don't initialize any crypto-objects, yet - we do that, later. for now, we need the lengths to make the
+        // diffie-hellman key exchange as fast as possible
+        $decrypt = $this->_array_intersect_first($encryption_algorithms, $this->encryption_algorithms_server_to_client);
+        $decryptKeyLength = $this->_encryption_algorithm_to_key_size($decrypt);
+        if ($decryptKeyLength === null) {
+            user_error('No compatible server to client encryption algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        $encrypt = $this->_array_intersect_first($encryption_algorithms, $this->encryption_algorithms_client_to_server);
+        $encryptKeyLength = $this->_encryption_algorithm_to_key_size($encrypt);
+        if ($encryptKeyLength === null) {
+            user_error('No compatible client to server encryption algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        // through diffie-hellman key exchange a symmetric key is obtained
+        $kex_algorithm = $this->_array_intersect_first($kex_algorithms, $this->kex_algorithms);
+        if ($kex_algorithm === false) {
+            user_error('No compatible key exchange algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        // Only relevant in diffie-hellman-group-exchange-sha{1,256}, otherwise empty.
+        $exchange_hash_rfc4419 = '';
+
+        if ($kex_algorithm === 'curve25519-sha256@libssh.org') {
+            $x = Random::string(32);
+            $eBytes = \Sodium\crypto_box_publickey_from_secretkey($x);
+            $clientKexInitMessage = NET_SSH2_MSG_KEX_ECDH_INIT;
+            $serverKexReplyMessage = NET_SSH2_MSG_KEX_ECDH_REPLY;
+            $kexHash = new Hash('sha256');
+        } else {
+            if (strpos($kex_algorithm, 'diffie-hellman-group-exchange') === 0) {
+                $dh_group_sizes_packed = pack(
+                    'NNN',
+                    $this->kex_dh_group_size_min,
+                    $this->kex_dh_group_size_preferred,
+                    $this->kex_dh_group_size_max
+                );
+                $packet = pack(
+                    'Ca*',
+                    NET_SSH2_MSG_KEXDH_GEX_REQUEST,
+                    $dh_group_sizes_packed
+                );
+                if (!$this->_send_binary_packet($packet)) {
+                    return false;
+                }
+
+                $response = $this->_get_binary_packet();
+                if ($response === false) {
+                    user_error('Connection closed by server');
+                    return false;
+                }
+                extract(unpack('Ctype', $this->_string_shift($response, 1)));
+                if ($type != NET_SSH2_MSG_KEXDH_GEX_GROUP) {
+                    user_error('Expected SSH_MSG_KEX_DH_GEX_GROUP');
+                    return false;
+                }
+
+                if (strlen($response) < 4) {
+                    return false;
+                }
+                extract(unpack('NprimeLength', $this->_string_shift($response, 4)));
+                $primeBytes = $this->_string_shift($response, $primeLength);
+                $prime = new BigInteger($primeBytes, -256);
+
+                if (strlen($response) < 4) {
+                    return false;
+                }
+                extract(unpack('NgLength', $this->_string_shift($response, 4)));
+                $gBytes = $this->_string_shift($response, $gLength);
+                $g = new BigInteger($gBytes, -256);
+
+                $exchange_hash_rfc4419 = pack(
+                    'a*Na*Na*',
+                    $dh_group_sizes_packed,
+                    $primeLength,
+                    $primeBytes,
+                    $gLength,
+                    $gBytes
+                );
+
+                $clientKexInitMessage = NET_SSH2_MSG_KEXDH_GEX_INIT;
+                $serverKexReplyMessage = NET_SSH2_MSG_KEXDH_GEX_REPLY;
+            } else {
+                switch ($kex_algorithm) {
+                    // see http://tools.ietf.org/html/rfc2409#section-6.2 and
+                    // http://tools.ietf.org/html/rfc2412, appendex E
+                    case 'diffie-hellman-group1-sha1':
+                        $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
+                                '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
+                                '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
+                                'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF';
+                        break;
+                    // see http://tools.ietf.org/html/rfc3526#section-3
+                    case 'diffie-hellman-group14-sha1':
+                        $prime = 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' .
+                                '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' .
+                                '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' .
+                                'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' .
+                                '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' .
+                                '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' .
+                                'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' .
+                                '3995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF';
+                        break;
+                }
+                // For both diffie-hellman-group1-sha1 and diffie-hellman-group14-sha1
+                // the generator field element is 2 (decimal) and the hash function is sha1.
+                $g = new BigInteger(2);
+                $prime = new BigInteger($prime, 16);
+                $clientKexInitMessage = NET_SSH2_MSG_KEXDH_INIT;
+                $serverKexReplyMessage = NET_SSH2_MSG_KEXDH_REPLY;
+            }
+
+            switch ($kex_algorithm) {
+                case 'diffie-hellman-group-exchange-sha256':
+                    $kexHash = new Hash('sha256');
+                    break;
+                default:
+                    $kexHash = new Hash('sha1');
+            }
+
+            /* To increase the speed of the key exchange, both client and server may
+            reduce the size of their private exponents.  It should be at least
+            twice as long as the key material that is generated from the shared
+            secret.  For more details, see the paper by van Oorschot and Wiener
+            [VAN-OORSCHOT].
+
+            -- http://tools.ietf.org/html/rfc4419#section-6.2 */
+            $one = new BigInteger(1);
+            $keyLength = min($kexHash->getLength(), max($encryptKeyLength, $decryptKeyLength));
+            $max = $one->bitwise_leftShift(16 * $keyLength); // 2 * 8 * $keyLength
+            $max = $max->subtract($one);
+
+            $x = $one->random($one, $max);
+            $e = $g->modPow($x, $prime);
+
+            $eBytes = $e->toBytes(true);
+        }
+        $data = pack('CNa*', $clientKexInitMessage, strlen($eBytes), $eBytes);
+
+        if (!$this->_send_binary_packet($data)) {
+            user_error('Connection closed by server');
+            return false;
+        }
+
+        $response = $this->_get_binary_packet();
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return false;
+        }
+        if (!strlen($response)) {
+            return false;
+        }
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+        if ($type != $serverKexReplyMessage) {
+            user_error('Expected SSH_MSG_KEXDH_REPLY');
+            return false;
+        }
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->server_public_host_key = $server_public_host_key = $this->_string_shift($response, $temp['length']);
+
+        if (strlen($server_public_host_key) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
+        $public_key_format = $this->_string_shift($server_public_host_key, $temp['length']);
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $fBytes = $this->_string_shift($response, $temp['length']);
+
+        if (strlen($response) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($response, 4));
+        $this->signature = $this->_string_shift($response, $temp['length']);
+
+        if (strlen($this->signature) < 4) {
+            return false;
+        }
+        $temp = unpack('Nlength', $this->_string_shift($this->signature, 4));
+        $this->signature_format = $this->_string_shift($this->signature, $temp['length']);
+
+        if ($kex_algorithm === 'curve25519-sha256@libssh.org') {
+            if (strlen($fBytes) !== 32) {
+                user_error('Received curve25519 public key of invalid length.');
+                return false;
+            }
+            $key = new BigInteger(\Sodium\crypto_scalarmult($x, $fBytes), 256);
+            \Sodium\memzero($x);
+        } else {
+            $f = new BigInteger($fBytes, -256);
+            $key = $f->modPow($x, $prime);
+        }
+        $keyBytes = $key->toBytes(true);
+
+        $this->exchange_hash = pack(
+            'Na*Na*Na*Na*Na*a*Na*Na*Na*',
+            strlen($this->identifier),
+            $this->identifier,
+            strlen($this->server_identifier),
+            $this->server_identifier,
+            strlen($kexinit_payload_client),
+            $kexinit_payload_client,
+            strlen($kexinit_payload_server),
+            $kexinit_payload_server,
+            strlen($this->server_public_host_key),
+            $this->server_public_host_key,
+            $exchange_hash_rfc4419,
+            strlen($eBytes),
+            $eBytes,
+            strlen($fBytes),
+            $fBytes,
+            strlen($keyBytes),
+            $keyBytes
+        );
+
+        $this->exchange_hash = $kexHash->hash($this->exchange_hash);
+
+        if ($this->session_id === false) {
+            $this->session_id = $this->exchange_hash;
+        }
+
+        $server_host_key_algorithm = $this->_array_intersect_first($server_host_key_algorithms, $this->server_host_key_algorithms);
+        if ($server_host_key_algorithm === false) {
+            user_error('No compatible server host key algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        if ($public_key_format != $server_host_key_algorithm || $this->signature_format != $server_host_key_algorithm) {
+            user_error('Server Host Key Algorithm Mismatch');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        $packet = pack(
+            'C',
+            NET_SSH2_MSG_NEWKEYS
+        );
+
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $response = $this->_get_binary_packet();
+
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return false;
+        }
+
+        if (!strlen($response)) {
+            return false;
+        }
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+        if ($type != NET_SSH2_MSG_NEWKEYS) {
+            user_error('Expected SSH_MSG_NEWKEYS');
+            return false;
+        }
+
+        $this->decrypt_algorithm = $decrypt;
+
+        $keyBytes = pack('Na*', strlen($keyBytes), $keyBytes);
+
+        $this->encrypt = $this->_encryption_algorithm_to_crypt_instance($encrypt);
+        if ($this->encrypt) {
+            if ($this->crypto_engine) {
+                $this->encrypt->setEngine($this->crypto_engine);
+            }
+            if ($this->encrypt->block_size) {
+                $this->encrypt_block_size = $this->encrypt->block_size;
+            }
+            $this->encrypt->enableContinuousBuffer();
+            $this->encrypt->disablePadding();
+
+            $iv = $kexHash->hash($keyBytes . $this->exchange_hash . 'A' . $this->session_id);
+            while ($this->encrypt_block_size > strlen($iv)) {
+                $iv.= $kexHash->hash($keyBytes . $this->exchange_hash . $iv);
+            }
+            $this->encrypt->setIV(substr($iv, 0, $this->encrypt_block_size));
+
+            $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'C' . $this->session_id);
+            while ($encryptKeyLength > strlen($key)) {
+                $key.= $kexHash->hash($keyBytes . $this->exchange_hash . $key);
+            }
+            $this->encrypt->setKey(substr($key, 0, $encryptKeyLength));
+        }
+
+        $this->decrypt = $this->_encryption_algorithm_to_crypt_instance($decrypt);
+        if ($this->decrypt) {
+            if ($this->crypto_engine) {
+                $this->decrypt->setEngine($this->crypto_engine);
+            }
+            if ($this->decrypt->block_size) {
+                $this->decrypt_block_size = $this->decrypt->block_size;
+            }
+            $this->decrypt->enableContinuousBuffer();
+            $this->decrypt->disablePadding();
+
+            $iv = $kexHash->hash($keyBytes . $this->exchange_hash . 'B' . $this->session_id);
+            while ($this->decrypt_block_size > strlen($iv)) {
+                $iv.= $kexHash->hash($keyBytes . $this->exchange_hash . $iv);
+            }
+            $this->decrypt->setIV(substr($iv, 0, $this->decrypt_block_size));
+
+            $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'D' . $this->session_id);
+            while ($decryptKeyLength > strlen($key)) {
+                $key.= $kexHash->hash($keyBytes . $this->exchange_hash . $key);
+            }
+            $this->decrypt->setKey(substr($key, 0, $decryptKeyLength));
+        }
+
+        /* The "arcfour128" algorithm is the RC4 cipher, as described in
+           [SCHNEIER], using a 128-bit key.  The first 1536 bytes of keystream
+           generated by the cipher MUST be discarded, and the first byte of the
+           first encrypted packet MUST be encrypted using the 1537th byte of
+           keystream.
+
+           -- http://tools.ietf.org/html/rfc4345#section-4 */
+        if ($encrypt == 'arcfour128' || $encrypt == 'arcfour256') {
+            $this->encrypt->encrypt(str_repeat("\0", 1536));
+        }
+        if ($decrypt == 'arcfour128' || $decrypt == 'arcfour256') {
+            $this->decrypt->decrypt(str_repeat("\0", 1536));
+        }
+
+        $mac_algorithm = $this->_array_intersect_first($mac_algorithms, $this->mac_algorithms_client_to_server);
+        if ($mac_algorithm === false) {
+            user_error('No compatible client to server message authentication algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        $createKeyLength = 0; // ie. $mac_algorithm == 'none'
+        switch ($mac_algorithm) {
+            case 'hmac-sha2-256':
+                $this->hmac_create = new Hash('sha256');
+                $createKeyLength = 32;
+                break;
+            case 'hmac-sha1':
+                $this->hmac_create = new Hash('sha1');
+                $createKeyLength = 20;
+                break;
+            case 'hmac-sha1-96':
+                $this->hmac_create = new Hash('sha1-96');
+                $createKeyLength = 20;
+                break;
+            case 'hmac-md5':
+                $this->hmac_create = new Hash('md5');
+                $createKeyLength = 16;
+                break;
+            case 'hmac-md5-96':
+                $this->hmac_create = new Hash('md5-96');
+                $createKeyLength = 16;
+        }
+
+        $mac_algorithm = $this->_array_intersect_first($mac_algorithms, $this->mac_algorithms_server_to_client);
+        if ($mac_algorithm === false) {
+            user_error('No compatible server to client message authentication algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+
+        $checkKeyLength = 0;
+        $this->hmac_size = 0;
+        switch ($mac_algorithm) {
+            case 'hmac-sha2-256':
+                $this->hmac_check = new Hash('sha256');
+                $checkKeyLength = 32;
+                $this->hmac_size = 32;
+                break;
+            case 'hmac-sha1':
+                $this->hmac_check = new Hash('sha1');
+                $checkKeyLength = 20;
+                $this->hmac_size = 20;
+                break;
+            case 'hmac-sha1-96':
+                $this->hmac_check = new Hash('sha1-96');
+                $checkKeyLength = 20;
+                $this->hmac_size = 12;
+                break;
+            case 'hmac-md5':
+                $this->hmac_check = new Hash('md5');
+                $checkKeyLength = 16;
+                $this->hmac_size = 16;
+                break;
+            case 'hmac-md5-96':
+                $this->hmac_check = new Hash('md5-96');
+                $checkKeyLength = 16;
+                $this->hmac_size = 12;
+        }
+
+        $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'E' . $this->session_id);
+        while ($createKeyLength > strlen($key)) {
+            $key.= $kexHash->hash($keyBytes . $this->exchange_hash . $key);
+        }
+        $this->hmac_create->setKey(substr($key, 0, $createKeyLength));
+
+        $key = $kexHash->hash($keyBytes . $this->exchange_hash . 'F' . $this->session_id);
+        while ($checkKeyLength > strlen($key)) {
+            $key.= $kexHash->hash($keyBytes . $this->exchange_hash . $key);
+        }
+        $this->hmac_check->setKey(substr($key, 0, $checkKeyLength));
+
+        $compression_algorithm = $this->_array_intersect_first($compression_algorithms, $this->compression_algorithms_server_to_client);
+        if ($compression_algorithm === false) {
+            user_error('No compatible server to client compression algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+        $this->decompress = $compression_algorithm == 'zlib';
+
+        $compression_algorithm = $this->_array_intersect_first($compression_algorithms, $this->compression_algorithms_client_to_server);
+        if ($compression_algorithm === false) {
+            user_error('No compatible client to server compression algorithms found');
+            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        }
+        $this->compress = $compression_algorithm == 'zlib';
+
+        return true;
+    }
+
+    /**
+     * Maps an encryption algorithm name to the number of key bytes.
+     *
+     * @param string $algorithm Name of the encryption algorithm
+     * @return int|null Number of bytes as an integer or null for unknown
+     * @access private
+     */
+    function _encryption_algorithm_to_key_size($algorithm)
+    {
+        if ($this->bad_key_size_fix && $this->_bad_algorithm_candidate($algorithm)) {
+            return 16;
+        }
+
+        switch ($algorithm) {
+            case 'none':
+                return 0;
+            case 'aes128-cbc':
+            case 'aes128-ctr':
+            case 'arcfour':
+            case 'arcfour128':
+            case 'blowfish-cbc':
+            case 'blowfish-ctr':
+            case 'twofish128-cbc':
+            case 'twofish128-ctr':
+                return 16;
+            case '3des-cbc':
+            case '3des-ctr':
+            case 'aes192-cbc':
+            case 'aes192-ctr':
+            case 'twofish192-cbc':
+            case 'twofish192-ctr':
+                return 24;
+            case 'aes256-cbc':
+            case 'aes256-ctr':
+            case 'arcfour256':
+            case 'twofish-cbc':
+            case 'twofish256-cbc':
+            case 'twofish256-ctr':
+                return 32;
+        }
+        return null;
+    }
+
+    /**
+     * Maps an encryption algorithm name to an instance of a subclass of
+     * \phpseclib\Crypt\Base.
+     *
+     * @param string $algorithm Name of the encryption algorithm
+     * @return mixed Instance of \phpseclib\Crypt\Base or null for unknown
+     * @access private
+     */
+    function _encryption_algorithm_to_crypt_instance($algorithm)
+    {
+        switch ($algorithm) {
+            case '3des-cbc':
+                return new TripleDES();
+            case '3des-ctr':
+                return new TripleDES(Base::MODE_CTR);
+            case 'aes256-cbc':
+            case 'aes192-cbc':
+            case 'aes128-cbc':
+                return new Rijndael();
+            case 'aes256-ctr':
+            case 'aes192-ctr':
+            case 'aes128-ctr':
+                return new Rijndael(Base::MODE_CTR);
+            case 'blowfish-cbc':
+                return new Blowfish();
+            case 'blowfish-ctr':
+                return new Blowfish(Base::MODE_CTR);
+            case 'twofish128-cbc':
+            case 'twofish192-cbc':
+            case 'twofish256-cbc':
+            case 'twofish-cbc':
+                return new Twofish();
+            case 'twofish128-ctr':
+            case 'twofish192-ctr':
+            case 'twofish256-ctr':
+                return new Twofish(Base::MODE_CTR);
+            case 'arcfour':
+            case 'arcfour128':
+            case 'arcfour256':
+                return new RC4();
+        }
+        return null;
+    }
+
+    /*
+     * Tests whether or not proposed algorithm has a potential for issues
+     *
+     * @link https://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/ssh2-aesctr-openssh.html
+     * @link https://bugzilla.mindrot.org/show_bug.cgi?id=1291
+     * @param string $algorithm Name of the encryption algorithm
+     * @return bool
+     * @access private
+     */
+    function _bad_algorithm_candidate($algorithm)
+    {
+        switch ($algorithm) {
+            case 'arcfour256':
+            case 'aes192-ctr':
+            case 'aes256-ctr':
+                return true;
+        }
+
+        return false;
+    }
+
+    /**
+     * Login
+     *
+     * The $password parameter can be a plaintext password, a \phpseclib\Crypt\RSA object or an array
+     *
+     * @param string $username
+     * @param mixed $password
+     * @param mixed $...
+     * @return bool
+     * @see self::_login()
+     * @access public
+     */
+    function login($username)
+    {
+        $args = func_get_args();
+        return call_user_func_array(array(&$this, '_login'), $args);
+    }
+
+    /**
+     * Login Helper
+     *
+     * @param string $username
+     * @param mixed $password
+     * @param mixed $...
+     * @return bool
+     * @see self::_login_helper()
+     * @access private
+     */
+    function _login($username)
+    {
+        if (!($this->bitmap & self::MASK_CONSTRUCTOR)) {
+            if (!$this->_connect()) {
+                return false;
+            }
+        }
+
+        $args = array_slice(func_get_args(), 1);
+        if (empty($args)) {
+            return $this->_login_helper($username);
+        }
+
+        foreach ($args as $arg) {
+            if ($this->_login_helper($username, $arg)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    /**
+     * Login Helper
+     *
+     * @param string $username
+     * @param string $password
+     * @return bool
+     * @access private
+     * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis}
+     *           by sending dummy SSH_MSG_IGNORE messages.
+     */
+    function _login_helper($username, $password = null)
+    {
+        if (!($this->bitmap & self::MASK_CONNECTED)) {
+            return false;
+        }
+
+        if (!($this->bitmap & self::MASK_LOGIN_REQ)) {
+            $packet = pack(
+                'CNa*',
+                NET_SSH2_MSG_SERVICE_REQUEST,
+                strlen('ssh-userauth'),
+                'ssh-userauth'
+            );
 
-            'arcfour',    // OPTIONAL          the ARCFOUR stream cipher with a 128-bit key
+            if (!$this->_send_binary_packet($packet)) {
+                return false;
+            }
 
-            'aes128-cbc', // RECOMMENDED       AES with a 128-bit key
-            'aes192-cbc', // OPTIONAL          AES with a 192-bit key
-            'aes256-cbc', // OPTIONAL          AES in CBC mode, with a 256-bit key
+            $response = $this->_get_binary_packet();
+            if ($response === false) {
+                if ($this->retry_connect) {
+                    $this->retry_connect = false;
+                    if (!$this->_connect()) {
+                        return false;
+                    }
+                    return $this->_login_helper($username, $password);
+                }
+                user_error('Connection closed by server');
+                return false;
+            }
 
-            // from <http://tools.ietf.org/html/rfc4344#section-4>:
-            'aes128-ctr', // RECOMMENDED       AES (Rijndael) in SDCTR mode, with 128-bit key
-            'aes192-ctr', // RECOMMENDED       AES with 192-bit key
-            'aes256-ctr', // RECOMMENDED       AES with 256-bit key
-            '3des-ctr',   // RECOMMENDED       Three-key 3DES in SDCTR mode
+            if (strlen($response) < 4) {
+                return false;
+            }
+            extract(unpack('Ctype', $this->_string_shift($response, 1)));
 
-            '3des-cbc',   // REQUIRED          three-key 3DES in CBC mode
-            'none'        // OPTIONAL          no encryption; NOT RECOMMENDED
-        );
+            if ($type != NET_SSH2_MSG_SERVICE_ACCEPT) {
+                user_error('Expected SSH_MSG_SERVICE_ACCEPT');
+                return false;
+            }
+            $this->bitmap |= self::MASK_LOGIN_REQ;
+        }
 
-        static $mac_algorithms = array(
-            'hmac-sha1-96', // RECOMMENDED     first 96 bits of HMAC-SHA1 (digest length = 12, key length = 20)
-            'hmac-sha1',    // REQUIRED        HMAC-SHA1 (digest length = key length = 20)
-            'hmac-md5-96',  // OPTIONAL        first 96 bits of HMAC-MD5 (digest length = 12, key length = 16)
-            'hmac-md5',     // OPTIONAL        HMAC-MD5 (digest length = key length = 16)
-            'none'          // OPTIONAL        no MAC; NOT RECOMMENDED
-        );
+        if (strlen($this->last_interactive_response)) {
+            return !is_string($password) && !is_array($password) ? false : $this->_keyboard_interactive_process($password);
+        }
 
-        static $compression_algorithms = array(
-            'none'   // REQUIRED        no compression
-            //'zlib' // OPTIONAL        ZLIB (LZ77) compression
+        if ($password instanceof RSA) {
+            return $this->_privatekey_login($username, $password);
+        } elseif ($password instanceof Agent) {
+            return $this->_ssh_agent_login($username, $password);
+        }
+
+        if (is_array($password)) {
+            if ($this->_keyboard_interactive_login($username, $password)) {
+                $this->bitmap |= self::MASK_LOGIN;
+                return true;
+            }
+            return false;
+        }
+
+        if (!isset($password)) {
+            $packet = pack(
+                'CNa*Na*Na*',
+                NET_SSH2_MSG_USERAUTH_REQUEST,
+                strlen($username),
+                $username,
+                strlen('ssh-connection'),
+                'ssh-connection',
+                strlen('none'),
+                'none'
+            );
+
+            if (!$this->_send_binary_packet($packet)) {
+                return false;
+            }
+
+            $response = $this->_get_binary_packet();
+            if ($response === false) {
+                user_error('Connection closed by server');
+                return false;
+            }
+
+            if (!strlen($response)) {
+                return false;
+            }
+            extract(unpack('Ctype', $this->_string_shift($response, 1)));
+
+            switch ($type) {
+                case NET_SSH2_MSG_USERAUTH_SUCCESS:
+                    $this->bitmap |= self::MASK_LOGIN;
+                    return true;
+                //case NET_SSH2_MSG_USERAUTH_FAILURE:
+                default:
+                    return false;
+            }
+        }
+
+        $packet = pack(
+            'CNa*Na*Na*CNa*',
+            NET_SSH2_MSG_USERAUTH_REQUEST,
+            strlen($username),
+            $username,
+            strlen('ssh-connection'),
+            'ssh-connection',
+            strlen('password'),
+            'password',
+            0,
+            strlen($password),
+            $password
         );
 
-        static $str_kex_algorithms, $str_server_host_key_algorithms,
-               $encryption_algorithms_server_to_client, $mac_algorithms_server_to_client, $compression_algorithms_server_to_client,
-               $encryption_algorithms_client_to_server, $mac_algorithms_client_to_server, $compression_algorithms_client_to_server;
+        // remove the username and password from the logged packet
+        if (!defined('NET_SSH2_LOGGING')) {
+            $logged = null;
+        } else {
+            $logged = pack(
+                'CNa*Na*Na*CNa*',
+                NET_SSH2_MSG_USERAUTH_REQUEST,
+                strlen('username'),
+                'username',
+                strlen('ssh-connection'),
+                'ssh-connection',
+                strlen('password'),
+                'password',
+                0,
+                strlen('password'),
+                'password'
+            );
+        }
 
-        if (empty($str_kex_algorithms)) {
-            $str_kex_algorithms = implode(',', $kex_algorithms);
-            $str_server_host_key_algorithms = implode(',', $server_host_key_algorithms);
-            $encryption_algorithms_server_to_client = $encryption_algorithms_client_to_server = implode(',', $encryption_algorithms);
-            $mac_algorithms_server_to_client = $mac_algorithms_client_to_server = implode(',', $mac_algorithms);
-            $compression_algorithms_server_to_client = $compression_algorithms_client_to_server = implode(',', $compression_algorithms);
+        if (!$this->_send_binary_packet($packet, $logged)) {
+            return false;
         }
 
-        $client_cookie = '';
-        for ($i = 0; $i < 16; $i++) {
-            $client_cookie.= chr(crypt_random(0, 255));
+        $response = $this->_get_binary_packet();
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return false;
         }
 
-        $response = $kexinit_payload_server;
-        $this->_string_shift($response, 1); // skip past the message number (it should be SSH_MSG_KEXINIT)
-        $server_cookie = $this->_string_shift($response, 16);
+        if (!strlen($response)) {
+            return false;
+        }
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
 
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $this->kex_algorithms = explode(',', $this->_string_shift($response, $temp['length']));
+        switch ($type) {
+            case NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ: // in theory, the password can be changed
+                if (defined('NET_SSH2_LOGGING')) {
+                    $this->message_number_log[count($this->message_number_log) - 1] = 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ';
+                }
+                if (strlen($response) < 4) {
+                    return false;
+                }
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $this->errors[] = 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ: ' . utf8_decode($this->_string_shift($response, $length));
+                return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER);
+            case NET_SSH2_MSG_USERAUTH_FAILURE:
+                // can we use keyboard-interactive authentication?  if not then either the login is bad or the server employees
+                // multi-factor authentication
+                if (strlen($response) < 4) {
+                    return false;
+                }
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $auth_methods = explode(',', $this->_string_shift($response, $length));
+                if (!strlen($response)) {
+                    return false;
+                }
+                extract(unpack('Cpartial_success', $this->_string_shift($response, 1)));
+                $partial_success = $partial_success != 0;
 
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $this->server_host_key_algorithms = explode(',', $this->_string_shift($response, $temp['length']));
+                if (!$partial_success && in_array('keyboard-interactive', $auth_methods)) {
+                    if ($this->_keyboard_interactive_login($username, $password)) {
+                        $this->bitmap |= self::MASK_LOGIN;
+                        return true;
+                    }
+                    return false;
+                }
+                return false;
+            case NET_SSH2_MSG_USERAUTH_SUCCESS:
+                $this->bitmap |= self::MASK_LOGIN;
+                return true;
+        }
 
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $this->encryption_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+        return false;
+    }
 
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $this->encryption_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+    /**
+     * Login via keyboard-interactive authentication
+     *
+     * See {@link http://tools.ietf.org/html/rfc4256 RFC4256} for details.  This is not a full-featured keyboard-interactive authenticator.
+     *
+     * @param string $username
+     * @param string $password
+     * @return bool
+     * @access private
+     */
+    function _keyboard_interactive_login($username, $password)
+    {
+        $packet = pack(
+            'CNa*Na*Na*Na*Na*',
+            NET_SSH2_MSG_USERAUTH_REQUEST,
+            strlen($username),
+            $username,
+            strlen('ssh-connection'),
+            'ssh-connection',
+            strlen('keyboard-interactive'),
+            'keyboard-interactive',
+            0,
+            '',
+            0,
+            ''
+        );
 
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $this->mac_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
+        }
 
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $this->mac_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+        return $this->_keyboard_interactive_process($password);
+    }
 
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $this->compression_algorithms_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+    /**
+     * Handle the keyboard-interactive requests / responses.
+     *
+     * @param string $responses...
+     * @return bool
+     * @access private
+     */
+    function _keyboard_interactive_process()
+    {
+        $responses = func_get_args();
 
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $this->compression_algorithms_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+        if (strlen($this->last_interactive_response)) {
+            $response = $this->last_interactive_response;
+        } else {
+            $orig = $response = $this->_get_binary_packet();
+            if ($response === false) {
+                user_error('Connection closed by server');
+                return false;
+            }
+        }
 
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $this->languages_client_to_server = explode(',', $this->_string_shift($response, $temp['length']));
+        if (!strlen($response)) {
+            return false;
+        }
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
 
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $this->languages_server_to_client = explode(',', $this->_string_shift($response, $temp['length']));
+        switch ($type) {
+            case NET_SSH2_MSG_USERAUTH_INFO_REQUEST:
+                if (strlen($response) < 4) {
+                    return false;
+                }
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $this->_string_shift($response, $length); // name; may be empty
+                if (strlen($response) < 4) {
+                    return false;
+                }
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $this->_string_shift($response, $length); // instruction; may be empty
+                if (strlen($response) < 4) {
+                    return false;
+                }
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $this->_string_shift($response, $length); // language tag; may be empty
+                if (strlen($response) < 4) {
+                    return false;
+                }
+                extract(unpack('Nnum_prompts', $this->_string_shift($response, 4)));
+
+                for ($i = 0; $i < count($responses); $i++) {
+                    if (is_array($responses[$i])) {
+                        foreach ($responses[$i] as $key => $value) {
+                            $this->keyboard_requests_responses[$key] = $value;
+                        }
+                        unset($responses[$i]);
+                    }
+                }
+                $responses = array_values($responses);
+
+                if (isset($this->keyboard_requests_responses)) {
+                    for ($i = 0; $i < $num_prompts; $i++) {
+                        if (strlen($response) < 4) {
+                            return false;
+                        }
+                        extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                        // prompt - ie. "Password: "; must not be empty
+                        $prompt = $this->_string_shift($response, $length);
+                        //$echo = $this->_string_shift($response) != chr(0);
+                        foreach ($this->keyboard_requests_responses as $key => $value) {
+                            if (substr($prompt, 0, strlen($key)) == $key) {
+                                $responses[] = $value;
+                                break;
+                            }
+                        }
+                    }
+                }
 
-        extract(unpack('Cfirst_kex_packet_follows', $this->_string_shift($response, 1)));
-        $first_kex_packet_follows = $first_kex_packet_follows != 0;
+                // see http://tools.ietf.org/html/rfc4256#section-3.2
+                if (strlen($this->last_interactive_response)) {
+                    $this->last_interactive_response = '';
+                } elseif (defined('NET_SSH2_LOGGING')) {
+                    $this->message_number_log[count($this->message_number_log) - 1] = str_replace(
+                        'UNKNOWN',
+                        'NET_SSH2_MSG_USERAUTH_INFO_REQUEST',
+                        $this->message_number_log[count($this->message_number_log) - 1]
+                    );
+                }
 
-        // the sending of SSH2_MSG_KEXINIT could go in one of two places.  this is the second place.
-        $kexinit_payload_client = pack('Ca*Na*Na*Na*Na*Na*Na*Na*Na*Na*Na*CN',
-            NET_SSH2_MSG_KEXINIT, $client_cookie, strlen($str_kex_algorithms), $str_kex_algorithms,
-            strlen($str_server_host_key_algorithms), $str_server_host_key_algorithms, strlen($encryption_algorithms_client_to_server),
-            $encryption_algorithms_client_to_server, strlen($encryption_algorithms_server_to_client), $encryption_algorithms_server_to_client,
-            strlen($mac_algorithms_client_to_server), $mac_algorithms_client_to_server, strlen($mac_algorithms_server_to_client),
-            $mac_algorithms_server_to_client, strlen($compression_algorithms_client_to_server), $compression_algorithms_client_to_server,
-            strlen($compression_algorithms_server_to_client), $compression_algorithms_server_to_client, 0, '', 0, '',
-            0, 0
-        );
+                if (!count($responses) && $num_prompts) {
+                    $this->last_interactive_response = $orig;
+                    return false;
+                }
 
-        if (!$this->_send_binary_packet($kexinit_payload_client)) {
-            return false;
+                /*
+                   After obtaining the requested information from the user, the client
+                   MUST respond with an SSH_MSG_USERAUTH_INFO_RESPONSE message.
+                */
+                // see http://tools.ietf.org/html/rfc4256#section-3.4
+                $packet = $logged = pack('CN', NET_SSH2_MSG_USERAUTH_INFO_RESPONSE, count($responses));
+                for ($i = 0; $i < count($responses); $i++) {
+                    $packet.= pack('Na*', strlen($responses[$i]), $responses[$i]);
+                    $logged.= pack('Na*', strlen('dummy-answer'), 'dummy-answer');
+                }
+
+                if (!$this->_send_binary_packet($packet, $logged)) {
+                    return false;
+                }
+
+                if (defined('NET_SSH2_LOGGING') && NET_SSH2_LOGGING == self::LOG_COMPLEX) {
+                    $this->message_number_log[count($this->message_number_log) - 1] = str_replace(
+                        'UNKNOWN',
+                        'NET_SSH2_MSG_USERAUTH_INFO_RESPONSE',
+                        $this->message_number_log[count($this->message_number_log) - 1]
+                    );
+                }
+
+                /*
+                   After receiving the response, the server MUST send either an
+                   SSH_MSG_USERAUTH_SUCCESS, SSH_MSG_USERAUTH_FAILURE, or another
+                   SSH_MSG_USERAUTH_INFO_REQUEST message.
+                */
+                // maybe phpseclib should force close the connection after x request / responses?  unless something like that is done
+                // there could be an infinite loop of request / responses.
+                return $this->_keyboard_interactive_process();
+            case NET_SSH2_MSG_USERAUTH_SUCCESS:
+                return true;
+            case NET_SSH2_MSG_USERAUTH_FAILURE:
+                return false;
         }
-        // here ends the second place.
 
-        // we need to decide upon the symmetric encryption algorithms before we do the diffie-hellman key exchange
-        for ($i = 0; $i < count($encryption_algorithms) && !in_array($encryption_algorithms[$i], $this->encryption_algorithms_server_to_client); $i++);
-        if ($i == count($encryption_algorithms)) {
-            user_error('No compatible server to client encryption algorithms found', E_USER_NOTICE);
-            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        return false;
+    }
+
+    /**
+     * Login with an ssh-agent provided key
+     *
+     * @param string $username
+     * @param \phpseclib\System\SSH\Agent $agent
+     * @return bool
+     * @access private
+     */
+    function _ssh_agent_login($username, $agent)
+    {
+        $this->agent = $agent;
+        $keys = $agent->requestIdentities();
+        foreach ($keys as $key) {
+            if ($this->_privatekey_login($username, $key)) {
+                return true;
+            }
         }
 
-        // we don't initialize any crypto-objects, yet - we do that, later. for now, we need the lengths to make the
-        // diffie-hellman key exchange as fast as possible
-        $decrypt = $encryption_algorithms[$i];
-        switch ($decrypt) {
-            case '3des-cbc':
-            case '3des-ctr':
-                $decryptKeyLength = 24; // eg. 192 / 8
-                break;
-            case 'aes256-cbc':
-            case 'aes256-ctr':
-                $decryptKeyLength = 32; // eg. 256 / 8
-                break;
-            case 'aes192-cbc':
-            case 'aes192-ctr':
-                $decryptKeyLength = 24; // eg. 192 / 8
-                break;
-            case 'aes128-cbc':
-            case 'aes128-ctr':
-                $decryptKeyLength = 16; // eg. 128 / 8
-                break;
-            case 'arcfour':
-            case 'arcfour128':
-                $decryptKeyLength = 16; // eg. 128 / 8
-                break;
-            case 'arcfour256':
-                $decryptKeyLength = 32; // eg. 128 / 8
-                break;
-            case 'none';
-                $decryptKeyLength = 0;
+        return false;
+    }
+
+    /**
+     * Login with an RSA private key
+     *
+     * @param string $username
+     * @param \phpseclib\Crypt\RSA $password
+     * @return bool
+     * @access private
+     * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis}
+     *           by sending dummy SSH_MSG_IGNORE messages.
+     */
+    function _privatekey_login($username, $privatekey)
+    {
+        // see http://tools.ietf.org/html/rfc4253#page-15
+        $publickey = $privatekey->getPublicKey(RSA::PUBLIC_FORMAT_RAW);
+        if ($publickey === false) {
+            return false;
         }
 
-        for ($i = 0; $i < count($encryption_algorithms) && !in_array($encryption_algorithms[$i], $this->encryption_algorithms_client_to_server); $i++);
-        if ($i == count($encryption_algorithms)) {
-            user_error('No compatible client to server encryption algorithms found', E_USER_NOTICE);
-            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        $publickey = array(
+            'e' => $publickey['e']->toBytes(true),
+            'n' => $publickey['n']->toBytes(true)
+        );
+        $publickey = pack(
+            'Na*Na*Na*',
+            strlen('ssh-rsa'),
+            'ssh-rsa',
+            strlen($publickey['e']),
+            $publickey['e'],
+            strlen($publickey['n']),
+            $publickey['n']
+        );
+
+        $part1 = pack(
+            'CNa*Na*Na*',
+            NET_SSH2_MSG_USERAUTH_REQUEST,
+            strlen($username),
+            $username,
+            strlen('ssh-connection'),
+            'ssh-connection',
+            strlen('publickey'),
+            'publickey'
+        );
+        $part2 = pack('Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publickey), $publickey);
+
+        $packet = $part1 . chr(0) . $part2;
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
         }
 
-        $encrypt = $encryption_algorithms[$i];
-        switch ($encrypt) {
-            case '3des-cbc':
-            case '3des-ctr':
-                $encryptKeyLength = 24;
-                break;
-            case 'aes256-cbc':
-            case 'aes256-ctr':
-                $encryptKeyLength = 32;
-                break;
-            case 'aes192-cbc':
-            case 'aes192-ctr':
-                $encryptKeyLength = 24;
-                break;
-            case 'aes128-cbc':
-            case 'aes128-ctr':
-                $encryptKeyLength = 16;
-                break;
-            case 'arcfour':
-            case 'arcfour128':
-                $encryptKeyLength = 16;
-                break;
-            case 'arcfour256':
-                $encryptKeyLength = 32;
-                break;
-            case 'none';
-                $encryptKeyLength = 0;
+        $response = $this->_get_binary_packet();
+        if ($response === false) {
+            user_error('Connection closed by server');
+            return false;
         }
 
-        $keyLength = $decryptKeyLength > $encryptKeyLength ? $decryptKeyLength : $encryptKeyLength;
+        if (!strlen($response)) {
+            return false;
+        }
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
 
-        // through diffie-hellman key exchange a symmetric key is obtained
-        for ($i = 0; $i < count($kex_algorithms) && !in_array($kex_algorithms[$i], $this->kex_algorithms); $i++);
-        if ($i == count($kex_algorithms)) {
-            user_error('No compatible key exchange algorithms found', E_USER_NOTICE);
-            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        switch ($type) {
+            case NET_SSH2_MSG_USERAUTH_FAILURE:
+                if (strlen($response) < 4) {
+                    return false;
+                }
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                $this->errors[] = 'SSH_MSG_USERAUTH_FAILURE: ' . $this->_string_shift($response, $length);
+                return false;
+            case NET_SSH2_MSG_USERAUTH_PK_OK:
+                // we'll just take it on faith that the public key blob and the public key algorithm name are as
+                // they should be
+                if (defined('NET_SSH2_LOGGING') && NET_SSH2_LOGGING == self::LOG_COMPLEX) {
+                    $this->message_number_log[count($this->message_number_log) - 1] = str_replace(
+                        'UNKNOWN',
+                        'NET_SSH2_MSG_USERAUTH_PK_OK',
+                        $this->message_number_log[count($this->message_number_log) - 1]
+                    );
+                }
         }
 
-        switch ($kex_algorithms[$i]) {
-            // see http://tools.ietf.org/html/rfc2409#section-6.2 and 
-            // http://tools.ietf.org/html/rfc2412, appendex E
-            case 'diffie-hellman-group1-sha1':
-                $p = pack('H256', 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' . 
-                                  '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' . 
-                                  '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' . 
-                                  'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF');
-                $keyLength = $keyLength < 160 ? $keyLength : 160;
-                $hash = 'sha1';
-                break;
-            // see http://tools.ietf.org/html/rfc3526#section-3
-            case 'diffie-hellman-group14-sha1':
-                $p = pack('H512', 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' . 
-                                  '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' . 
-                                  '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' . 
-                                  'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' . 
-                                  '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' . 
-                                  '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' . 
-                                  'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' . 
-                                  '3995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF');
-                $keyLength = $keyLength < 160 ? $keyLength : 160;
-                $hash = 'sha1';
-        }
-
-        $p = new Math_BigInteger($p, 256);
-        //$q = $p->bitwise_rightShift(1);
-
-        /* To increase the speed of the key exchange, both client and server may
-           reduce the size of their private exponents.  It should be at least
-           twice as long as the key material that is generated from the shared
-           secret.  For more details, see the paper by van Oorschot and Wiener
-           [VAN-OORSCHOT].
-
-           -- http://tools.ietf.org/html/rfc4419#section-6.2 */
-        $q = new Math_BigInteger(1);
-        $q = $q->bitwise_leftShift(2 * $keyLength);
-        $q = $q->subtract(new Math_BigInteger(1));
-
-        $g = new Math_BigInteger(2);
-        $x = new Math_BigInteger();
-        $x->setRandomGenerator('crypt_random');
-        $x = $x->random(new Math_BigInteger(1), $q);
-        $e = $g->modPow($x, $p);
-
-        $eBytes = $e->toBytes(true);
-        $data = pack('CNa*', NET_SSH2_MSG_KEXDH_INIT, strlen($eBytes), $eBytes);
+        $packet = $part1 . chr(1) . $part2;
+        $privatekey->setSignatureMode(RSA::SIGNATURE_PKCS1);
+        $signature = $privatekey->sign(pack('Na*a*', strlen($this->session_id), $this->session_id, $packet));
+        $signature = pack('Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($signature), $signature);
+        $packet.= pack('Na*', strlen($signature), $signature);
 
-        if (!$this->_send_binary_packet($data)) {
-            user_error('Connection closed by server', E_USER_NOTICE);
+        if (!$this->_send_binary_packet($packet)) {
             return false;
         }
 
         $response = $this->_get_binary_packet();
         if ($response === false) {
-            user_error('Connection closed by server', E_USER_NOTICE);
+            user_error('Connection closed by server');
             return false;
         }
-        extract(unpack('Ctype', $this->_string_shift($response, 1)));
 
-        if ($type != NET_SSH2_MSG_KEXDH_REPLY) {
-            user_error('Expected SSH_MSG_KEXDH_REPLY', E_USER_NOTICE);
+        if (!strlen($response)) {
             return false;
         }
+        extract(unpack('Ctype', $this->_string_shift($response, 1)));
 
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $this->server_public_host_key = $server_public_host_key = $this->_string_shift($response, $temp['length']);
-
-        $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
-        $public_key_format = $this->_string_shift($server_public_host_key, $temp['length']);
-
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $fBytes = $this->_string_shift($response, $temp['length']);
-        $f = new Math_BigInteger($fBytes, -256);
-
-        $temp = unpack('Nlength', $this->_string_shift($response, 4));
-        $this->signature = $this->_string_shift($response, $temp['length']);
+        switch ($type) {
+            case NET_SSH2_MSG_USERAUTH_FAILURE:
+                // either the login is bad or the server employs multi-factor authentication
+                return false;
+            case NET_SSH2_MSG_USERAUTH_SUCCESS:
+                $this->bitmap |= self::MASK_LOGIN;
+                return true;
+        }
 
-        $temp = unpack('Nlength', $this->_string_shift($this->signature, 4));
-        $this->signature_format = $this->_string_shift($this->signature, $temp['length']);
+        return false;
+    }
 
-        $key = $f->modPow($x, $p);
-        $keyBytes = $key->toBytes(true);
+    /**
+     * Set Timeout
+     *
+     * $ssh->exec('ping 127.0.0.1'); on a Linux host will never return and will run indefinitely.  setTimeout() makes it so it'll timeout.
+     * Setting $timeout to false or 0 will mean there is no timeout.
+     *
+     * @param mixed $timeout
+     * @access public
+     */
+    function setTimeout($timeout)
+    {
+        $this->timeout = $this->curTimeout = $timeout;
+    }
 
-        if ($this->session_id === false) {
-            $source = pack('Na*Na*Na*Na*Na*Na*Na*Na*',
-                strlen($this->identifier), $this->identifier, strlen($this->server_identifier), $this->server_identifier,
-                strlen($kexinit_payload_client), $kexinit_payload_client, strlen($kexinit_payload_server),
-                $kexinit_payload_server, strlen($this->server_public_host_key), $this->server_public_host_key, strlen($eBytes),
-                $eBytes, strlen($fBytes), $fBytes, strlen($keyBytes), $keyBytes
-            );
+    /**
+     * Get the output from stdError
+     *
+     * @access public
+     */
+    function getStdError()
+    {
+        return $this->stdErrorLog;
+    }
 
-            $source = pack('H*', $hash($source));
+    /**
+     * Execute Command
+     *
+     * If $callback is set to false then \phpseclib\Net\SSH2::_get_channel_packet(self::CHANNEL_EXEC) will need to be called manually.
+     * In all likelihood, this is not a feature you want to be taking advantage of.
+     *
+     * @param string $command
+     * @param Callback $callback
+     * @return string
+     * @access public
+     */
+    function exec($command, $callback = null)
+    {
+        $this->curTimeout = $this->timeout;
+        $this->is_timeout = false;
+        $this->stdErrorLog = '';
 
-            $this->session_id = $source;
+        if (!$this->isAuthenticated()) {
+            return false;
         }
 
-        for ($i = 0; $i < count($server_host_key_algorithms) && !in_array($server_host_key_algorithms[$i], $this->server_host_key_algorithms); $i++);
-        if ($i == count($server_host_key_algorithms)) {
-            user_error('No compatible server host key algorithms found', E_USER_NOTICE);
-            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        if ($this->in_request_pty_exec) {
+            user_error('If you want to run multiple exec()\'s you will need to disable (and re-enable if appropriate) a PTY for each one.');
+            return false;
         }
 
-        if ($public_key_format != $server_host_key_algorithms[$i] || $this->signature_format != $server_host_key_algorithms[$i]) {
-            user_error('Sever Host Key Algorithm Mismatch', E_USER_NOTICE);
-            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
-        }
+        // RFC4254 defines the (client) window size as "bytes the other party can send before it must wait for the window to
+        // be adjusted".  0x7FFFFFFF is, at 2GB, the max size.  technically, it should probably be decremented, but,
+        // honestly, if you're transferring more than 2GB, you probably shouldn't be using phpseclib, anyway.
+        // see http://tools.ietf.org/html/rfc4254#section-5.2 for more info
+        $this->window_size_server_to_client[self::CHANNEL_EXEC] = $this->window_size;
+        // 0x8000 is the maximum max packet size, per http://tools.ietf.org/html/rfc4253#section-6.1, although since PuTTy
+        // uses 0x4000, that's what will be used here, as well.
+        $packet_size = 0x4000;
 
-        $packet = pack('C',
-            NET_SSH2_MSG_NEWKEYS
+        $packet = pack(
+            'CNa*N3',
+            NET_SSH2_MSG_CHANNEL_OPEN,
+            strlen('session'),
+            'session',
+            self::CHANNEL_EXEC,
+            $this->window_size_server_to_client[self::CHANNEL_EXEC],
+            $packet_size
         );
 
         if (!$this->_send_binary_packet($packet)) {
             return false;
         }
 
-        $response = $this->_get_binary_packet();
+        $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_OPEN;
 
+        $response = $this->_get_channel_packet(self::CHANNEL_EXEC);
         if ($response === false) {
-            user_error('Connection closed by server', E_USER_NOTICE);
-            return false;
-        }
-
-        extract(unpack('Ctype', $this->_string_shift($response, 1)));
-
-        if ($type != NET_SSH2_MSG_NEWKEYS) {
-            user_error('Expected SSH_MSG_NEWKEYS', E_USER_NOTICE);
             return false;
         }
 
-        switch ($encrypt) {
-            case '3des-cbc':
-                $this->encrypt = new Crypt_TripleDES();
-                // $this->encrypt_block_size = 64 / 8 == the default
-                break;
-            case '3des-ctr':
-                $this->encrypt = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
-                // $this->encrypt_block_size = 64 / 8 == the default
-                break;
-            case 'aes256-cbc':
-            case 'aes192-cbc':
-            case 'aes128-cbc':
-                $this->encrypt = new Crypt_AES();
-                $this->encrypt_block_size = 16; // eg. 128 / 8
-                break;
-            case 'aes256-ctr':
-            case 'aes192-ctr':
-            case 'aes128-ctr':
-                $this->encrypt = new Crypt_AES(CRYPT_AES_MODE_CTR);
-                $this->encrypt_block_size = 16; // eg. 128 / 8
-                break;
-            case 'arcfour':
-            case 'arcfour128':
-            case 'arcfour256':
-                $this->encrypt = new Crypt_RC4();
-                break;
-            case 'none';
-                //$this->encrypt = new Crypt_Null();
-        }
-
-        switch ($decrypt) {
-            case '3des-cbc':
-                $this->decrypt = new Crypt_TripleDES();
-                break;
-            case '3des-ctr':
-                $this->decrypt = new Crypt_TripleDES(CRYPT_DES_MODE_CTR);
-                break;
-            case 'aes256-cbc':
-            case 'aes192-cbc':
-            case 'aes128-cbc':
-                $this->decrypt = new Crypt_AES();
-                $this->decrypt_block_size = 16;
-                break;
-            case 'aes256-ctr':
-            case 'aes192-ctr':
-            case 'aes128-ctr':
-                $this->decrypt = new Crypt_AES(CRYPT_AES_MODE_CTR);
-                $this->decrypt_block_size = 16;
-                break;
-            case 'arcfour':
-            case 'arcfour128':
-            case 'arcfour256':
-                $this->decrypt = new Crypt_RC4();
-                break;
-            case 'none';
-                //$this->decrypt = new Crypt_Null();
-        }
-
-        $keyBytes = pack('Na*', strlen($keyBytes), $keyBytes);
-
-        if ($this->encrypt) {
-            $this->encrypt->enableContinuousBuffer();
-            $this->encrypt->disablePadding();
+        if ($this->request_pty === true) {
+            $terminal_modes = pack('C', NET_SSH2_TTY_OP_END);
+            $packet = pack(
+                'CNNa*CNa*N5a*',
+                NET_SSH2_MSG_CHANNEL_REQUEST,
+                $this->server_channels[self::CHANNEL_EXEC],
+                strlen('pty-req'),
+                'pty-req',
+                1,
+                strlen('vt100'),
+                'vt100',
+                $this->windowColumns,
+                $this->windowRows,
+                0,
+                0,
+                strlen($terminal_modes),
+                $terminal_modes
+            );
 
-            $iv = pack('H*', $hash($keyBytes . $this->session_id . 'A' . $this->session_id));
-            while ($this->encrypt_block_size > strlen($iv)) {
-                $iv.= pack('H*', $hash($keyBytes . $this->session_id . $iv));
+            if (!$this->_send_binary_packet($packet)) {
+                return false;
             }
-            $this->encrypt->setIV(substr($iv, 0, $this->encrypt_block_size));
 
-            $key = pack('H*', $hash($keyBytes . $this->session_id . 'C' . $this->session_id));
-            while ($encryptKeyLength > strlen($key)) {
-                $key.= pack('H*', $hash($keyBytes . $this->session_id . $key));
+            $response = $this->_get_binary_packet();
+            if ($response === false) {
+                user_error('Connection closed by server');
+                return false;
             }
-            $this->encrypt->setKey(substr($key, 0, $encryptKeyLength));
-        }
-
-        if ($this->decrypt) {
-            $this->decrypt->enableContinuousBuffer();
-            $this->decrypt->disablePadding();
 
-            $iv = pack('H*', $hash($keyBytes . $this->session_id . 'B' . $this->session_id));
-            while ($this->decrypt_block_size > strlen($iv)) {
-                $iv.= pack('H*', $hash($keyBytes . $this->session_id . $iv));
+            if (!strlen($response)) {
+                return false;
             }
-            $this->decrypt->setIV(substr($iv, 0, $this->decrypt_block_size));
+            list(, $type) = unpack('C', $this->_string_shift($response, 1));
 
-            $key = pack('H*', $hash($keyBytes . $this->session_id . 'D' . $this->session_id));
-            while ($decryptKeyLength > strlen($key)) {
-                $key.= pack('H*', $hash($keyBytes . $this->session_id . $key));
+            switch ($type) {
+                case NET_SSH2_MSG_CHANNEL_SUCCESS:
+                    break;
+                case NET_SSH2_MSG_CHANNEL_FAILURE:
+                default:
+                    user_error('Unable to request pseudo-terminal');
+                    return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
             }
-            $this->decrypt->setKey(substr($key, 0, $decryptKeyLength));
+            $this->in_request_pty_exec = true;
         }
 
-        /* The "arcfour128" algorithm is the RC4 cipher, as described in
-           [SCHNEIER], using a 128-bit key.  The first 1536 bytes of keystream
-           generated by the cipher MUST be discarded, and the first byte of the
-           first encrypted packet MUST be encrypted using the 1537th byte of
-           keystream.
+        // sending a pty-req SSH_MSG_CHANNEL_REQUEST message is unnecessary and, in fact, in most cases, slows things
+        // down.  the one place where it might be desirable is if you're doing something like \phpseclib\Net\SSH2::exec('ping localhost &').
+        // with a pty-req SSH_MSG_CHANNEL_REQUEST, exec() will return immediately and the ping process will then
+        // then immediately terminate.  without such a request exec() will loop indefinitely.  the ping process won't end but
+        // neither will your script.
 
-           -- http://tools.ietf.org/html/rfc4345#section-4 */
-        if ($encrypt == 'arcfour128' || $encrypt == 'arcfour256') {
-            $this->encrypt->encrypt(str_repeat("\0", 1536));
-        }
-        if ($decrypt == 'arcfour128' || $decrypt == 'arcfour256') {
-            $this->decrypt->decrypt(str_repeat("\0", 1536));
+        // although, in theory, the size of SSH_MSG_CHANNEL_REQUEST could exceed the maximum packet size established by
+        // SSH_MSG_CHANNEL_OPEN_CONFIRMATION, RFC4254#section-5.1 states that the "maximum packet size" refers to the
+        // "maximum size of an individual data packet". ie. SSH_MSG_CHANNEL_DATA.  RFC4254#section-5.2 corroborates.
+        $packet = pack(
+            'CNNa*CNa*',
+            NET_SSH2_MSG_CHANNEL_REQUEST,
+            $this->server_channels[self::CHANNEL_EXEC],
+            strlen('exec'),
+            'exec',
+            1,
+            strlen($command),
+            $command
+        );
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
         }
 
-        for ($i = 0; $i < count($mac_algorithms) && !in_array($mac_algorithms[$i], $this->mac_algorithms_client_to_server); $i++);
-        if ($i == count($mac_algorithms)) {
-            user_error('No compatible client to server message authentication algorithms found', E_USER_NOTICE);
-            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
-        }
+        $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_REQUEST;
 
-        $createKeyLength = 0; // ie. $mac_algorithms[$i] == 'none'
-        switch ($mac_algorithms[$i]) {
-            case 'hmac-sha1':
-                $this->hmac_create = new Crypt_Hash('sha1');
-                $createKeyLength = 20;
-                break;
-            case 'hmac-sha1-96':
-                $this->hmac_create = new Crypt_Hash('sha1-96');
-                $createKeyLength = 20;
-                break;
-            case 'hmac-md5':
-                $this->hmac_create = new Crypt_Hash('md5');
-                $createKeyLength = 16;
-                break;
-            case 'hmac-md5-96':
-                $this->hmac_create = new Crypt_Hash('md5-96');
-                $createKeyLength = 16;
+        $response = $this->_get_channel_packet(self::CHANNEL_EXEC);
+        if ($response === false) {
+            return false;
         }
 
-        for ($i = 0; $i < count($mac_algorithms) && !in_array($mac_algorithms[$i], $this->mac_algorithms_server_to_client); $i++);
-        if ($i == count($mac_algorithms)) {
-            user_error('No compatible server to client message authentication algorithms found', E_USER_NOTICE);
-            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
-        }
+        $this->channel_status[self::CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_DATA;
 
-        $checkKeyLength = 0;
-        $this->hmac_size = 0;
-        switch ($mac_algorithms[$i]) {
-            case 'hmac-sha1':
-                $this->hmac_check = new Crypt_Hash('sha1');
-                $checkKeyLength = 20;
-                $this->hmac_size = 20;
-                break;
-            case 'hmac-sha1-96':
-                $this->hmac_check = new Crypt_Hash('sha1-96');
-                $checkKeyLength = 20;
-                $this->hmac_size = 12;
-                break;
-            case 'hmac-md5':
-                $this->hmac_check = new Crypt_Hash('md5');
-                $checkKeyLength = 16;
-                $this->hmac_size = 16;
-                break;
-            case 'hmac-md5-96':
-                $this->hmac_check = new Crypt_Hash('md5-96');
-                $checkKeyLength = 16;
-                $this->hmac_size = 12;
+        if ($callback === false || $this->in_request_pty_exec) {
+            return true;
         }
 
-        $key = pack('H*', $hash($keyBytes . $this->session_id . 'E' . $this->session_id));
-        while ($createKeyLength > strlen($key)) {
-            $key.= pack('H*', $hash($keyBytes . $this->session_id . $key));
+        $output = '';
+        while (true) {
+            $temp = $this->_get_channel_packet(self::CHANNEL_EXEC);
+            switch (true) {
+                case $temp === true:
+                    return is_callable($callback) ? true : $output;
+                case $temp === false:
+                    return false;
+                default:
+                    if (is_callable($callback)) {
+                        if (call_user_func($callback, $temp) === true) {
+                            $this->_close_channel(self::CHANNEL_EXEC);
+                            return true;
+                        }
+                    } else {
+                        $output.= $temp;
+                    }
+            }
         }
-        $this->hmac_create->setKey(substr($key, 0, $createKeyLength));
+    }
 
-        $key = pack('H*', $hash($keyBytes . $this->session_id . 'F' . $this->session_id));
-        while ($checkKeyLength > strlen($key)) {
-            $key.= pack('H*', $hash($keyBytes . $this->session_id . $key));
+    /**
+     * Creates an interactive shell
+     *
+     * @see self::read()
+     * @see self::write()
+     * @return bool
+     * @access private
+     */
+    function _initShell()
+    {
+        if ($this->in_request_pty_exec === true) {
+            return true;
         }
-        $this->hmac_check->setKey(substr($key, 0, $checkKeyLength));
 
-        for ($i = 0; $i < count($compression_algorithms) && !in_array($compression_algorithms[$i], $this->compression_algorithms_server_to_client); $i++);
-        if ($i == count($compression_algorithms)) {
-            user_error('No compatible server to client compression algorithms found', E_USER_NOTICE);
-            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
-        }
-        $this->decompress = $compression_algorithms[$i] == 'zlib';
+        $this->window_size_server_to_client[self::CHANNEL_SHELL] = $this->window_size;
+        $packet_size = 0x4000;
 
-        for ($i = 0; $i < count($compression_algorithms) && !in_array($compression_algorithms[$i], $this->compression_algorithms_client_to_server); $i++);
-        if ($i == count($compression_algorithms)) {
-            user_error('No compatible client to server compression algorithms found', E_USER_NOTICE);
-            return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+        $packet = pack(
+            'CNa*N3',
+            NET_SSH2_MSG_CHANNEL_OPEN,
+            strlen('session'),
+            'session',
+            self::CHANNEL_SHELL,
+            $this->window_size_server_to_client[self::CHANNEL_SHELL],
+            $packet_size
+        );
+
+        if (!$this->_send_binary_packet($packet)) {
+            return false;
         }
-        $this->compress = $compression_algorithms[$i] == 'zlib';
 
-        return true;
-    }
+        $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_OPEN;
 
-    /**
-     * Login
-     *
-     * @param String $username
-     * @param optional String $password
-     * @return Boolean
-     * @access public
-     * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis}
-     *           by sending dummy SSH_MSG_IGNORE messages.
-     */
-    function login($username, $password = '')
-    {
-        if (!($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR)) {
+        $response = $this->_get_channel_packet(self::CHANNEL_SHELL);
+        if ($response === false) {
             return false;
         }
 
-        $packet = pack('CNa*',
-            NET_SSH2_MSG_SERVICE_REQUEST, strlen('ssh-userauth'), 'ssh-userauth'
+        $terminal_modes = pack('C', NET_SSH2_TTY_OP_END);
+        $packet = pack(
+            'CNNa*CNa*N5a*',
+            NET_SSH2_MSG_CHANNEL_REQUEST,
+            $this->server_channels[self::CHANNEL_SHELL],
+            strlen('pty-req'),
+            'pty-req',
+            1,
+            strlen('vt100'),
+            'vt100',
+            $this->windowColumns,
+            $this->windowRows,
+            0,
+            0,
+            strlen($terminal_modes),
+            $terminal_modes
         );
 
         if (!$this->_send_binary_packet($packet)) {
@@ -1273,229 +2870,270 @@ class Net_SSH2 {
 
         $response = $this->_get_binary_packet();
         if ($response === false) {
-            user_error('Connection closed by server', E_USER_NOTICE);
+            user_error('Connection closed by server');
             return false;
         }
 
-        extract(unpack('Ctype', $this->_string_shift($response, 1)));
-
-        if ($type != NET_SSH2_MSG_SERVICE_ACCEPT) {
-            user_error('Expected SSH_MSG_SERVICE_ACCEPT', E_USER_NOTICE);
+        if (!strlen($response)) {
             return false;
         }
+        list(, $type) = unpack('C', $this->_string_shift($response, 1));
 
-        // although PHP5's get_class() preserves the case, PHP4's does not
-        if (is_object($password) && strtolower(get_class($password)) == 'crypt_rsa')  {
-            return $this->_privatekey_login($username, $password);
+        switch ($type) {
+            case NET_SSH2_MSG_CHANNEL_SUCCESS:
+            // if a pty can't be opened maybe commands can still be executed
+            case NET_SSH2_MSG_CHANNEL_FAILURE:
+                break;
+            default:
+                user_error('Unable to request pseudo-terminal');
+                return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
         }
 
-        $utf8_password = utf8_encode($password);
-        $packet = pack('CNa*Na*Na*CNa*',
-            NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection',
-            strlen('password'), 'password', 0, strlen($utf8_password), $utf8_password
+        $packet = pack(
+            'CNNa*C',
+            NET_SSH2_MSG_CHANNEL_REQUEST,
+            $this->server_channels[self::CHANNEL_SHELL],
+            strlen('shell'),
+            'shell',
+            1
         );
-
         if (!$this->_send_binary_packet($packet)) {
             return false;
         }
 
-        // remove the username and password from the last logged packet
-        if (defined('NET_SSH2_LOGGING') && NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX) {
-            $packet = pack('CNa*Na*Na*CNa*',
-                NET_SSH2_MSG_USERAUTH_REQUEST, strlen('username'), 'username', strlen('ssh-connection'), 'ssh-connection',
-                strlen('password'), 'password', 0, strlen('password'), 'password'
-            );
-            $this->message_log[count($this->message_log) - 1] = $packet;
-        }
-
-        $response = $this->_get_binary_packet();
+        $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_REQUEST;
+
+        $response = $this->_get_channel_packet(self::CHANNEL_SHELL);
         if ($response === false) {
-            user_error('Connection closed by server', E_USER_NOTICE);
             return false;
         }
 
-        extract(unpack('Ctype', $this->_string_shift($response, 1)));
+        $this->channel_status[self::CHANNEL_SHELL] = NET_SSH2_MSG_CHANNEL_DATA;
 
-        switch ($type) {
-            case NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ: // in theory, the password can be changed
-                if (defined('NET_SSH2_LOGGING')) {
-                    $this->message_number_log[count($this->message_number_log) - 1] = 'NET_SSH2_MSG_USERAUTH_PASSWD_CHANGEREQ';
-                }
-                extract(unpack('Nlength', $this->_string_shift($response, 4)));
-                $this->errors[] = 'SSH_MSG_USERAUTH_PASSWD_CHANGEREQ: ' . utf8_decode($this->_string_shift($response, $length));
-                return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER);
-            case NET_SSH2_MSG_USERAUTH_FAILURE:
-                // either the login is bad or the server employees multi-factor authentication
-                return false;
-            case NET_SSH2_MSG_USERAUTH_SUCCESS:
-                $this->bitmap |= NET_SSH2_MASK_LOGIN;
-                return true;
-        }
+        $this->bitmap |= self::MASK_SHELL;
 
-        return false;
+        return true;
     }
 
     /**
-     * Login with an RSA private key
+     * Return the channel to be used with read() / write()
      *
-     * @param String $username
-     * @param Crypt_RSA $password
-     * @return Boolean
-     * @access private
-     * @internal It might be worthwhile, at some point, to protect against {@link http://tools.ietf.org/html/rfc4251#section-9.3.9 traffic analysis}
-     *           by sending dummy SSH_MSG_IGNORE messages.
+     * @see self::read()
+     * @see self::write()
+     * @return int
+     * @access public
      */
-    function _privatekey_login($username, $privatekey)
+    function _get_interactive_channel()
     {
-        // see http://tools.ietf.org/html/rfc4253#page-15
-        $publickey = $privatekey->getPublicKey(CRYPT_RSA_PUBLIC_FORMAT_RAW);
-        if ($publickey === false) {
-            return false;
+        switch (true) {
+            case $this->in_subsystem:
+                return self::CHANNEL_SUBSYSTEM;
+            case $this->in_request_pty_exec:
+                return self::CHANNEL_EXEC;
+            default:
+                return self::CHANNEL_SHELL;
         }
+    }
 
-        $publickey = array(
-            'e' => $publickey['e']->toBytes(true),
-            'n' => $publickey['n']->toBytes(true)
-        );
-        $publickey = pack('Na*Na*Na*',
-            strlen('ssh-rsa'), 'ssh-rsa', strlen($publickey['e']), $publickey['e'], strlen($publickey['n']), $publickey['n']
-        );
+    /**
+     * Return an available open channel
+     *
+     * @return int
+     * @access public
+     */
+    function _get_open_channel()
+    {
+        $channel = self::CHANNEL_EXEC;
+        do {
+            if (isset($this->channel_status[$channel]) && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_OPEN) {
+                return $channel;
+            }
+        } while ($channel++ < self::CHANNEL_SUBSYSTEM);
 
-        $part1 = pack('CNa*Na*Na*',
-            NET_SSH2_MSG_USERAUTH_REQUEST, strlen($username), $username, strlen('ssh-connection'), 'ssh-connection',
-            strlen('publickey'), 'publickey'
-        );
-        $part2 = pack('Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($publickey), $publickey);
+        return false;
+    }
 
-        $packet = $part1 . chr(0) . $part2;
+    /**
+     * Returns the output of an interactive shell
+     *
+     * Returns when there's a match for $expect, which can take the form of a string literal or,
+     * if $mode == self::READ_REGEX, a regular expression.
+     *
+     * @see self::write()
+     * @param string $expect
+     * @param int $mode
+     * @return string
+     * @access public
+     */
+    function read($expect = '', $mode = self::READ_SIMPLE)
+    {
+        $this->curTimeout = $this->timeout;
+        $this->is_timeout = false;
 
-        if (!$this->_send_binary_packet($packet)) {
+        if (!$this->isAuthenticated()) {
+            user_error('Operation disallowed prior to login()');
             return false;
         }
 
-        $response = $this->_get_binary_packet();
-        if ($response === false) {
-            user_error('Connection closed by server', E_USER_NOTICE);
+        if (!($this->bitmap & self::MASK_SHELL) && !$this->_initShell()) {
+            user_error('Unable to initiate an interactive shell session');
             return false;
         }
 
-        extract(unpack('Ctype', $this->_string_shift($response, 1)));
+        $channel = $this->_get_interactive_channel();
 
-        switch ($type) {
-            case NET_SSH2_MSG_USERAUTH_FAILURE:
-                extract(unpack('Nlength', $this->_string_shift($response, 4)));
-                $this->errors[] = 'SSH_MSG_USERAUTH_FAILURE: ' . $this->_string_shift($response, $length);
-                return $this->_disconnect(NET_SSH2_DISCONNECT_AUTH_CANCELLED_BY_USER);
-            case NET_SSH2_MSG_USERAUTH_PK_OK:
-                // we'll just take it on faith that the public key blob and the public key algorithm name are as
-                // they should be
-                if (defined('NET_SSH2_LOGGING')) {
-                    $this->message_number_log[count($this->message_number_log) - 1] = 'NET_SSH2_MSG_USERAUTH_PK_OK';
-                }
+        if ($mode == self::READ_NEXT) {
+            return $this->_get_channel_packet($channel);
         }
 
-        $packet = $part1 . chr(1) . $part2;
-        $privatekey->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
-        $signature = $privatekey->sign(pack('Na*a*', strlen($this->session_id), $this->session_id, $packet));
-        $signature = pack('Na*Na*', strlen('ssh-rsa'), 'ssh-rsa', strlen($signature), $signature);
-        $packet.= pack('Na*', strlen($signature), $signature);
+        $match = $expect;
+        while (true) {
+            if ($mode == self::READ_REGEX) {
+                preg_match($expect, substr($this->interactiveBuffer, -1024), $matches);
+                $match = isset($matches[0]) ? $matches[0] : '';
+            }
+            $pos = strlen($match) ? strpos($this->interactiveBuffer, $match) : false;
+            if ($pos !== false) {
+                return $this->_string_shift($this->interactiveBuffer, $pos + strlen($match));
+            }
+            $response = $this->_get_channel_packet($channel);
+            if (is_bool($response)) {
+                $this->in_request_pty_exec = false;
+                return $response ? $this->_string_shift($this->interactiveBuffer, strlen($this->interactiveBuffer)) : false;
+            }
 
-        if (!$this->_send_binary_packet($packet)) {
-            return false;
+            $this->interactiveBuffer.= $response;
         }
+    }
 
-        $response = $this->_get_binary_packet();
-        if ($response === false) {
-            user_error('Connection closed by server', E_USER_NOTICE);
+    /**
+     * Inputs a command into an interactive shell.
+     *
+     * @see self::read()
+     * @param string $cmd
+     * @return bool
+     * @access public
+     */
+    function write($cmd)
+    {
+        if (!$this->isAuthenticated()) {
+            user_error('Operation disallowed prior to login()');
             return false;
         }
 
-        extract(unpack('Ctype', $this->_string_shift($response, 1)));
-
-        switch ($type) {
-            case NET_SSH2_MSG_USERAUTH_FAILURE:
-                // either the login is bad or the server employees multi-factor authentication
-                return false;
-            case NET_SSH2_MSG_USERAUTH_SUCCESS:
-                $this->bitmap |= NET_SSH2_MASK_LOGIN;
-                return true;
+        if (!($this->bitmap & self::MASK_SHELL) && !$this->_initShell()) {
+            user_error('Unable to initiate an interactive shell session');
+            return false;
         }
 
-        return false;
+        return $this->_send_channel_packet($this->_get_interactive_channel(), $cmd);
     }
 
     /**
-     * Execute Command
+     * Start a subsystem.
+     *
+     * Right now only one subsystem at a time is supported. To support multiple subsystem's stopSubsystem() could accept
+     * a string that contained the name of the subsystem, but at that point, only one subsystem of each type could be opened.
+     * To support multiple subsystem's of the same name maybe it'd be best if startSubsystem() generated a new channel id and
+     * returns that and then that that was passed into stopSubsystem() but that'll be saved for a future date and implemented
+     * if there's sufficient demand for such a feature.
      *
-     * @param String $command
-     * @return String
+     * @see self::stopSubsystem()
+     * @param string $subsystem
+     * @return bool
      * @access public
      */
-    function exec($command)
+    function startSubsystem($subsystem)
     {
-        if (!($this->bitmap & NET_SSH2_MASK_LOGIN)) {
-            return false;
-        }
-
-        // RFC4254 defines the (client) window size as "bytes the other party can send before it must wait for the window to
-        // be adjusted".  0x7FFFFFFF is, at 4GB, the max size.  technically, it should probably be decremented, but, 
-        // honestly, if you're transfering more than 4GB, you probably shouldn't be using phpseclib, anyway.
-        // see http://tools.ietf.org/html/rfc4254#section-5.2 for more info
-        $this->window_size_client_to_server[NET_SSH2_CHANNEL_EXEC] = 0x7FFFFFFF;
-        // 0x8000 is the maximum max packet size, per http://tools.ietf.org/html/rfc4253#section-6.1, although since PuTTy
-        // uses 0x4000, that's what will be used here, as well.
-        $packet_size = 0x4000;
-
-        $packet = pack('CNa*N3',
-            NET_SSH2_MSG_CHANNEL_OPEN, strlen('session'), 'session', NET_SSH2_CHANNEL_EXEC, $this->window_size_client_to_server[NET_SSH2_CHANNEL_EXEC], $packet_size);
+        $this->window_size_server_to_client[self::CHANNEL_SUBSYSTEM] = $this->window_size;
+
+        $packet = pack(
+            'CNa*N3',
+            NET_SSH2_MSG_CHANNEL_OPEN,
+            strlen('session'),
+            'session',
+            self::CHANNEL_SUBSYSTEM,
+            $this->window_size,
+            0x4000
+        );
 
         if (!$this->_send_binary_packet($packet)) {
             return false;
         }
 
-        $this->channel_status[NET_SSH2_CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_OPEN;
+        $this->channel_status[self::CHANNEL_SUBSYSTEM] = NET_SSH2_MSG_CHANNEL_OPEN;
 
-        $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_EXEC);
+        $response = $this->_get_channel_packet(self::CHANNEL_SUBSYSTEM);
         if ($response === false) {
             return false;
         }
 
-        // sending a pty-req SSH_MSG_CHANNEL_REQUEST message is unnecessary and, in fact, in most cases, slows things
-        // down.  the one place where it might be desirable is if you're doing something like Net_SSH2::exec('ping localhost &').
-        // with a pty-req SSH_MSG_cHANNEL_REQUEST, exec() will return immediately and the ping process will then
-        // then immediately terminate.  without such a request exec() will loop indefinitely.  the ping process won't end but
-        // neither will your script.
-
-        // although, in theory, the size of SSH_MSG_CHANNEL_REQUEST could exceed the maximum packet size established by
-        // SSH_MSG_CHANNEL_OPEN_CONFIRMATION, RFC4254#section-5.1 states that the "maximum packet size" refers to the 
-        // "maximum size of an individual data packet". ie. SSH_MSG_CHANNEL_DATA.  RFC4254#section-5.2 corroborates.
-        $packet = pack('CNNa*CNa*',
-            NET_SSH2_MSG_CHANNEL_REQUEST, $this->server_channels[NET_SSH2_CHANNEL_EXEC], strlen('exec'), 'exec', 1, strlen($command), $command);
+        $packet = pack(
+            'CNNa*CNa*',
+            NET_SSH2_MSG_CHANNEL_REQUEST,
+            $this->server_channels[self::CHANNEL_SUBSYSTEM],
+            strlen('subsystem'),
+            'subsystem',
+            1,
+            strlen($subsystem),
+            $subsystem
+        );
         if (!$this->_send_binary_packet($packet)) {
             return false;
         }
 
-        $this->channel_status[NET_SSH2_CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_REQUEST;
+        $this->channel_status[self::CHANNEL_SUBSYSTEM] = NET_SSH2_MSG_CHANNEL_REQUEST;
+
+        $response = $this->_get_channel_packet(self::CHANNEL_SUBSYSTEM);
 
-        $response = $this->_get_channel_packet(NET_SSH2_CHANNEL_EXEC);
         if ($response === false) {
             return false;
         }
 
-        $this->channel_status[NET_SSH2_CHANNEL_EXEC] = NET_SSH2_MSG_CHANNEL_DATA;
+        $this->channel_status[self::CHANNEL_SUBSYSTEM] = NET_SSH2_MSG_CHANNEL_DATA;
 
-        $output = '';
-        while (true) {
-            $temp = $this->_get_channel_packet(NET_SSH2_CHANNEL_EXEC);
-            switch (true) {
-                case $temp === true:
-                    return $output;
-                case $temp === false:
-                    return false;
-                default:
-                    $output.= $temp;
-            }
-        }
+        $this->bitmap |= self::MASK_SHELL;
+        $this->in_subsystem = true;
+
+        return true;
+    }
+
+    /**
+     * Stops a subsystem.
+     *
+     * @see self::startSubsystem()
+     * @return bool
+     * @access public
+     */
+    function stopSubsystem()
+    {
+        $this->in_subsystem = false;
+        $this->_close_channel(self::CHANNEL_SUBSYSTEM);
+        return true;
+    }
+
+    /**
+     * Closes a channel
+     *
+     * If read() timed out you might want to just close the channel and have it auto-restart on the next read() call
+     *
+     * @access public
+     */
+    function reset()
+    {
+        $this->_close_channel($this->_get_interactive_channel());
+    }
+
+    /**
+     * Is timeout?
+     *
+     * Did exec() or read() return because they timed out or because they encountered the end?
+     *
+     * @access public
+     */
+    function isTimeout()
+    {
+        return $this->is_timeout;
     }
 
     /**
@@ -1506,6 +3144,9 @@ class Net_SSH2 {
     function disconnect()
     {
         $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+        if (isset($this->realtime_log_file) && is_resource($this->realtime_log_file)) {
+            fclose($this->realtime_log_file);
+        }
     }
 
     /**
@@ -1522,50 +3163,125 @@ class Net_SSH2 {
     }
 
     /**
+     * Is the connection still active?
+     *
+     * @return bool
+     * @access public
+     */
+    function isConnected()
+    {
+        return (bool) ($this->bitmap & self::MASK_CONNECTED);
+    }
+
+    /**
+     * Have you successfully been logged in?
+     *
+     * @return bool
+     * @access public
+     */
+    function isAuthenticated()
+    {
+        return (bool) ($this->bitmap & self::MASK_LOGIN);
+    }
+
+    /**
+     * Resets a connection for re-use
+     *
+     * @param int $reason
+     * @access private
+     */
+    function _reset_connection($reason)
+    {
+        $this->_disconnect($reason);
+        $this->decrypt = $this->encrypt = false;
+        $this->decrypt_block_size = $this->encrypt_block_size = 8;
+        $this->hmac_check = $this->hmac_create = false;
+        $this->hmac_size = false;
+        $this->session_id = false;
+        $this->retry_connect = true;
+        $this->get_seq_no = $this->send_seq_no = 0;
+    }
+
+    /**
      * Gets Binary Packets
      *
      * See '6. Binary Packet Protocol' of rfc4253 for more info.
      *
-     * @see Net_SSH2::_send_binary_packet()
-     * @return String
+     * @see self::_send_binary_packet()
+     * @return string
      * @access private
      */
-    function _get_binary_packet()
+    function _get_binary_packet($skip_channel_filter = false)
     {
-        if (feof($this->fsock)) {
-            user_error('Connection closed prematurely', E_USER_NOTICE);
+        if (!is_resource($this->fsock) || feof($this->fsock)) {
+            user_error('Connection closed prematurely');
+            $this->bitmap = 0;
             return false;
         }
 
-        $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
-        $raw = fread($this->fsock, $this->decrypt_block_size);
-        $stop = strtok(microtime(), ' ') + strtok('');
+        $start = microtime(true);
+        $raw = stream_get_contents($this->fsock, $this->decrypt_block_size);
+
+        if (!strlen($raw)) {
+            return '';
+        }
 
         if ($this->decrypt !== false) {
             $raw = $this->decrypt->decrypt($raw);
         }
+        if ($raw === false) {
+            user_error('Unable to decrypt content');
+            return false;
+        }
 
+        if (strlen($raw) < 5) {
+            return false;
+        }
         extract(unpack('Npacket_length/Cpadding_length', $this->_string_shift($raw, 5)));
 
         $remaining_length = $packet_length + 4 - $this->decrypt_block_size;
+
+        // quoting <http://tools.ietf.org/html/rfc4253#section-6.1>,
+        // "implementations SHOULD check that the packet length is reasonable"
+        // PuTTY uses 0x9000 as the actual max packet size and so to shall we
+        if ($remaining_length < -$this->decrypt_block_size || $remaining_length > 0x9000 || $remaining_length % $this->decrypt_block_size != 0) {
+            if (!$this->bad_key_size_fix && $this->_bad_algorithm_candidate($this->decrypt_algorithm) && !($this->bitmap & SSH2::MASK_LOGIN)) {
+                $this->bad_key_size_fix = true;
+                $this->_reset_connection(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+                return false;
+            }
+            user_error('Invalid size');
+            return false;
+        }
+
         $buffer = '';
         while ($remaining_length > 0) {
-            $temp = fread($this->fsock, $remaining_length);
+            $temp = stream_get_contents($this->fsock, $remaining_length);
+            if ($temp === false || feof($this->fsock)) {
+                user_error('Error reading from socket');
+                $this->bitmap = 0;
+                return false;
+            }
             $buffer.= $temp;
             $remaining_length-= strlen($temp);
         }
-        if (!empty($buffer)) {
+
+        $stop = microtime(true);
+        if (strlen($buffer)) {
             $raw.= $this->decrypt !== false ? $this->decrypt->decrypt($buffer) : $buffer;
-            $buffer = $temp = '';
         }
 
         $payload = $this->_string_shift($raw, $packet_length - $padding_length - 1);
         $padding = $this->_string_shift($raw, $padding_length); // should leave $raw empty
 
         if ($this->hmac_check !== false) {
-            $hmac = fread($this->fsock, $this->hmac_size);
-            if ($hmac != $this->hmac_check->hash(pack('NNCa*', $this->get_seq_no, $packet_length, $padding_length, $payload . $padding))) {
-                user_error('Invalid HMAC', E_USER_NOTICE);
+            $hmac = stream_get_contents($this->fsock, $this->hmac_size);
+            if ($hmac === false || strlen($hmac) != $this->hmac_size) {
+                user_error('Error reading socket');
+                $this->bitmap = 0;
+                return false;
+            } elseif ($hmac != $this->hmac_check->hash(pack('NNCa*', $this->get_seq_no, $packet_length, $padding_length, $payload . $padding))) {
+                user_error('Invalid HMAC');
                 return false;
             }
         }
@@ -1577,15 +3293,15 @@ class Net_SSH2 {
         $this->get_seq_no++;
 
         if (defined('NET_SSH2_LOGGING')) {
-            $temp = isset($this->message_numbers[ord($payload[0])]) ? $this->message_numbers[ord($payload[0])] : 'UNKNOWN';
-            $this->message_number_log[] = '<- ' . $temp .
-                                          ' (' . round($stop - $start, 4) . 's)';
-            if (NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX) {
-                $this->message_log[] = substr($payload, 1);
-            }
+            $current = microtime(true);
+            $message_number = isset($this->message_numbers[ord($payload[0])]) ? $this->message_numbers[ord($payload[0])] : 'UNKNOWN (' . ord($payload[0]) . ')';
+            $message_number = '<- ' . $message_number .
+                              ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)';
+            $this->_append_log($message_number, $payload);
+            $this->last_packet = $current;
         }
 
-        return $this->_filter($payload);
+        return $this->_filter($payload, $skip_channel_filter);
     }
 
     /**
@@ -1593,85 +3309,236 @@ class Net_SSH2 {
      *
      * Because some binary packets need to be ignored...
      *
-     * @see Net_SSH2::_get_binary_packet()
-     * @return String
+     * @see self::_get_binary_packet()
+     * @return string
      * @access private
      */
-    function _filter($payload)
+    function _filter($payload, $skip_channel_filter)
     {
         switch (ord($payload[0])) {
             case NET_SSH2_MSG_DISCONNECT:
                 $this->_string_shift($payload, 1);
+                if (strlen($payload) < 8) {
+                    return false;
+                }
                 extract(unpack('Nreason_code/Nlength', $this->_string_shift($payload, 8)));
                 $this->errors[] = 'SSH_MSG_DISCONNECT: ' . $this->disconnect_reasons[$reason_code] . "\r\n" . utf8_decode($this->_string_shift($payload, $length));
-                $this->bitmask = 0;
+                $this->bitmap = 0;
                 return false;
             case NET_SSH2_MSG_IGNORE:
-                $payload = $this->_get_binary_packet();
+                $payload = $this->_get_binary_packet($skip_channel_filter);
                 break;
             case NET_SSH2_MSG_DEBUG:
                 $this->_string_shift($payload, 2);
+                if (strlen($payload) < 4) {
+                    return false;
+                }
                 extract(unpack('Nlength', $this->_string_shift($payload, 4)));
                 $this->errors[] = 'SSH_MSG_DEBUG: ' . utf8_decode($this->_string_shift($payload, $length));
-                $payload = $this->_get_binary_packet();
+                $payload = $this->_get_binary_packet($skip_channel_filter);
                 break;
             case NET_SSH2_MSG_UNIMPLEMENTED:
                 return false;
             case NET_SSH2_MSG_KEXINIT:
                 if ($this->session_id !== false) {
+                    $this->send_kex_first = false;
                     if (!$this->_key_exchange($payload)) {
-                        $this->bitmask = 0;
+                        $this->bitmap = 0;
                         return false;
                     }
-                    $payload = $this->_get_binary_packet();
+                    $payload = $this->_get_binary_packet($skip_channel_filter);
                 }
         }
 
         // see http://tools.ietf.org/html/rfc4252#section-5.4; only called when the encryption has been activated and when we haven't already logged in
-        if (($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR) && !($this->bitmap & NET_SSH2_MASK_LOGIN) && ord($payload[0]) == NET_SSH2_MSG_USERAUTH_BANNER) {
+        if (($this->bitmap & self::MASK_CONNECTED) && !$this->isAuthenticated() && ord($payload[0]) == NET_SSH2_MSG_USERAUTH_BANNER) {
             $this->_string_shift($payload, 1);
+            if (strlen($payload) < 4) {
+                return false;
+            }
             extract(unpack('Nlength', $this->_string_shift($payload, 4)));
-            $this->errors[] = 'SSH_MSG_USERAUTH_BANNER: ' . utf8_decode($this->_string_shift($payload, $length));
+            $this->banner_message = utf8_decode($this->_string_shift($payload, $length));
             $payload = $this->_get_binary_packet();
         }
 
         // only called when we've already logged in
-        if (($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR) && ($this->bitmap & NET_SSH2_MASK_LOGIN)) {
+        if (($this->bitmap & self::MASK_CONNECTED) && $this->isAuthenticated()) {
             switch (ord($payload[0])) {
+                case NET_SSH2_MSG_CHANNEL_DATA:
+                case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA:
+                case NET_SSH2_MSG_CHANNEL_REQUEST:
+                case NET_SSH2_MSG_CHANNEL_CLOSE:
+                case NET_SSH2_MSG_CHANNEL_EOF:
+                    if (!$skip_channel_filter && !empty($this->server_channels)) {
+                        $this->binary_packet_buffer = $payload;
+                        $this->_get_channel_packet(true);
+                        $payload = $this->_get_binary_packet();
+                    }
+                    break;
                 case NET_SSH2_MSG_GLOBAL_REQUEST: // see http://tools.ietf.org/html/rfc4254#section-4
-                    $this->_string_shift($payload, 1);
-                    extract(unpack('Nlength', $this->_string_shift($payload)));
-                    $this->errors[] = 'SSH_MSG_GLOBAL_REQUEST: ' . utf8_decode($this->_string_shift($payload, $length));
+                    if (strlen($payload) < 4) {
+                        return false;
+                    }
+                    extract(unpack('Nlength', $this->_string_shift($payload, 4)));
+                    $this->errors[] = 'SSH_MSG_GLOBAL_REQUEST: ' . $this->_string_shift($payload, $length);
 
                     if (!$this->_send_binary_packet(pack('C', NET_SSH2_MSG_REQUEST_FAILURE))) {
                         return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
                     }
 
-                    $payload = $this->_get_binary_packet();
+                    $payload = $this->_get_binary_packet($skip_channel_filter);
                     break;
                 case NET_SSH2_MSG_CHANNEL_OPEN: // see http://tools.ietf.org/html/rfc4254#section-5.1
                     $this->_string_shift($payload, 1);
-                    extract(unpack('N', $this->_string_shift($payload, 4)));
-                    $this->errors[] = 'SSH_MSG_CHANNEL_OPEN: ' . utf8_decode($this->_string_shift($payload, $length));
-
-                    $this->_string_shift($payload, 4); // skip over client channel
+                    if (strlen($payload) < 4) {
+                        return false;
+                    }
+                    extract(unpack('Nlength', $this->_string_shift($payload, 4)));
+                    $data = $this->_string_shift($payload, $length);
+                    if (strlen($payload) < 4) {
+                        return false;
+                    }
                     extract(unpack('Nserver_channel', $this->_string_shift($payload, 4)));
+                    switch ($data) {
+                        case 'auth-agent':
+                        case 'auth-agent@openssh.com':
+                            if (isset($this->agent)) {
+                                $new_channel = self::CHANNEL_AGENT_FORWARD;
+
+                                if (strlen($payload) < 8) {
+                                    return false;
+                                }
+                                extract(unpack('Nremote_window_size', $this->_string_shift($payload, 4)));
+                                extract(unpack('Nremote_maximum_packet_size', $this->_string_shift($payload, 4)));
+
+                                $this->packet_size_client_to_server[$new_channel] = $remote_window_size;
+                                $this->window_size_server_to_client[$new_channel] = $remote_maximum_packet_size;
+                                $this->window_size_client_to_server[$new_channel] = $this->window_size;
+
+                                $packet_size = 0x4000;
+
+                                $packet = pack(
+                                    'CN4',
+                                    NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION,
+                                    $server_channel,
+                                    $new_channel,
+                                    $packet_size,
+                                    $packet_size
+                                );
+
+                                $this->server_channels[$new_channel] = $server_channel;
+                                $this->channel_status[$new_channel] = NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION;
+                                if (!$this->_send_binary_packet($packet)) {
+                                    return false;
+                                }
+                            }
+                            break;
+                        default:
+                            $packet = pack(
+                                'CN3a*Na*',
+                                NET_SSH2_MSG_REQUEST_FAILURE,
+                                $server_channel,
+                                NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED,
+                                0,
+                                '',
+                                0,
+                                ''
+                            );
+
+                            if (!$this->_send_binary_packet($packet)) {
+                                return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+                            }
+                    }
+                    $payload = $this->_get_binary_packet($skip_channel_filter);
+                    break;
+                case NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST:
+                    $this->_string_shift($payload, 1);
+                    if (strlen($payload) < 8) {
+                        return false;
+                    }
+                    extract(unpack('Nchannel', $this->_string_shift($payload, 4)));
+                    extract(unpack('Nwindow_size', $this->_string_shift($payload, 4)));
+                    $this->window_size_client_to_server[$channel]+= $window_size;
 
-                    $packet = pack('CN3a*Na*',
-                        NET_SSH2_MSG_REQUEST_FAILURE, $server_channel, NET_SSH2_OPEN_ADMINISTRATIVELY_PROHIBITED, 0, '', 0, '');
+                    $payload = ($this->bitmap & self::MASK_WINDOW_ADJUST) ? true : $this->_get_binary_packet($skip_channel_filter);
+            }
+        }
 
-                    if (!$this->_send_binary_packet($packet)) {
-                        return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
-                    }
+        return $payload;
+    }
+
+    /**
+     * Enable Quiet Mode
+     *
+     * Suppress stderr from output
+     *
+     * @access public
+     */
+    function enableQuietMode()
+    {
+        $this->quiet_mode = true;
+    }
+
+    /**
+     * Disable Quiet Mode
+     *
+     * Show stderr in output
+     *
+     * @access public
+     */
+    function disableQuietMode()
+    {
+        $this->quiet_mode = false;
+    }
+
+    /**
+     * Returns whether Quiet Mode is enabled or not
+     *
+     * @see self::enableQuietMode()
+     * @see self::disableQuietMode()
+     * @access public
+     * @return bool
+     */
+    function isQuietModeEnabled()
+    {
+        return $this->quiet_mode;
+    }
+
+    /**
+     * Enable request-pty when using exec()
+     *
+     * @access public
+     */
+    function enablePTY()
+    {
+        $this->request_pty = true;
+    }
 
-                    $payload = $this->_get_binary_packet();
-                    break;
-                case NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST:
-                    $payload = $this->_get_binary_packet();
-            }
+    /**
+     * Disable request-pty when using exec()
+     *
+     * @access public
+     */
+    function disablePTY()
+    {
+        if ($this->in_request_pty_exec) {
+            $this->_close_channel(self::CHANNEL_EXEC);
+            $this->in_request_pty_exec = false;
         }
+        $this->request_pty = false;
+    }
 
-        return $payload;
+    /**
+     * Returns whether request-pty is enabled or not
+     *
+     * @see self::enablePTY()
+     * @see self::disablePTY()
+     * @access public
+     * @return bool
+     */
+    function isPTYEnabled()
+    {
+        return $this->request_pty;
     }
 
     /**
@@ -1680,113 +3547,258 @@ class Net_SSH2 {
      * Returns the data as a string if it's available and false if not.
      *
      * @param $client_channel
-     * @return Mixed
+     * @return mixed
      * @access private
      */
-    function _get_channel_packet($client_channel)
+    function _get_channel_packet($client_channel, $skip_extended = false)
     {
         if (!empty($this->channel_buffers[$client_channel])) {
             return array_shift($this->channel_buffers[$client_channel]);
         }
 
         while (true) {
-            $response = $this->_get_binary_packet();
-            if ($response === false) {
-                user_error('Connection closed by server', E_USER_NOTICE);
+            if ($this->binary_packet_buffer !== false) {
+                $response = $this->binary_packet_buffer;
+                $this->binary_packet_buffer = false;
+            } else {
+                if ($this->curTimeout) {
+                    if ($this->curTimeout < 0) {
+                        $this->is_timeout = true;
+                        return true;
+                    }
+
+                    $read = array($this->fsock);
+                    $write = $except = null;
+
+                    $start = microtime(true);
+                    $sec = floor($this->curTimeout);
+                    $usec = 1000000 * ($this->curTimeout - $sec);
+                    // on windows this returns a "Warning: Invalid CRT parameters detected" error
+                    if (!@stream_select($read, $write, $except, $sec, $usec) && !count($read)) {
+                        $this->is_timeout = true;
+                        return true;
+                    }
+                    $elapsed = microtime(true) - $start;
+                    $this->curTimeout-= $elapsed;
+                }
+
+                $response = $this->_get_binary_packet(true);
+                if ($response === false) {
+                    user_error('Connection closed by server');
+                    return false;
+                }
+            }
+
+            if ($client_channel == -1 && $response === true) {
+                return true;
+            }
+            if (!strlen($response)) {
+                return '';
+            }
+
+            if (!strlen($response)) {
                 return false;
             }
+            extract(unpack('Ctype', $this->_string_shift($response, 1)));
 
-            extract(unpack('Ctype/Nchannel', $this->_string_shift($response, 5)));
-
-            switch ($this->channel_status[$channel]) {
-                case NET_SSH2_MSG_CHANNEL_OPEN:
-                    switch ($type) {
-                        case NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION:
-                            extract(unpack('Nserver_channel', $this->_string_shift($response, 4)));
-                            $this->server_channels[$client_channel] = $server_channel;
-                            $this->_string_shift($response, 4); // skip over (server) window size
-                            $temp = unpack('Npacket_size_client_to_server', $this->_string_shift($response, 4));
-                            $this->packet_size_client_to_server[$client_channel] = $temp['packet_size_client_to_server'];
-                            return true;
-                        //case NET_SSH2_MSG_CHANNEL_OPEN_FAILURE:
-                        default:
-                            user_error('Unable to open channel', E_USER_NOTICE);
-                            return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
-                    }
-                    break;
-                case NET_SSH2_MSG_CHANNEL_REQUEST:
-                    switch ($type) {
-                        case NET_SSH2_MSG_CHANNEL_SUCCESS:
-                            return true;
-                        //case NET_SSH2_MSG_CHANNEL_FAILURE:
-                        default:
-                            user_error('Unable to request pseudo-terminal', E_USER_NOTICE);
-                            return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+            if (strlen($response) < 4) {
+                return false;
+            }
+            if ($type == NET_SSH2_MSG_CHANNEL_OPEN) {
+                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+            } else {
+                extract(unpack('Nchannel', $this->_string_shift($response, 4)));
+            }
+
+            // will not be setup yet on incoming channel open request
+            if (isset($channel) && isset($this->channel_status[$channel]) && isset($this->window_size_server_to_client[$channel])) {
+                $this->window_size_server_to_client[$channel]-= strlen($response);
+
+                // resize the window, if appropriate
+                if ($this->window_size_server_to_client[$channel] < 0) {
+                    $packet = pack('CNN', NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST, $this->server_channels[$channel], $this->window_size);
+                    if (!$this->_send_binary_packet($packet)) {
+                        return false;
                     }
+                    $this->window_size_server_to_client[$channel]+= $this->window_size;
+                }
+
+                switch ($type) {
+                    case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA:
+                        /*
+                        if ($client_channel == NET_SSH2_CHANNEL_EXEC) {
+                            $this->_send_channel_packet($client_channel, chr(0));
+                        }
+                        */
+                        // currently, there's only one possible value for $data_type_code: NET_SSH2_EXTENDED_DATA_STDERR
+                        if (strlen($response) < 8) {
+                            return false;
+                        }
+                        extract(unpack('Ndata_type_code/Nlength', $this->_string_shift($response, 8)));
+                        $data = $this->_string_shift($response, $length);
+                        $this->stdErrorLog.= $data;
+                        if ($skip_extended || $this->quiet_mode) {
+                            continue 2;
+                        }
+                        if ($client_channel == $channel && $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA) {
+                            return $data;
+                        }
+                        if (!isset($this->channel_buffers[$channel])) {
+                            $this->channel_buffers[$channel] = array();
+                        }
+                        $this->channel_buffers[$channel][] = $data;
+
+                        continue 2;
+                    case NET_SSH2_MSG_CHANNEL_REQUEST:
+                        if ($this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_CLOSE) {
+                            continue 2;
+                        }
+                        if (strlen($response) < 4) {
+                            return false;
+                        }
+                        extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                        $value = $this->_string_shift($response, $length);
+                        switch ($value) {
+                            case 'exit-signal':
+                                $this->_string_shift($response, 1);
+                                if (strlen($response) < 4) {
+                                    return false;
+                                }
+                                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                                $this->errors[] = 'SSH_MSG_CHANNEL_REQUEST (exit-signal): ' . $this->_string_shift($response, $length);
+                                $this->_string_shift($response, 1);
+                                if (strlen($response) < 4) {
+                                    return false;
+                                }
+                                extract(unpack('Nlength', $this->_string_shift($response, 4)));
+                                if ($length) {
+                                    $this->errors[count($this->errors)].= "\r\n" . $this->_string_shift($response, $length);
+                                }
+
+                                $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel]));
+                                $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));
+
+                                $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_EOF;
+
+                                continue 3;
+                            case 'exit-status':
+                                if (strlen($response) < 5) {
+                                    return false;
+                                }
+                                extract(unpack('Cfalse/Nexit_status', $this->_string_shift($response, 5)));
+                                $this->exit_status = $exit_status;
+
+                                // "The client MAY ignore these messages."
+                                // -- http://tools.ietf.org/html/rfc4254#section-6.10
+
+                                continue 3;
+                            default:
+                                // "Some systems may not implement signals, in which case they SHOULD ignore this message."
+                                //  -- http://tools.ietf.org/html/rfc4254#section-6.9
+                                continue 3;
+                        }
+                }
 
+                switch ($this->channel_status[$channel]) {
+                    case NET_SSH2_MSG_CHANNEL_OPEN:
+                        switch ($type) {
+                            case NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION:
+                                if (strlen($response) < 4) {
+                                    return false;
+                                }
+                                extract(unpack('Nserver_channel', $this->_string_shift($response, 4)));
+                                $this->server_channels[$channel] = $server_channel;
+                                if (strlen($response) < 4) {
+                                    return false;
+                                }
+                                extract(unpack('Nwindow_size', $this->_string_shift($response, 4)));
+                                if ($window_size < 0) {
+                                    $window_size&= 0x7FFFFFFF;
+                                    $window_size+= 0x80000000;
+                                }
+                                $this->window_size_client_to_server[$channel] = $window_size;
+                                if (strlen($response) < 4) {
+                                     return false;
+                                }
+                                $temp = unpack('Npacket_size_client_to_server', $this->_string_shift($response, 4));
+                                $this->packet_size_client_to_server[$channel] = $temp['packet_size_client_to_server'];
+                                $result = $client_channel == $channel ? true : $this->_get_channel_packet($client_channel, $skip_extended);
+                                $this->_on_channel_open();
+                                return $result;
+                            //case NET_SSH2_MSG_CHANNEL_OPEN_FAILURE:
+                            default:
+                                user_error('Unable to open channel');
+                                return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+                        }
+                        break;
+                    case NET_SSH2_MSG_CHANNEL_REQUEST:
+                        switch ($type) {
+                            case NET_SSH2_MSG_CHANNEL_SUCCESS:
+                                return true;
+                            case NET_SSH2_MSG_CHANNEL_FAILURE:
+                                return false;
+                            default:
+                                user_error('Unable to fulfill channel request');
+                                return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
+                        }
+                    case NET_SSH2_MSG_CHANNEL_CLOSE:
+                        return $type == NET_SSH2_MSG_CHANNEL_CLOSE ? true : $this->_get_channel_packet($client_channel, $skip_extended);
+                }
             }
 
+            // ie. $this->channel_status[$channel] == NET_SSH2_MSG_CHANNEL_DATA
+
             switch ($type) {
                 case NET_SSH2_MSG_CHANNEL_DATA:
-                    if ($client_channel == NET_SSH2_CHANNEL_EXEC) {
+                    /*
+                    if ($channel == self::CHANNEL_EXEC) {
                         // SCP requires null packets, such as this, be sent.  further, in the case of the ssh.com SSH server
-                        // this actually seems to make things twice as fast.  more to the point, the message right after 
+                        // this actually seems to make things twice as fast.  more to the point, the message right after
                         // SSH_MSG_CHANNEL_DATA (usually SSH_MSG_IGNORE) won't block for as long as it would have otherwise.
                         // in OpenSSH it slows things down but only by a couple thousandths of a second.
-                        $this->_send_channel_packet($client_channel, chr(0));
+                        $this->_send_channel_packet($channel, chr(0));
+                    }
+                    */
+                    if (strlen($response) < 4) {
+                        return false;
                     }
                     extract(unpack('Nlength', $this->_string_shift($response, 4)));
                     $data = $this->_string_shift($response, $length);
+
+                    if ($channel == self::CHANNEL_AGENT_FORWARD) {
+                        $agent_response = $this->agent->_forward_data($data);
+                        if (!is_bool($agent_response)) {
+                            $this->_send_channel_packet($channel, $agent_response);
+                        }
+                        break;
+                    }
+
                     if ($client_channel == $channel) {
                         return $data;
                     }
-                    if (!isset($this->channel_buffers[$client_channel])) {
-                        $this->channel_buffers[$client_channel] = array();
+                    if (!isset($this->channel_buffers[$channel])) {
+                        $this->channel_buffers[$channel] = array();
                     }
-                    $this->channel_buffers[$client_channel][] = $data;
+                    $this->channel_buffers[$channel][] = $data;
                     break;
-                case NET_SSH2_MSG_CHANNEL_EXTENDED_DATA:
-                    if ($client_channel == NET_SSH2_CHANNEL_EXEC) {
-                        $this->_send_channel_packet($client_channel, chr(0));
-                    }
-                    // currently, there's only one possible value for $data_type_code: NET_SSH2_EXTENDED_DATA_STDERR
-                    extract(unpack('Ndata_type_code/Nlength', $this->_string_shift($response, 8)));
-                    $data = $this->_string_shift($response, $length);
-                    if ($client_channel == $channel) {
-                        return $data;
+                case NET_SSH2_MSG_CHANNEL_CLOSE:
+                    $this->curTimeout = 0;
+
+                    if ($this->bitmap & self::MASK_SHELL) {
+                        $this->bitmap&= ~self::MASK_SHELL;
                     }
-                    if (!isset($this->channel_buffers[$client_channel])) {
-                        $this->channel_buffers[$client_channel] = array();
+                    if ($this->channel_status[$channel] != NET_SSH2_MSG_CHANNEL_EOF) {
+                        $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));
                     }
-                    $this->channel_buffers[$client_channel][] = $data;
-                    break;
-                case NET_SSH2_MSG_CHANNEL_REQUEST:
-                    extract(unpack('Nlength', $this->_string_shift($response, 4)));
-                    $value = $this->_string_shift($response, $length);
-                    switch ($value) {
-                        case 'exit-signal':
-                            $this->_string_shift($response, 1);
-                            extract(unpack('Nlength', $this->_string_shift($response, 4)));
-                            $this->errors[] = 'SSH_MSG_CHANNEL_REQUEST (exit-signal): ' . $this->_string_shift($response, $length);
-                            $this->_string_shift($response, 1);
-                            extract(unpack('Nlength', $this->_string_shift($response, 4)));
-                            if ($length) {
-                                $this->errors[count($this->errors)].= "\r\n" . $this->_string_shift($response, $length);
-                            }
-                        //case 'exit-status':
-                        default:
-                            // "Some systems may not implement signals, in which case they SHOULD ignore this message."
-                            //  -- http://tools.ietf.org/html/rfc4254#section-6.9
-                            break;
+
+                    $this->channel_status[$channel] = NET_SSH2_MSG_CHANNEL_CLOSE;
+                    if ($client_channel == $channel) {
+                        return true;
                     }
-                    break;
-                case NET_SSH2_MSG_CHANNEL_CLOSE:
-                    $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$channel]));
-                    return true;
                 case NET_SSH2_MSG_CHANNEL_EOF:
                     break;
                 default:
-                    user_error('Error reading channel data', E_USER_NOTICE);
+                    user_error('Error reading channel data');
                     return $this->_disconnect(NET_SSH2_DISCONNECT_BY_APPLICATION);
             }
         }
@@ -1797,15 +3809,17 @@ class Net_SSH2 {
      *
      * See '6. Binary Packet Protocol' of rfc4253 for more info.
      *
-     * @param String $data
-     * @see Net_SSH2::_get_binary_packet()
-     * @return Boolean
+     * @param string $data
+     * @param string $logged
+     * @see self::_get_binary_packet()
+     * @return bool
      * @access private
      */
-    function _send_binary_packet($data)
+    function _send_binary_packet($data, $logged = null)
     {
-        if (feof($this->fsock)) {
-            user_error('Connection closed prematurely', E_USER_NOTICE);
+        if (!is_resource($this->fsock) || feof($this->fsock)) {
+            user_error('Connection closed prematurely');
+            $this->bitmap = 0;
             return false;
         }
 
@@ -1821,11 +3835,7 @@ class Net_SSH2 {
         $packet_length+= (($this->encrypt_block_size - 1) * $packet_length) % $this->encrypt_block_size;
         // subtracting strlen($data) is obvious - subtracting 5 is necessary because of packet_length and padding_length
         $padding_length = $packet_length - strlen($data) - 5;
-
-        $padding = '';
-        for ($i = 0; $i < $padding_length; $i++) {
-            $padding.= chr(crypt_random(0, 255));
-        }
+        $padding = Random::string($padding_length);
 
         // we subtract 4 from packet_length because the packet_length field isn't supposed to include itself
         $packet = pack('NCa*', $packet_length - 4, $padding_length, $data . $padding);
@@ -1839,84 +3849,192 @@ class Net_SSH2 {
 
         $packet.= $hmac;
 
-        $start = strtok(microtime(), ' ') + strtok(''); // http://php.net/microtime#61838
+        $start = microtime(true);
         $result = strlen($packet) == fputs($this->fsock, $packet);
-        $stop = strtok(microtime(), ' ') + strtok('');
+        $stop = microtime(true);
 
         if (defined('NET_SSH2_LOGGING')) {
-            $temp = isset($this->message_numbers[ord($data[0])]) ? $this->message_numbers[ord($data[0])] : 'UNKNOWN';
-            $this->message_number_log[] = '-> ' . $temp .
-                                          ' (' . round($stop - $start, 4) . 's)';
-            if (NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX) {
-                $this->message_log[] = substr($data, 1);
-            }
+            $current = microtime(true);
+            $message_number = isset($this->message_numbers[ord($data[0])]) ? $this->message_numbers[ord($data[0])] : 'UNKNOWN (' . ord($data[0]) . ')';
+            $message_number = '-> ' . $message_number .
+                              ' (since last: ' . round($current - $this->last_packet, 4) . ', network: ' . round($stop - $start, 4) . 's)';
+            $this->_append_log($message_number, isset($logged) ? $logged : $data);
+            $this->last_packet = $current;
         }
 
         return $result;
     }
 
     /**
+     * Logs data packets
+     *
+     * Makes sure that only the last 1MB worth of packets will be logged
+     *
+     * @param string $data
+     * @access private
+     */
+    function _append_log($message_number, $message)
+    {
+        // remove the byte identifying the message type from all but the first two messages (ie. the identification strings)
+        if (strlen($message_number) > 2) {
+            $this->_string_shift($message);
+        }
+
+        switch (NET_SSH2_LOGGING) {
+            // useful for benchmarks
+            case self::LOG_SIMPLE:
+                $this->message_number_log[] = $message_number;
+                break;
+            // the most useful log for SSH2
+            case self::LOG_COMPLEX:
+                $this->message_number_log[] = $message_number;
+                $this->log_size+= strlen($message);
+                $this->message_log[] = $message;
+                while ($this->log_size > self::LOG_MAX_SIZE) {
+                    $this->log_size-= strlen(array_shift($this->message_log));
+                    array_shift($this->message_number_log);
+                }
+                break;
+            // dump the output out realtime; packets may be interspersed with non packets,
+            // passwords won't be filtered out and select other packets may not be correctly
+            // identified
+            case self::LOG_REALTIME:
+                switch (PHP_SAPI) {
+                    case 'cli':
+                        $start = $stop = "\r\n";
+                        break;
+                    default:
+                        $start = '<pre>';
+                        $stop = '</pre>';
+                }
+                echo $start . $this->_format_log(array($message), array($message_number)) . $stop;
+                @flush();
+                @ob_flush();
+                break;
+            // basically the same thing as self::LOG_REALTIME with the caveat that self::LOG_REALTIME_FILE
+            // needs to be defined and that the resultant log file will be capped out at self::LOG_MAX_SIZE.
+            // the earliest part of the log file is denoted by the first <<< START >>> and is not going to necessarily
+            // at the beginning of the file
+            case self::LOG_REALTIME_FILE:
+                if (!isset($this->realtime_log_file)) {
+                    // PHP doesn't seem to like using constants in fopen()
+                    $filename = self::LOG_REALTIME_FILENAME;
+                    $fp = fopen($filename, 'w');
+                    $this->realtime_log_file = $fp;
+                }
+                if (!is_resource($this->realtime_log_file)) {
+                    break;
+                }
+                $entry = $this->_format_log(array($message), array($message_number));
+                if ($this->realtime_log_wrap) {
+                    $temp = "<<< START >>>\r\n";
+                    $entry.= $temp;
+                    fseek($this->realtime_log_file, ftell($this->realtime_log_file) - strlen($temp));
+                }
+                $this->realtime_log_size+= strlen($entry);
+                if ($this->realtime_log_size > self::LOG_MAX_SIZE) {
+                    fseek($this->realtime_log_file, 0);
+                    $this->realtime_log_size = strlen($entry);
+                    $this->realtime_log_wrap = true;
+                }
+                fputs($this->realtime_log_file, $entry);
+        }
+    }
+
+    /**
      * Sends channel data
      *
      * Spans multiple SSH_MSG_CHANNEL_DATAs if appropriate
      *
-     * @param Integer $client_channel
-     * @param String $data
-     * @return Boolean
+     * @param int $client_channel
+     * @param string $data
+     * @return bool
      * @access private
      */
     function _send_channel_packet($client_channel, $data)
     {
-        while (strlen($data) > $this->packet_size_client_to_server[$client_channel]) {
-            // resize the window, if appropriate
-            $this->window_size_client_to_server[$client_channel]-= $this->packet_size_client_to_server[$client_channel];
-            if ($this->window_size_client_to_server[$client_channel] < 0) {
-                $packet = pack('CNN', NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST, $this->server_channels[$client_channel], $this->window_size);
-                if (!$this->_send_binary_packet($packet)) {
-                    return false;
-                }
-                $this->window_size_client_to_server[$client_channel]+= $this->window_size;
+        while (strlen($data)) {
+            if (!$this->window_size_client_to_server[$client_channel]) {
+                $this->bitmap^= self::MASK_WINDOW_ADJUST;
+                // using an invalid channel will let the buffers be built up for the valid channels
+                $this->_get_channel_packet(-1);
+                $this->bitmap^= self::MASK_WINDOW_ADJUST;
             }
 
-            $packet = pack('CN2a*',
-                NET_SSH2_MSG_CHANNEL_DATA,
-                $this->server_channels[$client_channel],
+            /* The maximum amount of data allowed is determined by the maximum
+               packet size for the channel, and the current window size, whichever
+               is smaller.
+                 -- http://tools.ietf.org/html/rfc4254#section-5.2 */
+            $max_size = min(
                 $this->packet_size_client_to_server[$client_channel],
-                $this->_string_shift($data, $this->packet_size_client_to_server[$client_channel])
+                $this->window_size_client_to_server[$client_channel]
             );
 
+            $temp = $this->_string_shift($data, $max_size);
+            $packet = pack(
+                'CN2a*',
+                NET_SSH2_MSG_CHANNEL_DATA,
+                $this->server_channels[$client_channel],
+                strlen($temp),
+                $temp
+            );
+            $this->window_size_client_to_server[$client_channel]-= strlen($temp);
             if (!$this->_send_binary_packet($packet)) {
                 return false;
             }
         }
 
-        // resize the window, if appropriate
-        $this->window_size_client_to_server[$client_channel]-= strlen($data);
-        if ($this->window_size_client_to_server[$client_channel] < 0) {
-            $packet = pack('CNN', NET_SSH2_MSG_CHANNEL_WINDOW_ADJUST, $this->server_channels[$client_channel], $this->window_size);
-            if (!$this->_send_binary_packet($packet)) {
-                return false;
-            }
-            $this->window_size_client_to_server[$client_channel]+= $this->window_size;
+        return true;
+    }
+
+    /**
+     * Closes and flushes a channel
+     *
+     * \phpseclib\Net\SSH2 doesn't properly close most channels.  For exec() channels are normally closed by the server
+     * and for SFTP channels are presumably closed when the client disconnects.  This functions is intended
+     * for SCP more than anything.
+     *
+     * @param int $client_channel
+     * @param bool $want_reply
+     * @return bool
+     * @access private
+     */
+    function _close_channel($client_channel, $want_reply = false)
+    {
+        // see http://tools.ietf.org/html/rfc4254#section-5.3
+
+        $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_EOF, $this->server_channels[$client_channel]));
+
+        if (!$want_reply) {
+            $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel]));
+        }
+
+        $this->channel_status[$client_channel] = NET_SSH2_MSG_CHANNEL_CLOSE;
+
+        $this->curTimeout = 0;
+
+        while (!is_bool($this->_get_channel_packet($client_channel))) {
+        }
+
+        if ($want_reply) {
+            $this->_send_binary_packet(pack('CN', NET_SSH2_MSG_CHANNEL_CLOSE, $this->server_channels[$client_channel]));
         }
 
-        return $this->_send_binary_packet(pack('CN2a*',
-            NET_SSH2_MSG_CHANNEL_DATA,
-            $this->server_channels[$client_channel],
-            strlen($data),
-            $data));
+        if ($this->bitmap & self::MASK_SHELL) {
+            $this->bitmap&= ~self::MASK_SHELL;
+        }
     }
 
     /**
      * Disconnect
      *
-     * @param Integer $reason
-     * @return Boolean
+     * @param int $reason
+     * @return bool
      * @access private
      */
     function _disconnect($reason)
     {
-        if ($this->bitmap) {
+        if ($this->bitmap & self::MASK_CONNECTED) {
             $data = pack('CNNa*Na*', NET_SSH2_MSG_DISCONNECT, $reason, 0, '', 0, '');
             $this->_send_binary_packet($data);
             $this->bitmap = 0;
@@ -1930,9 +4048,9 @@ class Net_SSH2 {
      *
      * Inspired by array_shift
      *
-     * @param String $string
-     * @param optional Integer $index
-     * @return String
+     * @param string $string
+     * @param int $index
+     * @return string
      * @access private
      */
     function _string_shift(&$string, $index = 1)
@@ -1949,14 +4067,14 @@ class Net_SSH2 {
      * named constants from it, using the value as the name of the constant and the index as the value of the constant.
      * If any of the constants that would be defined already exists, none of the constants will be defined.
      *
-     * @param Array $array
+     * @param array $array
      * @access private
      */
     function _define_array()
     {
         $args = func_get_args();
         foreach ($args as $arg) {
-            foreach ($arg as $key=>$value) {
+            foreach ($arg as $key => $value) {
                 if (!defined($value)) {
                     define($value, $key);
                 } else {
@@ -1969,10 +4087,10 @@ class Net_SSH2 {
     /**
      * Returns a log of the packets that have been sent and received.
      *
-     * Returns a string if NET_SSH2_LOGGING == NET_SSH2_LOG_COMPLEX, an array if NET_SSH2_LOGGING == NET_SSH2_LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING')
+     * Returns a string if NET_SSH2_LOGGING == self::LOG_COMPLEX, an array if NET_SSH2_LOGGING == self::LOG_SIMPLE and false if !defined('NET_SSH2_LOGGING')
      *
      * @access public
-     * @return String or Array
+     * @return array|false|string
      */
     function getLog()
     {
@@ -1981,12 +4099,11 @@ class Net_SSH2 {
         }
 
         switch (NET_SSH2_LOGGING) {
-            case NET_SSH2_LOG_SIMPLE:
+            case self::LOG_SIMPLE:
                 return $this->message_number_log;
-                break;
-            case NET_SSH2_LOG_COMPLEX:
-                return $this->_format_log($this->message_log, $this->message_number_log);
-                break;
+            case self::LOG_COMPLEX:
+                $log = $this->_format_log($this->message_log, $this->message_number_log);
+                return PHP_SAPI == 'cli' ? $log : '<pre>' . $log . '</pre>';
             default:
                 return false;
         }
@@ -1995,39 +4112,31 @@ class Net_SSH2 {
     /**
      * Formats a log for printing
      *
-     * @param Array $message_log
-     * @param Array $message_number_log
+     * @param array $message_log
+     * @param array $message_number_log
      * @access private
-     * @return String
+     * @return string
      */
     function _format_log($message_log, $message_number_log)
     {
-        static $boundary = ':', $long_width = 65, $short_width = 16;
-
         $output = '';
         for ($i = 0; $i < count($message_log); $i++) {
             $output.= $message_number_log[$i] . "\r\n";
             $current_log = $message_log[$i];
             $j = 0;
             do {
-                if (!empty($current_log)) {
+                if (strlen($current_log)) {
                     $output.= str_pad(dechex($j), 7, '0', STR_PAD_LEFT) . '0  ';
                 }
-                $fragment = $this->_string_shift($current_log, $short_width);
-                $hex = substr(
-                           preg_replace(
-                               '#(.)#es',
-                               '"' . $boundary . '" . str_pad(dechex(ord(substr("\\1", -1))), 2, "0", STR_PAD_LEFT)',
-                               $fragment),
-                           strlen($boundary)
-                       );
+                $fragment = $this->_string_shift($current_log, $this->log_short_width);
+                $hex = substr(preg_replace_callback('#.#s', array($this, '_format_log_helper'), $fragment), strlen($this->log_boundary));
                 // replace non ASCII printable characters with dots
                 // http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters
                 // also replace < with a . since < messes up the output on web browsers
                 $raw = preg_replace('#[^\x20-\x7E]|<#', '.', $fragment);
-                $output.= str_pad($hex, $long_width - $short_width, ' ') . $raw . "\r\n";
+                $output.= str_pad($hex, $this->log_long_width - $this->log_short_width, ' ') . $raw . "\r\n";
                 $j++;
-            } while (!empty($current_log));
+            } while (strlen($current_log));
             $output.= "\r\n";
         }
 
@@ -2035,9 +4144,58 @@ class Net_SSH2 {
     }
 
     /**
+     * Helper function for _format_log
+     *
+     * For use with preg_replace_callback()
+     *
+     * @param array $matches
+     * @access private
+     * @return string
+     */
+    function _format_log_helper($matches)
+    {
+        return $this->log_boundary . str_pad(dechex(ord($matches[0])), 2, '0', STR_PAD_LEFT);
+    }
+
+    /**
+     * Helper function for agent->_on_channel_open()
+     *
+     * Used when channels are created to inform agent
+     * of said channel opening. Must be called after
+     * channel open confirmation received
+     *
+     * @access private
+     */
+    function _on_channel_open()
+    {
+        if (isset($this->agent)) {
+            $this->agent->_on_channel_open($this);
+        }
+    }
+
+    /**
+     * Returns the first value of the intersection of two arrays or false if
+     * the intersection is empty. The order is defined by the first parameter.
+     *
+     * @param array $array1
+     * @param array $array2
+     * @return mixed False if intersection is empty, else intersected value.
+     * @access private
+     */
+    function _array_intersect_first($array1, $array2)
+    {
+        foreach ($array1 as $value) {
+            if (in_array($value, $array2)) {
+                return $value;
+            }
+        }
+        return false;
+    }
+
+    /**
      * Returns all errors
      *
-     * @return String
+     * @return string[]
      * @access public
      */
     function getErrors()
@@ -2048,186 +4206,261 @@ class Net_SSH2 {
     /**
      * Returns the last error
      *
-     * @return String
+     * @return string
      * @access public
      */
     function getLastError()
     {
-        return $this->errors[count($this->errors) - 1];
+        $count = count($this->errors);
+
+        if ($count > 0) {
+            return $this->errors[$count - 1];
+        }
     }
 
     /**
      * Return the server identification.
      *
-     * @return String
+     * @return string
      * @access public
      */
     function getServerIdentification()
     {
+        $this->_connect();
+
         return $this->server_identifier;
     }
 
     /**
      * Return a list of the key exchange algorithms the server supports.
      *
-     * @return Array
+     * @return array
      * @access public
      */
     function getKexAlgorithms()
     {
+        $this->_connect();
+
         return $this->kex_algorithms;
     }
 
     /**
      * Return a list of the host key (public key) algorithms the server supports.
      *
-     * @return Array
+     * @return array
      * @access public
      */
     function getServerHostKeyAlgorithms()
     {
+        $this->_connect();
+
         return $this->server_host_key_algorithms;
     }
 
     /**
      * Return a list of the (symmetric key) encryption algorithms the server supports, when receiving stuff from the client.
      *
-     * @return Array
+     * @return array
      * @access public
      */
     function getEncryptionAlgorithmsClient2Server()
     {
+        $this->_connect();
+
         return $this->encryption_algorithms_client_to_server;
     }
 
     /**
      * Return a list of the (symmetric key) encryption algorithms the server supports, when sending stuff to the client.
      *
-     * @return Array
+     * @return array
      * @access public
      */
     function getEncryptionAlgorithmsServer2Client()
     {
+        $this->_connect();
+
         return $this->encryption_algorithms_server_to_client;
     }
 
     /**
      * Return a list of the MAC algorithms the server supports, when receiving stuff from the client.
      *
-     * @return Array
+     * @return array
      * @access public
      */
     function getMACAlgorithmsClient2Server()
     {
+        $this->_connect();
+
         return $this->mac_algorithms_client_to_server;
     }
 
     /**
      * Return a list of the MAC algorithms the server supports, when sending stuff to the client.
      *
-     * @return Array
+     * @return array
      * @access public
      */
     function getMACAlgorithmsServer2Client()
     {
+        $this->_connect();
+
         return $this->mac_algorithms_server_to_client;
     }
 
     /**
      * Return a list of the compression algorithms the server supports, when receiving stuff from the client.
      *
-     * @return Array
+     * @return array
      * @access public
      */
     function getCompressionAlgorithmsClient2Server()
     {
+        $this->_connect();
+
         return $this->compression_algorithms_client_to_server;
     }
 
     /**
      * Return a list of the compression algorithms the server supports, when sending stuff to the client.
      *
-     * @return Array
+     * @return array
      * @access public
      */
     function getCompressionAlgorithmsServer2Client()
     {
+        $this->_connect();
+
         return $this->compression_algorithms_server_to_client;
     }
 
     /**
      * Return a list of the languages the server supports, when sending stuff to the client.
      *
-     * @return Array
+     * @return array
      * @access public
      */
     function getLanguagesServer2Client()
     {
+        $this->_connect();
+
         return $this->languages_server_to_client;
     }
 
     /**
      * Return a list of the languages the server supports, when receiving stuff from the client.
      *
-     * @return Array
+     * @return array
      * @access public
      */
     function getLanguagesClient2Server()
     {
+        $this->_connect();
+
         return $this->languages_client_to_server;
     }
 
     /**
+     * Returns the banner message.
+     *
+     * Quoting from the RFC, "in some jurisdictions, sending a warning message before
+     * authentication may be relevant for getting legal protection."
+     *
+     * @return string
+     * @access public
+     */
+    function getBannerMessage()
+    {
+        return $this->banner_message;
+    }
+
+    /**
      * Returns the server public host key.
      *
      * Caching this the first time you connect to a server and checking the result on subsequent connections
      * is recommended.  Returns false if the server signature is not signed correctly with the public host key.
      *
-     * @return Mixed
+     * @return mixed
      * @access public
      */
     function getServerPublicHostKey()
     {
+        if (!($this->bitmap & self::MASK_CONSTRUCTOR)) {
+            if (!$this->_connect()) {
+                return false;
+            }
+        }
+
         $signature = $this->signature;
         $server_public_host_key = $this->server_public_host_key;
 
+        if (strlen($server_public_host_key) < 4) {
+            return false;
+        }
         extract(unpack('Nlength', $this->_string_shift($server_public_host_key, 4)));
         $this->_string_shift($server_public_host_key, $length);
 
+        if ($this->signature_validated) {
+            return $this->bitmap ?
+                $this->signature_format . ' ' . base64_encode($this->server_public_host_key) :
+                false;
+        }
+
+        $this->signature_validated = true;
+
         switch ($this->signature_format) {
             case 'ssh-dss':
+                $zero = new BigInteger();
+
+                if (strlen($server_public_host_key) < 4) {
+                    return false;
+                }
                 $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
-                $p = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+                $p = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
 
+                if (strlen($server_public_host_key) < 4) {
+                    return false;
+                }
                 $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
-                $q = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+                $q = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
 
+                if (strlen($server_public_host_key) < 4) {
+                    return false;
+                }
                 $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
-                $g = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+                $g = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
 
+                if (strlen($server_public_host_key) < 4) {
+                    return false;
+                }
                 $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
-                $y = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+                $y = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
 
                 /* The value for 'dss_signature_blob' is encoded as a string containing
                    r, followed by s (which are 160-bit integers, without lengths or
                    padding, unsigned, and in network byte order). */
                 $temp = unpack('Nlength', $this->_string_shift($signature, 4));
                 if ($temp['length'] != 40) {
-                    user_error('Invalid signature', E_USER_NOTICE);
+                    user_error('Invalid signature');
                     return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
                 }
 
-                $r = new Math_BigInteger($this->_string_shift($signature, 20), 256);
-                $s = new Math_BigInteger($this->_string_shift($signature, 20), 256);
+                $r = new BigInteger($this->_string_shift($signature, 20), 256);
+                $s = new BigInteger($this->_string_shift($signature, 20), 256);
 
-                if ($r->compare($q) >= 0 || $s->compare($q) >= 0) {
-                    user_error('Invalid signature', E_USER_NOTICE);
-                    return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
+                switch (true) {
+                    case $r->equals($zero):
+                    case $r->compare($q) >= 0:
+                    case $s->equals($zero):
+                    case $s->compare($q) >= 0:
+                        user_error('Invalid signature');
+                        return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
                 }
 
                 $w = $s->modInverse($q);
 
-                $u1 = $w->multiply(new Math_BigInteger(sha1($this->session_id), 16));
+                $u1 = $w->multiply(new BigInteger(sha1($this->exchange_hash), 16));
                 list(, $u1) = $u1->divide($q);
 
                 $u2 = $w->multiply($r);
@@ -2241,38 +4474,47 @@ class Net_SSH2 {
                 list(, $v) = $v->divide($q);
 
                 if (!$v->equals($r)) {
-                    user_error('Bad server signature', E_USER_NOTICE);
+                    user_error('Bad server signature');
                     return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
                 }
 
                 break;
             case 'ssh-rsa':
+                if (strlen($server_public_host_key) < 4) {
+                    return false;
+                }
                 $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
-                $e = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
+                $e = new BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
 
+                if (strlen($server_public_host_key) < 4) {
+                    return false;
+                }
                 $temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
-                $n = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
-                $nLength = $temp['length'];
+                $rawN = $this->_string_shift($server_public_host_key, $temp['length']);
+                $n = new BigInteger($rawN, -256);
+                $nLength = strlen(ltrim($rawN, "\0"));
 
                 /*
+                if (strlen($signature) < 4) {
+                    return false;
+                }
                 $temp = unpack('Nlength', $this->_string_shift($signature, 4));
                 $signature = $this->_string_shift($signature, $temp['length']);
 
-                if (!class_exists('Crypt_RSA')) {
-                    require_once('Crypt/RSA.php');
-                }
-
-                $rsa = new Crypt_RSA();
-                $rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
-                $rsa->loadKey(array('e' => $e, 'n' => $n), CRYPT_RSA_PUBLIC_FORMAT_RAW);
-                if (!$rsa->verify($this->session_id, $signature)) {
-                    user_error('Bad server signature', E_USER_NOTICE);
+                $rsa = new RSA();
+                $rsa->setSignatureMode(RSA::SIGNATURE_PKCS1);
+                $rsa->loadKey(array('e' => $e, 'n' => $n), RSA::PUBLIC_FORMAT_RAW);
+                if (!$rsa->verify($this->exchange_hash, $signature)) {
+                    user_error('Bad server signature');
                     return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
                 }
                 */
 
+                if (strlen($signature) < 4) {
+                    return false;
+                }
                 $temp = unpack('Nlength', $this->_string_shift($signature, 4));
-                $s = new Math_BigInteger($this->_string_shift($signature, $temp['length']), 256);
+                $s = new BigInteger($this->_string_shift($signature, $temp['length']), 256);
 
                 // validate an RSA signature per "8.2 RSASSA-PKCS1-v1_5", "5.2.2 RSAVP1", and "9.1 EMSA-PSS" in the
                 // following URL:
@@ -2280,23 +4522,98 @@ class Net_SSH2 {
 
                 // also, see SSHRSA.c (rsa2_verifysig) in PuTTy's source.
 
-                if ($s->compare(new Math_BigInteger()) < 0 || $s->compare($n->subtract(new Math_BigInteger(1))) > 0) {
-                    user_error('Invalid signature', E_USER_NOTICE);
+                if ($s->compare(new BigInteger()) < 0 || $s->compare($n->subtract(new BigInteger(1))) > 0) {
+                    user_error('Invalid signature');
                     return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
                 }
 
                 $s = $s->modPow($e, $n);
                 $s = $s->toBytes();
 
-                $h = pack('N4H*', 0x00302130, 0x0906052B, 0x0E03021A, 0x05000414, sha1($this->session_id));
-                $h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 3 - strlen($h)) . $h;
+                $h = pack('N4H*', 0x00302130, 0x0906052B, 0x0E03021A, 0x05000414, sha1($this->exchange_hash));
+                $h = chr(0x01) . str_repeat(chr(0xFF), $nLength - 2 - strlen($h)) . $h;
 
                 if ($s != $h) {
-                    user_error('Bad server signature', E_USER_NOTICE);
+                    user_error('Bad server signature');
                     return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
                 }
+                break;
+            default:
+                user_error('Unsupported signature format');
+                return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
+        }
+
+        return $this->signature_format . ' ' . base64_encode($this->server_public_host_key);
+    }
+
+    /**
+     * Returns the exit status of an SSH command or false.
+     *
+     * @return false|int
+     * @access public
+     */
+    function getExitStatus()
+    {
+        if (is_null($this->exit_status)) {
+            return false;
         }
+        return $this->exit_status;
+    }
+
+    /**
+     * Returns the number of columns for the terminal window size.
+     *
+     * @return int
+     * @access public
+     */
+    function getWindowColumns()
+    {
+        return $this->windowColumns;
+    }
+
+    /**
+     * Returns the number of rows for the terminal window size.
+     *
+     * @return int
+     * @access public
+     */
+    function getWindowRows()
+    {
+        return $this->windowRows;
+    }
+
+    /**
+     * Sets the number of columns for the terminal window size.
+     *
+     * @param int $value
+     * @access public
+     */
+    function setWindowColumns($value)
+    {
+        $this->windowColumns = $value;
+    }
+
+    /**
+     * Sets the number of rows for the terminal window size.
+     *
+     * @param int $value
+     * @access public
+     */
+    function setWindowRows($value)
+    {
+        $this->windowRows = $value;
+    }
 
-        return $this->server_public_host_key;
+    /**
+     * Sets the number of columns and rows for the terminal window size.
+     *
+     * @param int $columns
+     * @param int $rows
+     * @access public
+     */
+    function setWindowSize($columns = 80, $rows = 24)
+    {
+        $this->windowColumns = $columns;
+        $this->windowRows = $rows;
     }
 }
diff --git a/lib/phpseclib/System/SSH/Agent.php b/lib/phpseclib/System/SSH/Agent.php
new file mode 100644
index 0000000..a4ff054
--- /dev/null
+++ b/lib/phpseclib/System/SSH/Agent.php
@@ -0,0 +1,308 @@
+<?php
+
+/**
+ * Pure-PHP ssh-agent client.
+ *
+ * PHP version 5
+ *
+ * Here are some examples of how to use this library:
+ * <code>
+ * <?php
+ *    include 'vendor/autoload.php';
+ *
+ *    $agent = new \phpseclib\System\SSH\Agent();
+ *
+ *    $ssh = new \phpseclib\Net\SSH2('www.domain.tld');
+ *    if (!$ssh->login('username', $agent)) {
+ *        exit('Login Failed');
+ *    }
+ *
+ *    echo $ssh->exec('pwd');
+ *    echo $ssh->exec('ls -la');
+ * ?>
+ * </code>
+ *
+ * @category  System
+ * @package   SSH\Agent
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2014 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
+ * @internal  See http://api.libssh.org/rfc/PROTOCOL.agent
+ */
+
+namespace phpseclib\System\SSH;
+
+use phpseclib\Crypt\RSA;
+use phpseclib\System\SSH\Agent\Identity;
+
+/**
+ * Pure-PHP ssh-agent client identity factory
+ *
+ * requestIdentities() method pumps out \phpseclib\System\SSH\Agent\Identity objects
+ *
+ * @package SSH\Agent
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @access  internal
+ */
+class Agent
+{
+    /**#@+
+     * Message numbers
+     *
+     * @access private
+     */
+    // to request SSH1 keys you have to use SSH_AGENTC_REQUEST_RSA_IDENTITIES (1)
+    const SSH_AGENTC_REQUEST_IDENTITIES = 11;
+    // this is the SSH2 response; the SSH1 response is SSH_AGENT_RSA_IDENTITIES_ANSWER (2).
+    const SSH_AGENT_IDENTITIES_ANSWER = 12;
+    // the SSH1 request is SSH_AGENTC_RSA_CHALLENGE (3)
+    const SSH_AGENTC_SIGN_REQUEST = 13;
+    // the SSH1 response is SSH_AGENT_RSA_RESPONSE (4)
+    const SSH_AGENT_SIGN_RESPONSE = 14;
+    /**#@-*/
+
+    /**@+
+     * Agent forwarding status
+     *
+     * @access private
+     */
+    // no forwarding requested and not active
+    const FORWARD_NONE = 0;
+    // request agent forwarding when opportune
+    const FORWARD_REQUEST = 1;
+    // forwarding has been request and is active
+    const FORWARD_ACTIVE = 2;
+    /**#@-*/
+
+    /**
+     * Unused
+     */
+    const SSH_AGENT_FAILURE = 5;
+
+    /**
+     * Socket Resource
+     *
+     * @var resource
+     * @access private
+     */
+    var $fsock;
+
+    /**
+     * Agent forwarding status
+     *
+     * @access private
+     */
+    var $forward_status = self::FORWARD_NONE;
+
+    /**
+     * Buffer for accumulating forwarded authentication
+     * agent data arriving on SSH data channel destined
+     * for agent unix socket
+     *
+     * @access private
+     */
+    var $socket_buffer = '';
+
+    /**
+     * Tracking the number of bytes we are expecting
+     * to arrive for the agent socket on the SSH data
+     * channel
+     */
+    var $expected_bytes = 0;
+
+    /**
+     * Default Constructor
+     *
+     * @return \phpseclib\System\SSH\Agent
+     * @access public
+     */
+    function __construct()
+    {
+        switch (true) {
+            case isset($_SERVER['SSH_AUTH_SOCK']):
+                $address = $_SERVER['SSH_AUTH_SOCK'];
+                break;
+            case isset($_ENV['SSH_AUTH_SOCK']):
+                $address = $_ENV['SSH_AUTH_SOCK'];
+                break;
+            default:
+                user_error('SSH_AUTH_SOCK not found');
+                return false;
+        }
+
+        $this->fsock = fsockopen('unix://' . $address, 0, $errno, $errstr);
+        if (!$this->fsock) {
+            user_error("Unable to connect to ssh-agent (Error $errno: $errstr)");
+        }
+    }
+
+    /**
+     * Request Identities
+     *
+     * See "2.5.2 Requesting a list of protocol 2 keys"
+     * Returns an array containing zero or more \phpseclib\System\SSH\Agent\Identity objects
+     *
+     * @return array
+     * @access public
+     */
+    function requestIdentities()
+    {
+        if (!$this->fsock) {
+            return array();
+        }
+
+        $packet = pack('NC', 1, self::SSH_AGENTC_REQUEST_IDENTITIES);
+        if (strlen($packet) != fputs($this->fsock, $packet)) {
+            user_error('Connection closed while requesting identities');
+        }
+
+        $length = current(unpack('N', fread($this->fsock, 4)));
+        $type = ord(fread($this->fsock, 1));
+        if ($type != self::SSH_AGENT_IDENTITIES_ANSWER) {
+            user_error('Unable to request identities');
+        }
+
+        $identities = array();
+        $keyCount = current(unpack('N', fread($this->fsock, 4)));
+        for ($i = 0; $i < $keyCount; $i++) {
+            $length = current(unpack('N', fread($this->fsock, 4)));
+            $key_blob = fread($this->fsock, $length);
+            $key_str = 'ssh-rsa ' . base64_encode($key_blob);
+            $length = current(unpack('N', fread($this->fsock, 4)));
+            if ($length) {
+                $key_str.= ' ' . fread($this->fsock, $length);
+            }
+            $length = current(unpack('N', substr($key_blob, 0, 4)));
+            $key_type = substr($key_blob, 4, $length);
+            switch ($key_type) {
+                case 'ssh-rsa':
+                    $key = new RSA();
+                    $key->loadKey($key_str);
+                    break;
+                case 'ssh-dss':
+                    // not currently supported
+                    break;
+            }
+            // resources are passed by reference by default
+            if (isset($key)) {
+                $identity = new Identity($this->fsock);
+                $identity->setPublicKey($key);
+                $identity->setPublicKeyBlob($key_blob);
+                $identities[] = $identity;
+                unset($key);
+            }
+        }
+
+        return $identities;
+    }
+
+    /**
+     * Signal that agent forwarding should
+     * be requested when a channel is opened
+     *
+     * @param Net_SSH2 $ssh
+     * @return bool
+     * @access public
+     */
+    function startSSHForwarding($ssh)
+    {
+        if ($this->forward_status == self::FORWARD_NONE) {
+            $this->forward_status = self::FORWARD_REQUEST;
+        }
+    }
+
+    /**
+     * Request agent forwarding of remote server
+     *
+     * @param Net_SSH2 $ssh
+     * @return bool
+     * @access private
+     */
+    function _request_forwarding($ssh)
+    {
+        $request_channel = $ssh->_get_open_channel();
+        if ($request_channel === false) {
+            return false;
+        }
+
+        $packet = pack(
+            'CNNa*C',
+            NET_SSH2_MSG_CHANNEL_REQUEST,
+            $ssh->server_channels[$request_channel],
+            strlen('auth-agent-req@openssh.com'),
+            'auth-agent-req@openssh.com',
+            1
+        );
+
+        $ssh->channel_status[$request_channel] = NET_SSH2_MSG_CHANNEL_REQUEST;
+
+        if (!$ssh->_send_binary_packet($packet)) {
+            return false;
+        }
+
+        $response = $ssh->_get_channel_packet($request_channel);
+        if ($response === false) {
+            return false;
+        }
+
+        $ssh->channel_status[$request_channel] = NET_SSH2_MSG_CHANNEL_OPEN;
+        $this->forward_status = self::FORWARD_ACTIVE;
+
+        return true;
+    }
+
+    /**
+     * On successful channel open
+     *
+     * This method is called upon successful channel
+     * open to give the SSH Agent an opportunity
+     * to take further action. i.e. request agent forwarding
+     *
+     * @param Net_SSH2 $ssh
+     * @access private
+     */
+    function _on_channel_open($ssh)
+    {
+        if ($this->forward_status == self::FORWARD_REQUEST) {
+            $this->_request_forwarding($ssh);
+        }
+    }
+
+    /**
+     * Forward data to SSH Agent and return data reply
+     *
+     * @param string $data
+     * @return data from SSH Agent
+     * @access private
+     */
+    function _forward_data($data)
+    {
+        if ($this->expected_bytes > 0) {
+            $this->socket_buffer.= $data;
+            $this->expected_bytes -= strlen($data);
+        } else {
+            $agent_data_bytes = current(unpack('N', $data));
+            $current_data_bytes = strlen($data);
+            $this->socket_buffer = $data;
+            if ($current_data_bytes != $agent_data_bytes + 4) {
+                $this->expected_bytes = ($agent_data_bytes + 4) - $current_data_bytes;
+                return false;
+            }
+        }
+
+        if (strlen($this->socket_buffer) != fwrite($this->fsock, $this->socket_buffer)) {
+            user_error('Connection closed attempting to forward data to SSH agent');
+        }
+
+        $this->socket_buffer = '';
+        $this->expected_bytes = 0;
+
+        $agent_reply_bytes = current(unpack('N', fread($this->fsock, 4)));
+
+        $agent_reply_data = fread($this->fsock, $agent_reply_bytes);
+        $agent_reply_data = current(unpack('a*', $agent_reply_data));
+
+        return pack('Na*', $agent_reply_bytes, $agent_reply_data);
+    }
+}
diff --git a/lib/phpseclib/System/SSH/Agent/Identity.php b/lib/phpseclib/System/SSH/Agent/Identity.php
new file mode 100644
index 0000000..b8cc6cd
--- /dev/null
+++ b/lib/phpseclib/System/SSH/Agent/Identity.php
@@ -0,0 +1,158 @@
+<?php
+/**
+ * Pure-PHP ssh-agent client.
+ *
+ * PHP version 5
+ *
+ * @category  System
+ * @package   SSH\Agent
+ * @author    Jim Wigginton <terrafrost@php.net>
+ * @copyright 2009 Jim Wigginton
+ * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
+ * @link      http://phpseclib.sourceforge.net
+ * @internal  See http://api.libssh.org/rfc/PROTOCOL.agent
+ */
+
+namespace phpseclib\System\SSH\Agent;
+
+use phpseclib\System\SSH\Agent;
+
+/**
+ * Pure-PHP ssh-agent client identity object
+ *
+ * Instantiation should only be performed by \phpseclib\System\SSH\Agent class.
+ * This could be thought of as implementing an interface that phpseclib\Crypt\RSA
+ * implements. ie. maybe a Net_SSH_Auth_PublicKey interface or something.
+ * The methods in this interface would be getPublicKey and sign since those are the
+ * methods phpseclib looks for to perform public key authentication.
+ *
+ * @package SSH\Agent
+ * @author  Jim Wigginton <terrafrost@php.net>
+ * @access  internal
+ */
+class Identity
+{
+    /**
+     * Key Object
+     *
+     * @var \phpseclib\Crypt\RSA
+     * @access private
+     * @see self::getPublicKey()
+     */
+    var $key;
+
+    /**
+     * Key Blob
+     *
+     * @var string
+     * @access private
+     * @see self::sign()
+     */
+    var $key_blob;
+
+    /**
+     * Socket Resource
+     *
+     * @var resource
+     * @access private
+     * @see self::sign()
+     */
+    var $fsock;
+
+    /**
+     * Default Constructor.
+     *
+     * @param resource $fsock
+     * @return \phpseclib\System\SSH\Agent\Identity
+     * @access private
+     */
+    function __construct($fsock)
+    {
+        $this->fsock = $fsock;
+    }
+
+    /**
+     * Set Public Key
+     *
+     * Called by \phpseclib\System\SSH\Agent::requestIdentities()
+     *
+     * @param \phpseclib\Crypt\RSA $key
+     * @access private
+     */
+    function setPublicKey($key)
+    {
+        $this->key = $key;
+        $this->key->setPublicKey();
+    }
+
+    /**
+     * Set Public Key
+     *
+     * Called by \phpseclib\System\SSH\Agent::requestIdentities(). The key blob could be extracted from $this->key
+     * but this saves a small amount of computation.
+     *
+     * @param string $key_blob
+     * @access private
+     */
+    function setPublicKeyBlob($key_blob)
+    {
+        $this->key_blob = $key_blob;
+    }
+
+    /**
+     * Get Public Key
+     *
+     * Wrapper for $this->key->getPublicKey()
+     *
+     * @param int $format optional
+     * @return mixed
+     * @access public
+     */
+    function getPublicKey($format = null)
+    {
+        return !isset($format) ? $this->key->getPublicKey() : $this->key->getPublicKey($format);
+    }
+
+    /**
+     * Set Signature Mode
+     *
+     * Doesn't do anything as ssh-agent doesn't let you pick and choose the signature mode. ie.
+     * ssh-agent's only supported mode is \phpseclib\Crypt\RSA::SIGNATURE_PKCS1
+     *
+     * @param int $mode
+     * @access public
+     */
+    function setSignatureMode($mode)
+    {
+    }
+
+    /**
+     * Create a signature
+     *
+     * See "2.6.2 Protocol 2 private key signature request"
+     *
+     * @param string $message
+     * @return string
+     * @access public
+     */
+    function sign($message)
+    {
+        // the last parameter (currently 0) is for flags and ssh-agent only defines one flag (for ssh-dss): SSH_AGENT_OLD_SIGNATURE
+        $packet = pack('CNa*Na*N', Agent::SSH_AGENTC_SIGN_REQUEST, strlen($this->key_blob), $this->key_blob, strlen($message), $message, 0);
+        $packet = pack('Na*', strlen($packet), $packet);
+        if (strlen($packet) != fputs($this->fsock, $packet)) {
+            user_error('Connection closed during signing');
+        }
+
+        $length = current(unpack('N', fread($this->fsock, 4)));
+        $type = ord(fread($this->fsock, 1));
+        if ($type != Agent::SSH_AGENT_SIGN_RESPONSE) {
+            user_error('Unable to retrieve signature');
+        }
+
+        $signature_blob = fread($this->fsock, $length - 1);
+        // the only other signature format defined - ssh-dss - is the same length as ssh-rsa
+        // the + 12 is for the other various SSH added length fields
+        return substr($signature_blob, strlen('ssh-rsa') + 12);
+    }
+}
diff --git a/lib/phpseclib/bootstrap.php b/lib/phpseclib/bootstrap.php
new file mode 100644
index 0000000..b7e9175
--- /dev/null
+++ b/lib/phpseclib/bootstrap.php
@@ -0,0 +1,22 @@
+<?php
+/**
+ * Bootstrapping File for phpseclib
+ *
+ * @license http://www.opensource.org/licenses/mit-license.html MIT License
+ */
+if (extension_loaded('mbstring')) {
+    // 2 - MB_OVERLOAD_STRING
+    if (ini_get('mbstring.func_overload') & 2) {
+        throw new \UnexpectedValueException(
+            'Overloading of string functions using mbstring.func_overload ' .
+            'is not supported by phpseclib.'
+        );
+    }
+}
+
+spl_autoload_register(function($className) {
+    $path = explode('\\', $className);
+    if (array_shift($path) == 'phpseclib') {
+        return include str_replace('\\', DIRECTORY_SEPARATOR, $className) . '.php';
+    }
+});
diff --git a/lib/phpseclib/openssl.cnf b/lib/phpseclib/openssl.cnf
new file mode 100644
index 0000000..2b8b52f
--- /dev/null
+++ b/lib/phpseclib/openssl.cnf
@@ -0,0 +1,6 @@
+# minimalist openssl.cnf file for use with phpseclib
+
+HOME			= .
+RANDFILE		= $ENV::HOME/.rnd
+
+[ v3_ca ]
diff --git a/var/package/Cm_RedisSession-1.9.3.10.xml b/var/package/Cm_RedisSession-1.9.3.10.xml
deleted file mode 100644
index b742704..0000000
--- a/var/package/Cm_RedisSession-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Cm_RedisSession</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://framework.zend.com/license/new-bsd">New BSD</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Redis session</summary>
-    <description>Redis seesion</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Colin Mollenhour</name><user>core</user><email>colin@mollenhour.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:11</time>
-    <contents><target name="magecommunity"><dir name="Cm"><dir name="RedisSession"><dir name="Model"><file name="Session.php" hash="8a751a32ac85da38237012f6c4ac9077"/></dir><dir name="etc"><file name="config.xml" hash="6b32aa3b331c4504c44a7c01a24a0d3d"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Cm_RedisSession.xml" hash="f36278d589fa562d20d5182c8864a3dd"/></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Lib_Credis</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Cm_RedisSession-1.9.4.0.xml b/var/package/Cm_RedisSession-1.9.4.0.xml
new file mode 100644
index 0000000..a13845c
--- /dev/null
+++ b/var/package/Cm_RedisSession-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Cm_RedisSession</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://framework.zend.com/license/new-bsd">New BSD</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Redis session</summary>
+    <description>Redis seesion</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Colin Mollenhour</name><user>core</user><email>colin@mollenhour.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:31:58</time>
+    <contents><target name="magecommunity"><dir name="Cm"><dir name="RedisSession"><dir name="Model"><file name="Session.php" hash="8a751a32ac85da38237012f6c4ac9077"/></dir><dir name="etc"><file name="config.xml" hash="6b32aa3b331c4504c44a7c01a24a0d3d"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Cm_RedisSession.xml" hash="f36278d589fa562d20d5182c8864a3dd"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Lib_Credis</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Interface_Adminhtml_Default-1.9.3.10.xml b/var/package/Interface_Adminhtml_Default-1.9.3.10.xml
deleted file mode 100644
index 05ef187..0000000
--- a/var/package/Interface_Adminhtml_Default-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Interface_Adminhtml_Default</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/afl-3.0.php">AFL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Default interface for Adminhtml</summary>
-    <description>Default interface for Adminhtml</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:11</time>
-    <contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="etc"><file name="theme.xml" hash="2b8a8e5c60e4784255103ef960654b5c"/></dir><dir name="layout"><file name="admin.xml" hash="fa2970aab5aa83b7ebc98adb626cc47e"/><file name="adminnotification.xml" hash="6c02b570b62216ddd83ef13e02c6698b"/><file name="api2.xml" hash="db2a27d7ccc02947bc5b30c59769e08b"/><file name="authorizenet.xml" hash="e46d7d9d4804cd77883bd035c207d393"/><file name="bundle.xml" hash="36df0c985b13180ceea82109d6544381"/><file name="captcha.xml" hash="aba7100ae7edc86767e264e5fcfeed0d"/><file name="catalog.xml" hash="ab017f81ffc3316d6f1aed1011705789"/><file name="cms.xml" hash="0d847542950f96c30d7e493d6581f382"/><file name="connect.xml" hash="4b115e8eea0c7a5366bb650f9ecd678e"/><file name="currencysymbol.xml" hash="f834ed67581bb8c6a0f1e9077a0e916a"/><file name="customer.xml" hash="8dea541c83192d8d11c4fb49ea78045b"/><file name="dataflow.xml" hash="6f3baacc217afac27c7046d216afbaa6"/><file name="downloadable.xml" hash="b86d8dd5b096210d7ead7578b724bcad"/><file name="giftmessage.xml" hash="8a9454ccace970bfc7113bbfcc694d72"/><file name="importexport.xml" hash="4ee599ba56fabb14579b4c4f62f12b05"/><file name="index.xml" hash="7d5d63387702ae4f89790ddf333a85f0"/><file name="main.xml" hash="579885879b15e799e92cc2a9db33c277"/><file name="newsletter.xml" hash="cd6f875069103180ba3c6e175afb36c8"/><file name="oauth.xml" hash="9e68b6469faedb70bd5e19c076f07a66"/><file name="pagecache.xml" hash="649b2dc7b23ffa346745e2f439ada44f"/><file name="promo.xml" hash="ecce633b40d46540091a5f4674a6b5d7"/><file name="report.xml" hash="aebf6e9b94610bf1de7523781dc9df6b"/><file name="rss.xml" hash="381d71a524ace3375faa236867473cb3"/><file name="sales.xml" hash="8e29ebd2adff0f926c5dbcdca8eb8b38"/><file name="search.xml" hash="08e65788b1c39852084489a2110f9ff7"/><file name="tag.xml" hash="be945871f64a7df6d5b9dc163f2a7906"/><file name="tax.xml" hash="575eaccb30e80c89569192a9793bbe31"/><file name="widget.xml" hash="660afe2914732b367367da4ff252fc0a"/></dir><dir name="locale"><dir name="en_US"><file name="translate.csv" hash="735c9ec66d1309f1206294f075fdcdd1"/></dir></dir><dir name="template"><file name="access_denied.phtml" hash="0b93425b87b9d7ac08f545fe9b8e1362"/><dir name="api"><file name="role_users_grid_js.phtml" hash="19b2a78abc5572a2d6f00d2bae61b06b"/><file name="roleinfo.phtml" hash="26c30a9376cb26e6e695a5e30c0d3ba4"/><file name="roles.phtml" hash="c7e568ce60aa3f2d5ef99b07ff188f62"/><file name="rolesedit.phtml" hash="2fc361094d6175350a69fe4e7adb22de"/><file name="rolesusers.phtml" hash="c7b229b2a85ad3a22ec7b3658cb81992"/><file name="user_roles_grid_js.phtml" hash="cc0ca1bd4762b3213b39e0ea6387f2a9"/><file name="userinfo.phtml" hash="71d5c55d0baebbb17a7253d54dcf261f"/><file name="usernroles.phtml" hash="bef71e724dbb7b176ade07ddd895d249"/><file name="userroles.phtml" hash="c65d101f41a14ea2f6f9c5336c339ec2"/><file name="users.phtml" hash="79609ef733b95a347cc4d7551407da35"/></dir><dir name="api2"><dir name="attribute"><file name="buttons.phtml" hash="a0f72346b1d2f7d0ecc00c663152594d"/><file name="resource.phtml" hash="ac52c34f754dbd0d18033c77d77f310e"/></dir><dir name="permissions"><dir name="user"><dir name="edit"><dir name="tab"><dir name="roles"><file name="js.phtml" hash="8f86b7111ea63f3f92082bd7e354998e"/></dir></dir></dir></dir></dir><dir name="role"><file name="buttons.phtml" hash="c82b5abc2905bb1e366de48e271b8396"/><file name="users_grid_js.phtml" hash="f04c43f09d5a3881bb30bd23a7627419"/></dir></dir><dir name="authorizenet"><dir name="directpost"><file name="iframe.phtml" hash="45b445708ecef65d83c5ecc15d330edd"/><file name="info.phtml" hash="1d71da92ea0ddb22633bbcf1e2838102"/></dir></dir><dir name="backup"><file name="dialogs.phtml" hash="7b48547221f06a4a6d22d15e1e83672f"/><file name="left.phtml" hash="dfc47c2fc8db80a7d689d6c4b9c839f0"/><file name="list.phtml" hash="db411fc64166d19591964830e13c66a8"/></dir><dir name="bundle"><dir name="product"><dir name="composite"><dir name="fieldset"><dir name="options"><file name="bundle.phtml" hash="3c5955a856a6dd3f00422ce849ab121d"/><dir name="type"><file name="checkbox.phtml" hash="7c0db4ab7ca921ce57a9396e28bce585"/><file name="multi.phtml" hash="1514e211126df7763d75df47d72b0d95"/><file name="radio.phtml" hash="ae244ff90f64532aad44df7fd763a97a"/><file name="select.phtml" hash="708a91a59658cebbc4b5f141c1b8e27c"/></dir></dir></dir></dir><dir name="edit"><dir name="bundle"><dir name="option"><file name="search.phtml" hash="96f1988c6a61107ea033f24acfb331ed"/><file name="selection.phtml" hash="56ee8f504e7b17ca87ffa037ba224d8f"/></dir><file name="option.phtml" hash="8e84e2dffcc3560656c4094d0e11c83d"/></dir><file name="bundle.phtml" hash="d1c03f6494a5d1b63b1cf0f87d381d4e"/></dir></dir><dir name="sales"><dir name="creditmemo"><dir name="create"><dir name="items"><file name="renderer.phtml" hash="0eff64f467a00ba9871dcf235ea6116c"/></dir></dir><dir name="view"><dir name="items"><file name="renderer.phtml" hash="2dde16cdd49acb1f94f298168c5e2c9a"/></dir></dir></dir><dir name="invoice"><dir name="create"><dir name="items"><file name="renderer.phtml" hash="72daa1a5ca1f2ff17fd9d32956fcbe1f"/></dir></dir><dir name="view"><dir name="items"><file name="renderer.phtml" hash="87f9bcc14b13f4c2253cc16adee2d71c"/></dir></dir></dir><dir name="order"><dir name="view"><dir name="items"><file name="renderer.phtml" hash="88a49b9c825845b9e931abd4fce2d2d7"/></dir></dir></dir><dir name="shipment"><dir name="create"><dir name="items"><file name="renderer.phtml" hash="87cb061dcbad3235343331c73af75c29"/></dir></dir><dir name="view"><dir name="items"><file name="renderer.phtml" hash="1a447952fa64ab75222642852945f525"/></dir></dir></dir></dir></dir><dir name="captcha"><file name="zend.phtml" hash="4bb4d10d1969e62ea626c2f3ad17059b"/></dir><dir name="catalog"><dir name="category"><dir name="checkboxes"><file name="tree.phtml" hash="316072d4357faf2dda4607ba7f02e5e1"/></dir><dir name="edit"><file name="form.phtml" hash="1f2ec2f818af0dae1a3d898489a1bca7"/></dir><file name="edit.phtml" hash="8c6a5c83242ebd0f262a8b884066d071"/><file name="tree.phtml" hash="166e16cb27184b953cc9e7f60f0eba40"/><dir name="widget"><file name="tree.phtml" hash="f6611d0ceb9f6068e5c3988930b0a00c"/></dir></dir><dir name="form"><dir name="renderer"><dir name="fieldset"><file name="element.phtml" hash="58c77338ef7ee88a33cb8d0703d752de"/></dir></dir></dir><dir name="product"><dir name="attribute"><file name="js.phtml" hash="7e01ac475d716fe1a0ff364683805fef"/><dir name="new"><file name="created.phtml" hash="b6466ae0b3778ef2f08583a84aa7099d"/></dir><file name="options.phtml" hash="4d43f18ee71fa9f5a4d518b279888aed"/><dir name="set"><dir name="main"><dir name="tree"><file name="attribute.phtml" hash="e31959cb6e8a00cf1c85bcf3e528f73f"/><file name="group.phtml" hash="ad056aa1c05478509d9252cd9cbbf9e7"/></dir></dir><file name="main.phtml" hash="0a9fc542d48b62a9e218f9fb5fa33133"/><dir name="toolbar"><file name="add.phtml" hash="2271a6d595c86af8bf84b987eb0efc17"/><file name="main.phtml" hash="bf70b4d5a5a62a0abc98eb8003e1b8d6"/></dir></dir></dir><dir name="composite"><file name="configure.phtml" hash="7f6774cf9023b4daa9a250454149d373"/><dir name="fieldset"><file name="configurable.phtml" hash="4861932bdb04e14eb32c8fa072c9ab4c"/><file name="grouped.phtml" hash="020b1cb486b20b39a1fb4d4b5711c68b"/><dir name="options"><file name="js.phtml" hash="59ac4bb852525ff1f6b7bd31eb4f55ea"/><dir name="type"><file name="date.phtml" hash="e68657a02a40e818cdf43552d64914d4"/><file name="default.phtml" hash="cd59ccac8a9d4212e161ea5dbb55f348"/><file name="file.phtml" hash="ab87b63a754052d01a64e31ebd3b33a6"/><file name="select.phtml" hash="49130463308c229d1d9041499e9d3ccc"/><file name="text.phtml" hash="ca826937903254f82d322f8f91e7d46a"/></dir></dir><file name="options.phtml" hash="1e5706149c20d21fd1d4deae1e4814f7"/><file name="qty.phtml" hash="911d3700ea16934737ef4838cf5905a5"/></dir></dir><file name="created.phtml" hash="eeda128f5468e66a37eb6048ff20046f"/><dir name="edit"><dir name="action"><file name="attribute.phtml" hash="c8e6a25bfd9b467557e76f6c8c6d5ff8"/><file name="inventory.phtml" hash="4aa5d8046544aad2fa7ecb4d62cb7b4f"/><file name="websites.phtml" hash="bef55654e3461543c6f2ae9d3d8826f2"/></dir><file name="categories.phtml" hash="61ea947c5375f24d183964abf564bd06"/><dir name="options"><file name="option.phtml" hash="5b2c7428c87ae6c888e57de4228b49d3"/><dir name="type"><file name="date.phtml" hash="56d17e997bff9a38c85abad8674d2b1c"/><file name="file.phtml" hash="0ed1da6973f5665b926533c9e1d6883f"/><file name="select.phtml" hash="68df7d25b614c17fd6465e93c458ceb8"/><file name="text.phtml" hash="fad130667515a76412509dea18c55e86"/></dir></dir><file name="options.phtml" hash="f0f0a18efa190eb3b20cc345f2e946fd"/><dir name="price"><file name="group.phtml" hash="3956ebb0b1d06f602caa4f7a3ec8016d"/><file name="tier.phtml" hash="fe083276dc080bb0c300d29f0e42e663"/></dir><file name="serializer.phtml" hash="598b4c51e63a0633a139f17bba395c51"/><dir name="super"><file name="config.phtml" hash="7c36eec763f1c2c7627026c6723d7d75"/></dir><file name="websites.phtml" hash="a59008e748041ce32ffa01c52bfada66"/></dir><file name="edit.phtml" hash="e33e2c7513399a924c3224a9791b252a"/><dir name="helper"><file name="gallery.phtml" hash="2ea402574e8813e211f6ad6e45690082"/></dir><file name="js.phtml" hash="47cf9938cc0ebc74b583370cceb93498"/><file name="price.phtml" hash="0d6960c138926e5832ef39dc2d6f0923"/><dir name="tab"><file name="alert.phtml" hash="c7f72e8114ab15177be2c83598e8705e"/><file name="inventory.phtml" hash="e6e15282ceea9e10ddc47771c8c73503"/></dir><dir name="widget"><dir name="chooser"><file name="container.phtml" hash="2af850a1f664772599a1a42b12cbd037"/></dir></dir></dir><file name="product.phtml" hash="0db5b8a63cf7bdfcbe0278569e048e9b"/><dir name="wysiwyg"><file name="js.phtml" hash="868d61a1c261c64255367f1d18c06146"/></dir></dir><dir name="cms"><dir name="browser"><dir name="content"><file name="files.phtml" hash="4f681a5701b68430a3fc5e219605fa69"/><file name="newfolder.phtml" hash="4631d1a3602fff8fac3528d2d620edd3"/><file name="uploader.phtml" hash="0ca35f576a3407276f08579da3d767fa"/></dir><file name="content.phtml" hash="5060e5bf45f748de04e476754ac1dfd0"/><file name="js.phtml" hash="d7f24abe14eaaa076de3ecfcb9cd37ac"/><file name="tree.phtml" hash="31337b44e306b1c72b6248f782a2f987"/></dir><dir name="page"><dir name="edit"><dir name="form"><dir name="renderer"><file name="content.phtml" hash="3ff9151632c1207f57108393c3a2d1b1"/></dir></dir></dir></dir></dir><file name="coming.phtml" hash="584b6eb5bd5c02169d95bf218fd78f32"/><dir name="connect"><dir name="extension"><dir name="custom"><file name="authors.phtml" hash="abcf5c33760f7f41e849aa0ccdc3094c"/><file name="contents.phtml" hash="b0750fce6e052964e936194175cc2de5"/><file name="depends.phtml" hash="9750b3aa40cf7b948dd76e1975e81c00"/><file name="load.phtml" hash="c14d4bfcae6c2da8b66ddb12f98e1bcd"/><file name="package.phtml" hash="acd9f10cd82a311eb546cd63bd648bdc"/><file name="release.phtml" hash="e25b1c7c5e8007610044e0be15926066"/></dir></dir></dir><dir name="currencysymbol"><file name="grid.phtml" hash="4909494d83f5a434e9549d4c9b208b7b"/></dir><dir name="customer"><dir name="edit"><file name="js.phtml" hash="dbdef333341b26c8e5a4d6487452bba0"/><dir name="tab"><dir name="account"><dir name="form"><dir name="renderer"><file name="group.phtml" hash="07ca40d8a48dccbf882c2bd9d97c8fdd"/></dir></dir></dir><dir name="view"><dir name="grid"><file name="item.phtml" hash="cffe779f8286f8ddbd5d9e36455c1f91"/></dir></dir></dir></dir><file name="online.phtml" hash="26c038872c35622dce5192b66157d8f2"/><dir name="sales"><dir name="order"><dir name="create"><dir name="address"><dir name="form"><dir name="renderer"><file name="vat.phtml" hash="bcb6dcd5283f6ca54a31f794ae05ff42"/></dir></dir></dir></dir></dir></dir><dir name="system"><dir name="config"><file name="validatevat.phtml" hash="83e4b57c6dff8ec1ffb5480133126767"/></dir></dir><dir name="tab"><file name="addresses.phtml" hash="4e08e870ac344b06a61ba5df94acdce9"/><file name="cart.phtml" hash="7bd07def03346874d530832138a82e83"/><file name="newsletter.phtml" hash="a875958e512c96b7b3841282edcfb36e"/><dir name="view"><file name="sales.phtml" hash="0dbba8c504374b5dd09304727261ce6a"/></dir><file name="view.phtml" hash="4153cc71e7a6db1e6f8cd6b5e949b052"/><file name="wishlist.phtml" hash="bbfef68c40383558d550e93bcaf788de"/></dir></dir><dir name="dashboard"><dir name="graph"><file name="disabled.phtml" hash="9fd9442cb7012d11528a5008d7edfc8b"/></dir><file name="graph.phtml" hash="b64fea82a4e48856749a118aa394b3e4"/><file name="grid.phtml" hash="92391c6885262018eace82dc98041815"/><file name="index.phtml" hash="1485125ad7b75ea87312cc9aae2c64c7"/><file name="salebar.phtml" hash="35051aca2c8af240a93905ace6a95aef"/><file name="searches.phtml" hash="85a0eab13b10481bec450c27146ece41"/><dir name="store"><file name="switcher.phtml" hash="e16a68b53244d1e0becf36a1b2e1235b"/></dir><file name="totalbar.phtml" hash="49a2ccc2dbb571f33aa773cb896b04b7"/></dir><dir name="directory"><dir name="js"><file name="optional_zip_countries.phtml" hash="f2c21b03d0109c7505be950febe20d1c"/></dir></dir><dir name="downloadable"><dir name="product"><dir name="composite"><dir name="fieldset"><file name="downloadable.phtml" hash="ec539bc7a37dde2d1369a38872e04ae0"/></dir></dir><dir name="edit"><dir name="downloadable"><file name="links.phtml" hash="50f196fbc173c7b6db47b73897bbba53"/><file name="samples.phtml" hash="0a4e10d341d2e373e89a9b990cee5658"/></dir><file name="downloadable.phtml" hash="0e3685802262cd0ff745f7b5a3c4a399"/></dir></dir><dir name="sales"><dir name="items"><dir name="column"><dir name="downloadable"><dir name="creditmemo"><file name="name.phtml" hash="0b929b22a5b6bfe4faefd36c8fe3e7cb"/></dir><dir name="invoice"><file name="name.phtml" hash="69aa15a70fe3e10ff66d301f83774d8e"/></dir><file name="name.phtml" hash="90e67c7d2963a36239d1cfedf02eb2d6"/></dir></dir></dir><dir name="order"><dir name="creditmemo"><dir name="create"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="564951f90faa742f3a7485cd325f3928"/></dir></dir></dir><dir name="view"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="c0060b9a5190d959423435c2fec44fd7"/></dir></dir></dir></dir><dir name="invoice"><dir name="create"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="4e1430f0773f61cc998500dcbf3df9f1"/></dir></dir></dir><dir name="view"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="5a47d33cef0453245cf6751611b614f9"/></dir></dir></dir></dir><dir name="view"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="142c07b8ecd8dc21d5f3873e61e8a95d"/></dir></dir></dir></dir></dir></dir><dir name="eav"><dir name="attribute"><dir name="edit"><file name="js.phtml" hash="e31959cb6e8a00cf1c85bcf3e528f73f"/></dir><file name="options.phtml" hash="b264987df981b6954197362620ce5dc3"/></dir></dir><dir name="email"><dir name="order"><file name="items.phtml" hash="eb03db94a2470c2355776460c6c91c20"/></dir></dir><file name="empty.phtml" hash="3dc7e87bf6701ff9fcdcccc53e169727"/><file name="example.phtml" hash="f032afae414344e63cf7fa705fca4180"/><file name="forgotpassword.phtml" hash="dc0a40f4420b46be1d7fe0cc82726445"/><file name="formkey.phtml" hash="a30e6417a0637091743b2ea2f37ec930"/><dir name="giftmessage"><file name="form.phtml" hash="7d9bd587f973da6785f717bbe38f883b"/><file name="giftoptionsform.phtml" hash="f12ca481dcd38ec15e363f286274264b"/><file name="helper.phtml" hash="f154667a3a93a999d7da9add164f4dd0"/><file name="popup.phtml" hash="251eb1e699735cc2d31c45c7b8e0adea"/><dir name="sales"><dir name="order"><dir name="create"><file name="giftoptions.phtml" hash="637e3a1524b3c069ffbd5d57f991e06a"/><file name="items.phtml" hash="d90c7a0759f3af7359f3ab72b2768617"/></dir><dir name="view"><file name="giftoptions.phtml" hash="a2187b52ce3765afb903c50a21e4b1c5"/><file name="items.phtml" hash="801bd28178fb07882711e630a4293e63"/></dir></dir></dir></dir><dir name="googlebase"><file name="captcha.phtml" hash="5a2d12232692876f6b6ff83b8f387524"/><file name="items.phtml" hash="b8eb257be832077c733937528aa8dd82"/><dir name="types"><dir name="edit"><file name="attributes.phtml" hash="6ceb197ddbf672122d61c99890affefd"/></dir></dir></dir><dir name="importexport"><file name="busy.phtml" hash="6c3c2c211a18a63cbc3835caa986678a"/><dir name="export"><dir name="form"><file name="after.phtml" hash="66a49e8e07b5c82353d9a560a88d0d2a"/><file name="before.phtml" hash="6b816ca61ec75a928e5072ef2648815f"/></dir></dir><dir name="import"><dir name="form"><file name="after.phtml" hash="c5dc3ad22c752a9e649557d0ffe2ea1b"/><file name="before.phtml" hash="590857b2535df4d5bfb440864b475456"/></dir><dir name="frame"><file name="result.phtml" hash="3fca7b1c37fcfaf904fe9e2a598afb98"/></dir></dir></dir><dir name="index"><file name="notifications.phtml" hash="a0e8d7264ea40704b3354560a087c515"/></dir><file name="login.phtml" hash="0d6bf9910c8a4edb87327a86fd59d69e"/><dir name="media"><file name="editor.phtml" hash="b7b2537551f5c5b016a692f40f45fd88"/><file name="uploader.phtml" hash="660610bb89e9e6f7bb5ff75cb17ed28c"/></dir><dir name="newsletter"><dir name="preview"><file name="iframeswitcher.phtml" hash="aba6cae6227dfc99c6f511a374a59abb"/><file name="store.phtml" hash="75072a8e402f88498069bb573f36a933"/></dir><dir name="problem"><file name="list.phtml" hash="ef529cbab533e46993ab1909cb4f1168"/></dir><dir name="queue"><file name="edit.phtml" hash="eeadb798c387cac5c780328b2b00900d"/><file name="list.phtml" hash="1ebb0a371a6ec987e81d7125078d8f5e"/><file name="preview.phtml" hash="6e9a7e260d5dc486c256cc2eaab1b006"/></dir><dir name="subscriber"><file name="list.phtml" hash="b2532471a402bc89cb98d9d2393708c8"/></dir><dir name="template"><file name="edit.phtml" hash="98af40620bce4e0b5c0f9edabbd661f5"/><file name="list.phtml" hash="aab1851c309c3506d6a7a08e3dcfd461"/><file name="preview.phtml" hash="6e9a7e260d5dc486c256cc2eaab1b006"/></dir></dir><dir name="notification"><file name="baseurl.phtml" hash="a679fe18d56450b4a5f2c72cf5f2753d"/><file name="curl.phtml" hash="9002113007eda972b15c1ec6012156a0"/><file name="formkey.phtml" hash="97d8da671d1839efea2494ea3fe3a806"/><file name="security.phtml" hash="2f174f9a35240b3f5612acf4d98491d4"/><file name="survey.phtml" hash="4ca551f9634d2050b60258044abfcea6"/><file name="symlink.phtml" hash="2c3138d8657eee6220f81c013bca307a"/><file name="toolbar.phtml" hash="5c4f406d5e58445c8bf972e06d3134c1"/><file name="window.phtml" hash="283519725b127c908f2a95b0a2b6b5c0"/></dir><dir name="oauth"><dir name="authorize"><file name="button-simple.phtml" hash="776fda121ee85dc44175b95297b8be5e"/><file name="button.phtml" hash="bb7a5f6b66c05558c1973d0d6e2ecf45"/><file name="confirm-simple.phtml" hash="94bf4c893a04516b31f13e0ecd5dfe17"/><file name="confirm.phtml" hash="ff2a8360ecc9e7f9f494f935893c0ff9"/><dir name="form"><file name="login-simple.phtml" hash="e645c349e503b0d7003c1a4c0e9d424e"/><file name="login.phtml" hash="d92a35d7081aa0ac1a023d73b1992e28"/></dir><file name="head-simple.phtml" hash="01b75eafcca0e6acd2f9770b585e860f"/><file name="reject-simple.phtml" hash="0cb7b4f8b241c1a2ef50b8350fea58cf"/><file name="reject.phtml" hash="7572e628c21bed02ffb4dade79693f2d"/></dir></dir><file name="overlay_popup.phtml" hash="0838d1a559ff0be9681cd6c2010cb730"/><dir name="page"><file name="footer.phtml" hash="554851584e03620c55bd84bdeb57c5e8"/><file name="head.phtml" hash="16f2e49d3be8f9ee595b014a8c4dff71"/><file name="header.phtml" hash="0b553cfa08a1102b037c5c8d6dc6b04a"/><dir name="js"><file name="calendar.phtml" hash="ab7d6b444d86a7d05b802f8f3bcd2138"/><file name="translate.phtml" hash="84eddc2ae9a622e3d4d78492a2ea9e05"/></dir><file name="menu.phtml" hash="fe8d3f634251c2071cd52ffc54913009"/><file name="notices.phtml" hash="93da2ad3ab7c7bc084ee9bbd94534c68"/></dir><file name="page.phtml" hash="9433872817ce316f64e069d4b27df009"/><dir name="pagecache"><dir name="cache"><file name="additional.phtml" hash="266522fd292e7ee15a2e8f5fb9651d84"/></dir></dir><dir name="paygate"><dir name="form"><file name="cc.phtml" hash="8ce42cf9493be215833c92cc8fa0d119"/></dir><dir name="info"><file name="cc.phtml" hash="ab67f6e39a87c34269b47f652e4ab82a"/><file name="pdf.phtml" hash="e9ffdb41ec0d853698f1779db0fe2981"/></dir></dir><dir name="payment"><dir name="form"><file name="banktransfer.phtml" hash="d28cf4cc1d898f8c0154e8e4ce879020"/><file name="cashondelivery.phtml" hash="56dc9b726ca3f4991fa80548d7eaa600"/><file name="cc.phtml" hash="a1d6306531292c445e28c7dd642c06a8"/><file name="ccsave.phtml" hash="8444df68a2e48e29589a232f4cc8b2ca"/><file name="checkmo.phtml" hash="4fd637914b4e26312232bb58d36b2664"/><file name="purchaseorder.phtml" hash="354903a4a6ab78687452c047c34b7b0d"/></dir><dir name="info"><file name="banktransfer.phtml" hash="1a29469c4268caaad2c3239895c688bf"/><file name="checkmo.phtml" hash="64ffb1d1e2a22225bf4e5d23110ced2b"/><file name="default.phtml" hash="1feb712a071d1fb8a12069168fa8eb3d"/><dir name="pdf"><file name="checkmo.phtml" hash="ce61e21e189b46758bb3704fd3293329"/><file name="default.phtml" hash="1c1df7e62a8243b99ad6f44d936cc078"/><file name="purchaseorder.phtml" hash="dfe200348a5ac58db7b147bfe991547d"/></dir><file name="purchaseorder.phtml" hash="dafc010e53b36de0876b75beaab4d760"/></dir></dir><dir name="paypal"><dir name="system"><dir name="config"><file name="api_wizard.phtml" hash="51393f8e3b16fe6c899da32f855dfea9"/><file name="bml_api_wizard.phtml" hash="dd7728bf602c2689a2a2f68453d8a220"/><dir name="fieldset"><file name="global.phtml" hash="c25901174f696022acf54f0e0d031438"/><file name="hint.phtml" hash="699d26296a1957b2960ec369c664cb7b"/><file name="store.phtml" hash="17ff85b1c8fe665b4ce57220d836ee8d"/></dir><dir name="payflowlink"><file name="advanced.phtml" hash="fec372a9e5b1282f73ddb08e7ff53143"/><file name="info.phtml" hash="4d175e6c1ef420294205100babb3dca2"/></dir></dir></dir></dir><dir name="permissions"><file name="role_users_grid_js.phtml" hash="4c17fcb2aa9478a7a37fb4552f4ff9d6"/><file name="roleinfo.phtml" hash="3efe8718836bc7f0d6d8ccddbcf7fe9c"/><file name="roles.phtml" hash="71008b5b96fcf64cbb5ed7210ba490d4"/><file name="rolesedit.phtml" hash="b8eed818db9cd53692b9b1d0212600f5"/><file name="rolesusers.phtml" hash="c7b229b2a85ad3a22ec7b3658cb81992"/><file name="user_roles_grid_js.phtml" hash="7c7c7d128fbc826704d8c3deb7e25831"/><file name="userinfo.phtml" hash="71d5c55d0baebbb17a7253d54dcf261f"/><file name="usernroles.phtml" hash="bef71e724dbb7b176ade07ddd895d249"/><file name="userroles.phtml" hash="c65d101f41a14ea2f6f9c5336c339ec2"/><file name="users.phtml" hash="79609ef733b95a347cc4d7551407da35"/></dir><dir name="poll"><dir name="answers"><file name="list.phtml" hash="4d6c40e5b346c112ae80223d76dfba36"/></dir></dir><file name="popup.phtml" hash="5be29b0dc97ad85da6489ee30f6b3a90"/><dir name="promo"><file name="fieldset.phtml" hash="fa4f25be8cd47e1e4d5295c512f047f8"/><file name="form.phtml" hash="6146a162be90f0a7e1a2be651a164210"/><file name="js.phtml" hash="bb4852a9b2184b2c87aaa810d752c3bf"/><file name="salesrulejs.phtml" hash="03068d2950ce492f05b13c0008dd51bf"/></dir><dir name="rating"><file name="detailed.phtml" hash="61853f9c83da153e976fe3624fb20095"/><file name="options.phtml" hash="52350ee6bbf7cccf92dd84e13c174f76"/><dir name="stars"><file name="detailed.phtml" hash="4645b1dd948f7f363b43155892a16261"/><file name="summary.phtml" hash="88ece0a64860556ddabd6b4f9184bef2"/></dir></dir><dir name="report"><dir name="grid"><file name="container.phtml" hash="6e071b59d7a6731bc98b6b5ef4604d76"/></dir><file name="grid.phtml" hash="67c2dce387d910177837da5177fcd038"/><dir name="refresh"><file name="statistics.phtml" hash="7dded0cf028a17b3165fde06ccbd66ae"/></dir><dir name="store"><dir name="switcher"><file name="enhanced.phtml" hash="7e1eeef91b89078f4dcaeaa730680791"/></dir><file name="switcher.phtml" hash="aee0f6079d494a7369859c8d5553c526"/></dir><file name="wishlist.phtml" hash="ded79ec8ab525638d4bf3e6bd17a6ca1"/></dir><file name="resetforgottenpassword.phtml" hash="b07b20a789151ab6f67c9db9de051ee0"/><dir name="review"><file name="add.phtml" hash="26ff68721e5d0a25f7cae44f2401cf4c"/></dir><dir name="sales"><dir name="billing"><dir name="agreement"><file name="form.phtml" hash="181326925e1db25f8aeaa43b771d21e6"/><dir name="view"><file name="form.phtml" hash="c91a4929c452123c2b1dfe6df2e5fd74"/><dir name="tab"><file name="info.phtml" hash="6c8e148b5fc8fd1407122141325504ff"/></dir></dir></dir></dir><dir name="items"><dir name="column"><file name="name.phtml" hash="1642f371fe7d58777b5d05955f5e5e31"/><file name="qty.phtml" hash="45b9d6464511b05c6f2db52b9c0f5208"/></dir><dir name="renderer"><file name="default.phtml" hash="2fb6735f329fc9bb69adf2189fee4992"/></dir></dir><dir name="order"><dir name="address"><file name="form.phtml" hash="7294f3ab0f023727db823a883964c00c"/></dir><dir name="comments"><file name="view.phtml" hash="fe26683923eedcb0eb234e0d68f7a722"/></dir><dir name="create"><file name="abstract.phtml" hash="c2e218a1aac318936552095741d2b340"/><dir name="billing"><dir name="method"><file name="form.phtml" hash="805b57f301229bb30ccc33c73c221067"/></dir></dir><file name="comment.phtml" hash="fe0cddf6e65757251f3588aee2a066a0"/><dir name="coupons"><file name="form.phtml" hash="d484ce57dd690afbb108ef4825ff72e9"/></dir><file name="data.phtml" hash="e87f183fca97f9a20c2d230ba44e1ebb"/><dir name="form"><file name="account.phtml" hash="88424154c415379ec0786cf1e46be0c3"/><file name="address.phtml" hash="8c5f4d31ad0902b3c7087610ccdbbdf4"/></dir><file name="form.phtml" hash="a2e38a610776075edac5f510ae53a56d"/><file name="giftmessage.phtml" hash="0c027ad5e3d30c85dd42da2b3cf9cb83"/><dir name="items"><file name="grid.phtml" hash="88a9f94935b19b1425291d6453fc87ff"/></dir><file name="items.phtml" hash="a22a35447e4fa1f90539fd8be5462302"/><file name="js.phtml" hash="c9ca3fb7cbd178aee5518067dbb9bea9"/><dir name="newsletter"><file name="form.phtml" hash="d5e69ff1c8fad279a4c92b9bfb587b3c"/></dir><dir name="shipping"><dir name="method"><file name="form.phtml" hash="bc4a6457fbea465f5eb567cb47c68fbf"/></dir></dir><dir name="sidebar"><file name="items.phtml" hash="82e4cdb2deb65b33460627fca97818f9"/></dir><file name="sidebar.phtml" hash="12bc9eaee62aa219a006a0e3155ba252"/><dir name="store"><file name="select.phtml" hash="a4dc3b912c68fa9a8f063e5f3f7e59b9"/></dir><dir name="totals"><file name="default.phtml" hash="8b54d16c056cad822afe299a15c38aee"/><file name="grandtotal.phtml" hash="e488511ca0ec20a87d35ccca7312c7be"/><file name="shipping.phtml" hash="39ca3a2bbbce7d15bb2c512915032c8c"/><file name="subtotal.phtml" hash="49e6071343d14faea14237d85828e1ac"/><file name="tax.phtml" hash="2b11eea9c5b3790916f7c32755790e71"/></dir><file name="totals.phtml" hash="cb7a3f5366a56365e75514678d94c24a"/></dir><dir name="creditmemo"><dir name="create"><file name="form.phtml" hash="d14c63341143af1f35e46a2a15f7f75f"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="0ab90b981c1792d190a00b005f0269cb"/><file name="default.phtml" hash="3f44db0a17f06e4a8264b5190e20150d"/></dir></dir><file name="items.phtml" hash="5a4a10de7dc60fcf97be2ce73579be6a"/><dir name="totals"><file name="adjustments.phtml" hash="42f515928f2b140e6c8b5212be64c166"/></dir></dir><dir name="view"><file name="form.phtml" hash="d31bb6bc7f32e363c8e234f48d0de95c"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="694ea3093599d0ca05f1b8d944d1405f"/><file name="default.phtml" hash="1bb85088d1c945c244aa3b0ba43f6997"/></dir></dir><file name="items.phtml" hash="0410c2bf6845cb4dbb44f960f76e9dd7"/></dir></dir><file name="giftoptions.phtml" hash="16efe937436bd3f11934a0e672af6ec1"/><dir name="invoice"><dir name="create"><file name="form.phtml" hash="23d4686c5a0598f73735aa5cd1430b1b"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="a83dff183c9ca6cdac2aa1e78b353a3e"/><file name="default.phtml" hash="457f9bd82a6bdb69e9af88b7c94d2641"/></dir></dir><file name="items.phtml" hash="7c10fabdcdb698d2e76b07d9e8c3b08c"/><file name="tracking.phtml" hash="802a61b5614c6b63902efb2bda98846d"/></dir><dir name="view"><file name="form.phtml" hash="eeb741062873bff59caf03ded25dd090"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="b376b226780666ba3fe21aa95d07c2d9"/><file name="default.phtml" hash="58909f72a7442c77f4fbbc6d237ffd7f"/></dir></dir><file name="items.phtml" hash="cce32fe2de57c75e4a283e9516f73a86"/></dir></dir><dir name="shipment"><dir name="create"><file name="form.phtml" hash="3f27f077b08e1ddec2225bd6c2387a56"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="d4bc2a93cce32c8c6d4bcbfa5c8e9253"/><file name="default.phtml" hash="355de5f1e68a292e3840fc0503f65b2d"/></dir></dir><file name="items.phtml" hash="05b64834dddae3fab411f18a84b00fb7"/><file name="tracking.phtml" hash="de9479ab0247d9895cbc8fc0eacb0c08"/></dir><dir name="packaging"><file name="grid.phtml" hash="819717f8946a778ca80b38a15093dcdc"/><file name="packed.phtml" hash="52d116e66eabb5ccb75e7edd76b22cec"/><file name="popup.phtml" hash="9c14d5036542105073a6b3c83bc09085"/></dir><dir name="tracking"><file name="info.phtml" hash="affbfa1005465bf2791e0395ed11f7cf"/></dir><dir name="view"><file name="form.phtml" hash="ca332f13b670841f22951f985d1fac2a"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="af86611668fa31c7a26ab10a854c8d99"/><file name="default.phtml" hash="c633a0dbe2592d3c22c9389b63a6075b"/></dir></dir><file name="items.phtml" hash="997d36e5884aebc67041cf7557205cf1"/><file name="tracking.phtml" hash="560ba2666c613daf3838e91d0c16da30"/></dir></dir><file name="totalbar.phtml" hash="2694bf45cd70e37b61a3ed26c65fdeaf"/><dir name="totals"><file name="discount.phtml" hash="7e46a74df3fdd14ce1603929bba8c36f"/><file name="due.phtml" hash="225f5adf66ade026a034ab88f64e82de"/><file name="footer.phtml" hash="b9b5f8c685609424d84ac03f5f36204d"/><file name="grand.phtml" hash="71dc9b4c7d63cc53295bc4d4a7963b81"/><file name="item.phtml" hash="5fc6e237c23cb0c07f9de72a0ef86c40"/><file name="main.phtml" hash="aa3a2b328c0ed56ec3033f0a03b0192b"/><file name="paid.phtml" hash="4a72f03f1eba9a1bea5c60ae5f483e39"/><file name="refunded.phtml" hash="d0d77ad1a22b80020b92723b9af76e30"/><file name="shipping.phtml" hash="3b744dbc10dbee085cd8f72db5ee6d84"/><file name="subtotal.phtml" hash="20498513f158db7085c9680637ec2b5a"/><file name="tax.phtml" hash="d0f5fa11ef701470a2d94aab50b060c8"/></dir><file name="totals.phtml" hash="f42766bcf04dc87047b8973b38999ef9"/><dir name="view"><file name="form.phtml" hash="b500333c1f094d736587aa7508632a16"/><file name="giftmessage.phtml" hash="ed1412500ee4218acea60434aaee9e2c"/><file name="history.phtml" hash="cef334a31165535d7aa6f4c7612930f0"/><file name="info.phtml" hash="6f7d6499734fe2ce6da4b9bded1e4534"/><dir name="items"><dir name="renderer"><file name="default.phtml" hash="82c8db12bb3bd2cd5019997f0a4eaed6"/></dir></dir><file name="items.phtml" hash="6ac2eacfbb3c8fa8123718e6f18affc2"/><dir name="tab"><file name="history.phtml" hash="40fb94d3e2a52ee1f01ff8da88523403"/><file name="info.phtml" hash="a4b0c91c76dff628892dafaf8727f39d"/></dir><file name="tracking.phtml" hash="f690451a0385289b9dcf74fd97502eb3"/></dir></dir><dir name="payment"><dir name="form"><dir name="billing"><file name="agreement.phtml" hash="818ea7819d66425c931791b9ee4aebbf"/></dir></dir></dir><dir name="recurring"><dir name="profile"><dir name="view"><file name="info.phtml" hash="9934cb555f40a72b9e5fb8bcc611e5ce"/></dir><file name="view.phtml" hash="119fb775ce3aaca04b195f52cb1061b1"/></dir></dir><dir name="transactions"><file name="detail.phtml" hash="52f5a5139596a03f7e3ebad2ebd91713"/></dir></dir><dir name="store"><dir name="switcher"><file name="enhanced.phtml" hash="f3bb6b4a2415830e1664a7e0bf7ca3a9"/><dir name="form"><dir name="renderer"><dir name="fieldset"><file name="element.phtml" hash="edb01080b194a3f6917dfcf8b3af1d4d"/></dir><file name="fieldset.phtml" hash="38b6d7731d90be9573a8e7ecd3e51c58"/></dir></dir></dir><file name="switcher.phtml" hash="1e710220e6d32f8da5be97ed2e6a654d"/></dir><dir name="system"><file name="autocomplete.phtml" hash="fc64a24a3fc2bf68dc738aec164c43fc"/><dir name="cache"><file name="additional.phtml" hash="24a29989cc8fc8d6a3157f69eed80d18"/><file name="edit.phtml" hash="d28ecf99674cc028dbf8e9eb4632d7a9"/><file name="notifications.phtml" hash="f43a4ee0c00c56b858d953d57b63c2fe"/></dir><dir name="config"><file name="edit.phtml" hash="26b2d69c2b7fbae4f98b01f028c1665c"/><dir name="form"><dir name="field"><file name="array.phtml" hash="bca28dc0a785b51bc6db391c8adc81f2"/></dir></dir><file name="js.phtml" hash="131d0744f376d30f7b65d5a611c935d2"/><file name="switcher.phtml" hash="b59b5b63e3927e468efd5ddac86dd7f8"/><dir name="system"><dir name="storage"><dir name="media"><file name="synchronize.phtml" hash="9b02c612c64074fccc947d6475c3ae10"/></dir></dir></dir><file name="tabs.phtml" hash="d9323db68f7e8f7997fa9dd5f14f0285"/></dir><dir name="convert"><dir name="profile"><file name="process.phtml" hash="7b26cbe522663de0c91edb59b5063377"/><file name="run.phtml" hash="ce173c4c2424412a7391ba11eb910e30"/><file name="upload.phtml" hash="58b059d9b65e88164cf118f4443e157f"/><file name="wizard.phtml" hash="b02d17e3ddb724b7e666127fe59b71fd"/></dir></dir><dir name="currency"><dir name="rate"><file name="matrix.phtml" hash="7213f259f7e2c703ee36214edca76f4b"/><file name="services.phtml" hash="529e6a2348ff59dc323b65435d399213"/></dir><file name="rates.phtml" hash="9b0362418c5e4d0ca9982883293500d0"/></dir><dir name="design"><file name="edit.phtml" hash="fd39451fd13f43f097427998105806a4"/><file name="index.phtml" hash="2d4559b612d2ab7d5d8840a6f67a2fc3"/></dir><dir name="email"><dir name="template"><file name="edit.phtml" hash="a07d8c3ae6cef4a0eed7fff766d2ca58"/><file name="list.phtml" hash="4146cbc4274bb22fdaceca25f2843051"/><file name="preview.phtml" hash="43b505dc9285dc041e914002fdda0a2e"/></dir></dir><file name="info.phtml" hash="f837e1b97454aecda4afb8b84af733e5"/><dir name="shipping"><file name="applicable_country.phtml" hash="70af25fda1ba1fc8467482da3002a200"/><file name="ups.phtml" hash="3b092c978b6b1b8da7577083635465ab"/></dir><dir name="store"><file name="cell.phtml" hash="667d7bc3f0891603f2ab8457a433ebfd"/><file name="container.phtml" hash="4b85761a428cf997e311a29c82a4a758"/><file name="tree.phtml" hash="58b6af797a21730fbef54d9936647085"/></dir><dir name="variable"><file name="js.phtml" hash="b8c43ef479f9a9ea36698a6dffdd3be5"/></dir></dir><dir name="tag"><dir name="edit"><file name="container.phtml" hash="511e6ebb2515f671aedf5450cb228228"/></dir><file name="index.phtml" hash="113da2d70889b8d591cf0e3e93086430"/></dir><dir name="tax"><dir name="class"><dir name="page"><file name="edit.phtml" hash="f7c79bf6ece6fba32da9fd729c612406"/></dir></dir><file name="importExport.phtml" hash="0e7b5145d66dc0c1f30f9d2f307523ee"/><file name="notifications.phtml" hash="e146f2b09ae8e2dbb8e444937af27640"/><dir name="rate"><file name="form.phtml" hash="ffdaa3a88647bb78d5af4c069efe8fad"/><file name="title.phtml" hash="c95cab61efb504ec0e57749e63dc90fe"/></dir><dir name="toolbar"><dir name="class"><file name="add.phtml" hash="98b2cbc14ee1b54f95e3dc6220094cc3"/><file name="save.phtml" hash="016dca9f5b983ad455dbee82a8f1a94a"/></dir><dir name="rate"><file name="add.phtml" hash="6e08770611b78d0981603e64a48d6a24"/><file name="save.phtml" hash="92b0b9e348c5a7cc4bb3f73b47dfc382"/></dir><dir name="rule"><file name="add.phtml" hash="a82e479ebbc764b8753cebafc3d94d76"/><file name="save.phtml" hash="2df9243d3ff7fbceed5a219d47dd6c59"/></dir></dir></dir><dir name="urlrewrite"><file name="categories.phtml" hash="0b9ad7cc814295877a499c265f6b28a0"/><file name="edit.phtml" hash="bddd73ea946213da74aeb976bcefd719"/><file name="selector.phtml" hash="9b0023699df9e39b205a8e44e3957a28"/></dir><dir name="usa"><dir name="dhl"><file name="unitofmeasure.phtml" hash="53f060afc8c07b1e41744d15c7987fa2"/></dir></dir><dir name="weee"><dir name="renderer"><file name="tax.phtml" hash="e7a32618be62ee2502fb03df3671ef17"/></dir></dir><dir name="widget"><file name="accordion.phtml" hash="62fc94398b8799e04ec06bad595cbebf"/><file name="breadcrumbs.phtml" hash="d07a08ba66f6b9c54c32bebb33d5a7f1"/><dir name="form"><file name="container.phtml" hash="4728b83c25edf04952078d3113b776a7"/><dir name="element"><file name="gallery.phtml" hash="c6a7f19c77d2c219d4f8a63cb0e6ecb2"/></dir><file name="element.phtml" hash="26bf4a29bc07852e142c74c7cbb5f787"/><dir name="renderer"><file name="element.phtml" hash="2b99f440e7777996b2e0b79d7254f5ff"/><dir name="fieldset"><file name="element.phtml" hash="99f61048f6fc113d365a0c5ed65a31ac"/></dir><file name="fieldset.phtml" hash="23a1eb7ed586b185b408d4bbcd3e94e2"/></dir></dir><file name="form.phtml" hash="499596a8e7a8c65e5ff631d903c772c7"/><dir name="grid"><file name="container.phtml" hash="4b85761a428cf997e311a29c82a4a758"/><file name="massaction.phtml" hash="1238689acae994fccefd28b268ea4240"/><file name="serializer.phtml" hash="b41a09764ae7bca5cd667cef1a53ae96"/></dir><file name="grid.phtml" hash="bbef7840300e68f547780f141eedacef"/><dir name="instance"><dir name="edit"><file name="layout.phtml" hash="962c5510fa3ddf1109764fa0dad116f1"/></dir><file name="js.phtml" hash="a0a8117a3bfaf775007e8c0a9a60a806"/></dir><file name="tabs.phtml" hash="5ce995fc612fee633ee96509a023c16e"/><file name="tabshoriz.phtml" hash="31ca469aad10ad489ee718b5b43c8940"/><file name="tabsleft.phtml" hash="05b54cfa72ea6391410eebc3a12fca65"/><dir name="view"><file name="container.phtml" hash="ca39d17b346fcaadfdadcb25460cdf48"/></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><file name="below_ie7.css" hash="0e001acdf373859110b3402e724c59cd"/><file name="boxes.css" hash="7c050f817f0472a797f583ab121645c2"/><file name="custom.css" hash="b1ab65e10053f39b57ab8064cfd60d8a"/><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><file name="ie7.css" hash="c2e775278e92e710be80715c31024c2c"/><file name="iestyles.css" hash="328c87560bcfe0261a039c65ce0454dd"/><dir name="images"><file name="accordion_close.gif" hash="875409122fc82f5f6705e20dd801fd3d"/><file name="accordion_close.png" hash="6213698b5f69bb2907a5c7bb94b5fe8d"/><file name="accordion_open.gif" hash="d9d50e220b0b676094c6134a9708194e"/><file name="accordion_open.png" hash="9fbc3aba23ce5e0465e4d1cf3f6a7aee"/><file name="add_btn_icon-disabled.gif" hash="c8f6a5cfb455ef121efb56a747821f82"/><file name="add_btn_icon.gif" hash="7300097305b577ee564dc49102822d16"/><file name="address_list_li.gif" hash="79b917b514e35ce0a7833a5e268fd9f7"/><file name="address_list_on_arrow.gif" hash="3a2884ddcc87ebd48883662530b9de1b"/><file name="address_list_over_arrow.gif" hash="e826883c71b1184bd4f29433e39c18ad"/><file name="address_list_over_bg.gif" hash="56291480cc89de9d817205a5f23b66dd"/><file name="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><file name="ajax-loader.gif" hash="e2a38f1e23288e315af3c55416bc1ce7"/><file name="application_view_tile.gif" hash="f595a133bf466cb91be23d9686fe6281"/><file name="arrow_sort_move.gif" hash="f5ac151a2b0cb1f07d6e771b8aee0ea7"/><file name="bg_collapse.gif" hash="2333c68e38163ed4656da82b9bcf362b"/><file name="bg_create_order_totals.gif" hash="ff6ab75c050b959c539cc6a6fdff2934"/><file name="bg_notifications.gif" hash="a365594725a83585d989f722b3d8c458"/><file name="bg_window_mask.png" hash="93d6efad062d24c94c105802b138b6a5"/><file name="bkg_btn-close.gif" hash="df3f2332f0bad01e031deb22b81f630c"/><file name="bkg_btn-close2.gif" hash="822457d78fb3c21dc12e9777d83eb4f1"/><file name="bkg_config-advanced.png" hash="b898594a9f1849bf386c06979ef613a8"/><file name="bkg_config-nested.png" hash="7b0fdbf98746c3c916b432c37321ccc4"/><file name="bkg_config-shaddow.png" hash="9ee4318e3f4afc446d26e7f66d01cfbd"/><file name="bkg_tooltip.png" hash="56cfed3ed8a65b19f8de88946d1a0a01"/><file name="blank.gif" hash="5722d7bd0f1e1379d0a2005a0a9ea401"/><file name="box_bg.gif" hash="4c501bd6db9d361c18780f106a809b03"/><file name="breadcrumb_bg.gif" hash="72c4adf6c75b4640ca8f7cadffa42266"/><file name="btn_add-image_icon.gif" hash="1d42210fd29fc534d9ed6b41e811d40f"/><file name="btn_add-variable_icon.gif" hash="a2db02e318d107d5b57b444c8d80b8f8"/><file name="btn_add-widget_icon.gif" hash="b4f66ca7f6097fbafd672e0b3f076ef4"/><file name="btn_add-widget_icon2.gif" hash="467acd3a14fb8be37191f5d2ec5a5b13"/><file name="btn_back_bg.gif" hash="8be512788b8044fe31aa8d00cc16ba7b"/><file name="btn_bare_bg.gif" hash="ddbbab8c0d201c3e502d50e7d4a3d64b"/><file name="btn_bg-disabled.gif" hash="079971a9d2c385fe353d35716ec9f26b"/><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="btn_bg.png" hash="6e3b7003381f919e8f6533444afaa978"/><file name="btn_cancel_bg.gif" hash="fcb3506858fcfa8d1778b0683dc89f54"/><file name="btn_delete_bg.gif" hash="ad740d0c16f2f6603c8ef023004d6539"/><file name="btn_go.gif" hash="1bd787868713767cc205e2ee25e41f62"/><file name="btn_gr_bg.gif" hash="6cc324b79a512150fee24fb3517d22cb"/><file name="btn_gr_on.gif" hash="820c134df02f7bc12efa5a9ac3b4d3dd"/><file name="btn_gr_over.gif" hash="d4c8b807d64c1f493d17c6c9d2bab69a"/><file name="btn_loading-icon.gif" hash="45f500105be432a12c78fed2b4592cf9"/><file name="btn_login.gif" hash="79fa32d49d3f4e39d3fbf8327f9229e1"/><file name="btn_on_bg.gif" hash="709cf5b0be137db1ef8427688503bf37"/><file name="btn_over_bg.gif" hash="f91641168454c03d1fa72731ec97a2b3"/><file name="btn_show-hide_icon.gif" hash="0238c509b33ba56c25df9513bb48f804"/><file name="btn_task_bg.gif" hash="5e0594bd9cbfcc1e32ffa918d7f9c812"/><file name="button-close.png" hash="04d0907b2d7fc3240693497b199f64f5"/><file name="cancel_btn_active_bg.gif" hash="91ce403d286eef2b4e0c13733875882f"/><file name="cancel_btn_bg.gif" hash="26749cf4949ac27c30f597434d3bde65"/><file name="cancel_btn_icon.gif" hash="97e0cd94ed31d6f2a1181f627e60e9a3"/><file name="cancel_btn_over_bg.gif" hash="45eb4e883b17375961672f5390387c31"/><file name="cancel_icon.gif" hash="70a23b78353f0a7b9b118a937fcb7ea9"/><file name="config_tab_dt_bg.gif" hash="a33f71077ca4078caa794cae01d9fca7"/><file name="dashboard-close.gif" hash="5ae5afd61e937fcd2d5b84641255ee4d"/><file name="db-graph-bg.gif" hash="5d76efb7c3244f5684df2566782124ea"/><file name="db-graph-bottom-bg.gif" hash="b58ced87a38a10891106329ae882aa1c"/><file name="db-graph-line-bg.gif" hash="f16bb08e040c2c0a3e23b3f35c54b79b"/><file name="db-graph-line2-bg.gif" hash="744ebfdba20d050f4d252afc216394be"/><file name="db-graph-x-bg.png" hash="d5c26510718a78d22083916d80ef7a22"/><file name="db-header-bg.png" hash="3976cb6351e167686a501a85cf3a68e9"/><file name="db-menu-bg-hov.gif" hash="34ea76a6d105d90fcb63bf105aadb8f7"/><file name="db-menu-bg-up.gif" hash="b0f754872dff5f2f0dc57ba193fdfa4c"/><file name="db-menu-bg.gif" hash="ea534c3c09bb309e566b6ae876655e13"/><file name="db-menu-sep-last.gif" hash="a01fe34854e1187e466fd58d462c4106"/><file name="db-menu-sep.gif" hash="7c5ae1cd59a189261cc3244358d5c1ad"/><file name="db-menu-start.gif" hash="aa5cac2194d937cc7fa904ccfce70ecc"/><file name="db-scroll-bg.gif" hash="06d2411e3b5f350ab21b625439d2d69d"/><file name="db-scroll-but-bot-roll.png" hash="6bc5e482f3f6d8fb1fc5014ddea43706"/><file name="db-scroll-but-bot.png" hash="25c0181e76ff8ceb3c0ec59071b8c72c"/><file name="db-scroll-but-top-roll.png" hash="b7961f2a3b5b641694a9b0b30d58e46b"/><file name="db-scroll-but-top.png" hash="de7df96e961596be9ff556924259b98b"/><file name="db-scroll-roller.png" hash="e01dde7bd096c52179acf29a425a29e5"/><file name="db-tab-bottom-left-bg.gif" hash="124388d44ac58b029377c6311a4782d5"/><file name="db-tab-bottom-mid-bg.gif" hash="9c48f33aa8907cfcb227bc779c2e1dce"/><file name="db-tab-bottom-right-bg.gif" hash="1db45e6fd8abc67d59f96a676607b412"/><file name="db-tab-footer.gif" hash="cac8928acba75bc1edd73186ced78e5c"/><file name="db-tab-header-sep.gif" hash="580312af7441b6a62f7e32081c40fb0f"/><file name="db-tab-header.gif" hash="fdf493b9477fcff7e7be98405effc33d"/><file name="db-tab-left.gif" hash="3fe3c55267dbbdd1db2ff959ccc9e0be"/><file name="db-tab-right.gif" hash="b7a32c8b03efe2fbdb63215d0446e3be"/><file name="dotted_divider_dark.gif" hash="8bf1de196d9ea048bfb25155cedd2e9e"/><file name="dotted_divider_light.gif" hash="92e562bf2070110f6b0a15e29b845445"/><file name="edit_icon.gif" hash="dbda31751c78d964c04394e9d8533187"/><file name="entry_edit_head_arrow_down.gif" hash="985c3ce4439fbf8bb2216fc7e73a3f0b"/><file name="entry_edit_head_arrow_down2.gif" hash="d68dd0fbc2819858a26ea2835c05df77"/><file name="entry_edit_head_arrow_up.gif" hash="d2b90a1823fff9f3917f19b427410144"/><file name="entry_edit_head_bg.gif" hash="1086b7196e8b33c4f46e49fecef0f35f"/><file name="error-msg.png" hash="3cd27b642416dacdc28907c89d934886"/><file name="error_msg_icon.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="fam_account.gif" hash="c910fd1ff41b940d71b0835e02fc143e"/><file name="fam_application_form_delete.png" hash="972c2d998fc19572dd64af6b5e2e898e"/><file name="fam_application_view_tile.gif" hash="f595a133bf466cb91be23d9686fe6281"/><file name="fam_asterisk_orange.gif" hash="908d44da90de5e54185764d093bbdb77"/><file name="fam_bin.gif" hash="2fb388bc9f1d32d3802db8e91dc238bc"/><file name="fam_book_open.png" hash="0ba89b9fbe7e88d4c6896ed0a1f495aa"/><file name="fam_bullet_disk.gif" hash="9fe82691d960c18d3d315c3f9164af4f"/><file name="fam_bullet_error.gif" hash="008802f44288b732b59cfe9fdbfecefe"/><file name="fam_bullet_success.gif" hash="465a056a3ba3d94367f51c3c0b751391"/><file name="fam_calendar.gif" hash="0614207ce4e3e0a9bd631b39e7692e3c"/><file name="fam_cart.gif" hash="1f2fd2c8ac6574488ea78302b6856191"/><file name="fam_comment.gif" hash="5138f9a4b6019a5b14b8ff9a32a3cb89"/><file name="fam_creditcards.gif" hash="b75b8ce2f4fceb58f8082c48344560c7"/><file name="fam_folder_database.gif" hash="e86175ff0f389ade1fc7bf15e03346eb"/><file name="fam_folder_palette.gif" hash="c0941b9145e06d53cc0d17ac4c151764"/><file name="fam_folder_table.gif" hash="e2914ba75944acd2a9e2d338fa339e16"/><file name="fam_group.gif" hash="52d778dddbf48b8d04226bee9370a7ef"/><file name="fam_help.gif" hash="2b5ed4c13a8e24456207b757826c7b2c"/><file name="fam_house.gif" hash="8eb2d580c5a40b7974f4263ca64fb94a"/><file name="fam_layout.gif" hash="5366a5f02260d3a860ef0c4787282ad6"/><file name="fam_leaf.png" hash="078d4f24683331b4557356a59e67b125"/><file name="fam_link.gif" hash="78590d5d8375d1baabe7b66d7b9ceb7d"/><file name="fam_lorry.gif" hash="174e86e45e76e7008fa3510cefa85047"/><file name="fam_money.gif" hash="6996bad465222fb6487cab94b4607846"/><file name="fam_money_add.gif" hash="70ceed401fe9913305f2362f7e26225d"/><file name="fam_monitor.gif" hash="f3bc806ff9d0907320b03018ba2d00ea"/><file name="fam_newspaper.gif" hash="9e5fee06a543742045118a95f2debcb8"/><file name="fam_newspaper_delete.gif" hash="41acabfc19102be92d3ccbc66d1fede3"/><file name="fam_newspaper_error.gif" hash="009bfa425298e1d2e44e38e58cd97938"/><file name="fam_newspaper_go.gif" hash="eb43105f8e13e3a752d7ca33bb086831"/><file name="fam_package.gif" hash="bf9be09ef64d006455baa211b7c03983"/><file name="fam_package_go.gif" hash="e4f8d380c2f8e5a7345e360293433764"/><file name="fam_page_white.gif" hash="26940eb67826c5af72b6048c7c5a8335"/><file name="fam_page_white_edit.gif" hash="a4f88300b74ad592a5c47ed54ff07af9"/><file name="fam_rainbow.gif" hash="e8b04cc945b3582a181d4ddbc2d2325f"/><file name="fam_refresh.gif" hash="01bbef614023c0890812e76bc7ecf7e0"/><file name="fam_server_database.gif" hash="7901fa06ffd68ed730cf43bb560756fd"/><file name="fam_status_online.gif" hash="a80019ffa3a573f709772ed1099343fc"/><file name="fam_tag_orange.gif" hash="6ce735a0e590bda040b6e1614c42e58a"/><file name="fam_user.gif" hash="63bbdd6d9d7a27591907a7b87898e259"/><file name="fam_user_comment.gif" hash="014dfd31d9af40e3d5960b2b0d900da3"/><file name="fam_user_edit.gif" hash="f5b36e803060c6b82e639a4fad57b9f7"/><file name="filter_row_bg.gif" hash="013a0929a7b2ddc6823bdda17d08acc0"/><file name="footer_bg.gif" hash="7724711d3ca07a5e46a6030e86743a71"/><file name="gift-message-collapse.gif" hash="5b710f5faa9c7352a39c10e3ebbee6fc"/><file name="gift-message-expand.gif" hash="fd53a70cbb1ea048754657a63787e9cb"/><file name="gift-message-grid-column-bg.gif" hash="97a8a9b8cc4ab68e7404ccf1320f50a6"/><file name="grid-cal.gif" hash="b1468e5239504974c689eea5d93f86d4"/><file name="grid_sort_asc.gif" hash="b78c3a1a27ac9672a31b7d1bbac60322"/><file name="grid_sort_desc.gif" hash="d958b946eba3dba863d724530a0dba1a"/><file name="grid_th_bg.gif" hash="8f4349fac728858374e17edf03390977"/><file name="grid_th_onclick_bg.gif" hash="7bf331e2a41e5331c4210bdc6adc4383"/><file name="grouped_to_order_icon.png" hash="4bdae9a6199655027b8b8aeee8f80ce4"/><file name="header_bg.gif" hash="cbe510856afa5cb0c32642c1f9a8eceb"/><file name="header_top_bg.gif" hash="8440b04c5cb6b1451bb886bfbef260a5"/><file name="horiz_tabs_ul_bg.gif" hash="58dbd9c45f76993346c2bb788896248e"/><file name="i_notice.gif" hash="ebd56dc80b8346e10e93628bc0e6c372"/><file name="i_question-mark.png" hash="23201b7ac207eebd9be0776ea44098a4"/><file name="ico_success.gif" hash="0afb20898a704a106cb4c598868abf32"/><file name="icon-enabled.png" hash="5fa7c06b312cbea3675e844686e434af"/><file name="icon-tooltip.png" hash="5767601cd66b23d0b6fe8defc10dd48d"/><file name="icon_btn_add.gif" hash="7300097305b577ee564dc49102822d16"/><file name="icon_btn_back.gif" hash="89ed97cede3f68241446a62c96e3ce4c"/><file name="icon_btn_delete.gif" hash="dbde0b76d36cfd624bf0de166d0a265e"/><file name="icon_btn_save.gif" hash="f5da95ac65efff5f5cf9c8830202764d"/><file name="icon_edit_address.gif" hash="d1ca2bb3a5c86afd379f25d9fc4352e3"/><file name="icon_export.gif" hash="9a13f20c6a17b41b9c357545c2da5636"/><file name="icon_export.png" hash="fb299dd13df666516eabe16f59193383"/><file name="icon_feed.gif" hash="0366583ed6e285d028442fcdebb05072"/><file name="icon_feed.png" hash="8537f6f88fcff4aac793247143d14e42"/><file name="icon_note_list.gif" hash="8d25ba225ca09b687a78bff510df5d10"/><file name="icon_remove_address.gif" hash="2de2b3d02c19adfb93e9e43a392db178"/><file name="login_box_bg.gif" hash="e4654826eaa8d5ebc0ab18e9bee71e1d"/><file name="login_box_bg.jpg" hash="404e37f4ee9f4ff9bfcb638741c7581d"/><file name="login_box_bg_auth.jpg" hash="d90a81db1064ec37b0cc92436725c24b"/><file name="login_box_bottom.jpg" hash="038f15261e74bc381484f2fcfa45a73b"/><file name="login_box_legal_bg.gif" hash="528ac4dd480c4fc00ac808bf17394c05"/><file name="login_logo.gif" hash="a15f85d59684e1ec548b758fb6165469"/><file name="logo-large.gif" hash="b938979c790d4aba4170054fc4a060be"/><file name="logo.gif" hash="c7e9f290d965f707e4c4a61bfdab58cb"/><file name="logo_email.gif" hash="b5c6c6f40ba031f613d0f2aaa7f3c087"/><file name="logo_print.gif" hash="b5c6c6f40ba031f613d0f2aaa7f3c087"/><file name="massaction_bg.gif" hash="8b5f4db3ab3ea09cd5bd0164d67c4f0d"/><file name="massaction_button_bg.gif" hash="4c8262817e48d007237124ce0e7f4d18"/><file name="massaction_links_delimiter.gif" hash="9a0337183b5b67c0eed75993d7f14d10"/><file name="middle_bg.gif" hash="ba4f176d2c553201ebab4aba5c6d3d20"/><file name="more_arrow.gif" hash="38bb4c0e9270250151486d0bb36c476f"/><file name="nav1_active.gif" hash="a7f9ec7689a65c6b796f0d9b97582d01"/><file name="nav1_bg.gif" hash="a1d4ef5b590ce0a425dc04e45ed06cbe"/><file name="nav1_off.gif" hash="5286cbd5ac9ec1b6c027d5b48a74bdab"/><file name="nav1_on.gif" hash="a7f9ec7689a65c6b796f0d9b97582d01"/><file name="nav1_over.gif" hash="2c70d6175f1c965c27dda0598a67e63c"/><file name="nav1_sep.gif" hash="5286cbd5ac9ec1b6c027d5b48a74bdab"/><file name="nav2_last_li_bg.png" hash="279935c9799679fc5894337eaabc7cf0"/><file name="nav2_last_li_over_bg.png" hash="39536f00824293d11242888a76f40a5f"/><file name="nav2_li_bg.gif" hash="0a4f34b0e4436c519d31203f19503b83"/><file name="nav2_li_bg.png" hash="2fad219d162324e9a19f2745d5b6d562"/><file name="nav2_li_over_bg.png" hash="dc37c4a4aab40ea2ae44dea5ea133a9d"/><file name="nav2_link_bg.gif" hash="dce00ddad351e72e83bc87274cbaa54a"/><file name="nav2_parent_arrow.gif" hash="60e012a14a077bd2257343facc369c0c"/><file name="nav3_bg.png" hash="2bc7af80ad8886013da38401b63ab6df"/><file name="nav_bg.gif" hash="1b857c7d35f35ef9f6cae9e03a4e3dff"/><file name="nav_list_bg.gif" hash="7a4e2bdb887c12d8a1152bbcc8c02a3c"/><file name="nav_nest_link_bg.gif" hash="1d0c6b374bf02ac4b5aa012955c431de"/><file name="nav_nest_link_over_bg.gif" hash="fae3c579a4d432503b1f4f929d070609"/><file name="nav_on_bg.gif" hash="ac624b580cae5a76f6c92abc5a44191d"/><file name="nav_parent_arrow.gif" hash="3a95559263e569dc1c8065cb2d9b3f2c"/><file name="note_bg.gif" hash="105967d7c15ab4610726eea52d862a97"/><file name="note_cell_bg.gif" hash="71e656d42f8ba8c2d477c6866c499b71"/><file name="note_msg_icon.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="notice-msg.png" hash="9cd1dfebccec8a2123d543fa49b17bd7"/><file name="pager_arrow_left.gif" hash="6e44f608dac8eb8be1d1ebee5a3285aa"/><file name="pager_arrow_left_off.gif" hash="30f5e56195ab3546b36f4016db5254be"/><file name="pager_arrow_right.gif" hash="cc79526156b7e0c8abce61fad3d53f77"/><file name="pager_arrow_right_off.gif" hash="f01b7dad9acf0180b5c62edbd7ea9939"/><dir name="paypal"><file name="logo-paypal.png" hash="d032551b47e48dced277c4fa344ac7f6"/><file name="pp-allinone.png" hash="c457fe4bfe28a18c90d0abd36fe3f880"/><file name="pp-alt.png" hash="37a166931ca15c465bd86311d15e0422"/><file name="pp-gateways.png" hash="90acb72c2f46fa131351efe0492d52cf"/><file name="pp-uk.png" hash="e0830ccb14533051b8b0340471744228"/></dir><file name="paypal_logo.gif" hash="871e205a64292121f4c893373acfb581"/><file name="paypal_section.png" hash="d032551b47e48dced277c4fa344ac7f6"/><file name="paypal_tick.gif" hash="e8685c1fb7c4c106ae4fd24e9bbf5a27"/><dir name="placeholder"><file name="thumbnail.jpg" hash="5c73b5aa515b1719f7b398f5131f91a8"/></dir><file name="process_spinner.gif" hash="345b30b4d0b6088d0151ecfbdf48c036"/><file name="product_rating_blank_star.gif" hash="5e20a299c0ff16168be38b6dde580eda"/><file name="product_rating_full_star.gif" hash="dd5aae332178d928a7f49dea7691b5f6"/><file name="reload.png" hash="84cc4883f78ef850814ea9b53989b2a7"/><file name="rule-ajax-loader.gif" hash="32dc1f5901143d36fbd7a6df3950819f"/><file name="rule_chooser_trigger.gif" hash="9c498e789c3ce734f5301c2475e2a04c"/><file name="rule_component_add.gif" hash="7914e57701ca26f5c8bf23c6bc3e1f25"/><file name="rule_component_apply.gif" hash="3f9b9025551da6963a9ecf8d184a204a"/><file name="rule_component_remove.gif" hash="4d785bcecfbe716fa4d749d20738a8f0"/><file name="save_btn_icon.gif" hash="f5da95ac65efff5f5cf9c8830202764d"/><file name="sec_nav_bg.gif" hash="99c6741591cdb2a2a128668a1d32d668"/><file name="section_menu_bg.gif" hash="f9edd44c92743a0c9ae9535a7992d6b1"/><file name="section_menu_bottom.gif" hash="167d2ef46ff80158c807b4b916501b28"/><file name="section_menu_link_bg.gif" hash="bcabd4fea0d67b181f21779564c2284b"/><file name="section_menu_link_over_bg.gif" hash="7da7e56567633aab279cf3aec6f49d8d"/><file name="section_menu_over_span_bg.gif" hash="f5ea5292f15ed62b99f0f51d9fff2c66"/><file name="section_menu_span_bg.gif" hash="dbf3916358e794ee809b4cf33903af2c"/><file name="section_menu_ul_bg.gif" hash="3aea6e5452f548438ca34e17954a9d6b"/><file name="side_col_bg.gif" hash="b3691fd62663457af39eaf71dd8cda5a"/><file name="simple_container_bg.gif" hash="56f1ac91169eb4896b8c91384fc8bf15"/><file name="sort-arrow-down.gif" hash="fc2cd9f756ce510c4470478d720f81cd"/><file name="sort-arrow-down.png" hash="dc65160d9d4d6cdd6bfe1b397a931975"/><file name="sort-arrow-up.gif" hash="39026b0ff1f0c18091caa60384491163"/><file name="sort-arrow-up.png" hash="da54e5306bdce67551aa415f5d7f7ea7"/><file name="sort_heading_bg.gif" hash="6066d09f237f556b0a4770e4788e7598"/><file name="sort_on_bg.gif" hash="0cb36788ed4fbf19e657acbc75a3f1b8"/><file name="sort_row_bg.gif" hash="f2e1c5cb26b9f5211419b99d30745244"/><file name="spacer.gif" hash="df3e567d6f16d040326c7a0ea29a4f41"/><file name="sub_button_bg.gif" hash="e3f66dd60510f9f7e937e2e55442c30a"/><file name="success-msg.png" hash="c64cb2acc3d0eeba48fdea83620913ed"/><file name="success_msg_icon.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="tabs_link_bg.gif" hash="34447929f5e6591ba9b5795b983fdfd4"/><file name="tabs_link_over_bg.gif" hash="2cf3f56884096055fb0bdf9474f280c9"/><file name="tabs_span_bg.gif" hash="bcabd4fea0d67b181f21779564c2284b"/><file name="tag_blue_edit.gif" hash="b2163ac3baf7d822b48593342846645a"/><file name="tn_cancel_bg.gif" hash="fcb3506858fcfa8d1778b0683dc89f54"/><file name="tooltip_bg.gif" hash="0aa4b866fc067a75f27ab749c1dabf74"/><file name="tooltip_corner.gif" hash="71146534671d5e0751505640b7c59859"/><file name="tooltip_top.gif" hash="032ff52a6ff5714cbdf6c1f62abaf7e5"/><dir name="tree_icons"><file name="join.gif" hash="4d5d614e0da056df815a4306d6368692"/><file name="joinbottom.gif" hash="4b3daa7f2cc584f1aac0d142275d7cba"/><file name="line.gif" hash="63ab38a6203262f15ca46c631232ea2c"/><file name="minus.gif" hash="d647fbbd0ec410b8f3bb3357b62eedcf"/><file name="minusbottom.gif" hash="b09d684cca7135ef728141aaf2464baa"/><file name="nolines_minus.gif" hash="eb2243a354ffcfac93ba0fe948f7167d"/><file name="nolines_plus.gif" hash="ec92b634b63608fb4b0dbf114e3b89e1"/></dir><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/><file name="varien_logo.gif" hash="6f10d0fe572cb012947c164217e9e428"/><file name="warning_msg_icon.gif" hash="4cf6ec7f59ab09f9c18b3a4301714c6d"/><dir name="widget"><file name="catalog__category_widget_link.gif" hash="8435943009f1f774bbd6a4809c719eb8"/><file name="catalog__product_widget_link.gif" hash="62f2d7020143f98ba7514469eb612a7f"/><file name="catalog__product_widget_new.gif" hash="37a5af9f98ae73e180ad0cca05c95324"/><file name="cms__widget_block.gif" hash="b7b0b1517cc38b18b92841b33b312190"/><file name="cms__widget_page_link.gif" hash="b839dee210e61850a5858cc8634cbccd"/><file name="default.gif" hash="684143ae5531aa6ba22215f4fadeea6c"/><file name="reports__product_widget_compared.gif" hash="bd3e5a5015eb2c5c64f1d11835166dc4"/><file name="reports__product_widget_viewed.gif" hash="44d5cd71e4fb7235f9cff0c7e2b2f531"/></dir><file name="widget_placeholder.gif" hash="2bd8d72cf12f8d7d0a6a3268f97786ff"/><file name="window_close.png" hash="3af14f053f360bf31f8ba2df73ec7f1e"/><file name="window_content.png" hash="08361df29783d46a2493cf0d8ad733a7"/><file name="window_top.png" hash="555a8db5efa3a252c2ead3d3dadd1075"/><dir name="wysiwyg"><file name="skin_image.png" hash="a521b0c60b001de4a3405e73c4a6cd4a"/></dir></dir><dir name="lib"><dir name="prototype"><dir name="windows"><dir name="themes"><dir name="magento"><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="content_bg.gif" hash="21278ea0da2d4256f4ced96b6080ba2e"/><file name="top_bg.gif" hash="26f28090de87d64f9b01bf624f89bfe2"/><file name="window_close.png" hash="3af14f053f360bf31f8ba2df73ec7f1e"/></dir><file name="magento.css" hash="d17d29bfa01e6b3f469c1e34daa2d2c0"/></dir></dir></dir></dir><file name="menu.css" hash="5054c586a77cb903848cceaaf08b7736"/><file name="oauth-simple.css" hash="ec27a5e8451d3b26ca9ab881a0c0a256"/><file name="print.css" hash="cc6cbc1ef42dd17187b6961f75268c4e"/><file name="reset.css" hash="4bf260890fb34be804dc967b07b26e63"/></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Adminhtml</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_Js_Ext</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Interface_Adminhtml_Default-1.9.4.0.xml b/var/package/Interface_Adminhtml_Default-1.9.4.0.xml
new file mode 100644
index 0000000..3f96d27
--- /dev/null
+++ b/var/package/Interface_Adminhtml_Default-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Interface_Adminhtml_Default</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/afl-3.0.php">AFL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Default interface for Adminhtml</summary>
+    <description>Default interface for Adminhtml</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:31:58</time>
+    <contents><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="etc"><file name="theme.xml" hash="2b8a8e5c60e4784255103ef960654b5c"/></dir><dir name="layout"><file name="admin.xml" hash="fa2970aab5aa83b7ebc98adb626cc47e"/><file name="adminnotification.xml" hash="6c02b570b62216ddd83ef13e02c6698b"/><file name="api2.xml" hash="db2a27d7ccc02947bc5b30c59769e08b"/><file name="authorizenet.xml" hash="e46d7d9d4804cd77883bd035c207d393"/><file name="bundle.xml" hash="36df0c985b13180ceea82109d6544381"/><file name="captcha.xml" hash="aba7100ae7edc86767e264e5fcfeed0d"/><file name="catalog.xml" hash="ab017f81ffc3316d6f1aed1011705789"/><file name="cms.xml" hash="0d847542950f96c30d7e493d6581f382"/><file name="connect.xml" hash="4b115e8eea0c7a5366bb650f9ecd678e"/><file name="currencysymbol.xml" hash="f834ed67581bb8c6a0f1e9077a0e916a"/><file name="customer.xml" hash="8dea541c83192d8d11c4fb49ea78045b"/><file name="dataflow.xml" hash="6f3baacc217afac27c7046d216afbaa6"/><file name="downloadable.xml" hash="b86d8dd5b096210d7ead7578b724bcad"/><file name="giftmessage.xml" hash="8a9454ccace970bfc7113bbfcc694d72"/><file name="importexport.xml" hash="4ee599ba56fabb14579b4c4f62f12b05"/><file name="index.xml" hash="7d5d63387702ae4f89790ddf333a85f0"/><file name="main.xml" hash="579885879b15e799e92cc2a9db33c277"/><file name="newsletter.xml" hash="cd6f875069103180ba3c6e175afb36c8"/><file name="oauth.xml" hash="9e68b6469faedb70bd5e19c076f07a66"/><file name="pagecache.xml" hash="649b2dc7b23ffa346745e2f439ada44f"/><file name="promo.xml" hash="ecce633b40d46540091a5f4674a6b5d7"/><file name="report.xml" hash="aebf6e9b94610bf1de7523781dc9df6b"/><file name="rss.xml" hash="381d71a524ace3375faa236867473cb3"/><file name="sales.xml" hash="8e29ebd2adff0f926c5dbcdca8eb8b38"/><file name="search.xml" hash="08e65788b1c39852084489a2110f9ff7"/><file name="tag.xml" hash="be945871f64a7df6d5b9dc163f2a7906"/><file name="tax.xml" hash="575eaccb30e80c89569192a9793bbe31"/><file name="widget.xml" hash="660afe2914732b367367da4ff252fc0a"/></dir><dir name="locale"><dir name="en_US"><file name="translate.csv" hash="735c9ec66d1309f1206294f075fdcdd1"/></dir></dir><dir name="template"><file name="access_denied.phtml" hash="0b93425b87b9d7ac08f545fe9b8e1362"/><dir name="api"><file name="role_users_grid_js.phtml" hash="19b2a78abc5572a2d6f00d2bae61b06b"/><file name="roleinfo.phtml" hash="26c30a9376cb26e6e695a5e30c0d3ba4"/><file name="roles.phtml" hash="c7e568ce60aa3f2d5ef99b07ff188f62"/><file name="rolesedit.phtml" hash="2fc361094d6175350a69fe4e7adb22de"/><file name="rolesusers.phtml" hash="c7b229b2a85ad3a22ec7b3658cb81992"/><file name="user_roles_grid_js.phtml" hash="cc0ca1bd4762b3213b39e0ea6387f2a9"/><file name="userinfo.phtml" hash="71d5c55d0baebbb17a7253d54dcf261f"/><file name="usernroles.phtml" hash="bef71e724dbb7b176ade07ddd895d249"/><file name="userroles.phtml" hash="c65d101f41a14ea2f6f9c5336c339ec2"/><file name="users.phtml" hash="79609ef733b95a347cc4d7551407da35"/></dir><dir name="api2"><dir name="attribute"><file name="buttons.phtml" hash="a0f72346b1d2f7d0ecc00c663152594d"/><file name="resource.phtml" hash="ac52c34f754dbd0d18033c77d77f310e"/></dir><dir name="permissions"><dir name="user"><dir name="edit"><dir name="tab"><dir name="roles"><file name="js.phtml" hash="8f86b7111ea63f3f92082bd7e354998e"/></dir></dir></dir></dir></dir><dir name="role"><file name="buttons.phtml" hash="c82b5abc2905bb1e366de48e271b8396"/><file name="users_grid_js.phtml" hash="f04c43f09d5a3881bb30bd23a7627419"/></dir></dir><dir name="authorizenet"><dir name="directpost"><file name="iframe.phtml" hash="45b445708ecef65d83c5ecc15d330edd"/><file name="info.phtml" hash="1d71da92ea0ddb22633bbcf1e2838102"/></dir></dir><dir name="backup"><file name="dialogs.phtml" hash="7b48547221f06a4a6d22d15e1e83672f"/><file name="left.phtml" hash="dfc47c2fc8db80a7d689d6c4b9c839f0"/><file name="list.phtml" hash="db411fc64166d19591964830e13c66a8"/></dir><dir name="bundle"><dir name="product"><dir name="composite"><dir name="fieldset"><dir name="options"><file name="bundle.phtml" hash="3c5955a856a6dd3f00422ce849ab121d"/><dir name="type"><file name="checkbox.phtml" hash="7c0db4ab7ca921ce57a9396e28bce585"/><file name="multi.phtml" hash="1514e211126df7763d75df47d72b0d95"/><file name="radio.phtml" hash="ae244ff90f64532aad44df7fd763a97a"/><file name="select.phtml" hash="708a91a59658cebbc4b5f141c1b8e27c"/></dir></dir></dir></dir><dir name="edit"><dir name="bundle"><dir name="option"><file name="search.phtml" hash="96f1988c6a61107ea033f24acfb331ed"/><file name="selection.phtml" hash="56ee8f504e7b17ca87ffa037ba224d8f"/></dir><file name="option.phtml" hash="8e84e2dffcc3560656c4094d0e11c83d"/></dir><file name="bundle.phtml" hash="d1c03f6494a5d1b63b1cf0f87d381d4e"/></dir></dir><dir name="sales"><dir name="creditmemo"><dir name="create"><dir name="items"><file name="renderer.phtml" hash="0eff64f467a00ba9871dcf235ea6116c"/></dir></dir><dir name="view"><dir name="items"><file name="renderer.phtml" hash="2dde16cdd49acb1f94f298168c5e2c9a"/></dir></dir></dir><dir name="invoice"><dir name="create"><dir name="items"><file name="renderer.phtml" hash="72daa1a5ca1f2ff17fd9d32956fcbe1f"/></dir></dir><dir name="view"><dir name="items"><file name="renderer.phtml" hash="87f9bcc14b13f4c2253cc16adee2d71c"/></dir></dir></dir><dir name="order"><dir name="view"><dir name="items"><file name="renderer.phtml" hash="88a49b9c825845b9e931abd4fce2d2d7"/></dir></dir></dir><dir name="shipment"><dir name="create"><dir name="items"><file name="renderer.phtml" hash="87cb061dcbad3235343331c73af75c29"/></dir></dir><dir name="view"><dir name="items"><file name="renderer.phtml" hash="1a447952fa64ab75222642852945f525"/></dir></dir></dir></dir></dir><dir name="captcha"><file name="zend.phtml" hash="4bb4d10d1969e62ea626c2f3ad17059b"/></dir><dir name="catalog"><dir name="category"><dir name="checkboxes"><file name="tree.phtml" hash="316072d4357faf2dda4607ba7f02e5e1"/></dir><dir name="edit"><file name="form.phtml" hash="1f2ec2f818af0dae1a3d898489a1bca7"/></dir><file name="edit.phtml" hash="8c6a5c83242ebd0f262a8b884066d071"/><file name="tree.phtml" hash="166e16cb27184b953cc9e7f60f0eba40"/><dir name="widget"><file name="tree.phtml" hash="f6611d0ceb9f6068e5c3988930b0a00c"/></dir></dir><dir name="form"><dir name="renderer"><dir name="fieldset"><file name="element.phtml" hash="58c77338ef7ee88a33cb8d0703d752de"/></dir></dir></dir><dir name="product"><dir name="attribute"><file name="js.phtml" hash="7e01ac475d716fe1a0ff364683805fef"/><dir name="new"><file name="created.phtml" hash="b6466ae0b3778ef2f08583a84aa7099d"/></dir><file name="options.phtml" hash="4d43f18ee71fa9f5a4d518b279888aed"/><dir name="set"><dir name="main"><dir name="tree"><file name="attribute.phtml" hash="e31959cb6e8a00cf1c85bcf3e528f73f"/><file name="group.phtml" hash="ad056aa1c05478509d9252cd9cbbf9e7"/></dir></dir><file name="main.phtml" hash="0a9fc542d48b62a9e218f9fb5fa33133"/><dir name="toolbar"><file name="add.phtml" hash="2271a6d595c86af8bf84b987eb0efc17"/><file name="main.phtml" hash="bf70b4d5a5a62a0abc98eb8003e1b8d6"/></dir></dir></dir><dir name="composite"><file name="configure.phtml" hash="7f6774cf9023b4daa9a250454149d373"/><dir name="fieldset"><file name="configurable.phtml" hash="4861932bdb04e14eb32c8fa072c9ab4c"/><file name="grouped.phtml" hash="020b1cb486b20b39a1fb4d4b5711c68b"/><dir name="options"><file name="js.phtml" hash="59ac4bb852525ff1f6b7bd31eb4f55ea"/><dir name="type"><file name="date.phtml" hash="e68657a02a40e818cdf43552d64914d4"/><file name="default.phtml" hash="cd59ccac8a9d4212e161ea5dbb55f348"/><file name="file.phtml" hash="ab87b63a754052d01a64e31ebd3b33a6"/><file name="select.phtml" hash="49130463308c229d1d9041499e9d3ccc"/><file name="text.phtml" hash="ca826937903254f82d322f8f91e7d46a"/></dir></dir><file name="options.phtml" hash="1e5706149c20d21fd1d4deae1e4814f7"/><file name="qty.phtml" hash="911d3700ea16934737ef4838cf5905a5"/></dir></dir><file name="created.phtml" hash="eeda128f5468e66a37eb6048ff20046f"/><dir name="edit"><dir name="action"><file name="attribute.phtml" hash="c8e6a25bfd9b467557e76f6c8c6d5ff8"/><file name="inventory.phtml" hash="4aa5d8046544aad2fa7ecb4d62cb7b4f"/><file name="websites.phtml" hash="bef55654e3461543c6f2ae9d3d8826f2"/></dir><file name="categories.phtml" hash="61ea947c5375f24d183964abf564bd06"/><dir name="options"><file name="option.phtml" hash="5b2c7428c87ae6c888e57de4228b49d3"/><dir name="type"><file name="date.phtml" hash="56d17e997bff9a38c85abad8674d2b1c"/><file name="file.phtml" hash="0ed1da6973f5665b926533c9e1d6883f"/><file name="select.phtml" hash="68df7d25b614c17fd6465e93c458ceb8"/><file name="text.phtml" hash="fad130667515a76412509dea18c55e86"/></dir></dir><file name="options.phtml" hash="f0f0a18efa190eb3b20cc345f2e946fd"/><dir name="price"><file name="group.phtml" hash="3956ebb0b1d06f602caa4f7a3ec8016d"/><file name="tier.phtml" hash="fe083276dc080bb0c300d29f0e42e663"/></dir><file name="serializer.phtml" hash="598b4c51e63a0633a139f17bba395c51"/><dir name="super"><file name="config.phtml" hash="7c36eec763f1c2c7627026c6723d7d75"/></dir><file name="websites.phtml" hash="a59008e748041ce32ffa01c52bfada66"/></dir><file name="edit.phtml" hash="e33e2c7513399a924c3224a9791b252a"/><dir name="helper"><file name="gallery.phtml" hash="2ea402574e8813e211f6ad6e45690082"/></dir><file name="js.phtml" hash="47cf9938cc0ebc74b583370cceb93498"/><file name="price.phtml" hash="0d6960c138926e5832ef39dc2d6f0923"/><dir name="tab"><file name="alert.phtml" hash="c7f72e8114ab15177be2c83598e8705e"/><file name="inventory.phtml" hash="e6e15282ceea9e10ddc47771c8c73503"/></dir><dir name="widget"><dir name="chooser"><file name="container.phtml" hash="2af850a1f664772599a1a42b12cbd037"/></dir></dir></dir><file name="product.phtml" hash="0db5b8a63cf7bdfcbe0278569e048e9b"/><dir name="wysiwyg"><file name="js.phtml" hash="868d61a1c261c64255367f1d18c06146"/></dir></dir><dir name="cms"><dir name="browser"><dir name="content"><file name="files.phtml" hash="b40e36c2a9c7884d6ebe6d52d7ebbc70"/><file name="newfolder.phtml" hash="4631d1a3602fff8fac3528d2d620edd3"/><file name="uploader.phtml" hash="0ca35f576a3407276f08579da3d767fa"/></dir><file name="content.phtml" hash="5060e5bf45f748de04e476754ac1dfd0"/><file name="js.phtml" hash="d7f24abe14eaaa076de3ecfcb9cd37ac"/><file name="tree.phtml" hash="31337b44e306b1c72b6248f782a2f987"/></dir><dir name="page"><dir name="edit"><dir name="form"><dir name="renderer"><file name="content.phtml" hash="3ff9151632c1207f57108393c3a2d1b1"/></dir></dir></dir></dir></dir><file name="coming.phtml" hash="584b6eb5bd5c02169d95bf218fd78f32"/><dir name="connect"><dir name="extension"><dir name="custom"><file name="authors.phtml" hash="abcf5c33760f7f41e849aa0ccdc3094c"/><file name="contents.phtml" hash="b0750fce6e052964e936194175cc2de5"/><file name="depends.phtml" hash="9750b3aa40cf7b948dd76e1975e81c00"/><file name="load.phtml" hash="c14d4bfcae6c2da8b66ddb12f98e1bcd"/><file name="package.phtml" hash="acd9f10cd82a311eb546cd63bd648bdc"/><file name="release.phtml" hash="e25b1c7c5e8007610044e0be15926066"/></dir></dir></dir><dir name="currencysymbol"><file name="grid.phtml" hash="4909494d83f5a434e9549d4c9b208b7b"/></dir><dir name="customer"><dir name="edit"><file name="js.phtml" hash="dbdef333341b26c8e5a4d6487452bba0"/><dir name="tab"><dir name="account"><dir name="form"><dir name="renderer"><file name="group.phtml" hash="07ca40d8a48dccbf882c2bd9d97c8fdd"/></dir></dir></dir><dir name="view"><dir name="grid"><file name="item.phtml" hash="cffe779f8286f8ddbd5d9e36455c1f91"/></dir></dir></dir></dir><file name="online.phtml" hash="26c038872c35622dce5192b66157d8f2"/><dir name="sales"><dir name="order"><dir name="create"><dir name="address"><dir name="form"><dir name="renderer"><file name="vat.phtml" hash="bcb6dcd5283f6ca54a31f794ae05ff42"/></dir></dir></dir></dir></dir></dir><dir name="system"><dir name="config"><file name="validatevat.phtml" hash="83e4b57c6dff8ec1ffb5480133126767"/></dir></dir><dir name="tab"><file name="addresses.phtml" hash="4e08e870ac344b06a61ba5df94acdce9"/><file name="cart.phtml" hash="7bd07def03346874d530832138a82e83"/><file name="newsletter.phtml" hash="a875958e512c96b7b3841282edcfb36e"/><dir name="view"><file name="sales.phtml" hash="0dbba8c504374b5dd09304727261ce6a"/></dir><file name="view.phtml" hash="4153cc71e7a6db1e6f8cd6b5e949b052"/><file name="wishlist.phtml" hash="bbfef68c40383558d550e93bcaf788de"/></dir></dir><dir name="dashboard"><dir name="graph"><file name="disabled.phtml" hash="9fd9442cb7012d11528a5008d7edfc8b"/></dir><file name="graph.phtml" hash="b64fea82a4e48856749a118aa394b3e4"/><file name="grid.phtml" hash="92391c6885262018eace82dc98041815"/><file name="index.phtml" hash="1485125ad7b75ea87312cc9aae2c64c7"/><file name="salebar.phtml" hash="35051aca2c8af240a93905ace6a95aef"/><file name="searches.phtml" hash="85a0eab13b10481bec450c27146ece41"/><dir name="store"><file name="switcher.phtml" hash="e16a68b53244d1e0becf36a1b2e1235b"/></dir><file name="totalbar.phtml" hash="49a2ccc2dbb571f33aa773cb896b04b7"/></dir><dir name="directory"><dir name="js"><file name="optional_zip_countries.phtml" hash="f2c21b03d0109c7505be950febe20d1c"/></dir></dir><dir name="downloadable"><dir name="product"><dir name="composite"><dir name="fieldset"><file name="downloadable.phtml" hash="ec539bc7a37dde2d1369a38872e04ae0"/></dir></dir><dir name="edit"><dir name="downloadable"><file name="links.phtml" hash="50f196fbc173c7b6db47b73897bbba53"/><file name="samples.phtml" hash="0a4e10d341d2e373e89a9b990cee5658"/></dir><file name="downloadable.phtml" hash="0e3685802262cd0ff745f7b5a3c4a399"/></dir></dir><dir name="sales"><dir name="items"><dir name="column"><dir name="downloadable"><dir name="creditmemo"><file name="name.phtml" hash="0b929b22a5b6bfe4faefd36c8fe3e7cb"/></dir><dir name="invoice"><file name="name.phtml" hash="69aa15a70fe3e10ff66d301f83774d8e"/></dir><file name="name.phtml" hash="90e67c7d2963a36239d1cfedf02eb2d6"/></dir></dir></dir><dir name="order"><dir name="creditmemo"><dir name="create"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="564951f90faa742f3a7485cd325f3928"/></dir></dir></dir><dir name="view"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="c0060b9a5190d959423435c2fec44fd7"/></dir></dir></dir></dir><dir name="invoice"><dir name="create"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="4e1430f0773f61cc998500dcbf3df9f1"/></dir></dir></dir><dir name="view"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="5a47d33cef0453245cf6751611b614f9"/></dir></dir></dir></dir><dir name="view"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="142c07b8ecd8dc21d5f3873e61e8a95d"/></dir></dir></dir></dir></dir></dir><dir name="eav"><dir name="attribute"><dir name="edit"><file name="js.phtml" hash="e31959cb6e8a00cf1c85bcf3e528f73f"/></dir><file name="options.phtml" hash="b264987df981b6954197362620ce5dc3"/></dir></dir><dir name="email"><dir name="order"><file name="items.phtml" hash="eb03db94a2470c2355776460c6c91c20"/></dir></dir><file name="empty.phtml" hash="3dc7e87bf6701ff9fcdcccc53e169727"/><file name="example.phtml" hash="f032afae414344e63cf7fa705fca4180"/><file name="forgotpassword.phtml" hash="dc0a40f4420b46be1d7fe0cc82726445"/><file name="formkey.phtml" hash="a30e6417a0637091743b2ea2f37ec930"/><dir name="giftmessage"><file name="form.phtml" hash="7d9bd587f973da6785f717bbe38f883b"/><file name="giftoptionsform.phtml" hash="f12ca481dcd38ec15e363f286274264b"/><file name="helper.phtml" hash="f154667a3a93a999d7da9add164f4dd0"/><file name="popup.phtml" hash="251eb1e699735cc2d31c45c7b8e0adea"/><dir name="sales"><dir name="order"><dir name="create"><file name="giftoptions.phtml" hash="637e3a1524b3c069ffbd5d57f991e06a"/><file name="items.phtml" hash="d90c7a0759f3af7359f3ab72b2768617"/></dir><dir name="view"><file name="giftoptions.phtml" hash="a2187b52ce3765afb903c50a21e4b1c5"/><file name="items.phtml" hash="801bd28178fb07882711e630a4293e63"/></dir></dir></dir></dir><dir name="googlebase"><file name="captcha.phtml" hash="5a2d12232692876f6b6ff83b8f387524"/><file name="items.phtml" hash="b8eb257be832077c733937528aa8dd82"/><dir name="types"><dir name="edit"><file name="attributes.phtml" hash="6ceb197ddbf672122d61c99890affefd"/></dir></dir></dir><dir name="importexport"><file name="busy.phtml" hash="6c3c2c211a18a63cbc3835caa986678a"/><dir name="export"><dir name="form"><file name="after.phtml" hash="66a49e8e07b5c82353d9a560a88d0d2a"/><file name="before.phtml" hash="6b816ca61ec75a928e5072ef2648815f"/></dir></dir><dir name="import"><dir name="form"><file name="after.phtml" hash="c5dc3ad22c752a9e649557d0ffe2ea1b"/><file name="before.phtml" hash="590857b2535df4d5bfb440864b475456"/></dir><dir name="frame"><file name="result.phtml" hash="3fca7b1c37fcfaf904fe9e2a598afb98"/></dir></dir></dir><dir name="index"><file name="notifications.phtml" hash="a0e8d7264ea40704b3354560a087c515"/></dir><file name="login.phtml" hash="0d6bf9910c8a4edb87327a86fd59d69e"/><dir name="media"><file name="editor.phtml" hash="b7b2537551f5c5b016a692f40f45fd88"/><file name="uploader.phtml" hash="660610bb89e9e6f7bb5ff75cb17ed28c"/></dir><dir name="newsletter"><dir name="preview"><file name="iframeswitcher.phtml" hash="aba6cae6227dfc99c6f511a374a59abb"/><file name="store.phtml" hash="75072a8e402f88498069bb573f36a933"/></dir><dir name="problem"><file name="list.phtml" hash="ef529cbab533e46993ab1909cb4f1168"/></dir><dir name="queue"><file name="edit.phtml" hash="eeadb798c387cac5c780328b2b00900d"/><file name="list.phtml" hash="1ebb0a371a6ec987e81d7125078d8f5e"/><file name="preview.phtml" hash="6e9a7e260d5dc486c256cc2eaab1b006"/></dir><dir name="subscriber"><file name="list.phtml" hash="b2532471a402bc89cb98d9d2393708c8"/></dir><dir name="template"><file name="edit.phtml" hash="98af40620bce4e0b5c0f9edabbd661f5"/><file name="list.phtml" hash="aab1851c309c3506d6a7a08e3dcfd461"/><file name="preview.phtml" hash="6e9a7e260d5dc486c256cc2eaab1b006"/></dir></dir><dir name="notification"><file name="baseurl.phtml" hash="a679fe18d56450b4a5f2c72cf5f2753d"/><file name="curl.phtml" hash="9002113007eda972b15c1ec6012156a0"/><file name="formkey.phtml" hash="97d8da671d1839efea2494ea3fe3a806"/><file name="security.phtml" hash="2f174f9a35240b3f5612acf4d98491d4"/><file name="survey.phtml" hash="4ca551f9634d2050b60258044abfcea6"/><file name="symlink.phtml" hash="2c3138d8657eee6220f81c013bca307a"/><file name="toolbar.phtml" hash="5c4f406d5e58445c8bf972e06d3134c1"/><file name="window.phtml" hash="283519725b127c908f2a95b0a2b6b5c0"/></dir><dir name="oauth"><dir name="authorize"><file name="button-simple.phtml" hash="776fda121ee85dc44175b95297b8be5e"/><file name="button.phtml" hash="bb7a5f6b66c05558c1973d0d6e2ecf45"/><file name="confirm-simple.phtml" hash="94bf4c893a04516b31f13e0ecd5dfe17"/><file name="confirm.phtml" hash="ff2a8360ecc9e7f9f494f935893c0ff9"/><dir name="form"><file name="login-simple.phtml" hash="e645c349e503b0d7003c1a4c0e9d424e"/><file name="login.phtml" hash="d92a35d7081aa0ac1a023d73b1992e28"/></dir><file name="head-simple.phtml" hash="01b75eafcca0e6acd2f9770b585e860f"/><file name="reject-simple.phtml" hash="0cb7b4f8b241c1a2ef50b8350fea58cf"/><file name="reject.phtml" hash="7572e628c21bed02ffb4dade79693f2d"/></dir></dir><file name="overlay_popup.phtml" hash="0838d1a559ff0be9681cd6c2010cb730"/><dir name="page"><file name="footer.phtml" hash="554851584e03620c55bd84bdeb57c5e8"/><file name="head.phtml" hash="16f2e49d3be8f9ee595b014a8c4dff71"/><file name="header.phtml" hash="0b553cfa08a1102b037c5c8d6dc6b04a"/><dir name="js"><file name="calendar.phtml" hash="ab7d6b444d86a7d05b802f8f3bcd2138"/><file name="translate.phtml" hash="84eddc2ae9a622e3d4d78492a2ea9e05"/></dir><file name="menu.phtml" hash="fe8d3f634251c2071cd52ffc54913009"/><file name="notices.phtml" hash="93da2ad3ab7c7bc084ee9bbd94534c68"/></dir><file name="page.phtml" hash="9433872817ce316f64e069d4b27df009"/><dir name="pagecache"><dir name="cache"><file name="additional.phtml" hash="266522fd292e7ee15a2e8f5fb9651d84"/></dir></dir><dir name="paygate"><dir name="form"><file name="cc.phtml" hash="8ce42cf9493be215833c92cc8fa0d119"/></dir><dir name="info"><file name="cc.phtml" hash="ab67f6e39a87c34269b47f652e4ab82a"/><file name="pdf.phtml" hash="e9ffdb41ec0d853698f1779db0fe2981"/></dir></dir><dir name="payment"><dir name="form"><file name="banktransfer.phtml" hash="d28cf4cc1d898f8c0154e8e4ce879020"/><file name="cashondelivery.phtml" hash="56dc9b726ca3f4991fa80548d7eaa600"/><file name="cc.phtml" hash="a1d6306531292c445e28c7dd642c06a8"/><file name="ccsave.phtml" hash="8444df68a2e48e29589a232f4cc8b2ca"/><file name="checkmo.phtml" hash="4fd637914b4e26312232bb58d36b2664"/><file name="purchaseorder.phtml" hash="354903a4a6ab78687452c047c34b7b0d"/></dir><dir name="info"><file name="banktransfer.phtml" hash="1a29469c4268caaad2c3239895c688bf"/><file name="checkmo.phtml" hash="64ffb1d1e2a22225bf4e5d23110ced2b"/><file name="default.phtml" hash="1feb712a071d1fb8a12069168fa8eb3d"/><dir name="pdf"><file name="checkmo.phtml" hash="ce61e21e189b46758bb3704fd3293329"/><file name="default.phtml" hash="1c1df7e62a8243b99ad6f44d936cc078"/><file name="purchaseorder.phtml" hash="dfe200348a5ac58db7b147bfe991547d"/></dir><file name="purchaseorder.phtml" hash="dafc010e53b36de0876b75beaab4d760"/></dir></dir><dir name="paypal"><dir name="system"><dir name="config"><file name="api_wizard.phtml" hash="51393f8e3b16fe6c899da32f855dfea9"/><file name="bml_api_wizard.phtml" hash="dd7728bf602c2689a2a2f68453d8a220"/><dir name="fieldset"><file name="global.phtml" hash="c25901174f696022acf54f0e0d031438"/><file name="hint.phtml" hash="699d26296a1957b2960ec369c664cb7b"/><file name="store.phtml" hash="17ff85b1c8fe665b4ce57220d836ee8d"/></dir><dir name="payflowlink"><file name="advanced.phtml" hash="fec372a9e5b1282f73ddb08e7ff53143"/><file name="info.phtml" hash="4d175e6c1ef420294205100babb3dca2"/></dir></dir></dir></dir><dir name="permissions"><file name="role_users_grid_js.phtml" hash="4c17fcb2aa9478a7a37fb4552f4ff9d6"/><file name="roleinfo.phtml" hash="3efe8718836bc7f0d6d8ccddbcf7fe9c"/><file name="roles.phtml" hash="71008b5b96fcf64cbb5ed7210ba490d4"/><file name="rolesedit.phtml" hash="b8eed818db9cd53692b9b1d0212600f5"/><file name="rolesusers.phtml" hash="c7b229b2a85ad3a22ec7b3658cb81992"/><file name="user_roles_grid_js.phtml" hash="7c7c7d128fbc826704d8c3deb7e25831"/><file name="userinfo.phtml" hash="71d5c55d0baebbb17a7253d54dcf261f"/><file name="usernroles.phtml" hash="bef71e724dbb7b176ade07ddd895d249"/><file name="userroles.phtml" hash="c65d101f41a14ea2f6f9c5336c339ec2"/><file name="users.phtml" hash="79609ef733b95a347cc4d7551407da35"/></dir><dir name="poll"><dir name="answers"><file name="list.phtml" hash="4d6c40e5b346c112ae80223d76dfba36"/></dir></dir><file name="popup.phtml" hash="5be29b0dc97ad85da6489ee30f6b3a90"/><dir name="promo"><file name="fieldset.phtml" hash="fa4f25be8cd47e1e4d5295c512f047f8"/><file name="form.phtml" hash="6146a162be90f0a7e1a2be651a164210"/><file name="js.phtml" hash="bb4852a9b2184b2c87aaa810d752c3bf"/><file name="salesrulejs.phtml" hash="03068d2950ce492f05b13c0008dd51bf"/></dir><dir name="rating"><file name="detailed.phtml" hash="61853f9c83da153e976fe3624fb20095"/><file name="options.phtml" hash="52350ee6bbf7cccf92dd84e13c174f76"/><dir name="stars"><file name="detailed.phtml" hash="4645b1dd948f7f363b43155892a16261"/><file name="summary.phtml" hash="88ece0a64860556ddabd6b4f9184bef2"/></dir></dir><dir name="report"><dir name="grid"><file name="container.phtml" hash="6e071b59d7a6731bc98b6b5ef4604d76"/></dir><file name="grid.phtml" hash="67c2dce387d910177837da5177fcd038"/><dir name="refresh"><file name="statistics.phtml" hash="7dded0cf028a17b3165fde06ccbd66ae"/></dir><dir name="store"><dir name="switcher"><file name="enhanced.phtml" hash="7e1eeef91b89078f4dcaeaa730680791"/></dir><file name="switcher.phtml" hash="aee0f6079d494a7369859c8d5553c526"/></dir><file name="wishlist.phtml" hash="ded79ec8ab525638d4bf3e6bd17a6ca1"/></dir><file name="resetforgottenpassword.phtml" hash="b07b20a789151ab6f67c9db9de051ee0"/><dir name="review"><file name="add.phtml" hash="26ff68721e5d0a25f7cae44f2401cf4c"/></dir><dir name="sales"><dir name="billing"><dir name="agreement"><file name="form.phtml" hash="181326925e1db25f8aeaa43b771d21e6"/><dir name="view"><file name="form.phtml" hash="c91a4929c452123c2b1dfe6df2e5fd74"/><dir name="tab"><file name="info.phtml" hash="6c8e148b5fc8fd1407122141325504ff"/></dir></dir></dir></dir><dir name="items"><dir name="column"><file name="name.phtml" hash="1642f371fe7d58777b5d05955f5e5e31"/><file name="qty.phtml" hash="45b9d6464511b05c6f2db52b9c0f5208"/></dir><dir name="renderer"><file name="default.phtml" hash="2fb6735f329fc9bb69adf2189fee4992"/></dir></dir><dir name="order"><dir name="address"><file name="form.phtml" hash="7294f3ab0f023727db823a883964c00c"/></dir><dir name="comments"><file name="view.phtml" hash="fe26683923eedcb0eb234e0d68f7a722"/></dir><dir name="create"><file name="abstract.phtml" hash="c2e218a1aac318936552095741d2b340"/><dir name="billing"><dir name="method"><file name="form.phtml" hash="805b57f301229bb30ccc33c73c221067"/></dir></dir><file name="comment.phtml" hash="fe0cddf6e65757251f3588aee2a066a0"/><dir name="coupons"><file name="form.phtml" hash="d484ce57dd690afbb108ef4825ff72e9"/></dir><file name="data.phtml" hash="e87f183fca97f9a20c2d230ba44e1ebb"/><dir name="form"><file name="account.phtml" hash="88424154c415379ec0786cf1e46be0c3"/><file name="address.phtml" hash="8c5f4d31ad0902b3c7087610ccdbbdf4"/></dir><file name="form.phtml" hash="a2e38a610776075edac5f510ae53a56d"/><file name="giftmessage.phtml" hash="0c027ad5e3d30c85dd42da2b3cf9cb83"/><dir name="items"><file name="grid.phtml" hash="88a9f94935b19b1425291d6453fc87ff"/></dir><file name="items.phtml" hash="a22a35447e4fa1f90539fd8be5462302"/><file name="js.phtml" hash="c9ca3fb7cbd178aee5518067dbb9bea9"/><dir name="newsletter"><file name="form.phtml" hash="d5e69ff1c8fad279a4c92b9bfb587b3c"/></dir><dir name="shipping"><dir name="method"><file name="form.phtml" hash="bc4a6457fbea465f5eb567cb47c68fbf"/></dir></dir><dir name="sidebar"><file name="items.phtml" hash="82e4cdb2deb65b33460627fca97818f9"/></dir><file name="sidebar.phtml" hash="12bc9eaee62aa219a006a0e3155ba252"/><dir name="store"><file name="select.phtml" hash="a4dc3b912c68fa9a8f063e5f3f7e59b9"/></dir><dir name="totals"><file name="default.phtml" hash="8b54d16c056cad822afe299a15c38aee"/><file name="grandtotal.phtml" hash="e488511ca0ec20a87d35ccca7312c7be"/><file name="shipping.phtml" hash="39ca3a2bbbce7d15bb2c512915032c8c"/><file name="subtotal.phtml" hash="49e6071343d14faea14237d85828e1ac"/><file name="tax.phtml" hash="2b11eea9c5b3790916f7c32755790e71"/></dir><file name="totals.phtml" hash="cb7a3f5366a56365e75514678d94c24a"/></dir><dir name="creditmemo"><dir name="create"><file name="form.phtml" hash="d14c63341143af1f35e46a2a15f7f75f"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="0ab90b981c1792d190a00b005f0269cb"/><file name="default.phtml" hash="3f44db0a17f06e4a8264b5190e20150d"/></dir></dir><file name="items.phtml" hash="5a4a10de7dc60fcf97be2ce73579be6a"/><dir name="totals"><file name="adjustments.phtml" hash="42f515928f2b140e6c8b5212be64c166"/></dir></dir><dir name="view"><file name="form.phtml" hash="d31bb6bc7f32e363c8e234f48d0de95c"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="694ea3093599d0ca05f1b8d944d1405f"/><file name="default.phtml" hash="1bb85088d1c945c244aa3b0ba43f6997"/></dir></dir><file name="items.phtml" hash="0410c2bf6845cb4dbb44f960f76e9dd7"/></dir></dir><file name="giftoptions.phtml" hash="16efe937436bd3f11934a0e672af6ec1"/><dir name="invoice"><dir name="create"><file name="form.phtml" hash="23d4686c5a0598f73735aa5cd1430b1b"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="a83dff183c9ca6cdac2aa1e78b353a3e"/><file name="default.phtml" hash="457f9bd82a6bdb69e9af88b7c94d2641"/></dir></dir><file name="items.phtml" hash="7c10fabdcdb698d2e76b07d9e8c3b08c"/><file name="tracking.phtml" hash="802a61b5614c6b63902efb2bda98846d"/></dir><dir name="view"><file name="form.phtml" hash="eeb741062873bff59caf03ded25dd090"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="b376b226780666ba3fe21aa95d07c2d9"/><file name="default.phtml" hash="58909f72a7442c77f4fbbc6d237ffd7f"/></dir></dir><file name="items.phtml" hash="cce32fe2de57c75e4a283e9516f73a86"/></dir></dir><dir name="shipment"><dir name="create"><file name="form.phtml" hash="3f27f077b08e1ddec2225bd6c2387a56"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="d4bc2a93cce32c8c6d4bcbfa5c8e9253"/><file name="default.phtml" hash="355de5f1e68a292e3840fc0503f65b2d"/></dir></dir><file name="items.phtml" hash="05b64834dddae3fab411f18a84b00fb7"/><file name="tracking.phtml" hash="de9479ab0247d9895cbc8fc0eacb0c08"/></dir><dir name="packaging"><file name="grid.phtml" hash="819717f8946a778ca80b38a15093dcdc"/><file name="packed.phtml" hash="52d116e66eabb5ccb75e7edd76b22cec"/><file name="popup.phtml" hash="9c14d5036542105073a6b3c83bc09085"/></dir><dir name="tracking"><file name="info.phtml" hash="affbfa1005465bf2791e0395ed11f7cf"/></dir><dir name="view"><file name="form.phtml" hash="ca332f13b670841f22951f985d1fac2a"/><dir name="items"><dir name="renderer"><file name="configurable.phtml" hash="af86611668fa31c7a26ab10a854c8d99"/><file name="default.phtml" hash="c633a0dbe2592d3c22c9389b63a6075b"/></dir></dir><file name="items.phtml" hash="997d36e5884aebc67041cf7557205cf1"/><file name="tracking.phtml" hash="560ba2666c613daf3838e91d0c16da30"/></dir></dir><file name="totalbar.phtml" hash="2694bf45cd70e37b61a3ed26c65fdeaf"/><dir name="totals"><file name="discount.phtml" hash="7e46a74df3fdd14ce1603929bba8c36f"/><file name="due.phtml" hash="225f5adf66ade026a034ab88f64e82de"/><file name="footer.phtml" hash="b9b5f8c685609424d84ac03f5f36204d"/><file name="grand.phtml" hash="71dc9b4c7d63cc53295bc4d4a7963b81"/><file name="item.phtml" hash="5fc6e237c23cb0c07f9de72a0ef86c40"/><file name="main.phtml" hash="aa3a2b328c0ed56ec3033f0a03b0192b"/><file name="paid.phtml" hash="4a72f03f1eba9a1bea5c60ae5f483e39"/><file name="refunded.phtml" hash="d0d77ad1a22b80020b92723b9af76e30"/><file name="shipping.phtml" hash="3b744dbc10dbee085cd8f72db5ee6d84"/><file name="subtotal.phtml" hash="20498513f158db7085c9680637ec2b5a"/><file name="tax.phtml" hash="d0f5fa11ef701470a2d94aab50b060c8"/></dir><file name="totals.phtml" hash="f42766bcf04dc87047b8973b38999ef9"/><dir name="view"><file name="form.phtml" hash="b500333c1f094d736587aa7508632a16"/><file name="giftmessage.phtml" hash="ed1412500ee4218acea60434aaee9e2c"/><file name="history.phtml" hash="cef334a31165535d7aa6f4c7612930f0"/><file name="info.phtml" hash="6f7d6499734fe2ce6da4b9bded1e4534"/><dir name="items"><dir name="renderer"><file name="default.phtml" hash="82c8db12bb3bd2cd5019997f0a4eaed6"/></dir></dir><file name="items.phtml" hash="6ac2eacfbb3c8fa8123718e6f18affc2"/><dir name="tab"><file name="history.phtml" hash="40fb94d3e2a52ee1f01ff8da88523403"/><file name="info.phtml" hash="a4b0c91c76dff628892dafaf8727f39d"/></dir><file name="tracking.phtml" hash="f690451a0385289b9dcf74fd97502eb3"/></dir></dir><dir name="payment"><dir name="form"><dir name="billing"><file name="agreement.phtml" hash="818ea7819d66425c931791b9ee4aebbf"/></dir></dir></dir><dir name="recurring"><dir name="profile"><dir name="view"><file name="info.phtml" hash="9934cb555f40a72b9e5fb8bcc611e5ce"/></dir><file name="view.phtml" hash="119fb775ce3aaca04b195f52cb1061b1"/></dir></dir><dir name="transactions"><file name="detail.phtml" hash="52f5a5139596a03f7e3ebad2ebd91713"/></dir></dir><dir name="store"><dir name="switcher"><file name="enhanced.phtml" hash="f3bb6b4a2415830e1664a7e0bf7ca3a9"/><dir name="form"><dir name="renderer"><dir name="fieldset"><file name="element.phtml" hash="edb01080b194a3f6917dfcf8b3af1d4d"/></dir><file name="fieldset.phtml" hash="38b6d7731d90be9573a8e7ecd3e51c58"/></dir></dir></dir><file name="switcher.phtml" hash="1e710220e6d32f8da5be97ed2e6a654d"/></dir><dir name="system"><file name="autocomplete.phtml" hash="fc64a24a3fc2bf68dc738aec164c43fc"/><dir name="cache"><file name="additional.phtml" hash="24a29989cc8fc8d6a3157f69eed80d18"/><file name="edit.phtml" hash="d28ecf99674cc028dbf8e9eb4632d7a9"/><file name="notifications.phtml" hash="f43a4ee0c00c56b858d953d57b63c2fe"/></dir><dir name="config"><file name="edit.phtml" hash="26b2d69c2b7fbae4f98b01f028c1665c"/><dir name="form"><dir name="field"><file name="array.phtml" hash="bca28dc0a785b51bc6db391c8adc81f2"/></dir></dir><file name="js.phtml" hash="131d0744f376d30f7b65d5a611c935d2"/><file name="switcher.phtml" hash="b59b5b63e3927e468efd5ddac86dd7f8"/><dir name="system"><dir name="storage"><dir name="media"><file name="synchronize.phtml" hash="9b02c612c64074fccc947d6475c3ae10"/></dir></dir></dir><file name="tabs.phtml" hash="d9323db68f7e8f7997fa9dd5f14f0285"/></dir><dir name="convert"><dir name="profile"><file name="process.phtml" hash="7b26cbe522663de0c91edb59b5063377"/><file name="run.phtml" hash="ce173c4c2424412a7391ba11eb910e30"/><file name="upload.phtml" hash="58b059d9b65e88164cf118f4443e157f"/><file name="wizard.phtml" hash="b02d17e3ddb724b7e666127fe59b71fd"/></dir></dir><dir name="currency"><dir name="rate"><file name="matrix.phtml" hash="7213f259f7e2c703ee36214edca76f4b"/><file name="services.phtml" hash="529e6a2348ff59dc323b65435d399213"/></dir><file name="rates.phtml" hash="9b0362418c5e4d0ca9982883293500d0"/></dir><dir name="design"><file name="edit.phtml" hash="fd39451fd13f43f097427998105806a4"/><file name="index.phtml" hash="2d4559b612d2ab7d5d8840a6f67a2fc3"/></dir><dir name="email"><dir name="template"><file name="edit.phtml" hash="a07d8c3ae6cef4a0eed7fff766d2ca58"/><file name="list.phtml" hash="4146cbc4274bb22fdaceca25f2843051"/><file name="preview.phtml" hash="43b505dc9285dc041e914002fdda0a2e"/></dir></dir><file name="info.phtml" hash="f837e1b97454aecda4afb8b84af733e5"/><dir name="shipping"><file name="applicable_country.phtml" hash="70af25fda1ba1fc8467482da3002a200"/><file name="ups.phtml" hash="3b092c978b6b1b8da7577083635465ab"/></dir><dir name="store"><file name="cell.phtml" hash="667d7bc3f0891603f2ab8457a433ebfd"/><file name="container.phtml" hash="4b85761a428cf997e311a29c82a4a758"/><file name="tree.phtml" hash="58b6af797a21730fbef54d9936647085"/></dir><dir name="variable"><file name="js.phtml" hash="b8c43ef479f9a9ea36698a6dffdd3be5"/></dir></dir><dir name="tag"><dir name="edit"><file name="container.phtml" hash="511e6ebb2515f671aedf5450cb228228"/></dir><file name="index.phtml" hash="113da2d70889b8d591cf0e3e93086430"/></dir><dir name="tax"><dir name="class"><dir name="page"><file name="edit.phtml" hash="f7c79bf6ece6fba32da9fd729c612406"/></dir></dir><file name="importExport.phtml" hash="0e7b5145d66dc0c1f30f9d2f307523ee"/><file name="notifications.phtml" hash="e146f2b09ae8e2dbb8e444937af27640"/><dir name="rate"><file name="form.phtml" hash="ffdaa3a88647bb78d5af4c069efe8fad"/><file name="title.phtml" hash="c95cab61efb504ec0e57749e63dc90fe"/></dir><dir name="toolbar"><dir name="class"><file name="add.phtml" hash="98b2cbc14ee1b54f95e3dc6220094cc3"/><file name="save.phtml" hash="016dca9f5b983ad455dbee82a8f1a94a"/></dir><dir name="rate"><file name="add.phtml" hash="6e08770611b78d0981603e64a48d6a24"/><file name="save.phtml" hash="92b0b9e348c5a7cc4bb3f73b47dfc382"/></dir><dir name="rule"><file name="add.phtml" hash="a82e479ebbc764b8753cebafc3d94d76"/><file name="save.phtml" hash="2df9243d3ff7fbceed5a219d47dd6c59"/></dir></dir></dir><dir name="urlrewrite"><file name="categories.phtml" hash="0b9ad7cc814295877a499c265f6b28a0"/><file name="edit.phtml" hash="bddd73ea946213da74aeb976bcefd719"/><file name="selector.phtml" hash="9b0023699df9e39b205a8e44e3957a28"/></dir><dir name="usa"><dir name="dhl"><file name="unitofmeasure.phtml" hash="53f060afc8c07b1e41744d15c7987fa2"/></dir></dir><dir name="weee"><dir name="renderer"><file name="tax.phtml" hash="e7a32618be62ee2502fb03df3671ef17"/></dir></dir><dir name="widget"><file name="accordion.phtml" hash="62fc94398b8799e04ec06bad595cbebf"/><file name="breadcrumbs.phtml" hash="d07a08ba66f6b9c54c32bebb33d5a7f1"/><dir name="form"><file name="container.phtml" hash="4728b83c25edf04952078d3113b776a7"/><dir name="element"><file name="gallery.phtml" hash="c6a7f19c77d2c219d4f8a63cb0e6ecb2"/></dir><file name="element.phtml" hash="26bf4a29bc07852e142c74c7cbb5f787"/><dir name="renderer"><file name="element.phtml" hash="2b99f440e7777996b2e0b79d7254f5ff"/><dir name="fieldset"><file name="element.phtml" hash="99f61048f6fc113d365a0c5ed65a31ac"/></dir><file name="fieldset.phtml" hash="23a1eb7ed586b185b408d4bbcd3e94e2"/></dir></dir><file name="form.phtml" hash="499596a8e7a8c65e5ff631d903c772c7"/><dir name="grid"><file name="container.phtml" hash="4b85761a428cf997e311a29c82a4a758"/><file name="massaction.phtml" hash="1238689acae994fccefd28b268ea4240"/><file name="serializer.phtml" hash="b41a09764ae7bca5cd667cef1a53ae96"/></dir><file name="grid.phtml" hash="bbef7840300e68f547780f141eedacef"/><dir name="instance"><dir name="edit"><file name="layout.phtml" hash="962c5510fa3ddf1109764fa0dad116f1"/></dir><file name="js.phtml" hash="a0a8117a3bfaf775007e8c0a9a60a806"/></dir><file name="tabs.phtml" hash="5ce995fc612fee633ee96509a023c16e"/><file name="tabshoriz.phtml" hash="31ca469aad10ad489ee718b5b43c8940"/><file name="tabsleft.phtml" hash="05b54cfa72ea6391410eebc3a12fca65"/><dir name="view"><file name="container.phtml" hash="ca39d17b346fcaadfdadcb25460cdf48"/></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><file name="below_ie7.css" hash="0e001acdf373859110b3402e724c59cd"/><file name="boxes.css" hash="7c050f817f0472a797f583ab121645c2"/><file name="custom.css" hash="b1ab65e10053f39b57ab8064cfd60d8a"/><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><file name="ie7.css" hash="c2e775278e92e710be80715c31024c2c"/><file name="iestyles.css" hash="328c87560bcfe0261a039c65ce0454dd"/><dir name="images"><file name="accordion_close.gif" hash="875409122fc82f5f6705e20dd801fd3d"/><file name="accordion_close.png" hash="6213698b5f69bb2907a5c7bb94b5fe8d"/><file name="accordion_open.gif" hash="d9d50e220b0b676094c6134a9708194e"/><file name="accordion_open.png" hash="9fbc3aba23ce5e0465e4d1cf3f6a7aee"/><file name="add_btn_icon-disabled.gif" hash="c8f6a5cfb455ef121efb56a747821f82"/><file name="add_btn_icon.gif" hash="7300097305b577ee564dc49102822d16"/><file name="address_list_li.gif" hash="79b917b514e35ce0a7833a5e268fd9f7"/><file name="address_list_on_arrow.gif" hash="3a2884ddcc87ebd48883662530b9de1b"/><file name="address_list_over_arrow.gif" hash="e826883c71b1184bd4f29433e39c18ad"/><file name="address_list_over_bg.gif" hash="56291480cc89de9d817205a5f23b66dd"/><file name="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><file name="ajax-loader.gif" hash="e2a38f1e23288e315af3c55416bc1ce7"/><file name="application_view_tile.gif" hash="f595a133bf466cb91be23d9686fe6281"/><file name="arrow_sort_move.gif" hash="f5ac151a2b0cb1f07d6e771b8aee0ea7"/><file name="bg_collapse.gif" hash="2333c68e38163ed4656da82b9bcf362b"/><file name="bg_create_order_totals.gif" hash="ff6ab75c050b959c539cc6a6fdff2934"/><file name="bg_notifications.gif" hash="a365594725a83585d989f722b3d8c458"/><file name="bg_window_mask.png" hash="93d6efad062d24c94c105802b138b6a5"/><file name="bkg_btn-close.gif" hash="df3f2332f0bad01e031deb22b81f630c"/><file name="bkg_btn-close2.gif" hash="822457d78fb3c21dc12e9777d83eb4f1"/><file name="bkg_config-advanced.png" hash="b898594a9f1849bf386c06979ef613a8"/><file name="bkg_config-nested.png" hash="7b0fdbf98746c3c916b432c37321ccc4"/><file name="bkg_config-shaddow.png" hash="9ee4318e3f4afc446d26e7f66d01cfbd"/><file name="bkg_tooltip.png" hash="56cfed3ed8a65b19f8de88946d1a0a01"/><file name="blank.gif" hash="5722d7bd0f1e1379d0a2005a0a9ea401"/><file name="box_bg.gif" hash="4c501bd6db9d361c18780f106a809b03"/><file name="breadcrumb_bg.gif" hash="72c4adf6c75b4640ca8f7cadffa42266"/><file name="btn_add-image_icon.gif" hash="1d42210fd29fc534d9ed6b41e811d40f"/><file name="btn_add-variable_icon.gif" hash="a2db02e318d107d5b57b444c8d80b8f8"/><file name="btn_add-widget_icon.gif" hash="b4f66ca7f6097fbafd672e0b3f076ef4"/><file name="btn_add-widget_icon2.gif" hash="467acd3a14fb8be37191f5d2ec5a5b13"/><file name="btn_back_bg.gif" hash="8be512788b8044fe31aa8d00cc16ba7b"/><file name="btn_bare_bg.gif" hash="ddbbab8c0d201c3e502d50e7d4a3d64b"/><file name="btn_bg-disabled.gif" hash="079971a9d2c385fe353d35716ec9f26b"/><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="btn_bg.png" hash="6e3b7003381f919e8f6533444afaa978"/><file name="btn_cancel_bg.gif" hash="fcb3506858fcfa8d1778b0683dc89f54"/><file name="btn_delete_bg.gif" hash="ad740d0c16f2f6603c8ef023004d6539"/><file name="btn_go.gif" hash="1bd787868713767cc205e2ee25e41f62"/><file name="btn_gr_bg.gif" hash="6cc324b79a512150fee24fb3517d22cb"/><file name="btn_gr_on.gif" hash="820c134df02f7bc12efa5a9ac3b4d3dd"/><file name="btn_gr_over.gif" hash="d4c8b807d64c1f493d17c6c9d2bab69a"/><file name="btn_loading-icon.gif" hash="45f500105be432a12c78fed2b4592cf9"/><file name="btn_login.gif" hash="79fa32d49d3f4e39d3fbf8327f9229e1"/><file name="btn_on_bg.gif" hash="709cf5b0be137db1ef8427688503bf37"/><file name="btn_over_bg.gif" hash="f91641168454c03d1fa72731ec97a2b3"/><file name="btn_show-hide_icon.gif" hash="0238c509b33ba56c25df9513bb48f804"/><file name="btn_task_bg.gif" hash="5e0594bd9cbfcc1e32ffa918d7f9c812"/><file name="button-close.png" hash="04d0907b2d7fc3240693497b199f64f5"/><file name="cancel_btn_active_bg.gif" hash="91ce403d286eef2b4e0c13733875882f"/><file name="cancel_btn_bg.gif" hash="26749cf4949ac27c30f597434d3bde65"/><file name="cancel_btn_icon.gif" hash="97e0cd94ed31d6f2a1181f627e60e9a3"/><file name="cancel_btn_over_bg.gif" hash="45eb4e883b17375961672f5390387c31"/><file name="cancel_icon.gif" hash="70a23b78353f0a7b9b118a937fcb7ea9"/><file name="config_tab_dt_bg.gif" hash="a33f71077ca4078caa794cae01d9fca7"/><file name="dashboard-close.gif" hash="5ae5afd61e937fcd2d5b84641255ee4d"/><file name="db-graph-bg.gif" hash="5d76efb7c3244f5684df2566782124ea"/><file name="db-graph-bottom-bg.gif" hash="b58ced87a38a10891106329ae882aa1c"/><file name="db-graph-line-bg.gif" hash="f16bb08e040c2c0a3e23b3f35c54b79b"/><file name="db-graph-line2-bg.gif" hash="744ebfdba20d050f4d252afc216394be"/><file name="db-graph-x-bg.png" hash="d5c26510718a78d22083916d80ef7a22"/><file name="db-header-bg.png" hash="3976cb6351e167686a501a85cf3a68e9"/><file name="db-menu-bg-hov.gif" hash="34ea76a6d105d90fcb63bf105aadb8f7"/><file name="db-menu-bg-up.gif" hash="b0f754872dff5f2f0dc57ba193fdfa4c"/><file name="db-menu-bg.gif" hash="ea534c3c09bb309e566b6ae876655e13"/><file name="db-menu-sep-last.gif" hash="a01fe34854e1187e466fd58d462c4106"/><file name="db-menu-sep.gif" hash="7c5ae1cd59a189261cc3244358d5c1ad"/><file name="db-menu-start.gif" hash="aa5cac2194d937cc7fa904ccfce70ecc"/><file name="db-scroll-bg.gif" hash="06d2411e3b5f350ab21b625439d2d69d"/><file name="db-scroll-but-bot-roll.png" hash="6bc5e482f3f6d8fb1fc5014ddea43706"/><file name="db-scroll-but-bot.png" hash="25c0181e76ff8ceb3c0ec59071b8c72c"/><file name="db-scroll-but-top-roll.png" hash="b7961f2a3b5b641694a9b0b30d58e46b"/><file name="db-scroll-but-top.png" hash="de7df96e961596be9ff556924259b98b"/><file name="db-scroll-roller.png" hash="e01dde7bd096c52179acf29a425a29e5"/><file name="db-tab-bottom-left-bg.gif" hash="124388d44ac58b029377c6311a4782d5"/><file name="db-tab-bottom-mid-bg.gif" hash="9c48f33aa8907cfcb227bc779c2e1dce"/><file name="db-tab-bottom-right-bg.gif" hash="1db45e6fd8abc67d59f96a676607b412"/><file name="db-tab-footer.gif" hash="cac8928acba75bc1edd73186ced78e5c"/><file name="db-tab-header-sep.gif" hash="580312af7441b6a62f7e32081c40fb0f"/><file name="db-tab-header.gif" hash="fdf493b9477fcff7e7be98405effc33d"/><file name="db-tab-left.gif" hash="3fe3c55267dbbdd1db2ff959ccc9e0be"/><file name="db-tab-right.gif" hash="b7a32c8b03efe2fbdb63215d0446e3be"/><file name="dotted_divider_dark.gif" hash="8bf1de196d9ea048bfb25155cedd2e9e"/><file name="dotted_divider_light.gif" hash="92e562bf2070110f6b0a15e29b845445"/><file name="edit_icon.gif" hash="dbda31751c78d964c04394e9d8533187"/><file name="entry_edit_head_arrow_down.gif" hash="985c3ce4439fbf8bb2216fc7e73a3f0b"/><file name="entry_edit_head_arrow_down2.gif" hash="d68dd0fbc2819858a26ea2835c05df77"/><file name="entry_edit_head_arrow_up.gif" hash="d2b90a1823fff9f3917f19b427410144"/><file name="entry_edit_head_bg.gif" hash="1086b7196e8b33c4f46e49fecef0f35f"/><file name="error-msg.png" hash="3cd27b642416dacdc28907c89d934886"/><file name="error_msg_icon.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="fam_account.gif" hash="c910fd1ff41b940d71b0835e02fc143e"/><file name="fam_application_form_delete.png" hash="972c2d998fc19572dd64af6b5e2e898e"/><file name="fam_application_view_tile.gif" hash="f595a133bf466cb91be23d9686fe6281"/><file name="fam_asterisk_orange.gif" hash="908d44da90de5e54185764d093bbdb77"/><file name="fam_bin.gif" hash="2fb388bc9f1d32d3802db8e91dc238bc"/><file name="fam_book_open.png" hash="0ba89b9fbe7e88d4c6896ed0a1f495aa"/><file name="fam_bullet_disk.gif" hash="9fe82691d960c18d3d315c3f9164af4f"/><file name="fam_bullet_error.gif" hash="008802f44288b732b59cfe9fdbfecefe"/><file name="fam_bullet_success.gif" hash="465a056a3ba3d94367f51c3c0b751391"/><file name="fam_calendar.gif" hash="0614207ce4e3e0a9bd631b39e7692e3c"/><file name="fam_cart.gif" hash="1f2fd2c8ac6574488ea78302b6856191"/><file name="fam_comment.gif" hash="5138f9a4b6019a5b14b8ff9a32a3cb89"/><file name="fam_creditcards.gif" hash="b75b8ce2f4fceb58f8082c48344560c7"/><file name="fam_folder_database.gif" hash="e86175ff0f389ade1fc7bf15e03346eb"/><file name="fam_folder_palette.gif" hash="c0941b9145e06d53cc0d17ac4c151764"/><file name="fam_folder_table.gif" hash="e2914ba75944acd2a9e2d338fa339e16"/><file name="fam_group.gif" hash="52d778dddbf48b8d04226bee9370a7ef"/><file name="fam_help.gif" hash="2b5ed4c13a8e24456207b757826c7b2c"/><file name="fam_house.gif" hash="8eb2d580c5a40b7974f4263ca64fb94a"/><file name="fam_layout.gif" hash="5366a5f02260d3a860ef0c4787282ad6"/><file name="fam_leaf.png" hash="078d4f24683331b4557356a59e67b125"/><file name="fam_link.gif" hash="78590d5d8375d1baabe7b66d7b9ceb7d"/><file name="fam_lorry.gif" hash="174e86e45e76e7008fa3510cefa85047"/><file name="fam_money.gif" hash="6996bad465222fb6487cab94b4607846"/><file name="fam_money_add.gif" hash="70ceed401fe9913305f2362f7e26225d"/><file name="fam_monitor.gif" hash="f3bc806ff9d0907320b03018ba2d00ea"/><file name="fam_newspaper.gif" hash="9e5fee06a543742045118a95f2debcb8"/><file name="fam_newspaper_delete.gif" hash="41acabfc19102be92d3ccbc66d1fede3"/><file name="fam_newspaper_error.gif" hash="009bfa425298e1d2e44e38e58cd97938"/><file name="fam_newspaper_go.gif" hash="eb43105f8e13e3a752d7ca33bb086831"/><file name="fam_package.gif" hash="bf9be09ef64d006455baa211b7c03983"/><file name="fam_package_go.gif" hash="e4f8d380c2f8e5a7345e360293433764"/><file name="fam_page_white.gif" hash="26940eb67826c5af72b6048c7c5a8335"/><file name="fam_page_white_edit.gif" hash="a4f88300b74ad592a5c47ed54ff07af9"/><file name="fam_rainbow.gif" hash="e8b04cc945b3582a181d4ddbc2d2325f"/><file name="fam_refresh.gif" hash="01bbef614023c0890812e76bc7ecf7e0"/><file name="fam_server_database.gif" hash="7901fa06ffd68ed730cf43bb560756fd"/><file name="fam_status_online.gif" hash="a80019ffa3a573f709772ed1099343fc"/><file name="fam_tag_orange.gif" hash="6ce735a0e590bda040b6e1614c42e58a"/><file name="fam_user.gif" hash="63bbdd6d9d7a27591907a7b87898e259"/><file name="fam_user_comment.gif" hash="014dfd31d9af40e3d5960b2b0d900da3"/><file name="fam_user_edit.gif" hash="f5b36e803060c6b82e639a4fad57b9f7"/><file name="filter_row_bg.gif" hash="013a0929a7b2ddc6823bdda17d08acc0"/><file name="footer_bg.gif" hash="7724711d3ca07a5e46a6030e86743a71"/><file name="gift-message-collapse.gif" hash="5b710f5faa9c7352a39c10e3ebbee6fc"/><file name="gift-message-expand.gif" hash="fd53a70cbb1ea048754657a63787e9cb"/><file name="gift-message-grid-column-bg.gif" hash="97a8a9b8cc4ab68e7404ccf1320f50a6"/><file name="grid-cal.gif" hash="b1468e5239504974c689eea5d93f86d4"/><file name="grid_sort_asc.gif" hash="b78c3a1a27ac9672a31b7d1bbac60322"/><file name="grid_sort_desc.gif" hash="d958b946eba3dba863d724530a0dba1a"/><file name="grid_th_bg.gif" hash="8f4349fac728858374e17edf03390977"/><file name="grid_th_onclick_bg.gif" hash="7bf331e2a41e5331c4210bdc6adc4383"/><file name="grouped_to_order_icon.png" hash="4bdae9a6199655027b8b8aeee8f80ce4"/><file name="header_bg.gif" hash="cbe510856afa5cb0c32642c1f9a8eceb"/><file name="header_top_bg.gif" hash="8440b04c5cb6b1451bb886bfbef260a5"/><file name="horiz_tabs_ul_bg.gif" hash="58dbd9c45f76993346c2bb788896248e"/><file name="i_notice.gif" hash="ebd56dc80b8346e10e93628bc0e6c372"/><file name="i_question-mark.png" hash="23201b7ac207eebd9be0776ea44098a4"/><file name="ico_success.gif" hash="0afb20898a704a106cb4c598868abf32"/><file name="icon-enabled.png" hash="5fa7c06b312cbea3675e844686e434af"/><file name="icon-tooltip.png" hash="5767601cd66b23d0b6fe8defc10dd48d"/><file name="icon_btn_add.gif" hash="7300097305b577ee564dc49102822d16"/><file name="icon_btn_back.gif" hash="89ed97cede3f68241446a62c96e3ce4c"/><file name="icon_btn_delete.gif" hash="dbde0b76d36cfd624bf0de166d0a265e"/><file name="icon_btn_save.gif" hash="f5da95ac65efff5f5cf9c8830202764d"/><file name="icon_edit_address.gif" hash="d1ca2bb3a5c86afd379f25d9fc4352e3"/><file name="icon_export.gif" hash="9a13f20c6a17b41b9c357545c2da5636"/><file name="icon_export.png" hash="fb299dd13df666516eabe16f59193383"/><file name="icon_feed.gif" hash="0366583ed6e285d028442fcdebb05072"/><file name="icon_feed.png" hash="8537f6f88fcff4aac793247143d14e42"/><file name="icon_note_list.gif" hash="8d25ba225ca09b687a78bff510df5d10"/><file name="icon_remove_address.gif" hash="2de2b3d02c19adfb93e9e43a392db178"/><file name="login_box_bg.gif" hash="e4654826eaa8d5ebc0ab18e9bee71e1d"/><file name="login_box_bg.jpg" hash="404e37f4ee9f4ff9bfcb638741c7581d"/><file name="login_box_bg_auth.jpg" hash="d90a81db1064ec37b0cc92436725c24b"/><file name="login_box_bottom.jpg" hash="038f15261e74bc381484f2fcfa45a73b"/><file name="login_box_legal_bg.gif" hash="528ac4dd480c4fc00ac808bf17394c05"/><file name="login_logo.gif" hash="a15f85d59684e1ec548b758fb6165469"/><file name="logo-large.gif" hash="b938979c790d4aba4170054fc4a060be"/><file name="logo.gif" hash="c7e9f290d965f707e4c4a61bfdab58cb"/><file name="logo_email.gif" hash="b5c6c6f40ba031f613d0f2aaa7f3c087"/><file name="logo_print.gif" hash="b5c6c6f40ba031f613d0f2aaa7f3c087"/><file name="massaction_bg.gif" hash="8b5f4db3ab3ea09cd5bd0164d67c4f0d"/><file name="massaction_button_bg.gif" hash="4c8262817e48d007237124ce0e7f4d18"/><file name="massaction_links_delimiter.gif" hash="9a0337183b5b67c0eed75993d7f14d10"/><file name="middle_bg.gif" hash="ba4f176d2c553201ebab4aba5c6d3d20"/><file name="more_arrow.gif" hash="38bb4c0e9270250151486d0bb36c476f"/><file name="nav1_active.gif" hash="a7f9ec7689a65c6b796f0d9b97582d01"/><file name="nav1_bg.gif" hash="a1d4ef5b590ce0a425dc04e45ed06cbe"/><file name="nav1_off.gif" hash="5286cbd5ac9ec1b6c027d5b48a74bdab"/><file name="nav1_on.gif" hash="a7f9ec7689a65c6b796f0d9b97582d01"/><file name="nav1_over.gif" hash="2c70d6175f1c965c27dda0598a67e63c"/><file name="nav1_sep.gif" hash="5286cbd5ac9ec1b6c027d5b48a74bdab"/><file name="nav2_last_li_bg.png" hash="279935c9799679fc5894337eaabc7cf0"/><file name="nav2_last_li_over_bg.png" hash="39536f00824293d11242888a76f40a5f"/><file name="nav2_li_bg.gif" hash="0a4f34b0e4436c519d31203f19503b83"/><file name="nav2_li_bg.png" hash="2fad219d162324e9a19f2745d5b6d562"/><file name="nav2_li_over_bg.png" hash="dc37c4a4aab40ea2ae44dea5ea133a9d"/><file name="nav2_link_bg.gif" hash="dce00ddad351e72e83bc87274cbaa54a"/><file name="nav2_parent_arrow.gif" hash="60e012a14a077bd2257343facc369c0c"/><file name="nav3_bg.png" hash="2bc7af80ad8886013da38401b63ab6df"/><file name="nav_bg.gif" hash="1b857c7d35f35ef9f6cae9e03a4e3dff"/><file name="nav_list_bg.gif" hash="7a4e2bdb887c12d8a1152bbcc8c02a3c"/><file name="nav_nest_link_bg.gif" hash="1d0c6b374bf02ac4b5aa012955c431de"/><file name="nav_nest_link_over_bg.gif" hash="fae3c579a4d432503b1f4f929d070609"/><file name="nav_on_bg.gif" hash="ac624b580cae5a76f6c92abc5a44191d"/><file name="nav_parent_arrow.gif" hash="3a95559263e569dc1c8065cb2d9b3f2c"/><file name="note_bg.gif" hash="105967d7c15ab4610726eea52d862a97"/><file name="note_cell_bg.gif" hash="71e656d42f8ba8c2d477c6866c499b71"/><file name="note_msg_icon.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="notice-msg.png" hash="9cd1dfebccec8a2123d543fa49b17bd7"/><file name="pager_arrow_left.gif" hash="6e44f608dac8eb8be1d1ebee5a3285aa"/><file name="pager_arrow_left_off.gif" hash="30f5e56195ab3546b36f4016db5254be"/><file name="pager_arrow_right.gif" hash="cc79526156b7e0c8abce61fad3d53f77"/><file name="pager_arrow_right_off.gif" hash="f01b7dad9acf0180b5c62edbd7ea9939"/><dir name="paypal"><file name="logo-paypal.png" hash="d032551b47e48dced277c4fa344ac7f6"/><file name="pp-allinone.png" hash="c457fe4bfe28a18c90d0abd36fe3f880"/><file name="pp-alt.png" hash="37a166931ca15c465bd86311d15e0422"/><file name="pp-gateways.png" hash="90acb72c2f46fa131351efe0492d52cf"/><file name="pp-uk.png" hash="e0830ccb14533051b8b0340471744228"/></dir><file name="paypal_logo.gif" hash="871e205a64292121f4c893373acfb581"/><file name="paypal_section.png" hash="d032551b47e48dced277c4fa344ac7f6"/><file name="paypal_tick.gif" hash="e8685c1fb7c4c106ae4fd24e9bbf5a27"/><dir name="placeholder"><file name="thumbnail.jpg" hash="5c73b5aa515b1719f7b398f5131f91a8"/></dir><file name="process_spinner.gif" hash="345b30b4d0b6088d0151ecfbdf48c036"/><file name="product_rating_blank_star.gif" hash="5e20a299c0ff16168be38b6dde580eda"/><file name="product_rating_full_star.gif" hash="dd5aae332178d928a7f49dea7691b5f6"/><file name="reload.png" hash="84cc4883f78ef850814ea9b53989b2a7"/><file name="rule-ajax-loader.gif" hash="32dc1f5901143d36fbd7a6df3950819f"/><file name="rule_chooser_trigger.gif" hash="9c498e789c3ce734f5301c2475e2a04c"/><file name="rule_component_add.gif" hash="7914e57701ca26f5c8bf23c6bc3e1f25"/><file name="rule_component_apply.gif" hash="3f9b9025551da6963a9ecf8d184a204a"/><file name="rule_component_remove.gif" hash="4d785bcecfbe716fa4d749d20738a8f0"/><file name="save_btn_icon.gif" hash="f5da95ac65efff5f5cf9c8830202764d"/><file name="sec_nav_bg.gif" hash="99c6741591cdb2a2a128668a1d32d668"/><file name="section_menu_bg.gif" hash="f9edd44c92743a0c9ae9535a7992d6b1"/><file name="section_menu_bottom.gif" hash="167d2ef46ff80158c807b4b916501b28"/><file name="section_menu_link_bg.gif" hash="bcabd4fea0d67b181f21779564c2284b"/><file name="section_menu_link_over_bg.gif" hash="7da7e56567633aab279cf3aec6f49d8d"/><file name="section_menu_over_span_bg.gif" hash="f5ea5292f15ed62b99f0f51d9fff2c66"/><file name="section_menu_span_bg.gif" hash="dbf3916358e794ee809b4cf33903af2c"/><file name="section_menu_ul_bg.gif" hash="3aea6e5452f548438ca34e17954a9d6b"/><file name="side_col_bg.gif" hash="b3691fd62663457af39eaf71dd8cda5a"/><file name="simple_container_bg.gif" hash="56f1ac91169eb4896b8c91384fc8bf15"/><file name="sort-arrow-down.gif" hash="fc2cd9f756ce510c4470478d720f81cd"/><file name="sort-arrow-down.png" hash="dc65160d9d4d6cdd6bfe1b397a931975"/><file name="sort-arrow-up.gif" hash="39026b0ff1f0c18091caa60384491163"/><file name="sort-arrow-up.png" hash="da54e5306bdce67551aa415f5d7f7ea7"/><file name="sort_heading_bg.gif" hash="6066d09f237f556b0a4770e4788e7598"/><file name="sort_on_bg.gif" hash="0cb36788ed4fbf19e657acbc75a3f1b8"/><file name="sort_row_bg.gif" hash="f2e1c5cb26b9f5211419b99d30745244"/><file name="spacer.gif" hash="df3e567d6f16d040326c7a0ea29a4f41"/><file name="sub_button_bg.gif" hash="e3f66dd60510f9f7e937e2e55442c30a"/><file name="success-msg.png" hash="c64cb2acc3d0eeba48fdea83620913ed"/><file name="success_msg_icon.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="tabs_link_bg.gif" hash="34447929f5e6591ba9b5795b983fdfd4"/><file name="tabs_link_over_bg.gif" hash="2cf3f56884096055fb0bdf9474f280c9"/><file name="tabs_span_bg.gif" hash="bcabd4fea0d67b181f21779564c2284b"/><file name="tag_blue_edit.gif" hash="b2163ac3baf7d822b48593342846645a"/><file name="tn_cancel_bg.gif" hash="fcb3506858fcfa8d1778b0683dc89f54"/><file name="tooltip_bg.gif" hash="0aa4b866fc067a75f27ab749c1dabf74"/><file name="tooltip_corner.gif" hash="71146534671d5e0751505640b7c59859"/><file name="tooltip_top.gif" hash="032ff52a6ff5714cbdf6c1f62abaf7e5"/><dir name="tree_icons"><file name="join.gif" hash="4d5d614e0da056df815a4306d6368692"/><file name="joinbottom.gif" hash="4b3daa7f2cc584f1aac0d142275d7cba"/><file name="line.gif" hash="63ab38a6203262f15ca46c631232ea2c"/><file name="minus.gif" hash="d647fbbd0ec410b8f3bb3357b62eedcf"/><file name="minusbottom.gif" hash="b09d684cca7135ef728141aaf2464baa"/><file name="nolines_minus.gif" hash="eb2243a354ffcfac93ba0fe948f7167d"/><file name="nolines_plus.gif" hash="ec92b634b63608fb4b0dbf114e3b89e1"/></dir><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/><file name="varien_logo.gif" hash="6f10d0fe572cb012947c164217e9e428"/><file name="warning_msg_icon.gif" hash="4cf6ec7f59ab09f9c18b3a4301714c6d"/><dir name="widget"><file name="catalog__category_widget_link.gif" hash="8435943009f1f774bbd6a4809c719eb8"/><file name="catalog__product_widget_link.gif" hash="62f2d7020143f98ba7514469eb612a7f"/><file name="catalog__product_widget_new.gif" hash="37a5af9f98ae73e180ad0cca05c95324"/><file name="cms__widget_block.gif" hash="b7b0b1517cc38b18b92841b33b312190"/><file name="cms__widget_page_link.gif" hash="b839dee210e61850a5858cc8634cbccd"/><file name="default.gif" hash="684143ae5531aa6ba22215f4fadeea6c"/><file name="reports__product_widget_compared.gif" hash="bd3e5a5015eb2c5c64f1d11835166dc4"/><file name="reports__product_widget_viewed.gif" hash="44d5cd71e4fb7235f9cff0c7e2b2f531"/></dir><file name="widget_placeholder.gif" hash="2bd8d72cf12f8d7d0a6a3268f97786ff"/><file name="window_close.png" hash="3af14f053f360bf31f8ba2df73ec7f1e"/><file name="window_content.png" hash="08361df29783d46a2493cf0d8ad733a7"/><file name="window_top.png" hash="555a8db5efa3a252c2ead3d3dadd1075"/><dir name="wysiwyg"><file name="skin_image.png" hash="a521b0c60b001de4a3405e73c4a6cd4a"/></dir></dir><dir name="lib"><dir name="prototype"><dir name="windows"><dir name="themes"><dir name="magento"><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="content_bg.gif" hash="21278ea0da2d4256f4ced96b6080ba2e"/><file name="top_bg.gif" hash="26f28090de87d64f9b01bf624f89bfe2"/><file name="window_close.png" hash="3af14f053f360bf31f8ba2df73ec7f1e"/></dir><file name="magento.css" hash="d17d29bfa01e6b3f469c1e34daa2d2c0"/></dir></dir></dir></dir><file name="menu.css" hash="5054c586a77cb903848cceaaf08b7736"/><file name="oauth-simple.css" hash="ec27a5e8451d3b26ca9ab881a0c0a256"/><file name="print.css" hash="cc6cbc1ef42dd17187b6961f75268c4e"/><file name="reset.css" hash="4bf260890fb34be804dc967b07b26e63"/></dir></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Adminhtml</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Js_Ext</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Interface_Frontend_Base_Default-1.9.3.10.xml b/var/package/Interface_Frontend_Base_Default-1.9.3.10.xml
deleted file mode 100644
index f30a827..0000000
--- a/var/package/Interface_Frontend_Base_Default-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Interface_Frontend_Base_Default</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/afl-3.0.php">AFL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>This is a Magento themes base</summary>
-    <description>This is a Magento themes base</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:12</time>
-    <contents><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="etc"><file name="theme.xml" hash="8456ce6bc50c16bc6eb2f858d3551274"/><file name="widget.xml" hash="b039c91603c077fce6e6fb5697779eea"/></dir><dir name="layout"><file name="authorizenet.xml" hash="74589d8b92c296319407f0bcc46a5df3"/><file name="bml.xml" hash="85d0410a866de04e1035fccca375c830"/><file name="bundle.xml" hash="0d991090c4db718e54ac8a346d96c588"/><file name="captcha.xml" hash="8894a7165a42087ac2d9e8208e543ca2"/><file name="catalog.xml" hash="c123ba1f6a458fda2e9eb51cf9dfccaf"/><file name="catalog_msrp.xml" hash="617274bff686d2f4b7d968dad552ee8c"/><file name="cataloginventory.xml" hash="9f6066ff94eb73268af2e88b3eff411a"/><file name="catalogsearch.xml" hash="2032722cd8e7b792531bf23c1df03638"/><file name="checkout.xml" hash="a64880bf5f26a1ff63288611b4a402e0"/><file name="cms.xml" hash="2d7ead19f6967420ca1cf940689eeeef"/><file name="contacts.xml" hash="d63ec031ede1c113f9c8fdb1cb519c30"/><file name="core.xml" hash="d647dcd1e20bb299db3a0b7cc3aed2a8"/><file name="customer.xml" hash="372dcd60eb3076bac088a4c7f0d46b9c"/><file name="directory.xml" hash="d07d5dba3781de15fbaba737b42ef768"/><file name="downloadable.xml" hash="6591f5c7a59395059d6e220f561bffb4"/><file name="googleanalytics.xml" hash="8bb73d5563e553513684959a2ef2c332"/><file name="newsletter.xml" hash="ed64264aa5085d7c65c2628497dcc993"/><file name="oauth.xml" hash="6d1407d7b05af1d4ceb9b30449453dd4"/><file name="page.xml" hash="058a8ae61f2cdc1f79c8b4c51f3e17e8"/><file name="pagecache.xml" hash="66e331999d7509dd1a9c9b46bcd3eebb"/><file name="payment.xml" hash="5a2f743709d22c929c677475e3b8c6f3"/><file name="paypal.xml" hash="a760b0e6576eba3b28aba0e7bd8f8c68"/><file name="paypaluk.xml" hash="3951356c6f2d3ad52c5233158b45d070"/><file name="persistent.xml" hash="1f41380c13b127caa9df0aa4525f18cd"/><file name="poll.xml" hash="2e686135cb1a9ed5520bdef6a48da5d8"/><file name="productalert.xml" hash="84db302990121c0f40a95a6735895c15"/><file name="reports.xml" hash="e0243c38b1651d54b61044735a0eb242"/><file name="review.xml" hash="9f7dfb8bfdee047060697a0c2c05bb20"/><file name="rss.xml" hash="cb5df441e86a2fc6bfd6b3796cff3833"/><dir name="sales"><file name="billing_agreement.xml" hash="b6d7c6bcd1d34544ca17f816f6791922"/><file name="recurring_profile.xml" hash="cff2aa70bf8b88b5f0425086e61a4494"/></dir><file name="sales.xml" hash="84f65b624bed5a53b350572e81cdc928"/><file name="sendfriend.xml" hash="ab32892a9dc0055ba5073521ffc02576"/><file name="shipping.xml" hash="37470069637ffb1073c8d763f9878ce1"/><file name="tag.xml" hash="24224280175e238661d69ca681ad83c5"/><file name="weee.xml" hash="4a2cfd66198d46972ca85ae7b5629914"/><file name="wishlist.xml" hash="36019bd4ce8edd30cd728092b9e68696"/></dir><dir name="template"><dir name="authorizenet"><dir name="directpost"><file name="form.phtml" hash="d5cdd7b78c891bfff70e8790d6ffc12a"/><file name="iframe.phtml" hash="53746666b8a8db3b04729ade2ff6e2b2"/><file name="info.phtml" hash="fbc5be2a2c57b140b8514f1c82c33ef6"/></dir></dir><dir name="bundle"><dir name="catalog"><dir name="product"><dir name="list"><file name="partof.phtml" hash="20cfdaaca70ab5e35d0e2ccff8171273"/></dir><file name="price.phtml" hash="12e500578adc44420ec61286ce8bd9fe"/><dir name="view"><file name="option_tierprices.phtml" hash="29e771d963a3e0792ba1e95077ca2ec4"/><dir name="options"><file name="notice.phtml" hash="25150590765a6c50755e78047a202ff5"/></dir><file name="price.phtml" hash="61c5cb33985a75c3cef3f27eac22afb5"/><file name="tierprices.phtml" hash="1b3f9b2ba01c7202725d82abd01cc655"/><dir name="type"><dir name="bundle"><dir name="option"><file name="checkbox.phtml" hash="bc049a4508679dc542f5d5581926ba08"/><file name="multi.phtml" hash="11c5e1ed6a2673073f30fec116b1879d"/><file name="radio.phtml" hash="5c33d673c9d985711e4921ece0fd2c48"/><file name="select.phtml" hash="f75bdcb3b0bd7f6916d051687cb5a299"/></dir><file name="options.phtml" hash="b4f3e35dc1b5b57aee26e8da085e9979"/></dir><file name="bundle.phtml" hash="399cc732170698b099b8174e2b2de454"/></dir></dir></dir></dir><dir name="email"><dir name="order"><dir name="items"><dir name="creditmemo"><file name="default.phtml" hash="73e79f44b21bbd6ddeabff037e3706ee"/></dir><dir name="invoice"><file name="default.phtml" hash="ffc454b565cdb7aed698e1a41011d557"/></dir><dir name="order"><file name="default.phtml" hash="5445bb5670c0e7d43b4ad5f410bcee8d"/></dir><dir name="shipment"><file name="default.phtml" hash="c4aa6f9c29b8827264a733c6e4501768"/></dir></dir></dir></dir><dir name="rss"><dir name="catalog"><dir name="product"><file name="price.phtml" hash="ddf72b1d237e37ccbdc0cf6728bdb36c"/></dir></dir></dir><dir name="sales"><dir name="order"><dir name="creditmemo"><dir name="items"><file name="renderer.phtml" hash="392bef3029c29fb7c817df6212939166"/></dir></dir><dir name="invoice"><dir name="items"><file name="renderer.phtml" hash="5a876fc9dc7e9a686369262113ebbe93"/></dir></dir><dir name="items"><file name="renderer.phtml" hash="0ec902774af6f316712bc4a08894e98e"/></dir><dir name="shipment"><dir name="items"><file name="renderer.phtml" hash="9320433232f7529a1084e4912c843e9b"/></dir></dir></dir></dir></dir><dir name="callouts"><file name="left_col.phtml" hash="5924c31ef60634a290acb1363febff88"/><file name="right_col.phtml" hash="5924c31ef60634a290acb1363febff88"/></dir><dir name="captcha"><file name="zend.phtml" hash="dded7aa771db7b3935063f825765e8f4"/></dir><dir name="catalog"><dir name="category"><file name="page.phtml" hash="f65ed1cc0f8590be0f1ce42df42082e2"/><file name="view.phtml" hash="ca926a5109914e411e848c59e67f902e"/><dir name="widget"><dir name="link"><file name="link_block.phtml" hash="1ecdd16fc4e6edca73f2f47ccbf578df"/><file name="link_inline.phtml" hash="05d5399253bd9fdd3e544162c07bae2d"/></dir></dir></dir><dir name="layer"><file name="filter.phtml" hash="f60ce6a217bed17895e272974fea7295"/><file name="state.phtml" hash="aef918cb1dc87a6e19f15e9933ccdbf5"/><file name="view.phtml" hash="feefd9951d1a5f09f5afbdc6f172bfb5"/></dir><dir name="msrp"><file name="popup.phtml" hash="7c3cc106d79b705a4116fd9177e84781"/></dir><dir name="navigation"><file name="left.phtml" hash="5cd031a95462120d260f83986b7976a1"/><file name="top.phtml" hash="37273f3692f8d3202e34bab12db12448"/></dir><dir name="product"><dir name="compare"><file name="list.phtml" hash="2be9b104504b50e12736ba4335be1fcf"/><file name="sidebar.phtml" hash="e4a99b7993ef2f606cb145c0758e1874"/></dir><file name="gallery.phtml" hash="e5e78dccbf7d78232b19513c1c70ec0e"/><dir name="list"><file name="related.phtml" hash="7e3571c754e92568e49001f2e2774571"/><file name="toolbar.phtml" hash="98f9fbfb6baf00753121771d7d821638"/><file name="upsell.phtml" hash="95f6aa43904bbf23f708a2492ca1bf92"/></dir><file name="list.phtml" hash="a3819339b3ab9e332f5f4376a5bcf3d5"/><file name="new.phtml" hash="dfbd7b61a13fe64e621c552af68c3711"/><file name="price.phtml" hash="11c8607758a73dc990fe7210bc305a47"/><file name="price_msrp.phtml" hash="d47b6e3a6af79ba55d41ba7250a92233"/><file name="price_msrp_item.phtml" hash="7c98887e105b59df267d690a19a24812"/><file name="price_msrp_noform.phtml" hash="413603cebbf863156462956523e4fb21"/><file name="price_msrp_rss.phtml" hash="93dfe7555e290c626e4ca521fd8bdbc5"/><dir name="view"><file name="additional.phtml" hash="69b4be4cb728488c7258d59e02946888"/><file name="addto.phtml" hash="27212ac80f9f4f83ae82946bc935d5d2"/><file name="addtocart.phtml" hash="367552b5951f38a477f2770e345580ef"/><file name="attributes.phtml" hash="b4c881aded9930fe1bdd6fcceb32655e"/><file name="description.phtml" hash="210eb7ef6b1d8a89a789115dafc45bc0"/><file name="media.phtml" hash="9ce45ff36e3169883ba5388d8c63eb08"/><dir name="options"><file name="js.phtml" hash="4ac667882951aec76435d122ce5316e1"/><dir name="type"><file name="date.phtml" hash="59cc3b678a8e389fee9cadcdb9c10f2e"/><file name="default.phtml" hash="b39a69f3f00d6a5c3fd95afe6abc9c22"/><file name="file.phtml" hash="52140af4caec9b58dc2e4b68d6b1d097"/><file name="select.phtml" hash="eccbd8d8de7c8e92932aca2ace9e61c8"/><file name="text.phtml" hash="acaa8e0e08b174ec7da420e4294b646f"/></dir><dir name="wrapper"><file name="bottom.phtml" hash="763e684c32f170448930fb60d10f2a12"/></dir><file name="wrapper.phtml" hash="a99a31b8b2e50e972632a5e8cf969ddd"/></dir><file name="options.phtml" hash="20f2f16105aff5089d66c73edcac4f30"/><file name="price.phtml" hash="c162b62db5616ab0c13cf5899c8cf88e"/><file name="price_clone.phtml" hash="bb525601f75b38803c975fa76595604a"/><file name="tierprices.phtml" hash="46347b577e07c8472c548e64d9dc9426"/><dir name="type"><file name="configurable.phtml" hash="f7a80a8ac392000a0b0d5549d8999fae"/><file name="default.phtml" hash="8204682fcc86d1bdad4d81b6ba3cc191"/><file name="grouped.phtml" hash="629d1a2b1e6a4b755153a3d15e72b346"/><dir name="options"><file name="configurable.phtml" hash="802457191b401d09a9fd035df97d7991"/></dir><file name="simple.phtml" hash="f7a80a8ac392000a0b0d5549d8999fae"/><file name="virtual.phtml" hash="f7a80a8ac392000a0b0d5549d8999fae"/></dir></dir><file name="view.phtml" hash="59eff20144fa118bd9f2a636b269bfae"/><dir name="widget"><dir name="link"><file name="link_block.phtml" hash="aa60331637ee730e126e9259919dafc6"/><file name="link_inline.phtml" hash="ee6bac1fa8335c20361de2430b5160cd"/></dir><dir name="new"><dir name="column"><file name="new_default_list.phtml" hash="1ddf2d721a61fb4738f33a00fa7154d1"/><file name="new_images_list.phtml" hash="0886eb747ae3c78f3f90da6266b00f45"/><file name="new_names_list.phtml" hash="c13201f54054a71e9262a11cab75056e"/></dir><dir name="content"><file name="new_grid.phtml" hash="46e953204b8f7712aad512e90946664a"/><file name="new_list.phtml" hash="62b1c60b7d165a66ec7c98a1409703f7"/></dir></dir></dir></dir><dir name="rss"><dir name="product"><file name="price.phtml" hash="2e871c42449bc31765773c46004c1435"/></dir></dir><dir name="seo"><dir name="sitemap"><file name="container.phtml" hash="429b70d3cee186c5276609482dba7b6b"/></dir><file name="sitemap.phtml" hash="adf9fd9f748d0382e9c3acc00b16da0a"/><file name="tree.phtml" hash="5b027e5d45c1f9370de6f2de1396d764"/></dir></dir><dir name="cataloginventory"><file name="qtyincrements.phtml" hash="274918325bb27a3de7c94298b6c381a1"/><dir name="stockqty"><file name="composite.phtml" hash="b90787e9f5559fa3546dc8c30e230ae9"/><file name="default.phtml" hash="f2196ea260bf5525c6c7ff44650cbd22"/></dir></dir><dir name="catalogsearch"><dir name="advanced"><file name="form.phtml" hash="8417f817a3e6efbd5246bad1b62d0379"/><file name="result.phtml" hash="c13ee8c748a87933cc5a7ac111e3b924"/></dir><file name="form.mini.phtml" hash="eff2a2da159402068716e20faa4b42a6"/><file name="result.phtml" hash="398972ab3766eae5c2d290087d2607b9"/><file name="term.phtml" hash="03bca86ff71856e21f23fbc97b8e1489"/></dir><dir name="checkout"><dir name="cart"><file name="coupon.phtml" hash="61c8f7e500b54e9d988d8c97675f1d4e"/><file name="crosssell.phtml" hash="742e7d3489f9de170b79e78fb00928d7"/><dir name="item"><dir name="configure"><file name="updatecart.phtml" hash="98cd2a4a2cd71544c0612d76cb025984"/></dir><file name="default.phtml" hash="6cd6494f6a2651e921a037248fd3d7b6"/></dir><file name="noItems.phtml" hash="facfb03068b35b2bd351207286b02965"/><dir name="render"><file name="default.phtml" hash="33069ecebf9d11167e06f6c378315170"/><file name="simple.phtml" hash="7c2bb379ef071f854b3d6d8ac8e716ea"/></dir><file name="shipping.phtml" hash="7ed957412c64efb699db25642fc253c2"/><dir name="sidebar"><file name="default.phtml" hash="081e90f7e63a9243ab332eabc493cd4f"/></dir><file name="sidebar.phtml" hash="115c2cd1173ea4f073fab02a3007c0af"/><file name="totals.phtml" hash="10a59ce27180f0669e3fe02e9223f958"/></dir><file name="cart.phtml" hash="86aec6a4c52a841a19c1d60f7cbf7bf6"/><dir name="multishipping"><dir name="address"><file name="select.phtml" hash="fd2dbf03021661802dac6ba03d3189a4"/></dir><file name="addresses.phtml" hash="5d849deb8cd4d551d7f5f99597917ec6"/><file name="agreements.phtml" hash="72f8e7f0bcc4d72894ae6ca1041ebb9d"/><dir name="billing"><file name="items.phtml" hash="ff4ab0494c91e0b20effd1178a8df61b"/></dir><file name="billing.phtml" hash="5f789e827930c0a71f726e9d1c173f0b"/><dir name="item"><file name="default.phtml" hash="e52d0159c19c93fc5ba013c1f2ae5763"/></dir><file name="link.phtml" hash="0224f87f7b72da1e1e0d08dd38bd59cd"/><dir name="overview"><file name="item.phtml" hash="ce783a3ca3ac43bb52afb99eccc5ed00"/></dir><file name="overview.phtml" hash="3b3fa136cf6df9fe320ad72e4e5fdba9"/><file name="shipping.phtml" hash="5245d3b0579c17dab58500e205d71eb2"/><file name="state.phtml" hash="c125a8a52d97ceddc91c0dcb909e9849"/><file name="success.phtml" hash="d0f060fe4b50de86976973afa86bed74"/></dir><dir name="onepage"><file name="agreements.phtml" hash="45404001934939beee9eaed4f9ad16a0"/><file name="billing.phtml" hash="a1a2e307821a7a3a509516e25afad2b8"/><file name="failure.phtml" hash="6224a687fe25e0553491930fd6c2bfc1"/><file name="link.phtml" hash="63de860e4aa4c4a04bc81d8667bc1ffc"/><file name="login.phtml" hash="70d025b1cfa9fc5fdd2d7cb27d5058fc"/><dir name="payment"><file name="info.phtml" hash="c3199c3811d71236690c831b1f1806df"/><file name="methods.phtml" hash="6c680a1884378c0710b52da66ad4cd46"/></dir><file name="payment.phtml" hash="f0a0fe0496bbb19a1a460f583450e652"/><dir name="progress"><file name="billing.phtml" hash="1451ce8d849cd278b53494b924bee481"/><file name="payment.phtml" hash="210b7df0f97d8e30489f0e772077246e"/><file name="shipping.phtml" hash="04872e976465952fc7abeaea7b8c6d11"/><file name="shipping_method.phtml" hash="7fbd89f26fcce262232245633075d058"/></dir><file name="progress.phtml" hash="046556b8f5c0c0543a395a3cc096ba77"/><dir name="review"><file name="button.phtml" hash="9a37eea9980800d8e6e27e1b3bf0ebf3"/><file name="info.phtml" hash="4408d4e7e8b3c7119c74fde483db3f5c"/><file name="item.phtml" hash="f632c9cbb1c4504becbc7dea63dee81c"/><file name="totals.phtml" hash="ad34c45e104fbd91f5d37dddcce1282f"/></dir><file name="review.phtml" hash="fc140818bdb8a23094130d07cabd2933"/><file name="shipping.phtml" hash="27970a39acdba5d3ad1afb7ced73891c"/><dir name="shipping_method"><file name="additional.phtml" hash="8ab69ff9d687aaf1cbd4a84549767876"/><file name="available.phtml" hash="7713b0e4557977c9a3c7bb0e7cb3c4e4"/></dir><file name="shipping_method.phtml" hash="6bf0240797cd436ec542aa144fc435c4"/></dir><file name="onepage.phtml" hash="f08317a8d5d1d6195df40ae2d79e766e"/><file name="success.phtml" hash="8c638c68a1b2c9940cb35b5e0f5aed25"/><dir name="total"><file name="default.phtml" hash="732dcd5519918052dde74d5f8c706703"/><file name="nominal.phtml" hash="e79744c0722a6a52664b3db28db34726"/><file name="tax.phtml" hash="f04650078c8702105bb6e59ef8ffd7b7"/></dir></dir><dir name="cms"><file name="content.phtml" hash="38cbe3b1972b721c2d367bd21f74817b"/><file name="content_heading.phtml" hash="c6b0ffdd3ed68a9882888ac564224930"/><dir name="default"><file name="home.phtml" hash="bfc8946e23275a5a7438918169d9f2c5"/><file name="no-route.phtml" hash="b3f0906f2b159d8abace9bc3dcdd6625"/></dir><file name="meta.phtml" hash="e51ef9c07e2e628e142a427512fd9137"/><dir name="widget"><dir name="link"><file name="link_block.phtml" hash="624195969fabb9ac9d03b64e2a06e0b3"/><file name="link_inline.phtml" hash="2be71411f75e519e22043344eaccde1e"/></dir><dir name="static_block"><file name="default.phtml" hash="754d0192532d02bae5004d853670c5ca"/></dir></dir></dir><dir name="contacts"><file name="form.phtml" hash="c478a8c54c27c4683f60f8e80bd054c0"/></dir><dir name="core"><file name="formkey.phtml" hash="52f90aeb452765e92c5f7346768b513f"/><file name="link.phtml" hash="4e046010dbb7f5a248b389a1119b63db"/><file name="messages.phtml" hash="abc3e82d903030a00eeaacdfc46d313e"/></dir><dir name="customer"><dir name="account"><dir name="dashboard"><file name="address.phtml" hash="8d61408b412552263191f615379cd49e"/><file name="hello.phtml" hash="91006427be928ffd256ef3ca93c505c5"/><file name="info.phtml" hash="511f2299dd3299c0240d27da77e945b7"/><file name="newsletter.phtml" hash="a391459ffeac54b4e1e3a0d8bec91323"/></dir><file name="dashboard.phtml" hash="d66833deed9605f0217340ed3fd9d2cc"/><dir name="link"><file name="back.phtml" hash="a480026329e7b4f0ecda541162cdd370"/></dir><file name="navigation.phtml" hash="87023699db2126337b1ea8d88e4fd1c3"/></dir><dir name="address"><file name="book.phtml" hash="84f5e86e8d4857d8f8a94d3f99247594"/><file name="edit.phtml" hash="d4b56d385495b06bd0adfab247bccaa6"/></dir><file name="address.phtml" hash="2e9c6138dfab41d1c3cb824d27847b31"/><file name="balance.phtml" hash="38a6b224814284f34e215c3aeac08322"/><dir name="form"><file name="address.phtml" hash="0c1bcd2ddfc5a4844319d47205efc861"/><file name="changepassword.phtml" hash="864791f80064a75baf213684785f4785"/><file name="confirmation.phtml" hash="b09f339dad56e1bd32a9efea027a5242"/><file name="edit.phtml" hash="5c2f9978a5deb516a3ff7c4b87a0fe40"/><file name="forgotpassword.phtml" hash="df8a3447845149d968ca8d766b9c3f92"/><file name="login.phtml" hash="bc8ec2d0e1cf939ff8a9d13462df6080"/><file name="mini.login.phtml" hash="adf6356f12c48feb2c66e0dcad96d22a"/><file name="newsletter.phtml" hash="7b21f20e8965b2925ddab6cd3d25d8a8"/><file name="register.phtml" hash="9ec12739a03da9c1f1f5fb9ab01d37a9"/><file name="resetforgottenpassword.phtml" hash="00aafc38934f088a89922535340398b1"/></dir><file name="logout.phtml" hash="692bf6a91293dca20ac1d8d423cd4842"/><file name="orders.phtml" hash="415f7beedbc75c4b1444d8dfa43ef1a0"/><dir name="widget"><file name="dob.phtml" hash="1005a4b61b78219d1a24d2451f5721b9"/><file name="gender.phtml" hash="9ab80b2f02547be4910049747fccb44d"/><file name="name.phtml" hash="341bc06f2b7fc35de3f05fbe3fb286ee"/><file name="taxvat.phtml" hash="235c425c7329ba45ea9473f92148270e"/></dir><file name="wishlist.phtml" hash="3eb53b8ac5008e5ceda023bfd9244fcd"/></dir><dir name="directory"><dir name="currency"><file name="switch.phtml" hash="f3bdbd94aed70f0d5d5c172e58b4d767"/></dir><file name="currency.phtml" hash="3c8644ea81c5775ad3aff629c8c8d977"/><dir name="js"><file name="optional_zip_countries.phtml" hash="12e03bc68425dbade51f09c2175d55a8"/></dir></dir><dir name="downloadable"><dir name="catalog"><dir name="product"><file name="links.phtml" hash="42654e1abddd0b611a1993c08bc45fbb"/><file name="samples.phtml" hash="ea6139e298479fe9a3b9c9f477f5b754"/><file name="type.phtml" hash="6c50a8e98b8dd31ac03e6c5fb6690b38"/></dir></dir><dir name="checkout"><dir name="cart"><dir name="item"><file name="default.phtml" hash="c0637e971f56b908960fc3dd7dbf5a8a"/></dir></dir><dir name="multishipping"><dir name="item"><file name="downloadable.phtml" hash="dbcdbf5ea8a8803bb76f4929c70c49c2"/></dir></dir><dir name="onepage"><dir name="review"><file name="item.phtml" hash="e583ad71dd97f2e3b556ccb8f868db28"/></dir></dir><file name="success.phtml" hash="bc6f469a75bc1de8dfa15aded5d1f30e"/></dir><dir name="customer"><dir name="products"><file name="list.phtml" hash="18a141d934609d40a3f078df20a3508e"/></dir></dir><dir name="email"><dir name="order"><dir name="items"><dir name="creditmemo"><file name="downloadable.phtml" hash="a01adea37e9830daeda2298a057dc283"/></dir><dir name="invoice"><file name="downloadable.phtml" hash="2db18119c16c37edfab236c653a7047e"/></dir><dir name="order"><file name="downloadable.phtml" hash="41671123f6b166e6248c7aaf47fcfd92"/></dir></dir></dir></dir><dir name="sales"><dir name="order"><dir name="creditmemo"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="62281fb39c468a3c72ea4bafb0c34e04"/></dir></dir></dir><dir name="invoice"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="db789ff872ad20bdee90b7910bc04d5e"/></dir></dir></dir><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="b19302cf47d0f5f83dbdedbb2ed6778d"/></dir></dir></dir></dir></dir><dir name="email"><dir name="order"><dir name="creditmemo"><file name="items.phtml" hash="97b06e756e0dd6b49748a465ee6ac99d"/></dir><dir name="invoice"><file name="items.phtml" hash="66caf7d5ca0015a03fc713687dcaba7b"/></dir><dir name="items"><dir name="creditmemo"><file name="default.phtml" hash="f2a289aa7803a166604144486cb67893"/></dir><dir name="invoice"><file name="default.phtml" hash="f2a289aa7803a166604144486cb67893"/></dir><dir name="order"><file name="default.phtml" hash="f9b82d8136205af87f1248ec7894b436"/></dir><dir name="shipment"><file name="default.phtml" hash="de24831f6b719d9029fd891356e37340"/></dir></dir><file name="items.phtml" hash="50ccdd1b18c1646044ed4591182c1a81"/><dir name="shipment"><file name="items.phtml" hash="d27af9b1d046423b8b9336a579b2e86c"/><file name="track.phtml" hash="8f996f39588c8bcd7250074940445084"/></dir></dir><dir name="productalert"><file name="price.phtml" hash="b678f3974a9bc48e6abe0e090eccca58"/><file name="stock.phtml" hash="ef910dfede9981c99d26bd417672899a"/></dir></dir><dir name="giftmessage"><file name="inline.phtml" hash="19f369b97a63e187dfe4cbbf59b92875"/></dir><dir name="googleanalytics"><file name="ga.phtml" hash="ae4de836406da8b74f83e002c1dd045f"/></dir><dir name="newsletter"><file name="subscribe.phtml" hash="010ce9bf3338f5cc67e74cd39d74061e"/></dir><dir name="oauth"><dir name="authorize"><file name="button-simple.phtml" hash="7b7c4eddad3a6daa4ebc653d3c354aad"/><file name="button.phtml" hash="faf402dae0f6e2ee1498e3311ed20867"/><file name="confirm-simple.phtml" hash="654be81300352000efad878dc6790939"/><file name="confirm.phtml" hash="411e649a95a12f01e313f47415670bdc"/><dir name="form"><file name="login-simple.phtml" hash="5707d1b6ed9d5c9f760947af49b7afdd"/><file name="login.phtml" hash="a1f0159424c7deff76d7671b844e7314"/></dir><file name="head-simple.phtml" hash="35385fe88fa3969db9eb4c4ff4f0858d"/><file name="reject-simple.phtml" hash="30a809f48943c115e834f975d0706e6c"/><file name="reject.phtml" hash="dc70d7ac0460d0086ccee822d273aed6"/></dir><dir name="customer"><dir name="token"><file name="list.phtml" hash="c786ee5b27d4b2fe53f24fc762311607"/></dir></dir></dir><dir name="page"><file name="1column.phtml" hash="ba560885185c4174f30b34a83e74d1d7"/><file name="2columns-left.phtml" hash="15e087a80a45babc5f31d1210f1a8f16"/><file name="2columns-right.phtml" hash="b6bfd3f33b2c52dccc39b61649c4f411"/><file name="3columns.phtml" hash="605fc8c99f65573d0cd0d5028f70ab22"/><file name="empty.phtml" hash="d5ce8a6aa99a9312e36f8f30bbace818"/><dir name="html"><file name="breadcrumbs.phtml" hash="387c80cc4409b7d80fc0e109b5c26468"/><file name="cookienotice.phtml" hash="c1ab166aaca1f37131ade1df47b46f3b"/><file name="footer.phtml" hash="165f2e189ea95fbfdea4e2362a3f070a"/><file name="head.phtml" hash="dca7c9be1b47837f389b9e8c5760bc2d"/><file name="header.phtml" hash="b78450b9af7254cb3eca5b3239f2821b"/><file name="notices.phtml" hash="96f1d387f046315a1029acb6cec49ded"/><file name="pager.phtml" hash="a43620a9590e1c18ad866f45e21e55a0"/><file name="top.links.phtml" hash="8ee81889b89096fb2c73f15bc24625d7"/><file name="topmenu.phtml" hash="1f4ebb56d60d4c9e7a50e514ac33def4"/><file name="wrapper.phtml" hash="c5d2f15bf230989d4f932d1121df5fc7"/></dir><dir name="js"><file name="calendar.phtml" hash="b51f1073a88be80c620ca69b14c6afa9"/><file name="cookie.phtml" hash="583347e0052989c5b551f69c52cde80b"/></dir><file name="popup.phtml" hash="0d87ff223bbd31ab6b18e9cc0d7d48a0"/><file name="print.phtml" hash="1983a1945db0b690536338b03daa698c"/><file name="redirect.phtml" hash="205bdbdafaa0c29b3c48787ac5342aaa"/><dir name="switch"><file name="flags.phtml" hash="edb6a15d64c0ef384e70e92eab7f53c8"/><file name="languages.phtml" hash="8f26fa4d37ac034c48a63d5c066272c4"/><file name="stores.phtml" hash="00221806ad7ca5e599f88eca41b14000"/></dir><dir name="template"><file name="container.phtml" hash="6478f20491c01cef5a83f3ffa07b1383"/><file name="links.phtml" hash="83d62cf22893e64ae9b9548a5ba249e4"/><file name="linksblock.phtml" hash="cf2c5f3b4efccc1c6adbec81af428ab3"/></dir></dir><dir name="pagecache"><file name="cookie.phtml" hash="a803aa11c5e463f6ff7c31a22e3e938d"/></dir><dir name="paygate"><dir name="form"><file name="cc.phtml" hash="df6342dd4fc3a3700ee31e35e28963af"/></dir><dir name="info"><file name="cc.phtml" hash="d070d6bde2301d2dadf6da2069fcbe0e"/></dir></dir><dir name="payment"><dir name="catalog"><dir name="product"><dir name="view"><dir name="profile"><file name="options.phtml" hash="c169fdadee257741239dfc0a4ba99012"/><file name="schedule.phtml" hash="e3e2b2e6028163ac3349c3dd911d3ada"/></dir></dir></dir></dir><dir name="form"><file name="banktransfer.phtml" hash="1e5d9ed7e5afb0892ea5e9fdbee3d555"/><file name="cashondelivery.phtml" hash="74a08676d6e701110c5f77f1ca34775e"/><file name="cc.phtml" hash="b9883effd675b829993ff08552c7a8ff"/><file name="ccsave.phtml" hash="679e2f094fc2c2d78fa4210d7664f6ac"/><file name="checkmo.phtml" hash="3c750279b924b87776eafca6f95dfb62"/><file name="purchaseorder.phtml" hash="8bc2d0ce1aedd9206e62e6f8ee31425d"/></dir><dir name="info"><file name="banktransfer.phtml" hash="af54b6d8084d85a700bceaa8709a2d88"/><file name="checkmo.phtml" hash="b099571826a7253a0916a70c37b30f99"/><file name="default.phtml" hash="153c9c6e57f693a1d36c18b3273436b3"/><file name="purchaseorder.phtml" hash="a59afd0455a29faf454dae91919b959e"/></dir></dir><dir name="paypal"><file name="bml.phtml" hash="d1737b9d0742bfa69bd753f3c926aae9"/><dir name="express"><dir name="review"><file name="details.phtml" hash="bbf6399883c3a37ea12ec642692d17b3"/><dir name="shipping"><file name="method.phtml" hash="fa2893274e2e7c4ae48d1f595c87b4ab"/></dir></dir><file name="review.phtml" hash="7e9ed9af0177629fdcf6ce31dfc50f01"/><file name="shortcut.phtml" hash="7ae8c4de2e8e9994b6f33e320b19e393"/></dir><dir name="hss"><file name="form.phtml" hash="332124520ec379e3c0f0c5129a5631d6"/><file name="iframe.phtml" hash="947917ebd57fa7ca7a929548b2d394a4"/><file name="info.phtml" hash="98863ef8eacb97dd4c40f10a951b41c5"/><file name="js.phtml" hash="75a8ac107c1dbe16dcedd54b1dcfdbe9"/><file name="redirect.phtml" hash="3e8bc931bb1d3d1774d2104da54060e5"/><dir name="review"><file name="button.phtml" hash="b770ff4a61635fde04ae6a658df4f1a2"/></dir></dir><dir name="partner"><file name="logo.phtml" hash="bebdef15e1f7096908e07c5628f5c97f"/><file name="us_logo.phtml" hash="aa3285338078dbe88f9cae53f03551f8"/></dir><dir name="payflowadvanced"><file name="iframe.phtml" hash="2cbb140c3a6bd223354cfa06e7db3031"/><file name="info.phtml" hash="3dcb904ba9473835730e5b2c56f74b0b"/><file name="redirect.phtml" hash="e6b72ca7bde83d2243113054380ebe62"/></dir><dir name="payflowlink"><file name="iframe.phtml" hash="45e82ba69ec4e473867ca6bc96cb227b"/><file name="info.phtml" hash="669b0d5c5aa916bddf1b0b142c6cfa34"/><file name="redirect.phtml" hash="c5b14f888d014be722ee15b3702c7441"/></dir><dir name="payment"><file name="mark.phtml" hash="4bc2dbb74ebfd552b2c76c74104808f7"/><file name="redirect.phtml" hash="19911b7032f0ba43eef333c633dd7ef6"/></dir></dir><dir name="persistent"><dir name="checkout"><dir name="onepage"><file name="billing.phtml" hash="13434ce2442e0bc63dab47d7b9aaf06d"/><file name="login.phtml" hash="de9645ce1e4c75455d9146f4e2982f27"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="b878c732491c0a5195d6d40e7f464512"/><file name="register.phtml" hash="f53d23fdf5cc4d1711a917fa2a5ebdb8"/></dir></dir><file name="remember_me.phtml" hash="cd504465947d05dc5ae2b493c9c80119"/><file name="remember_me_tooltip.phtml" hash="36dade6318d828301d4cf41042fbd37b"/></dir><dir name="poll"><file name="active.phtml" hash="0bf9205a188d855687b431ec89ed1e23"/><file name="result.phtml" hash="65c1789af783de03d56462b40d01938a"/></dir><dir name="productalert"><file name="price.phtml" hash="65b7fb1b0cc1317e26a08f8648d96973"/><dir name="product"><file name="view.phtml" hash="ca66dfca016135d50c6f8939c48295c6"/></dir><file name="stock.phtml" hash="65b7fb1b0cc1317e26a08f8648d96973"/></dir><dir name="rating"><file name="detailed.phtml" hash="202e2d6270853475a79753d8bdd2c756"/><file name="empty.phtml" hash="7ba87f02c70b4f4b60a297cb5ac1b00d"/></dir><dir name="reports"><file name="home_product_compared.phtml" hash="552602ca1266ff755cbafd01535e59d7"/><file name="home_product_viewed.phtml" hash="f9c3451781a20f671f7080b4a9ee9044"/><file name="product_compared.phtml" hash="bd5d89a05002b08fcbd3dce160480a80"/><file name="product_viewed.phtml" hash="3ccf378d26c2345860c783d7f632e28e"/><dir name="widget"><dir name="compared"><dir name="column"><file name="compared_default_list.phtml" hash="113c005db1e886e4662c4904bff55cd7"/><file name="compared_images_list.phtml" hash="d64687ca7c578c319ed9697b08f3b29c"/><file name="compared_names_list.phtml" hash="ba1804e5e322f6f1dd5a94974db7df51"/></dir><dir name="content"><file name="compared_grid.phtml" hash="d6474c91d4868134e56f7242a4094bba"/><file name="compared_list.phtml" hash="f191a8126f3309f6f7c13d151b49ffeb"/></dir></dir><dir name="viewed"><dir name="column"><file name="viewed_default_list.phtml" hash="961efa3b5cbe37e4504e18e31468f807"/><file name="viewed_images_list.phtml" hash="15be6c66f9bad0e5103c7f43029be986"/><file name="viewed_names_list.phtml" hash="4ef13573ae93d66ac51b7873cd81888e"/></dir><dir name="content"><file name="viewed_grid.phtml" hash="a5e25525c30eeb6b9b7774e5538d7c18"/><file name="viewed_list.phtml" hash="164ba084766cbdd2b68aed4e0f26b565"/></dir></dir></dir></dir><dir name="review"><dir name="customer"><file name="list.phtml" hash="721598720e994135f3bc3e761b5266a9"/><file name="recent.phtml" hash="6460425ed956730056a9aea8bd6031ef"/><file name="view.phtml" hash="6c3895ddd69a8f55686ea8eb42328517"/></dir><file name="form.phtml" hash="bbfe207a22dc8fb09a91e9044b2e341a"/><dir name="helper"><file name="summary.phtml" hash="33a57af6b85492f060524b88625df882"/><file name="summary_short.phtml" hash="a60b251515c67da4038edf90f5dc3ef9"/></dir><dir name="product"><dir name="view"><file name="count.phtml" hash="8ab723f1249140f0ca48b364f8112a43"/><file name="list.phtml" hash="92d20ae766c890ace8304ac9e58be10f"/><file name="other.phtml" hash="efebc986f3a44c6f49cdf9d3c52b9a1d"/></dir></dir><file name="view.phtml" hash="48005db2881558b6e03eaaaf697b7422"/></dir><dir name="rss"><file name="list.phtml" hash="8f0a100373d0b9521dbbd57fe2f28cae"/><file name="nofeed.phtml" hash="66b5883f325d7112ab78fd9dfb5a1117"/><dir name="order"><file name="details.phtml" hash="b286a9ad7b09fa5c87b053d7b957b604"/></dir></dir><dir name="sales"><dir name="billing"><dir name="agreement"><file name="view.phtml" hash="49dcbf01b83da977a979bc36797430ea"/></dir><file name="agreements.phtml" hash="cb14430a9ac54ccfdbf17bc9f1f79299"/></dir><dir name="guest"><file name="form.phtml" hash="fd9701f4c8a38c70c7024da2537514c6"/></dir><dir name="order"><file name="comments.phtml" hash="4e2bbb7e35c890cab07b4d7a5e5fb52a"/><dir name="creditmemo"><dir name="items"><dir name="renderer"><file name="default.phtml" hash="28a876d2806cee7eeae3224c6526a799"/></dir></dir><file name="items.phtml" hash="2b4d90d22cc6f0ceef638ce69616ed1f"/></dir><file name="creditmemo.phtml" hash="8d29146bb68bbd7dfd4d2ab3e724fd09"/><file name="details.phtml" hash="9bf14dad4e85563b3ba95ccce0516161"/><file name="history.phtml" hash="d2d4c47407a2f06570c480aaea40e2b4"/><dir name="info"><file name="buttons.phtml" hash="d71041b3b80aee3f88874c0f80ec23d6"/></dir><file name="info.phtml" hash="778f1b6ca9c5e9dccd09bd7b1307c16a"/><dir name="invoice"><dir name="items"><dir name="renderer"><file name="default.phtml" hash="08290f0c4d459f1f18edcc617c1692c2"/></dir></dir><file name="items.phtml" hash="e9228aa6b8d6957eefc50adf8a3efac7"/></dir><file name="invoice.phtml" hash="da51c35209055d6576995fafd6694dfe"/><dir name="items"><dir name="renderer"><file name="default.phtml" hash="b5c769b54abe5b1f669a0c9af2d80616"/></dir></dir><file name="items.phtml" hash="8c0ab3ba6e5fb341cd42f02bed989d41"/><dir name="print"><file name="creditmemo.phtml" hash="d3272d37df20fee50f5a792cc464d64e"/><file name="invoice.phtml" hash="7d301500e9f9be183fc3c666b9e3be5e"/><file name="shipment.phtml" hash="ebd77328f43e38fa138804f2547b2917"/></dir><file name="print.phtml" hash="4e5cdf5e75e52df86b2ece184870b028"/><file name="recent.phtml" hash="f4bc187330665a28891fc6284f2a422e"/><dir name="shipment"><dir name="items"><dir name="renderer"><file name="default.phtml" hash="a7ce46546d4a4f490f366637c54e1e2e"/></dir></dir><file name="items.phtml" hash="731a8fb134a9c193792b0f7d4aa0fd45"/></dir><file name="shipment.phtml" hash="c53a270ef07998878ec596ef3d1ae9ec"/><file name="totals.phtml" hash="8a54cd1c5037413b76f4206da5550c2d"/><file name="trackinginfo.phtml" hash="913f8450b0cbe6f4da4faf39118e973b"/><file name="view.phtml" hash="26c6f0ed0d4091349f2163af7e7165d5"/></dir><dir name="payment"><dir name="form"><dir name="billing"><file name="agreement.phtml" hash="75af26f317cdfe9017f4b57e4dc7a9f5"/></dir></dir></dir><dir name="recurring"><file name="grid.phtml" hash="ddae03730b2834a5a3619cda9425902b"/><dir name="profile"><dir name="view"><file name="info.phtml" hash="9ca55ba84d3536d690d09a8aa5b8e4bd"/></dir><file name="view.phtml" hash="c5d47bcc570afc9c694926a1ad81a161"/></dir><file name="profiles.phtml" hash="4d10f8ec5ff497f1926b6ef0323f2119"/></dir><dir name="reorder"><file name="sidebar.phtml" hash="7f9cefbde5700ac8ce8951df0e9699c7"/></dir><dir name="widget"><dir name="guest"><file name="form.phtml" hash="eb6a798e961ffd5509176ad49d3edf89"/></dir></dir></dir><dir name="sendfriend"><file name="send.phtml" hash="4b8db87c894c94ad1f6587e4534d43cb"/></dir><dir name="shipping"><dir name="tracking"><file name="ajax.phtml" hash="f66b2a0722264981df2a5b37fe412c03"/><file name="popup.phtml" hash="dc8f61e5b30a79dd6b2c83ed39f7ec76"/></dir></dir><dir name="tag"><file name="cloud.phtml" hash="450830cdc8597f910f6eb406dde31f39"/><dir name="customer"><file name="recent.phtml" hash="71cd14d5ad4c95f9b0926b9b6aedc177"/><file name="tags.phtml" hash="4c62c7110a730b8d5325258b202de606"/><file name="view.phtml" hash="b559a661a42c03b70141dd7bbac20168"/></dir><file name="list.phtml" hash="ae6c7fde0813b471c999c7556121e69a"/><file name="popular.phtml" hash="e4012fefdbc97e5295ead2e872d0df02"/></dir><dir name="tax"><dir name="checkout"><file name="discount.phtml" hash="c27b58ad087dce0120af93a4cbe27150"/><file name="grandtotal.phtml" hash="571eec758ad2003cd201e2d8960bc2b8"/><file name="shipping.phtml" hash="f0a361a6d087fdf81b8c6dfa1b2cbfc8"/><file name="subtotal.phtml" hash="8d5e27373ab8bf9b0fb1ac2acb342513"/><file name="tax.phtml" hash="160b232674df65b96070e69cd66a8cda"/></dir><dir name="order"><file name="tax.phtml" hash="9fe704470fc18713b97e5e8deedb861e"/></dir></dir><dir name="wishlist"><dir name="button"><file name="share.phtml" hash="61798dad1157c98ed4e98b0af7a82149"/><file name="tocart.phtml" hash="2891dfcfd82fab82350afcefed091c10"/><file name="update.phtml" hash="53c08f709457b5885a30ec835958e5d6"/></dir><dir name="email"><file name="items.phtml" hash="d28fff1f899382b415164a4584ef0087"/><file name="rss.phtml" hash="a1087b27ab809a5998e622c137087c86"/></dir><dir name="item"><dir name="column"><file name="cart.phtml" hash="b084c2519f69de1a224605fc2adf23df"/><file name="image.phtml" hash="3d83a3268391dd756ef455bce3778253"/><file name="info.phtml" hash="b8c1b96ca6e00ab7c09db07b5b8d326b"/><file name="remove.phtml" hash="b028e9054c4892f403c276d75dbfc7cf"/></dir><dir name="configure"><file name="addto.phtml" hash="3abe455fd4f539f37c51217bf2a8a355"/></dir><file name="list.phtml" hash="4d2fb3e1a08425db2feebe2fa6ed5277"/></dir><file name="options_list.phtml" hash="b2aa9909656e715ca5155dadaefc89a3"/><dir name="render"><dir name="item"><file name="price.phtml" hash="e26c2ea7e209ccb0984c955dbb57875c"/><file name="price_msrp_item.phtml" hash="e1454858a70d8a612b3e54b46dff3b70"/><file name="price_msrp_rss.phtml" hash="e8b55402752b78d9ec9c373cd3ae762e"/></dir></dir><file name="shared.phtml" hash="62a2177ed3649e54aa4382db12123d73"/><file name="sharing.phtml" hash="a4a75e953b0e482d25fcabe1506e6794"/><file name="sidebar.phtml" hash="be14014de1603cc7b1ffc27240b50578"/><file name="view.phtml" hash="82cf14f404a5f44f3443dbc5e7a20bc1"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><file name="email-inline.css" hash="34e8133bb13499f73c46f89667e27ae8"/><file name="email-non-inline.css" hash="a84a967a0edf5b7b3d811fed2ba13590"/><file name="widgets.css" hash="1f452e26e107856cc540fb69b6a2bdc3"/></dir><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><dir name="images"><file name="calendar.gif" hash="b1468e5239504974c689eea5d93f86d4"/><dir name="catalog"><dir name="product"><dir name="placeholder"><file name="image.jpg" hash="097ab8a3051bc037ea3de0e17f440540"/><file name="small_image.jpg" hash="f825d16f97a640453553c79c48ebaa73"/><file name="thumbnail.jpg" hash="b2b682d28a08a748a73d2cda70ab5a57"/></dir></dir></dir><dir name="cookies"><file name="firefox.png" hash="425e1b2ddc38c0bba431fb54357c66a4"/><file name="ie6-1.gif" hash="5c27700e245762bc89ed8c3ee7183f21"/><file name="ie6-2.gif" hash="d8c55e15e1f711e5c259300a9c19551b"/><file name="ie7-1.gif" hash="d61edcc8a514a3c81ea116b7d38ddcb6"/><file name="ie7-2.gif" hash="0526a654e94c54866cad977c0a47d3e5"/><file name="ie7-3.gif" hash="4fb142def3f6cfd8d8d23e1315528a1e"/><file name="ie7-4.gif" hash="575c276231c6a91e28935ec98215e146"/><file name="ie7-5.gif" hash="3ae5fcc11fe89da91674d183872337c1"/><file name="ie7-6.gif" hash="95a4981a41785a8cde273c9b2edbfbc7"/><file name="opera.png" hash="34070d92180d4ee0e37b1dd8bb731cd7"/></dir><file name="cvv.gif" hash="83cdd38bf110b0f9c52fe84b56f45298"/><file name="fam_book_open.png" hash="0ba89b9fbe7e88d4c6896ed0a1f495aa"/><file name="reload.png" hash="84cc4883f78ef850814ea9b53989b2a7"/><dir name="widgets"><file name="i_block-list.gif" hash="fe8424127ecbe4b0d893bcf6f253dc1a"/><file name="i_widget-link.gif" hash="1bf753578171f147f0203e7b13bdd0c4"/><file name="i_widget-new.gif" hash="a75377ffed51b711cbc608ffaa1a2e7d"/></dir><file name="window_overlay.png" hash="9ec9aea4c2159e0b1e73bda29821a39f"/></dir><dir name="js"><file name="bundle.js" hash="0155fef3bde8ab4abcc3f233836bc33a"/><dir name="checkout"><file name="review.js" hash="579ed9bec667e810c07e75e7c4d9a059"/></dir><file name="giftmessage.js" hash="064bddbe613eb95862bdb2891d0d0cc6"/><file name="ie6.js" hash="5c623b1d30911e8d7d5ce3f488040637"/><file name="msrp.js" hash="a4ffe8a1d7442b48e74a03a610b25c1b"/><file name="opcheckout.js" hash="d46da63f5a4cfa08c4106e089cf5521d"/></dir><dir name="lib"><dir name="prototype"><dir name="windows"><dir name="themes"><dir name="magento"><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="content_bg.gif" hash="21278ea0da2d4256f4ced96b6080ba2e"/><file name="top_bg.gif" hash="26f28090de87d64f9b01bf624f89bfe2"/><file name="window_close.png" hash="3af14f053f360bf31f8ba2df73ec7f1e"/></dir><file name="magento.css" hash="69a5ff04546ca7849b8bb33c4da2a281"/></dir></dir></dir></dir></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Interface_Frontend_Base_Default-1.9.4.0.xml b/var/package/Interface_Frontend_Base_Default-1.9.4.0.xml
new file mode 100644
index 0000000..33fd55c
--- /dev/null
+++ b/var/package/Interface_Frontend_Base_Default-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Interface_Frontend_Base_Default</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/afl-3.0.php">AFL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>This is a Magento themes base</summary>
+    <description>This is a Magento themes base</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:31:58</time>
+    <contents><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="etc"><file name="theme.xml" hash="8456ce6bc50c16bc6eb2f858d3551274"/><file name="widget.xml" hash="b039c91603c077fce6e6fb5697779eea"/></dir><dir name="layout"><file name="authorizenet.xml" hash="74589d8b92c296319407f0bcc46a5df3"/><file name="bml.xml" hash="85d0410a866de04e1035fccca375c830"/><file name="bundle.xml" hash="0d991090c4db718e54ac8a346d96c588"/><file name="captcha.xml" hash="85e393327f1b260421eb23b1df8f3047"/><file name="catalog.xml" hash="c123ba1f6a458fda2e9eb51cf9dfccaf"/><file name="catalog_msrp.xml" hash="617274bff686d2f4b7d968dad552ee8c"/><file name="cataloginventory.xml" hash="9f6066ff94eb73268af2e88b3eff411a"/><file name="catalogsearch.xml" hash="2032722cd8e7b792531bf23c1df03638"/><file name="checkout.xml" hash="a64880bf5f26a1ff63288611b4a402e0"/><file name="cms.xml" hash="2d7ead19f6967420ca1cf940689eeeef"/><file name="contacts.xml" hash="d63ec031ede1c113f9c8fdb1cb519c30"/><file name="core.xml" hash="d647dcd1e20bb299db3a0b7cc3aed2a8"/><file name="customer.xml" hash="372dcd60eb3076bac088a4c7f0d46b9c"/><file name="directory.xml" hash="d07d5dba3781de15fbaba737b42ef768"/><file name="downloadable.xml" hash="6591f5c7a59395059d6e220f561bffb4"/><file name="googleanalytics.xml" hash="8bb73d5563e553513684959a2ef2c332"/><file name="newsletter.xml" hash="ed64264aa5085d7c65c2628497dcc993"/><file name="oauth.xml" hash="6d1407d7b05af1d4ceb9b30449453dd4"/><file name="page.xml" hash="058a8ae61f2cdc1f79c8b4c51f3e17e8"/><file name="pagecache.xml" hash="66e331999d7509dd1a9c9b46bcd3eebb"/><file name="payment.xml" hash="5a2f743709d22c929c677475e3b8c6f3"/><file name="paypal.xml" hash="a760b0e6576eba3b28aba0e7bd8f8c68"/><file name="paypaluk.xml" hash="3951356c6f2d3ad52c5233158b45d070"/><file name="persistent.xml" hash="1f41380c13b127caa9df0aa4525f18cd"/><file name="poll.xml" hash="2e686135cb1a9ed5520bdef6a48da5d8"/><file name="productalert.xml" hash="84db302990121c0f40a95a6735895c15"/><file name="reports.xml" hash="e0243c38b1651d54b61044735a0eb242"/><file name="review.xml" hash="9f7dfb8bfdee047060697a0c2c05bb20"/><file name="rss.xml" hash="cb5df441e86a2fc6bfd6b3796cff3833"/><dir name="sales"><file name="billing_agreement.xml" hash="b6d7c6bcd1d34544ca17f816f6791922"/><file name="recurring_profile.xml" hash="cff2aa70bf8b88b5f0425086e61a4494"/></dir><file name="sales.xml" hash="84f65b624bed5a53b350572e81cdc928"/><file name="sendfriend.xml" hash="ab32892a9dc0055ba5073521ffc02576"/><file name="shipping.xml" hash="37470069637ffb1073c8d763f9878ce1"/><file name="tag.xml" hash="24224280175e238661d69ca681ad83c5"/><file name="weee.xml" hash="4a2cfd66198d46972ca85ae7b5629914"/><file name="wishlist.xml" hash="36019bd4ce8edd30cd728092b9e68696"/></dir><dir name="template"><dir name="authorizenet"><dir name="directpost"><file name="form.phtml" hash="d5cdd7b78c891bfff70e8790d6ffc12a"/><file name="iframe.phtml" hash="53746666b8a8db3b04729ade2ff6e2b2"/><file name="info.phtml" hash="fbc5be2a2c57b140b8514f1c82c33ef6"/></dir></dir><dir name="bundle"><dir name="catalog"><dir name="product"><dir name="list"><file name="partof.phtml" hash="20cfdaaca70ab5e35d0e2ccff8171273"/></dir><file name="price.phtml" hash="12e500578adc44420ec61286ce8bd9fe"/><dir name="view"><file name="option_tierprices.phtml" hash="29e771d963a3e0792ba1e95077ca2ec4"/><dir name="options"><file name="notice.phtml" hash="25150590765a6c50755e78047a202ff5"/></dir><file name="price.phtml" hash="61c5cb33985a75c3cef3f27eac22afb5"/><file name="tierprices.phtml" hash="1b3f9b2ba01c7202725d82abd01cc655"/><dir name="type"><dir name="bundle"><dir name="option"><file name="checkbox.phtml" hash="bc049a4508679dc542f5d5581926ba08"/><file name="multi.phtml" hash="11c5e1ed6a2673073f30fec116b1879d"/><file name="radio.phtml" hash="5c33d673c9d985711e4921ece0fd2c48"/><file name="select.phtml" hash="f75bdcb3b0bd7f6916d051687cb5a299"/></dir><file name="options.phtml" hash="b4f3e35dc1b5b57aee26e8da085e9979"/></dir><file name="bundle.phtml" hash="399cc732170698b099b8174e2b2de454"/></dir></dir></dir></dir><dir name="email"><dir name="order"><dir name="items"><dir name="creditmemo"><file name="default.phtml" hash="73e79f44b21bbd6ddeabff037e3706ee"/></dir><dir name="invoice"><file name="default.phtml" hash="ffc454b565cdb7aed698e1a41011d557"/></dir><dir name="order"><file name="default.phtml" hash="5445bb5670c0e7d43b4ad5f410bcee8d"/></dir><dir name="shipment"><file name="default.phtml" hash="c4aa6f9c29b8827264a733c6e4501768"/></dir></dir></dir></dir><dir name="rss"><dir name="catalog"><dir name="product"><file name="price.phtml" hash="ddf72b1d237e37ccbdc0cf6728bdb36c"/></dir></dir></dir><dir name="sales"><dir name="order"><dir name="creditmemo"><dir name="items"><file name="renderer.phtml" hash="392bef3029c29fb7c817df6212939166"/></dir></dir><dir name="invoice"><dir name="items"><file name="renderer.phtml" hash="5a876fc9dc7e9a686369262113ebbe93"/></dir></dir><dir name="items"><file name="renderer.phtml" hash="0ec902774af6f316712bc4a08894e98e"/></dir><dir name="shipment"><dir name="items"><file name="renderer.phtml" hash="9320433232f7529a1084e4912c843e9b"/></dir></dir></dir></dir></dir><dir name="callouts"><file name="left_col.phtml" hash="5924c31ef60634a290acb1363febff88"/><file name="right_col.phtml" hash="5924c31ef60634a290acb1363febff88"/></dir><dir name="captcha"><file name="zend.phtml" hash="dded7aa771db7b3935063f825765e8f4"/></dir><dir name="catalog"><dir name="category"><file name="page.phtml" hash="f65ed1cc0f8590be0f1ce42df42082e2"/><file name="view.phtml" hash="ca926a5109914e411e848c59e67f902e"/><dir name="widget"><dir name="link"><file name="link_block.phtml" hash="1ecdd16fc4e6edca73f2f47ccbf578df"/><file name="link_inline.phtml" hash="05d5399253bd9fdd3e544162c07bae2d"/></dir></dir></dir><dir name="layer"><file name="filter.phtml" hash="f60ce6a217bed17895e272974fea7295"/><file name="state.phtml" hash="aef918cb1dc87a6e19f15e9933ccdbf5"/><file name="view.phtml" hash="feefd9951d1a5f09f5afbdc6f172bfb5"/></dir><dir name="msrp"><file name="popup.phtml" hash="7c3cc106d79b705a4116fd9177e84781"/></dir><dir name="navigation"><file name="left.phtml" hash="5cd031a95462120d260f83986b7976a1"/><file name="top.phtml" hash="37273f3692f8d3202e34bab12db12448"/></dir><dir name="product"><dir name="compare"><file name="list.phtml" hash="2be9b104504b50e12736ba4335be1fcf"/><file name="sidebar.phtml" hash="e4a99b7993ef2f606cb145c0758e1874"/></dir><file name="gallery.phtml" hash="e5e78dccbf7d78232b19513c1c70ec0e"/><dir name="list"><file name="related.phtml" hash="7e3571c754e92568e49001f2e2774571"/><file name="toolbar.phtml" hash="98f9fbfb6baf00753121771d7d821638"/><file name="upsell.phtml" hash="95f6aa43904bbf23f708a2492ca1bf92"/></dir><file name="list.phtml" hash="a3819339b3ab9e332f5f4376a5bcf3d5"/><file name="new.phtml" hash="dfbd7b61a13fe64e621c552af68c3711"/><file name="price.phtml" hash="11c8607758a73dc990fe7210bc305a47"/><file name="price_msrp.phtml" hash="d47b6e3a6af79ba55d41ba7250a92233"/><file name="price_msrp_item.phtml" hash="7c98887e105b59df267d690a19a24812"/><file name="price_msrp_noform.phtml" hash="413603cebbf863156462956523e4fb21"/><file name="price_msrp_rss.phtml" hash="93dfe7555e290c626e4ca521fd8bdbc5"/><dir name="view"><file name="additional.phtml" hash="69b4be4cb728488c7258d59e02946888"/><file name="addto.phtml" hash="27212ac80f9f4f83ae82946bc935d5d2"/><file name="addtocart.phtml" hash="367552b5951f38a477f2770e345580ef"/><file name="attributes.phtml" hash="b4c881aded9930fe1bdd6fcceb32655e"/><file name="description.phtml" hash="210eb7ef6b1d8a89a789115dafc45bc0"/><file name="media.phtml" hash="9ce45ff36e3169883ba5388d8c63eb08"/><dir name="options"><file name="js.phtml" hash="4ac667882951aec76435d122ce5316e1"/><dir name="type"><file name="date.phtml" hash="59cc3b678a8e389fee9cadcdb9c10f2e"/><file name="default.phtml" hash="b39a69f3f00d6a5c3fd95afe6abc9c22"/><file name="file.phtml" hash="52140af4caec9b58dc2e4b68d6b1d097"/><file name="select.phtml" hash="eccbd8d8de7c8e92932aca2ace9e61c8"/><file name="text.phtml" hash="acaa8e0e08b174ec7da420e4294b646f"/></dir><dir name="wrapper"><file name="bottom.phtml" hash="763e684c32f170448930fb60d10f2a12"/></dir><file name="wrapper.phtml" hash="a99a31b8b2e50e972632a5e8cf969ddd"/></dir><file name="options.phtml" hash="20f2f16105aff5089d66c73edcac4f30"/><file name="price.phtml" hash="c162b62db5616ab0c13cf5899c8cf88e"/><file name="price_clone.phtml" hash="bb525601f75b38803c975fa76595604a"/><file name="tierprices.phtml" hash="46347b577e07c8472c548e64d9dc9426"/><dir name="type"><file name="configurable.phtml" hash="f7a80a8ac392000a0b0d5549d8999fae"/><file name="default.phtml" hash="8204682fcc86d1bdad4d81b6ba3cc191"/><file name="grouped.phtml" hash="629d1a2b1e6a4b755153a3d15e72b346"/><dir name="options"><file name="configurable.phtml" hash="802457191b401d09a9fd035df97d7991"/></dir><file name="simple.phtml" hash="f7a80a8ac392000a0b0d5549d8999fae"/><file name="virtual.phtml" hash="f7a80a8ac392000a0b0d5549d8999fae"/></dir></dir><file name="view.phtml" hash="59eff20144fa118bd9f2a636b269bfae"/><dir name="widget"><dir name="link"><file name="link_block.phtml" hash="aa60331637ee730e126e9259919dafc6"/><file name="link_inline.phtml" hash="ee6bac1fa8335c20361de2430b5160cd"/></dir><dir name="new"><dir name="column"><file name="new_default_list.phtml" hash="1ddf2d721a61fb4738f33a00fa7154d1"/><file name="new_images_list.phtml" hash="0886eb747ae3c78f3f90da6266b00f45"/><file name="new_names_list.phtml" hash="c13201f54054a71e9262a11cab75056e"/></dir><dir name="content"><file name="new_grid.phtml" hash="46e953204b8f7712aad512e90946664a"/><file name="new_list.phtml" hash="62b1c60b7d165a66ec7c98a1409703f7"/></dir></dir></dir></dir><dir name="rss"><dir name="product"><file name="price.phtml" hash="2e871c42449bc31765773c46004c1435"/></dir></dir><dir name="seo"><dir name="sitemap"><file name="container.phtml" hash="429b70d3cee186c5276609482dba7b6b"/></dir><file name="sitemap.phtml" hash="adf9fd9f748d0382e9c3acc00b16da0a"/><file name="tree.phtml" hash="5b027e5d45c1f9370de6f2de1396d764"/></dir></dir><dir name="cataloginventory"><file name="qtyincrements.phtml" hash="274918325bb27a3de7c94298b6c381a1"/><dir name="stockqty"><file name="composite.phtml" hash="b90787e9f5559fa3546dc8c30e230ae9"/><file name="default.phtml" hash="f2196ea260bf5525c6c7ff44650cbd22"/></dir></dir><dir name="catalogsearch"><dir name="advanced"><file name="form.phtml" hash="8417f817a3e6efbd5246bad1b62d0379"/><file name="result.phtml" hash="c13ee8c748a87933cc5a7ac111e3b924"/></dir><file name="form.mini.phtml" hash="eff2a2da159402068716e20faa4b42a6"/><file name="result.phtml" hash="398972ab3766eae5c2d290087d2607b9"/><file name="term.phtml" hash="03bca86ff71856e21f23fbc97b8e1489"/></dir><dir name="checkout"><dir name="cart"><file name="coupon.phtml" hash="61c8f7e500b54e9d988d8c97675f1d4e"/><file name="crosssell.phtml" hash="742e7d3489f9de170b79e78fb00928d7"/><dir name="item"><dir name="configure"><file name="updatecart.phtml" hash="98cd2a4a2cd71544c0612d76cb025984"/></dir><file name="default.phtml" hash="6cd6494f6a2651e921a037248fd3d7b6"/></dir><file name="noItems.phtml" hash="facfb03068b35b2bd351207286b02965"/><dir name="render"><file name="default.phtml" hash="33069ecebf9d11167e06f6c378315170"/><file name="simple.phtml" hash="7c2bb379ef071f854b3d6d8ac8e716ea"/></dir><file name="shipping.phtml" hash="7ed957412c64efb699db25642fc253c2"/><dir name="sidebar"><file name="default.phtml" hash="081e90f7e63a9243ab332eabc493cd4f"/></dir><file name="sidebar.phtml" hash="115c2cd1173ea4f073fab02a3007c0af"/><file name="totals.phtml" hash="10a59ce27180f0669e3fe02e9223f958"/></dir><file name="cart.phtml" hash="86aec6a4c52a841a19c1d60f7cbf7bf6"/><dir name="multishipping"><dir name="address"><file name="select.phtml" hash="fd2dbf03021661802dac6ba03d3189a4"/></dir><file name="addresses.phtml" hash="5d849deb8cd4d551d7f5f99597917ec6"/><file name="agreements.phtml" hash="72f8e7f0bcc4d72894ae6ca1041ebb9d"/><dir name="billing"><file name="items.phtml" hash="ff4ab0494c91e0b20effd1178a8df61b"/></dir><file name="billing.phtml" hash="5f789e827930c0a71f726e9d1c173f0b"/><dir name="item"><file name="default.phtml" hash="e52d0159c19c93fc5ba013c1f2ae5763"/></dir><file name="link.phtml" hash="0224f87f7b72da1e1e0d08dd38bd59cd"/><dir name="overview"><file name="item.phtml" hash="ce783a3ca3ac43bb52afb99eccc5ed00"/></dir><file name="overview.phtml" hash="3b3fa136cf6df9fe320ad72e4e5fdba9"/><file name="shipping.phtml" hash="5245d3b0579c17dab58500e205d71eb2"/><file name="state.phtml" hash="c125a8a52d97ceddc91c0dcb909e9849"/><file name="success.phtml" hash="d0f060fe4b50de86976973afa86bed74"/></dir><dir name="onepage"><file name="agreements.phtml" hash="45404001934939beee9eaed4f9ad16a0"/><file name="billing.phtml" hash="a1a2e307821a7a3a509516e25afad2b8"/><file name="failure.phtml" hash="6224a687fe25e0553491930fd6c2bfc1"/><file name="link.phtml" hash="63de860e4aa4c4a04bc81d8667bc1ffc"/><file name="login.phtml" hash="70d025b1cfa9fc5fdd2d7cb27d5058fc"/><dir name="payment"><file name="info.phtml" hash="c3199c3811d71236690c831b1f1806df"/><file name="methods.phtml" hash="6c680a1884378c0710b52da66ad4cd46"/></dir><file name="payment.phtml" hash="f0a0fe0496bbb19a1a460f583450e652"/><dir name="progress"><file name="billing.phtml" hash="1451ce8d849cd278b53494b924bee481"/><file name="payment.phtml" hash="210b7df0f97d8e30489f0e772077246e"/><file name="shipping.phtml" hash="04872e976465952fc7abeaea7b8c6d11"/><file name="shipping_method.phtml" hash="7fbd89f26fcce262232245633075d058"/></dir><file name="progress.phtml" hash="046556b8f5c0c0543a395a3cc096ba77"/><dir name="review"><file name="button.phtml" hash="9a37eea9980800d8e6e27e1b3bf0ebf3"/><file name="info.phtml" hash="4408d4e7e8b3c7119c74fde483db3f5c"/><file name="item.phtml" hash="f632c9cbb1c4504becbc7dea63dee81c"/><file name="totals.phtml" hash="ad34c45e104fbd91f5d37dddcce1282f"/></dir><file name="review.phtml" hash="fc140818bdb8a23094130d07cabd2933"/><file name="shipping.phtml" hash="27970a39acdba5d3ad1afb7ced73891c"/><dir name="shipping_method"><file name="additional.phtml" hash="8ab69ff9d687aaf1cbd4a84549767876"/><file name="available.phtml" hash="7713b0e4557977c9a3c7bb0e7cb3c4e4"/></dir><file name="shipping_method.phtml" hash="6bf0240797cd436ec542aa144fc435c4"/></dir><file name="onepage.phtml" hash="f08317a8d5d1d6195df40ae2d79e766e"/><file name="success.phtml" hash="8c638c68a1b2c9940cb35b5e0f5aed25"/><dir name="total"><file name="default.phtml" hash="732dcd5519918052dde74d5f8c706703"/><file name="nominal.phtml" hash="e79744c0722a6a52664b3db28db34726"/><file name="tax.phtml" hash="f04650078c8702105bb6e59ef8ffd7b7"/></dir></dir><dir name="cms"><file name="content.phtml" hash="38cbe3b1972b721c2d367bd21f74817b"/><file name="content_heading.phtml" hash="c6b0ffdd3ed68a9882888ac564224930"/><dir name="default"><file name="home.phtml" hash="bfc8946e23275a5a7438918169d9f2c5"/><file name="no-route.phtml" hash="b3f0906f2b159d8abace9bc3dcdd6625"/></dir><file name="meta.phtml" hash="e51ef9c07e2e628e142a427512fd9137"/><dir name="widget"><dir name="link"><file name="link_block.phtml" hash="624195969fabb9ac9d03b64e2a06e0b3"/><file name="link_inline.phtml" hash="2be71411f75e519e22043344eaccde1e"/></dir><dir name="static_block"><file name="default.phtml" hash="754d0192532d02bae5004d853670c5ca"/></dir></dir></dir><dir name="contacts"><file name="form.phtml" hash="c478a8c54c27c4683f60f8e80bd054c0"/></dir><dir name="core"><file name="formkey.phtml" hash="52f90aeb452765e92c5f7346768b513f"/><file name="link.phtml" hash="4e046010dbb7f5a248b389a1119b63db"/><file name="messages.phtml" hash="abc3e82d903030a00eeaacdfc46d313e"/></dir><dir name="customer"><dir name="account"><dir name="dashboard"><file name="address.phtml" hash="8d61408b412552263191f615379cd49e"/><file name="hello.phtml" hash="91006427be928ffd256ef3ca93c505c5"/><file name="info.phtml" hash="511f2299dd3299c0240d27da77e945b7"/><file name="newsletter.phtml" hash="a391459ffeac54b4e1e3a0d8bec91323"/></dir><file name="dashboard.phtml" hash="d66833deed9605f0217340ed3fd9d2cc"/><dir name="link"><file name="back.phtml" hash="a480026329e7b4f0ecda541162cdd370"/></dir><file name="navigation.phtml" hash="87023699db2126337b1ea8d88e4fd1c3"/></dir><dir name="address"><file name="book.phtml" hash="84f5e86e8d4857d8f8a94d3f99247594"/><file name="edit.phtml" hash="d4b56d385495b06bd0adfab247bccaa6"/></dir><file name="address.phtml" hash="2e9c6138dfab41d1c3cb824d27847b31"/><file name="balance.phtml" hash="38a6b224814284f34e215c3aeac08322"/><dir name="form"><file name="address.phtml" hash="0c1bcd2ddfc5a4844319d47205efc861"/><file name="changepassword.phtml" hash="864791f80064a75baf213684785f4785"/><file name="confirmation.phtml" hash="b09f339dad56e1bd32a9efea027a5242"/><file name="edit.phtml" hash="5c2f9978a5deb516a3ff7c4b87a0fe40"/><file name="forgotpassword.phtml" hash="df8a3447845149d968ca8d766b9c3f92"/><file name="login.phtml" hash="bc8ec2d0e1cf939ff8a9d13462df6080"/><file name="mini.login.phtml" hash="adf6356f12c48feb2c66e0dcad96d22a"/><file name="newsletter.phtml" hash="7b21f20e8965b2925ddab6cd3d25d8a8"/><file name="register.phtml" hash="9ec12739a03da9c1f1f5fb9ab01d37a9"/><file name="resetforgottenpassword.phtml" hash="00aafc38934f088a89922535340398b1"/></dir><file name="logout.phtml" hash="692bf6a91293dca20ac1d8d423cd4842"/><file name="orders.phtml" hash="415f7beedbc75c4b1444d8dfa43ef1a0"/><dir name="widget"><file name="dob.phtml" hash="1005a4b61b78219d1a24d2451f5721b9"/><file name="gender.phtml" hash="9ab80b2f02547be4910049747fccb44d"/><file name="name.phtml" hash="341bc06f2b7fc35de3f05fbe3fb286ee"/><file name="taxvat.phtml" hash="235c425c7329ba45ea9473f92148270e"/></dir><file name="wishlist.phtml" hash="3eb53b8ac5008e5ceda023bfd9244fcd"/></dir><dir name="directory"><dir name="currency"><file name="switch.phtml" hash="f3bdbd94aed70f0d5d5c172e58b4d767"/></dir><file name="currency.phtml" hash="3c8644ea81c5775ad3aff629c8c8d977"/><dir name="js"><file name="optional_zip_countries.phtml" hash="12e03bc68425dbade51f09c2175d55a8"/></dir></dir><dir name="downloadable"><dir name="catalog"><dir name="product"><file name="links.phtml" hash="42654e1abddd0b611a1993c08bc45fbb"/><file name="samples.phtml" hash="ea6139e298479fe9a3b9c9f477f5b754"/><file name="type.phtml" hash="6c50a8e98b8dd31ac03e6c5fb6690b38"/></dir></dir><dir name="checkout"><dir name="cart"><dir name="item"><file name="default.phtml" hash="c0637e971f56b908960fc3dd7dbf5a8a"/></dir></dir><dir name="multishipping"><dir name="item"><file name="downloadable.phtml" hash="dbcdbf5ea8a8803bb76f4929c70c49c2"/></dir></dir><dir name="onepage"><dir name="review"><file name="item.phtml" hash="e583ad71dd97f2e3b556ccb8f868db28"/></dir></dir><file name="success.phtml" hash="bc6f469a75bc1de8dfa15aded5d1f30e"/></dir><dir name="customer"><dir name="products"><file name="list.phtml" hash="18a141d934609d40a3f078df20a3508e"/></dir></dir><dir name="email"><dir name="order"><dir name="items"><dir name="creditmemo"><file name="downloadable.phtml" hash="a01adea37e9830daeda2298a057dc283"/></dir><dir name="invoice"><file name="downloadable.phtml" hash="2db18119c16c37edfab236c653a7047e"/></dir><dir name="order"><file name="downloadable.phtml" hash="41671123f6b166e6248c7aaf47fcfd92"/></dir></dir></dir></dir><dir name="sales"><dir name="order"><dir name="creditmemo"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="62281fb39c468a3c72ea4bafb0c34e04"/></dir></dir></dir><dir name="invoice"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="db789ff872ad20bdee90b7910bc04d5e"/></dir></dir></dir><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="b19302cf47d0f5f83dbdedbb2ed6778d"/></dir></dir></dir></dir></dir><dir name="email"><dir name="order"><dir name="creditmemo"><file name="items.phtml" hash="97b06e756e0dd6b49748a465ee6ac99d"/></dir><dir name="invoice"><file name="items.phtml" hash="66caf7d5ca0015a03fc713687dcaba7b"/></dir><dir name="items"><dir name="creditmemo"><file name="default.phtml" hash="f2a289aa7803a166604144486cb67893"/></dir><dir name="invoice"><file name="default.phtml" hash="f2a289aa7803a166604144486cb67893"/></dir><dir name="order"><file name="default.phtml" hash="f9b82d8136205af87f1248ec7894b436"/></dir><dir name="shipment"><file name="default.phtml" hash="de24831f6b719d9029fd891356e37340"/></dir></dir><file name="items.phtml" hash="50ccdd1b18c1646044ed4591182c1a81"/><dir name="shipment"><file name="items.phtml" hash="d27af9b1d046423b8b9336a579b2e86c"/><file name="track.phtml" hash="8f996f39588c8bcd7250074940445084"/></dir></dir><dir name="productalert"><file name="price.phtml" hash="b678f3974a9bc48e6abe0e090eccca58"/><file name="stock.phtml" hash="ef910dfede9981c99d26bd417672899a"/></dir></dir><dir name="giftmessage"><file name="inline.phtml" hash="19f369b97a63e187dfe4cbbf59b92875"/></dir><dir name="googleanalytics"><file name="ga.phtml" hash="ae4de836406da8b74f83e002c1dd045f"/></dir><dir name="newsletter"><file name="subscribe.phtml" hash="010ce9bf3338f5cc67e74cd39d74061e"/></dir><dir name="oauth"><dir name="authorize"><file name="button-simple.phtml" hash="7b7c4eddad3a6daa4ebc653d3c354aad"/><file name="button.phtml" hash="faf402dae0f6e2ee1498e3311ed20867"/><file name="confirm-simple.phtml" hash="654be81300352000efad878dc6790939"/><file name="confirm.phtml" hash="411e649a95a12f01e313f47415670bdc"/><dir name="form"><file name="login-simple.phtml" hash="5707d1b6ed9d5c9f760947af49b7afdd"/><file name="login.phtml" hash="a1f0159424c7deff76d7671b844e7314"/></dir><file name="head-simple.phtml" hash="35385fe88fa3969db9eb4c4ff4f0858d"/><file name="reject-simple.phtml" hash="30a809f48943c115e834f975d0706e6c"/><file name="reject.phtml" hash="dc70d7ac0460d0086ccee822d273aed6"/></dir><dir name="customer"><dir name="token"><file name="list.phtml" hash="c786ee5b27d4b2fe53f24fc762311607"/></dir></dir></dir><dir name="page"><file name="1column.phtml" hash="ba560885185c4174f30b34a83e74d1d7"/><file name="2columns-left.phtml" hash="15e087a80a45babc5f31d1210f1a8f16"/><file name="2columns-right.phtml" hash="b6bfd3f33b2c52dccc39b61649c4f411"/><file name="3columns.phtml" hash="605fc8c99f65573d0cd0d5028f70ab22"/><file name="empty.phtml" hash="d5ce8a6aa99a9312e36f8f30bbace818"/><dir name="html"><file name="breadcrumbs.phtml" hash="387c80cc4409b7d80fc0e109b5c26468"/><file name="cookienotice.phtml" hash="c1ab166aaca1f37131ade1df47b46f3b"/><file name="footer.phtml" hash="165f2e189ea95fbfdea4e2362a3f070a"/><file name="head.phtml" hash="dca7c9be1b47837f389b9e8c5760bc2d"/><file name="header.phtml" hash="b78450b9af7254cb3eca5b3239f2821b"/><file name="notices.phtml" hash="96f1d387f046315a1029acb6cec49ded"/><file name="pager.phtml" hash="a43620a9590e1c18ad866f45e21e55a0"/><file name="top.links.phtml" hash="8ee81889b89096fb2c73f15bc24625d7"/><file name="topmenu.phtml" hash="1f4ebb56d60d4c9e7a50e514ac33def4"/><file name="wrapper.phtml" hash="c5d2f15bf230989d4f932d1121df5fc7"/></dir><dir name="js"><file name="calendar.phtml" hash="b51f1073a88be80c620ca69b14c6afa9"/><file name="cookie.phtml" hash="583347e0052989c5b551f69c52cde80b"/></dir><file name="popup.phtml" hash="0d87ff223bbd31ab6b18e9cc0d7d48a0"/><file name="print.phtml" hash="1983a1945db0b690536338b03daa698c"/><file name="redirect.phtml" hash="205bdbdafaa0c29b3c48787ac5342aaa"/><dir name="switch"><file name="flags.phtml" hash="edb6a15d64c0ef384e70e92eab7f53c8"/><file name="languages.phtml" hash="8f26fa4d37ac034c48a63d5c066272c4"/><file name="stores.phtml" hash="00221806ad7ca5e599f88eca41b14000"/></dir><dir name="template"><file name="container.phtml" hash="6478f20491c01cef5a83f3ffa07b1383"/><file name="links.phtml" hash="83d62cf22893e64ae9b9548a5ba249e4"/><file name="linksblock.phtml" hash="cf2c5f3b4efccc1c6adbec81af428ab3"/></dir></dir><dir name="pagecache"><file name="cookie.phtml" hash="a803aa11c5e463f6ff7c31a22e3e938d"/></dir><dir name="paygate"><dir name="form"><file name="cc.phtml" hash="df6342dd4fc3a3700ee31e35e28963af"/></dir><dir name="info"><file name="cc.phtml" hash="d070d6bde2301d2dadf6da2069fcbe0e"/></dir></dir><dir name="payment"><dir name="catalog"><dir name="product"><dir name="view"><dir name="profile"><file name="options.phtml" hash="c169fdadee257741239dfc0a4ba99012"/><file name="schedule.phtml" hash="e3e2b2e6028163ac3349c3dd911d3ada"/></dir></dir></dir></dir><dir name="form"><file name="banktransfer.phtml" hash="1e5d9ed7e5afb0892ea5e9fdbee3d555"/><file name="cashondelivery.phtml" hash="74a08676d6e701110c5f77f1ca34775e"/><file name="cc.phtml" hash="b9883effd675b829993ff08552c7a8ff"/><file name="ccsave.phtml" hash="679e2f094fc2c2d78fa4210d7664f6ac"/><file name="checkmo.phtml" hash="3c750279b924b87776eafca6f95dfb62"/><file name="purchaseorder.phtml" hash="8bc2d0ce1aedd9206e62e6f8ee31425d"/></dir><dir name="info"><file name="banktransfer.phtml" hash="af54b6d8084d85a700bceaa8709a2d88"/><file name="checkmo.phtml" hash="b099571826a7253a0916a70c37b30f99"/><file name="default.phtml" hash="153c9c6e57f693a1d36c18b3273436b3"/><file name="purchaseorder.phtml" hash="a59afd0455a29faf454dae91919b959e"/></dir></dir><dir name="paypal"><file name="bml.phtml" hash="d1737b9d0742bfa69bd753f3c926aae9"/><dir name="express"><dir name="review"><file name="details.phtml" hash="bbf6399883c3a37ea12ec642692d17b3"/><dir name="shipping"><file name="method.phtml" hash="fa2893274e2e7c4ae48d1f595c87b4ab"/></dir></dir><file name="review.phtml" hash="7e9ed9af0177629fdcf6ce31dfc50f01"/><file name="shortcut.phtml" hash="7ae8c4de2e8e9994b6f33e320b19e393"/></dir><dir name="hss"><file name="form.phtml" hash="332124520ec379e3c0f0c5129a5631d6"/><file name="iframe.phtml" hash="947917ebd57fa7ca7a929548b2d394a4"/><file name="info.phtml" hash="98863ef8eacb97dd4c40f10a951b41c5"/><file name="js.phtml" hash="75a8ac107c1dbe16dcedd54b1dcfdbe9"/><file name="redirect.phtml" hash="3e8bc931bb1d3d1774d2104da54060e5"/><dir name="review"><file name="button.phtml" hash="b770ff4a61635fde04ae6a658df4f1a2"/></dir></dir><dir name="partner"><file name="logo.phtml" hash="bebdef15e1f7096908e07c5628f5c97f"/><file name="us_logo.phtml" hash="aa3285338078dbe88f9cae53f03551f8"/></dir><dir name="payflowadvanced"><file name="iframe.phtml" hash="2cbb140c3a6bd223354cfa06e7db3031"/><file name="info.phtml" hash="3dcb904ba9473835730e5b2c56f74b0b"/><file name="redirect.phtml" hash="e6b72ca7bde83d2243113054380ebe62"/></dir><dir name="payflowlink"><file name="iframe.phtml" hash="45e82ba69ec4e473867ca6bc96cb227b"/><file name="info.phtml" hash="669b0d5c5aa916bddf1b0b142c6cfa34"/><file name="redirect.phtml" hash="c5b14f888d014be722ee15b3702c7441"/></dir><dir name="payment"><file name="mark.phtml" hash="4bc2dbb74ebfd552b2c76c74104808f7"/><file name="redirect.phtml" hash="19911b7032f0ba43eef333c633dd7ef6"/></dir></dir><dir name="persistent"><dir name="checkout"><dir name="onepage"><file name="billing.phtml" hash="13434ce2442e0bc63dab47d7b9aaf06d"/><file name="login.phtml" hash="de9645ce1e4c75455d9146f4e2982f27"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="b878c732491c0a5195d6d40e7f464512"/><file name="register.phtml" hash="f53d23fdf5cc4d1711a917fa2a5ebdb8"/></dir></dir><file name="remember_me.phtml" hash="cd504465947d05dc5ae2b493c9c80119"/><file name="remember_me_tooltip.phtml" hash="36dade6318d828301d4cf41042fbd37b"/></dir><dir name="poll"><file name="active.phtml" hash="0bf9205a188d855687b431ec89ed1e23"/><file name="result.phtml" hash="65c1789af783de03d56462b40d01938a"/></dir><dir name="productalert"><file name="price.phtml" hash="65b7fb1b0cc1317e26a08f8648d96973"/><dir name="product"><file name="view.phtml" hash="ca66dfca016135d50c6f8939c48295c6"/></dir><file name="stock.phtml" hash="65b7fb1b0cc1317e26a08f8648d96973"/></dir><dir name="rating"><file name="detailed.phtml" hash="202e2d6270853475a79753d8bdd2c756"/><file name="empty.phtml" hash="7ba87f02c70b4f4b60a297cb5ac1b00d"/></dir><dir name="reports"><file name="home_product_compared.phtml" hash="552602ca1266ff755cbafd01535e59d7"/><file name="home_product_viewed.phtml" hash="f9c3451781a20f671f7080b4a9ee9044"/><file name="product_compared.phtml" hash="bd5d89a05002b08fcbd3dce160480a80"/><file name="product_viewed.phtml" hash="3ccf378d26c2345860c783d7f632e28e"/><dir name="widget"><dir name="compared"><dir name="column"><file name="compared_default_list.phtml" hash="113c005db1e886e4662c4904bff55cd7"/><file name="compared_images_list.phtml" hash="d64687ca7c578c319ed9697b08f3b29c"/><file name="compared_names_list.phtml" hash="ba1804e5e322f6f1dd5a94974db7df51"/></dir><dir name="content"><file name="compared_grid.phtml" hash="d6474c91d4868134e56f7242a4094bba"/><file name="compared_list.phtml" hash="f191a8126f3309f6f7c13d151b49ffeb"/></dir></dir><dir name="viewed"><dir name="column"><file name="viewed_default_list.phtml" hash="961efa3b5cbe37e4504e18e31468f807"/><file name="viewed_images_list.phtml" hash="15be6c66f9bad0e5103c7f43029be986"/><file name="viewed_names_list.phtml" hash="4ef13573ae93d66ac51b7873cd81888e"/></dir><dir name="content"><file name="viewed_grid.phtml" hash="a5e25525c30eeb6b9b7774e5538d7c18"/><file name="viewed_list.phtml" hash="164ba084766cbdd2b68aed4e0f26b565"/></dir></dir></dir></dir><dir name="review"><dir name="customer"><file name="list.phtml" hash="721598720e994135f3bc3e761b5266a9"/><file name="recent.phtml" hash="6460425ed956730056a9aea8bd6031ef"/><file name="view.phtml" hash="6c3895ddd69a8f55686ea8eb42328517"/></dir><file name="form.phtml" hash="bbfe207a22dc8fb09a91e9044b2e341a"/><dir name="helper"><file name="summary.phtml" hash="33a57af6b85492f060524b88625df882"/><file name="summary_short.phtml" hash="a60b251515c67da4038edf90f5dc3ef9"/></dir><dir name="product"><dir name="view"><file name="count.phtml" hash="8ab723f1249140f0ca48b364f8112a43"/><file name="list.phtml" hash="92d20ae766c890ace8304ac9e58be10f"/><file name="other.phtml" hash="efebc986f3a44c6f49cdf9d3c52b9a1d"/></dir></dir><file name="view.phtml" hash="48005db2881558b6e03eaaaf697b7422"/></dir><dir name="rss"><file name="list.phtml" hash="8f0a100373d0b9521dbbd57fe2f28cae"/><file name="nofeed.phtml" hash="66b5883f325d7112ab78fd9dfb5a1117"/><dir name="order"><file name="details.phtml" hash="b286a9ad7b09fa5c87b053d7b957b604"/></dir></dir><dir name="sales"><dir name="billing"><dir name="agreement"><file name="view.phtml" hash="49dcbf01b83da977a979bc36797430ea"/></dir><file name="agreements.phtml" hash="cb14430a9ac54ccfdbf17bc9f1f79299"/></dir><dir name="guest"><file name="form.phtml" hash="fd9701f4c8a38c70c7024da2537514c6"/></dir><dir name="order"><file name="comments.phtml" hash="4e2bbb7e35c890cab07b4d7a5e5fb52a"/><dir name="creditmemo"><dir name="items"><dir name="renderer"><file name="default.phtml" hash="28a876d2806cee7eeae3224c6526a799"/></dir></dir><file name="items.phtml" hash="2b4d90d22cc6f0ceef638ce69616ed1f"/></dir><file name="creditmemo.phtml" hash="8d29146bb68bbd7dfd4d2ab3e724fd09"/><file name="details.phtml" hash="9bf14dad4e85563b3ba95ccce0516161"/><file name="history.phtml" hash="d2d4c47407a2f06570c480aaea40e2b4"/><dir name="info"><file name="buttons.phtml" hash="d71041b3b80aee3f88874c0f80ec23d6"/></dir><file name="info.phtml" hash="778f1b6ca9c5e9dccd09bd7b1307c16a"/><dir name="invoice"><dir name="items"><dir name="renderer"><file name="default.phtml" hash="08290f0c4d459f1f18edcc617c1692c2"/></dir></dir><file name="items.phtml" hash="e9228aa6b8d6957eefc50adf8a3efac7"/></dir><file name="invoice.phtml" hash="da51c35209055d6576995fafd6694dfe"/><dir name="items"><dir name="renderer"><file name="default.phtml" hash="b5c769b54abe5b1f669a0c9af2d80616"/></dir></dir><file name="items.phtml" hash="8c0ab3ba6e5fb341cd42f02bed989d41"/><dir name="print"><file name="creditmemo.phtml" hash="d3272d37df20fee50f5a792cc464d64e"/><file name="invoice.phtml" hash="7d301500e9f9be183fc3c666b9e3be5e"/><file name="shipment.phtml" hash="ebd77328f43e38fa138804f2547b2917"/></dir><file name="print.phtml" hash="4e5cdf5e75e52df86b2ece184870b028"/><file name="recent.phtml" hash="f4bc187330665a28891fc6284f2a422e"/><dir name="shipment"><dir name="items"><dir name="renderer"><file name="default.phtml" hash="a7ce46546d4a4f490f366637c54e1e2e"/></dir></dir><file name="items.phtml" hash="731a8fb134a9c193792b0f7d4aa0fd45"/></dir><file name="shipment.phtml" hash="c53a270ef07998878ec596ef3d1ae9ec"/><file name="totals.phtml" hash="8a54cd1c5037413b76f4206da5550c2d"/><file name="trackinginfo.phtml" hash="913f8450b0cbe6f4da4faf39118e973b"/><file name="view.phtml" hash="26c6f0ed0d4091349f2163af7e7165d5"/></dir><dir name="payment"><dir name="form"><dir name="billing"><file name="agreement.phtml" hash="75af26f317cdfe9017f4b57e4dc7a9f5"/></dir></dir></dir><dir name="recurring"><file name="grid.phtml" hash="ddae03730b2834a5a3619cda9425902b"/><dir name="profile"><dir name="view"><file name="info.phtml" hash="9ca55ba84d3536d690d09a8aa5b8e4bd"/></dir><file name="view.phtml" hash="c5d47bcc570afc9c694926a1ad81a161"/></dir><file name="profiles.phtml" hash="4d10f8ec5ff497f1926b6ef0323f2119"/></dir><dir name="reorder"><file name="sidebar.phtml" hash="7f9cefbde5700ac8ce8951df0e9699c7"/></dir><dir name="widget"><dir name="guest"><file name="form.phtml" hash="eb6a798e961ffd5509176ad49d3edf89"/></dir></dir></dir><dir name="sendfriend"><file name="send.phtml" hash="4b8db87c894c94ad1f6587e4534d43cb"/></dir><dir name="shipping"><dir name="tracking"><file name="ajax.phtml" hash="f66b2a0722264981df2a5b37fe412c03"/><file name="popup.phtml" hash="dc8f61e5b30a79dd6b2c83ed39f7ec76"/></dir></dir><dir name="tag"><file name="cloud.phtml" hash="450830cdc8597f910f6eb406dde31f39"/><dir name="customer"><file name="recent.phtml" hash="71cd14d5ad4c95f9b0926b9b6aedc177"/><file name="tags.phtml" hash="4c62c7110a730b8d5325258b202de606"/><file name="view.phtml" hash="b559a661a42c03b70141dd7bbac20168"/></dir><file name="list.phtml" hash="ae6c7fde0813b471c999c7556121e69a"/><file name="popular.phtml" hash="e4012fefdbc97e5295ead2e872d0df02"/></dir><dir name="tax"><dir name="checkout"><file name="discount.phtml" hash="c27b58ad087dce0120af93a4cbe27150"/><file name="grandtotal.phtml" hash="571eec758ad2003cd201e2d8960bc2b8"/><file name="shipping.phtml" hash="f0a361a6d087fdf81b8c6dfa1b2cbfc8"/><file name="subtotal.phtml" hash="8d5e27373ab8bf9b0fb1ac2acb342513"/><file name="tax.phtml" hash="160b232674df65b96070e69cd66a8cda"/></dir><dir name="order"><file name="tax.phtml" hash="9fe704470fc18713b97e5e8deedb861e"/></dir></dir><dir name="wishlist"><dir name="button"><file name="share.phtml" hash="61798dad1157c98ed4e98b0af7a82149"/><file name="tocart.phtml" hash="2891dfcfd82fab82350afcefed091c10"/><file name="update.phtml" hash="53c08f709457b5885a30ec835958e5d6"/></dir><dir name="email"><file name="items.phtml" hash="d28fff1f899382b415164a4584ef0087"/><file name="rss.phtml" hash="a1087b27ab809a5998e622c137087c86"/></dir><dir name="item"><dir name="column"><file name="cart.phtml" hash="b084c2519f69de1a224605fc2adf23df"/><file name="image.phtml" hash="3d83a3268391dd756ef455bce3778253"/><file name="info.phtml" hash="b8c1b96ca6e00ab7c09db07b5b8d326b"/><file name="remove.phtml" hash="b028e9054c4892f403c276d75dbfc7cf"/></dir><dir name="configure"><file name="addto.phtml" hash="3abe455fd4f539f37c51217bf2a8a355"/></dir><file name="list.phtml" hash="4d2fb3e1a08425db2feebe2fa6ed5277"/></dir><file name="options_list.phtml" hash="b2aa9909656e715ca5155dadaefc89a3"/><dir name="render"><dir name="item"><file name="price.phtml" hash="e26c2ea7e209ccb0984c955dbb57875c"/><file name="price_msrp_item.phtml" hash="e1454858a70d8a612b3e54b46dff3b70"/><file name="price_msrp_rss.phtml" hash="e8b55402752b78d9ec9c373cd3ae762e"/></dir></dir><file name="shared.phtml" hash="62a2177ed3649e54aa4382db12123d73"/><file name="sharing.phtml" hash="8cf5ada655b53ccd49415a5216ed3b48"/><file name="sidebar.phtml" hash="be14014de1603cc7b1ffc27240b50578"/><file name="view.phtml" hash="82cf14f404a5f44f3443dbc5e7a20bc1"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="css"><file name="email-inline.css" hash="34e8133bb13499f73c46f89667e27ae8"/><file name="email-non-inline.css" hash="a84a967a0edf5b7b3d811fed2ba13590"/><file name="widgets.css" hash="1f452e26e107856cc540fb69b6a2bdc3"/></dir><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><dir name="images"><file name="calendar.gif" hash="b1468e5239504974c689eea5d93f86d4"/><dir name="catalog"><dir name="product"><dir name="placeholder"><file name="image.jpg" hash="097ab8a3051bc037ea3de0e17f440540"/><file name="small_image.jpg" hash="f825d16f97a640453553c79c48ebaa73"/><file name="thumbnail.jpg" hash="b2b682d28a08a748a73d2cda70ab5a57"/></dir></dir></dir><dir name="cookies"><file name="firefox.png" hash="425e1b2ddc38c0bba431fb54357c66a4"/><file name="ie6-1.gif" hash="5c27700e245762bc89ed8c3ee7183f21"/><file name="ie6-2.gif" hash="d8c55e15e1f711e5c259300a9c19551b"/><file name="ie7-1.gif" hash="d61edcc8a514a3c81ea116b7d38ddcb6"/><file name="ie7-2.gif" hash="0526a654e94c54866cad977c0a47d3e5"/><file name="ie7-3.gif" hash="4fb142def3f6cfd8d8d23e1315528a1e"/><file name="ie7-4.gif" hash="575c276231c6a91e28935ec98215e146"/><file name="ie7-5.gif" hash="3ae5fcc11fe89da91674d183872337c1"/><file name="ie7-6.gif" hash="95a4981a41785a8cde273c9b2edbfbc7"/><file name="opera.png" hash="34070d92180d4ee0e37b1dd8bb731cd7"/></dir><file name="cvv.gif" hash="83cdd38bf110b0f9c52fe84b56f45298"/><file name="fam_book_open.png" hash="0ba89b9fbe7e88d4c6896ed0a1f495aa"/><file name="reload.png" hash="84cc4883f78ef850814ea9b53989b2a7"/><dir name="widgets"><file name="i_block-list.gif" hash="fe8424127ecbe4b0d893bcf6f253dc1a"/><file name="i_widget-link.gif" hash="1bf753578171f147f0203e7b13bdd0c4"/><file name="i_widget-new.gif" hash="a75377ffed51b711cbc608ffaa1a2e7d"/></dir><file name="window_overlay.png" hash="9ec9aea4c2159e0b1e73bda29821a39f"/></dir><dir name="js"><file name="bundle.js" hash="0155fef3bde8ab4abcc3f233836bc33a"/><dir name="checkout"><file name="review.js" hash="579ed9bec667e810c07e75e7c4d9a059"/></dir><file name="giftmessage.js" hash="064bddbe613eb95862bdb2891d0d0cc6"/><file name="ie6.js" hash="5c623b1d30911e8d7d5ce3f488040637"/><file name="msrp.js" hash="a4ffe8a1d7442b48e74a03a610b25c1b"/><file name="opcheckout.js" hash="d46da63f5a4cfa08c4106e089cf5521d"/></dir><dir name="lib"><dir name="prototype"><dir name="windows"><dir name="themes"><dir name="magento"><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="content_bg.gif" hash="21278ea0da2d4256f4ced96b6080ba2e"/><file name="top_bg.gif" hash="26f28090de87d64f9b01bf624f89bfe2"/><file name="window_close.png" hash="3af14f053f360bf31f8ba2df73ec7f1e"/></dir><file name="magento.css" hash="69a5ff04546ca7849b8bb33c4da2a281"/></dir></dir></dir></dir></dir></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Interface_Frontend_Default-1.9.3.10.xml b/var/package/Interface_Frontend_Default-1.9.3.10.xml
deleted file mode 100644
index cfb3213..0000000
--- a/var/package/Interface_Frontend_Default-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Interface_Frontend_Default</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/afl-3.0.php">AFL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Default interface for Frontend</summary>
-    <description>Default interface for Frontend</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:12</time>
-    <contents><target name="magedesign"><dir name="frontend"><dir name="default"><dir name="default"><dir name="etc"><file name="theme.xml" hash="2b8a8e5c60e4784255103ef960654b5c"/><file name="widget.xml" hash="b67cab283e77190dc897087a6bdfd33e"/></dir><dir name="locale"><dir name="en_US"><file name="translate.csv" hash="793e1ff86039f24caff6fad87a094fa1"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="default"><dir name="default"><dir name="css"><file name="oauth-simple.css" hash="16e8d5c0e09ea21fffc8441fc9f4cf0a"/><file name="print.css" hash="ed25669784811928c0c181045b88d271"/><file name="styles-ie.css" hash="233d06a6b6f356ddc90fee396d407edf"/><file name="styles.css" hash="3e3d61b127b7b6df60d4c5c89eb04370"/></dir><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><dir name="images"><file name="best_selling_tr_even_bg.gif" hash="5022d648379090e306f00cd64738b146"/><file name="best_selling_tr_odd_bg.gif" hash="926622704f53796801bb5d097e116c8e"/><file name="bkg_account_box.gif" hash="dd98174b6e3e5605a3f9551a59c66841"/><file name="bkg_block-actions.gif" hash="da2970eac0a22c850b19ee3680475d51"/><file name="bkg_block-currency.gif" hash="bfaad1b64557c05ad6f4b124ad3d3532"/><file name="bkg_block-layered-dd.gif" hash="6ae6f8184e87de496fb74eeec65737c9"/><file name="bkg_block-layered-dt.gif" hash="ba8229068657b80f2c42111c5a1a307e"/><file name="bkg_block-layered-label.gif" hash="14687dfa3921cfd12d2149c1497d9765"/><file name="bkg_block-layered-li.gif" hash="753ebb76a4fc2b5b6915c536fcf4d487"/><file name="bkg_block-layered-title.gif" hash="c92e29b30af7abf4e0bc3f714a246f55"/><file name="bkg_block-layered1.gif" hash="607167f198572e83a0e728b6b9383a70"/><file name="bkg_block-title-account.gif" hash="a64f1df5a7e3d0f6a58b017f74311cb1"/><file name="bkg_block-title.gif" hash="f8c1f130ad69464fe7aff2f589b2ec75"/><file name="bkg_body.gif" hash="82bfc5bfe346c8e974cd33b1314b0acf"/><file name="bkg_buttons-set1.gif" hash="2c641e927bc83156b7004ea37920513c"/><file name="bkg_checkout.gif" hash="11258fe49feff5513c9608f2ea486776"/><file name="bkg_collapse-gm.gif" hash="37418f23e65006dcfde07ce9b249e057"/><file name="bkg_collapse.gif" hash="2333c68e38163ed4656da82b9bcf362b"/><file name="bkg_divider1.gif" hash="260ebae91ffb1b7c663906b29a069925"/><file name="bkg_form-search.gif" hash="2ca36eb80ea705e063409153f3821f78"/><file name="bkg_grand-total.gif" hash="10f1c3d82d78170706fa3e9c4baa7e04"/><file name="bkg_grid.gif" hash="a6f64fedbac51fb1b86184cd488cc4e6"/><file name="bkg_header.jpg" hash="0211c47be1493bd0ec72949c47932b81"/><file name="bkg_login-box.gif" hash="5538675d7f1c35d96a2b8013948f42a6"/><file name="bkg_main1.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="bkg_main2.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="bkg_nav0.jpg" hash="f9ac3f31e293cf075471d2d3fe07353a"/><file name="bkg_nav1.gif" hash="f4e26840c8cca0e74aba5b810341c5c0"/><file name="bkg_nav2.gif" hash="a64c8f5165b239e432d26a62ae5f79b6"/><file name="bkg_opc-title-off.gif" hash="f69b40b5331ab3760f54d038daf287eb"/><file name="bkg_pipe1.gif" hash="7852290f6a443000ead96b8cec5cd7c7"/><file name="bkg_pipe2.gif" hash="7da64eefaf4da3855ab6ee76dbced0c2"/><file name="bkg_pipe3.gif" hash="11bfac1e590f0c77fb12f37d7f05cd3c"/><file name="bkg_product-view.gif" hash="7078a7f2827156d5ae0a1cb59da3c418"/><file name="bkg_product_collateral.gif" hash="1d4d6b22e5108aefae52709d3934f397"/><file name="bkg_rating.gif" hash="0a8777c815350ddf1e316a537ad0c335"/><file name="bkg_sp-methods.gif" hash="17d68b5449adaa87dafc62ae0afa1b9a"/><file name="bkg_tfoot.gif" hash="da2970eac0a22c850b19ee3680475d51"/><file name="bkg_th-v.gif" hash="b0d17555dfc6060941e0c067718189df"/><file name="bkg_th.gif" hash="f249911b08f2822fc0b561b7f98575d2"/><file name="bkg_toolbar.gif" hash="fb7ed019476eaa1643af922b59ede4fb"/><file name="btn_checkout.gif" hash="d2060501e14e86c29e28137130e5726e"/><file name="btn_edit.gif" hash="df3565eb4e4d0dc578201df60de54b47"/><file name="btn_gm-close.gif" hash="346e26eece27449a2f224aef76ae372e"/><file name="btn_google_checkout.gif" hash="843d75249ce05b5d87ca5419f37b1c3b"/><file name="btn_paypal_checkout.gif" hash="6edd61270b7b5632eafad10557129114"/><file name="btn_place_order.gif" hash="d35219f86ae2c983ee1a31557e37b612"/><file name="btn_previous.gif" hash="63473a1520a73bb0c9b47b685d17cd21"/><file name="btn_proceed_to_checkout.gif" hash="4daac687b514fecfd1068539500ac3d7"/><file name="btn_proceed_to_checkout_dis.gif" hash="9e152c01d5d88f690dc52cb62428f3b6"/><file name="btn_remove.gif" hash="6182e723aa2a253dc6cf334a3dfaaa84"/><file name="btn_remove2.gif" hash="234bddc4c5878c5ef16407a944824236"/><file name="btn_search.gif" hash="2d93b43c0a1c1182358677661e26a978"/><file name="btn_trash.gif" hash="bcb22f558a0eb32243a2a36645189e9f"/><file name="btn_window_close.gif" hash="c83f3cbbb2aedfc580dff78d5cfb63ed"/><file name="calendar.gif" hash="b1468e5239504974c689eea5d93f86d4"/><dir name="catalog"><dir name="product"><dir name="placeholder"><file name="image.jpg" hash="097ab8a3051bc037ea3de0e17f440540"/><file name="small_image.jpg" hash="f825d16f97a640453553c79c48ebaa73"/><file name="thumbnail.jpg" hash="b2b682d28a08a748a73d2cda70ab5a57"/></dir></dir></dir><file name="cvv.gif" hash="83cdd38bf110b0f9c52fe84b56f45298"/><file name="cvv.jpg" hash="e27210d810bbab732935d9410936ef87"/><file name="fam_book_open.png" hash="0ba89b9fbe7e88d4c6896ed0a1f495aa"/><file name="free_shipping_callout.jpg" hash="cbf2e494ef7ca50acf8826321d739559"/><file name="grid-cal.gif" hash="b1468e5239504974c689eea5d93f86d4"/><file name="home_left_callout.jpg" hash="ee99a5586cf52e85c986d1275958a7da"/><file name="home_main_callout.jpg" hash="e6d1c119d5b24a5916fe394cb4b5cdc3"/><file name="i_arrow-top.gif" hash="3dbb0584e8eb1d96cc3d3c40c17d7aaf"/><file name="i_asc_arrow.gif" hash="40aa554212d6a1f60593c27d78d85fa3"/><file name="i_availability_only.gif" hash="bca1f00a50864171ad98317b778e869c"/><file name="i_availability_only_arrow.gif" hash="0cf32b72fefc94b89b74e4f3f02c2e93"/><file name="i_block-cart.gif" hash="cc19e21f9c89b70cc10354ff588ca8ab"/><file name="i_block-currency.gif" hash="643024bcae5ece554fdbbc041aeb297c"/><file name="i_block-list.gif" hash="fe8424127ecbe4b0d893bcf6f253dc1a"/><file name="i_block-poll.gif" hash="52d778dddbf48b8d04226bee9370a7ef"/><file name="i_block-related.gif" hash="4e277173b6372b1a90b0f19e0388ad54"/><file name="i_block-subscribe.gif" hash="9e5fee06a543742045118a95f2debcb8"/><file name="i_block-tags.gif" hash="67d1255c2c3e9ed1a5c845f8d4e4a3ba"/><file name="i_block-viewed.gif" hash="67d1255c2c3e9ed1a5c845f8d4e4a3ba"/><file name="i_block-wishlist.gif" hash="8f8cda89ca20ba4a9b2f8c91f73fdff9"/><file name="i_desc_arrow.gif" hash="92fd194bfae4ce5ae3354e1e47d7ac7d"/><file name="i_discount.gif" hash="908d44da90de5e54185764d093bbdb77"/><file name="i_folder-table.gif" hash="bf006ddb591d8ac95d2e895bf2fdbc8d"/><file name="i_ma-info.gif" hash="91259557447ee80eb1110fe0c85cb3b5"/><file name="i_ma-reviews.gif" hash="859c97695ec396c0b284a0c3c7c416ad"/><file name="i_ma-tags.gif" hash="1e83e3b0b677c92b3aa8a252268f7b86"/><file name="i_msg-error.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="i_msg-note.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="i_msg-success.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="i_notice.gif" hash="ebd56dc80b8346e10e93628bc0e6c372"/><file name="i_page1.gif" hash="704f7d4eccbdf9cabbad7770f18856ff"/><file name="i_page2.gif" hash="57a04ca584e05e28dc94c7e68f0af62e"/><file name="i_pager-next.gif" hash="ed4d6640624c2b6edeab4c212314bd6d"/><file name="i_pager-prev.gif" hash="75973b020105dccbaf34e49d7852552d"/><file name="i_print.gif" hash="0aed138181495642e9ab29e55d194d40"/><file name="i_rss-big.png" hash="6cf70e7c52a3f3d7b833ccadb041a555"/><file name="i_rss.gif" hash="e5bbc388d818c142868b4a1df0b48793"/><file name="i_search_criteria.gif" hash="cf67b9cc5c311ae3f99e68cd29ae17be"/><file name="i_shipping.gif" hash="91a0d2cc2eb2391f90ec8a75c04b3183"/><file name="i_tag_add.gif" hash="a736baa992aa55b6fb71e8742a04dc82"/><file name="i_tier.gif" hash="c5189e25afeb7c1a8c4902a42832593e"/><file name="i_type_grid.gif" hash="a1e5d8ac36fb2891ea16e729b95c552c"/><file name="i_type_list.gif" hash="61333d383ec142b8d270abe77324aa5d"/><file name="logo.gif" hash="48b7eb03807fdf80bdfb19b872cf84b8"/><file name="logo_email.gif" hash="4073982b6c0263fe5f902566fd5c305b"/><file name="logo_print.gif" hash="4073982b6c0263fe5f902566fd5c305b"/><file name="magnifier_handle.gif" hash="238fbdd7959f517db11c6f57ee4daaf4"/><file name="map_popup_arrow.gif" hash="6383b40a9e7bd3c95260bef4fbb1b163"/><dir name="media"><file name="404_callout1.jpg" hash="834e53a03e2921a2fd3c135c0c7189df"/><file name="404_callout2.jpg" hash="016984b4a1579df34147f9407098db73"/><file name="about_us_img.jpg" hash="726f36dd75b5a709a1a14acab1660188"/><file name="best_selling_img01.jpg" hash="5e7337a4061a636df8ee4bf979a092ac"/><file name="best_selling_img02.jpg" hash="b9a49c0964938ec72fb834cb166b9352"/><file name="best_selling_img03.jpg" hash="e3581487fb4589baecc553f2ce8d5247"/><file name="best_selling_img04.jpg" hash="7e59bf99f5f813e327595c52d3320174"/><file name="best_selling_img05.jpg" hash="e396892daec7ffcf7244082b3e596911"/><file name="best_selling_img06.jpg" hash="2702839637efbe0fd0a4bad41cd6a551"/><file name="cell_phone_landing_banner1.jpg" hash="b25562360fc470f1091ca7ea014a3290"/><file name="col_left_callout.jpg" hash="5f762006021e046f9bd536f37ea7c463"/><file name="col_right_callout.jpg" hash="dae22f37a542da272a35195ec286ec25"/><file name="electronics_cellphones.jpg" hash="8f6badbc32ce806c6109c788df6ef5e9"/><file name="electronics_digitalcameras.jpg" hash="953b8d7db6f0bdcd53b1d6b1386962b9"/><file name="electronics_laptops.jpg" hash="e050e92d72000e6bdc763a7b5888ec8a"/><file name="furniture_callout_spot.jpg" hash="28edc7d72486ab2362324995550d87af"/><file name="furnitures_bed_room.jpg" hash="b8616c5bffc23a92d2a1c97dae57b262"/><file name="furnitures_living_room.jpg" hash="2663737f3997cb1a49ce24d07dc8aefb"/><file name="head_electronics_cellphones.gif" hash="a69425966444ea597fb7c629114d5165"/><file name="head_electronics_digicamera.gif" hash="bde3cec3fc16b2d0ae57e7783eb00652"/><file name="head_electronics_laptops.gif" hash="b2c55387ffa92277315bdedeb4cb9b8f"/><file name="laptop_callout_mid1.jpg" hash="4ffb50bd3b7b32a78fd059b1571c202e"/><file name="laptop_callout_mid2.jpg" hash="662cf3881b06b090e9500496b19b03e4"/><file name="laptop_callout_mid3.jpg" hash="22aa71ecfe0aa9b6936a1eddb62d889e"/><file name="laptop_callout_spot.jpg" hash="2e469d1bd871355eaef6076487a973db"/><file name="shirts_landing_banner1.jpg" hash="4acc8620b009d835e5c25587671ea25d"/></dir><file name="np_cart_thumb.gif" hash="e9fdd943e0947e15f0638506f477e358"/><file name="np_more_img.gif" hash="ace357bfe3e81ffb62137cd5b25ae5e1"/><file name="np_product_main.gif" hash="d0cccda76de50efa025215ce85dacb1c"/><file name="np_thumb.gif" hash="e46270c89358ecc8341d1565c14644b8"/><file name="np_thumb2.gif" hash="8502866cdabc5c74aca7d7bd32a06a03"/><file name="opc-ajax-loader.gif" hash="e805ea7eca1f34c75ba0f93780d32d38"/><file name="pager_arrow_left.gif" hash="75973b020105dccbaf34e49d7852552d"/><file name="pager_arrow_right.gif" hash="ed4d6640624c2b6edeab4c212314bd6d"/><file name="ph_callout_left_rebel.jpg" hash="0ce8ad0026d8b8a83ed7acdf6209129b"/><file name="ph_callout_left_top.gif" hash="f17a036d75e5065eb76bafbb2c8ad7ff"/><file name="product_zoom_overlay_magnif.gif" hash="83834893e162221d6d9257fe67847370"/><file name="slider_bg.gif" hash="87bc1b46d87de4f6252c7216216627c3"/><file name="slider_btn_zoom_in.gif" hash="ef0fc67f77f30827ee67f4e744b60781"/><file name="slider_btn_zoom_out.gif" hash="68b3d1c28dc5aec4f6b64d70a6996b6f"/><file name="spacer.gif" hash="df3e567d6f16d040326c7a0ea29a4f41"/><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/><file name="window_overlay.png" hash="9ec9aea4c2159e0b1e73bda29821a39f"/><dir name="xmlconnect"><dir name="catalog"><dir name="category"><dir name="placeholder"><file name="image.jpg" hash="097ab8a3051bc037ea3de0e17f440540"/><file name="small_image.jpg" hash="f825d16f97a640453553c79c48ebaa73"/><file name="thumbnail.jpg" hash="b2b682d28a08a748a73d2cda70ab5a57"/></dir></dir></dir><file name="tab_account.png" hash="0498d73e47ed47179e5546dc15c17dc7"/><file name="tab_cart.png" hash="9055ba76e256a51d3fee53a8c41d5226"/><file name="tab_home.png" hash="07d0af93e167b9366d3d4fb3d6cdb31c"/><file name="tab_more.png" hash="b9fc21feb8d7655bc9c2985c37b0de2f"/><file name="tab_page.png" hash="ca05dbc42f944b8d4255f6675f6dd93a"/><file name="tab_search.png" hash="25e880eb2a4d06828e2e1c3f32d22400"/><file name="tab_shop.png" hash="fe602fc2e7093efef5ecc0b027a32d91"/></dir></dir></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Interface_Frontend_Default-1.9.4.0.xml b/var/package/Interface_Frontend_Default-1.9.4.0.xml
new file mode 100644
index 0000000..9db24e1
--- /dev/null
+++ b/var/package/Interface_Frontend_Default-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Interface_Frontend_Default</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/afl-3.0.php">AFL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Default interface for Frontend</summary>
+    <description>Default interface for Frontend</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:31:59</time>
+    <contents><target name="magedesign"><dir name="frontend"><dir name="default"><dir name="default"><dir name="etc"><file name="theme.xml" hash="2b8a8e5c60e4784255103ef960654b5c"/><file name="widget.xml" hash="b67cab283e77190dc897087a6bdfd33e"/></dir><dir name="locale"><dir name="en_US"><file name="translate.csv" hash="793e1ff86039f24caff6fad87a094fa1"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="default"><dir name="default"><dir name="css"><file name="oauth-simple.css" hash="16e8d5c0e09ea21fffc8441fc9f4cf0a"/><file name="print.css" hash="ed25669784811928c0c181045b88d271"/><file name="styles-ie.css" hash="233d06a6b6f356ddc90fee396d407edf"/><file name="styles.css" hash="3e3d61b127b7b6df60d4c5c89eb04370"/></dir><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><dir name="images"><file name="best_selling_tr_even_bg.gif" hash="5022d648379090e306f00cd64738b146"/><file name="best_selling_tr_odd_bg.gif" hash="926622704f53796801bb5d097e116c8e"/><file name="bkg_account_box.gif" hash="dd98174b6e3e5605a3f9551a59c66841"/><file name="bkg_block-actions.gif" hash="da2970eac0a22c850b19ee3680475d51"/><file name="bkg_block-currency.gif" hash="bfaad1b64557c05ad6f4b124ad3d3532"/><file name="bkg_block-layered-dd.gif" hash="6ae6f8184e87de496fb74eeec65737c9"/><file name="bkg_block-layered-dt.gif" hash="ba8229068657b80f2c42111c5a1a307e"/><file name="bkg_block-layered-label.gif" hash="14687dfa3921cfd12d2149c1497d9765"/><file name="bkg_block-layered-li.gif" hash="753ebb76a4fc2b5b6915c536fcf4d487"/><file name="bkg_block-layered-title.gif" hash="c92e29b30af7abf4e0bc3f714a246f55"/><file name="bkg_block-layered1.gif" hash="607167f198572e83a0e728b6b9383a70"/><file name="bkg_block-title-account.gif" hash="a64f1df5a7e3d0f6a58b017f74311cb1"/><file name="bkg_block-title.gif" hash="f8c1f130ad69464fe7aff2f589b2ec75"/><file name="bkg_body.gif" hash="82bfc5bfe346c8e974cd33b1314b0acf"/><file name="bkg_buttons-set1.gif" hash="2c641e927bc83156b7004ea37920513c"/><file name="bkg_checkout.gif" hash="11258fe49feff5513c9608f2ea486776"/><file name="bkg_collapse-gm.gif" hash="37418f23e65006dcfde07ce9b249e057"/><file name="bkg_collapse.gif" hash="2333c68e38163ed4656da82b9bcf362b"/><file name="bkg_divider1.gif" hash="260ebae91ffb1b7c663906b29a069925"/><file name="bkg_form-search.gif" hash="2ca36eb80ea705e063409153f3821f78"/><file name="bkg_grand-total.gif" hash="10f1c3d82d78170706fa3e9c4baa7e04"/><file name="bkg_grid.gif" hash="a6f64fedbac51fb1b86184cd488cc4e6"/><file name="bkg_header.jpg" hash="0211c47be1493bd0ec72949c47932b81"/><file name="bkg_login-box.gif" hash="5538675d7f1c35d96a2b8013948f42a6"/><file name="bkg_main1.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="bkg_main2.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="bkg_nav0.jpg" hash="f9ac3f31e293cf075471d2d3fe07353a"/><file name="bkg_nav1.gif" hash="f4e26840c8cca0e74aba5b810341c5c0"/><file name="bkg_nav2.gif" hash="a64c8f5165b239e432d26a62ae5f79b6"/><file name="bkg_opc-title-off.gif" hash="f69b40b5331ab3760f54d038daf287eb"/><file name="bkg_pipe1.gif" hash="7852290f6a443000ead96b8cec5cd7c7"/><file name="bkg_pipe2.gif" hash="7da64eefaf4da3855ab6ee76dbced0c2"/><file name="bkg_pipe3.gif" hash="11bfac1e590f0c77fb12f37d7f05cd3c"/><file name="bkg_product-view.gif" hash="7078a7f2827156d5ae0a1cb59da3c418"/><file name="bkg_product_collateral.gif" hash="1d4d6b22e5108aefae52709d3934f397"/><file name="bkg_rating.gif" hash="0a8777c815350ddf1e316a537ad0c335"/><file name="bkg_sp-methods.gif" hash="17d68b5449adaa87dafc62ae0afa1b9a"/><file name="bkg_tfoot.gif" hash="da2970eac0a22c850b19ee3680475d51"/><file name="bkg_th-v.gif" hash="b0d17555dfc6060941e0c067718189df"/><file name="bkg_th.gif" hash="f249911b08f2822fc0b561b7f98575d2"/><file name="bkg_toolbar.gif" hash="fb7ed019476eaa1643af922b59ede4fb"/><file name="btn_checkout.gif" hash="d2060501e14e86c29e28137130e5726e"/><file name="btn_edit.gif" hash="df3565eb4e4d0dc578201df60de54b47"/><file name="btn_gm-close.gif" hash="346e26eece27449a2f224aef76ae372e"/><file name="btn_google_checkout.gif" hash="843d75249ce05b5d87ca5419f37b1c3b"/><file name="btn_paypal_checkout.gif" hash="6edd61270b7b5632eafad10557129114"/><file name="btn_place_order.gif" hash="d35219f86ae2c983ee1a31557e37b612"/><file name="btn_previous.gif" hash="63473a1520a73bb0c9b47b685d17cd21"/><file name="btn_proceed_to_checkout.gif" hash="4daac687b514fecfd1068539500ac3d7"/><file name="btn_proceed_to_checkout_dis.gif" hash="9e152c01d5d88f690dc52cb62428f3b6"/><file name="btn_remove.gif" hash="6182e723aa2a253dc6cf334a3dfaaa84"/><file name="btn_remove2.gif" hash="234bddc4c5878c5ef16407a944824236"/><file name="btn_search.gif" hash="2d93b43c0a1c1182358677661e26a978"/><file name="btn_trash.gif" hash="bcb22f558a0eb32243a2a36645189e9f"/><file name="btn_window_close.gif" hash="c83f3cbbb2aedfc580dff78d5cfb63ed"/><file name="calendar.gif" hash="b1468e5239504974c689eea5d93f86d4"/><dir name="catalog"><dir name="product"><dir name="placeholder"><file name="image.jpg" hash="097ab8a3051bc037ea3de0e17f440540"/><file name="small_image.jpg" hash="f825d16f97a640453553c79c48ebaa73"/><file name="thumbnail.jpg" hash="b2b682d28a08a748a73d2cda70ab5a57"/></dir></dir></dir><file name="cvv.gif" hash="83cdd38bf110b0f9c52fe84b56f45298"/><file name="cvv.jpg" hash="e27210d810bbab732935d9410936ef87"/><file name="fam_book_open.png" hash="0ba89b9fbe7e88d4c6896ed0a1f495aa"/><file name="free_shipping_callout.jpg" hash="cbf2e494ef7ca50acf8826321d739559"/><file name="grid-cal.gif" hash="b1468e5239504974c689eea5d93f86d4"/><file name="home_left_callout.jpg" hash="ee99a5586cf52e85c986d1275958a7da"/><file name="home_main_callout.jpg" hash="e6d1c119d5b24a5916fe394cb4b5cdc3"/><file name="i_arrow-top.gif" hash="3dbb0584e8eb1d96cc3d3c40c17d7aaf"/><file name="i_asc_arrow.gif" hash="40aa554212d6a1f60593c27d78d85fa3"/><file name="i_availability_only.gif" hash="bca1f00a50864171ad98317b778e869c"/><file name="i_availability_only_arrow.gif" hash="0cf32b72fefc94b89b74e4f3f02c2e93"/><file name="i_block-cart.gif" hash="cc19e21f9c89b70cc10354ff588ca8ab"/><file name="i_block-currency.gif" hash="643024bcae5ece554fdbbc041aeb297c"/><file name="i_block-list.gif" hash="fe8424127ecbe4b0d893bcf6f253dc1a"/><file name="i_block-poll.gif" hash="52d778dddbf48b8d04226bee9370a7ef"/><file name="i_block-related.gif" hash="4e277173b6372b1a90b0f19e0388ad54"/><file name="i_block-subscribe.gif" hash="9e5fee06a543742045118a95f2debcb8"/><file name="i_block-tags.gif" hash="67d1255c2c3e9ed1a5c845f8d4e4a3ba"/><file name="i_block-viewed.gif" hash="67d1255c2c3e9ed1a5c845f8d4e4a3ba"/><file name="i_block-wishlist.gif" hash="8f8cda89ca20ba4a9b2f8c91f73fdff9"/><file name="i_desc_arrow.gif" hash="92fd194bfae4ce5ae3354e1e47d7ac7d"/><file name="i_discount.gif" hash="908d44da90de5e54185764d093bbdb77"/><file name="i_folder-table.gif" hash="bf006ddb591d8ac95d2e895bf2fdbc8d"/><file name="i_ma-info.gif" hash="91259557447ee80eb1110fe0c85cb3b5"/><file name="i_ma-reviews.gif" hash="859c97695ec396c0b284a0c3c7c416ad"/><file name="i_ma-tags.gif" hash="1e83e3b0b677c92b3aa8a252268f7b86"/><file name="i_msg-error.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="i_msg-note.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="i_msg-success.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="i_notice.gif" hash="ebd56dc80b8346e10e93628bc0e6c372"/><file name="i_page1.gif" hash="704f7d4eccbdf9cabbad7770f18856ff"/><file name="i_page2.gif" hash="57a04ca584e05e28dc94c7e68f0af62e"/><file name="i_pager-next.gif" hash="ed4d6640624c2b6edeab4c212314bd6d"/><file name="i_pager-prev.gif" hash="75973b020105dccbaf34e49d7852552d"/><file name="i_print.gif" hash="0aed138181495642e9ab29e55d194d40"/><file name="i_rss-big.png" hash="6cf70e7c52a3f3d7b833ccadb041a555"/><file name="i_rss.gif" hash="e5bbc388d818c142868b4a1df0b48793"/><file name="i_search_criteria.gif" hash="cf67b9cc5c311ae3f99e68cd29ae17be"/><file name="i_shipping.gif" hash="91a0d2cc2eb2391f90ec8a75c04b3183"/><file name="i_tag_add.gif" hash="a736baa992aa55b6fb71e8742a04dc82"/><file name="i_tier.gif" hash="c5189e25afeb7c1a8c4902a42832593e"/><file name="i_type_grid.gif" hash="a1e5d8ac36fb2891ea16e729b95c552c"/><file name="i_type_list.gif" hash="61333d383ec142b8d270abe77324aa5d"/><file name="logo.gif" hash="48b7eb03807fdf80bdfb19b872cf84b8"/><file name="logo_email.gif" hash="4073982b6c0263fe5f902566fd5c305b"/><file name="logo_print.gif" hash="4073982b6c0263fe5f902566fd5c305b"/><file name="magnifier_handle.gif" hash="238fbdd7959f517db11c6f57ee4daaf4"/><file name="map_popup_arrow.gif" hash="6383b40a9e7bd3c95260bef4fbb1b163"/><dir name="media"><file name="404_callout1.jpg" hash="834e53a03e2921a2fd3c135c0c7189df"/><file name="404_callout2.jpg" hash="016984b4a1579df34147f9407098db73"/><file name="about_us_img.jpg" hash="726f36dd75b5a709a1a14acab1660188"/><file name="best_selling_img01.jpg" hash="5e7337a4061a636df8ee4bf979a092ac"/><file name="best_selling_img02.jpg" hash="b9a49c0964938ec72fb834cb166b9352"/><file name="best_selling_img03.jpg" hash="e3581487fb4589baecc553f2ce8d5247"/><file name="best_selling_img04.jpg" hash="7e59bf99f5f813e327595c52d3320174"/><file name="best_selling_img05.jpg" hash="e396892daec7ffcf7244082b3e596911"/><file name="best_selling_img06.jpg" hash="2702839637efbe0fd0a4bad41cd6a551"/><file name="cell_phone_landing_banner1.jpg" hash="b25562360fc470f1091ca7ea014a3290"/><file name="col_left_callout.jpg" hash="5f762006021e046f9bd536f37ea7c463"/><file name="col_right_callout.jpg" hash="dae22f37a542da272a35195ec286ec25"/><file name="electronics_cellphones.jpg" hash="8f6badbc32ce806c6109c788df6ef5e9"/><file name="electronics_digitalcameras.jpg" hash="953b8d7db6f0bdcd53b1d6b1386962b9"/><file name="electronics_laptops.jpg" hash="e050e92d72000e6bdc763a7b5888ec8a"/><file name="furniture_callout_spot.jpg" hash="28edc7d72486ab2362324995550d87af"/><file name="furnitures_bed_room.jpg" hash="b8616c5bffc23a92d2a1c97dae57b262"/><file name="furnitures_living_room.jpg" hash="2663737f3997cb1a49ce24d07dc8aefb"/><file name="head_electronics_cellphones.gif" hash="a69425966444ea597fb7c629114d5165"/><file name="head_electronics_digicamera.gif" hash="bde3cec3fc16b2d0ae57e7783eb00652"/><file name="head_electronics_laptops.gif" hash="b2c55387ffa92277315bdedeb4cb9b8f"/><file name="laptop_callout_mid1.jpg" hash="4ffb50bd3b7b32a78fd059b1571c202e"/><file name="laptop_callout_mid2.jpg" hash="662cf3881b06b090e9500496b19b03e4"/><file name="laptop_callout_mid3.jpg" hash="22aa71ecfe0aa9b6936a1eddb62d889e"/><file name="laptop_callout_spot.jpg" hash="2e469d1bd871355eaef6076487a973db"/><file name="shirts_landing_banner1.jpg" hash="4acc8620b009d835e5c25587671ea25d"/></dir><file name="np_cart_thumb.gif" hash="e9fdd943e0947e15f0638506f477e358"/><file name="np_more_img.gif" hash="ace357bfe3e81ffb62137cd5b25ae5e1"/><file name="np_product_main.gif" hash="d0cccda76de50efa025215ce85dacb1c"/><file name="np_thumb.gif" hash="e46270c89358ecc8341d1565c14644b8"/><file name="np_thumb2.gif" hash="8502866cdabc5c74aca7d7bd32a06a03"/><file name="opc-ajax-loader.gif" hash="e805ea7eca1f34c75ba0f93780d32d38"/><file name="pager_arrow_left.gif" hash="75973b020105dccbaf34e49d7852552d"/><file name="pager_arrow_right.gif" hash="ed4d6640624c2b6edeab4c212314bd6d"/><file name="ph_callout_left_rebel.jpg" hash="0ce8ad0026d8b8a83ed7acdf6209129b"/><file name="ph_callout_left_top.gif" hash="f17a036d75e5065eb76bafbb2c8ad7ff"/><file name="product_zoom_overlay_magnif.gif" hash="83834893e162221d6d9257fe67847370"/><file name="slider_bg.gif" hash="87bc1b46d87de4f6252c7216216627c3"/><file name="slider_btn_zoom_in.gif" hash="ef0fc67f77f30827ee67f4e744b60781"/><file name="slider_btn_zoom_out.gif" hash="68b3d1c28dc5aec4f6b64d70a6996b6f"/><file name="spacer.gif" hash="df3e567d6f16d040326c7a0ea29a4f41"/><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/><file name="window_overlay.png" hash="9ec9aea4c2159e0b1e73bda29821a39f"/><dir name="xmlconnect"><dir name="catalog"><dir name="category"><dir name="placeholder"><file name="image.jpg" hash="097ab8a3051bc037ea3de0e17f440540"/><file name="small_image.jpg" hash="f825d16f97a640453553c79c48ebaa73"/><file name="thumbnail.jpg" hash="b2b682d28a08a748a73d2cda70ab5a57"/></dir></dir></dir><file name="tab_account.png" hash="0498d73e47ed47179e5546dc15c17dc7"/><file name="tab_cart.png" hash="9055ba76e256a51d3fee53a8c41d5226"/><file name="tab_home.png" hash="07d0af93e167b9366d3d4fb3d6cdb31c"/><file name="tab_more.png" hash="b9fc21feb8d7655bc9c2985c37b0de2f"/><file name="tab_page.png" hash="ca05dbc42f944b8d4255f6675f6dd93a"/><file name="tab_search.png" hash="25e880eb2a4d06828e2e1c3f32d22400"/><file name="tab_shop.png" hash="fe602fc2e7093efef5ecc0b027a32d91"/></dir></dir></dir></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Interface_Frontend_Rwd_Default-1.9.3.10.xml b/var/package/Interface_Frontend_Rwd_Default-1.9.3.10.xml
deleted file mode 100644
index 925196e..0000000
--- a/var/package/Interface_Frontend_Rwd_Default-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Interface_Frontend_Rwd_Default</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/afl-3.0.php">AFL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>This is a RWD themes base</summary>
-    <description>This is a RWD themes base</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:13</time>
-    <contents><target name="magedesign"><dir name="frontend"><dir name="rwd"><dir name="default"><dir name="etc"><file name="theme.xml" hash="b2a69156a1174ff2f31b6c58a406aae2"/><file name="widget.xml" hash="bc759364e57df39fe21fee0a8b67b5d5"/></dir><dir name="layout"><file name="bundle.xml" hash="a715eb3119841a5b4d4677bbab24b9fc"/><file name="catalog.xml" hash="2f954db36d01cf64381f5ee1bd3f7ce3"/><file name="catalog_msrp.xml" hash="88989cab2f9e5da358bfc6c5ee4659d2"/><file name="catalogsearch.xml" hash="9a1574f756ad991f560891da5246d0d9"/><file name="checkout.xml" hash="0ab4f0bb734abfedcc2003fb2ad0ca4d"/><file name="cms.xml" hash="17125b1617bde45d80fda64e8c0f5759"/><file name="configurableswatches.xml" hash="0241108f4b79242802c5831a7d0d1b62"/><file name="contacts.xml" hash="5b45ef85df7aa65dca34a26137cb36d8"/><file name="customer.xml" hash="4f9b20ae2fcd5cdc6be819cfb8e5ebf3"/><file name="directory.xml" hash="6abb61f6a2b48b0d484b7f54f83b60a9"/><file name="downloadable.xml" hash="aaf69b45f0de1734b86f2382bf1cafc9"/><file name="newsletter.xml" hash="653ce3bec784a79a742f102298edc7d5"/><file name="oauth.xml" hash="2efda6d5664c7c2dd9ab41c189b62a18"/><file name="page.xml" hash="25fa0307ab79e4daceff7fd1d54ea97a"/><file name="paypal.xml" hash="46861e221b66b4116ad78f605f6ba8de"/><file name="persistent.xml" hash="72804d8e0f27cbdea8e4bf2be789d05f"/><file name="review.xml" hash="8b7203312ad5d2a917d015ca925d483e"/><file name="rss.xml" hash="aa87cf19e7429e782acbbf1150da0092"/><file name="sales.xml" hash="6fac00269851d98c1657fcb96556c43f"/><file name="wishlist.xml" hash="3c0f8e83d2efec2d8a9586d74464d9bd"/></dir><dir name="template"><dir name="authorizenet"><dir name="directpost"><file name="form.phtml" hash="f942e5c7fd83675d53aaaeacfb97c1fa"/></dir></dir><dir name="bundle"><dir name="catalog"><dir name="product"><dir name="view"><dir name="type"><dir name="bundle"><file name="availability.phtml" hash="d17e41c21cd887181fc36f69697b8f7b"/><dir name="option"><file name="select.phtml" hash="15c9836abe158cb3e749c1f9cf0a42c3"/></dir></dir><file name="bundle.phtml" hash="8e89d8e4084af8424ab74b29cd33f2c4"/></dir></dir></dir></dir><dir name="email"><dir name="order"><dir name="items"><dir name="creditmemo"><file name="default.phtml" hash="8a3a591e1ad974821dda52bb88887960"/></dir><dir name="invoice"><file name="default.phtml" hash="a23860eafae1159e04c62563315aee22"/></dir><dir name="order"><file name="default.phtml" hash="340b74124298efbf9c2cd78da918c42d"/></dir><dir name="shipment"><file name="default.phtml" hash="07066ce5f4d1fc3207bc404be3b4805d"/></dir></dir></dir></dir><dir name="sales"><dir name="order"><dir name="items"><file name="renderer.phtml" hash="edc999ba901b1e1019f17a7f589a70db"/></dir></dir></dir></dir><dir name="captcha"><file name="zend.phtml" hash="ddc2a17ee6665bef97d4e3df65cdf5ff"/></dir><dir name="catalog"><dir name="layer"><file name="filter.phtml" hash="d7f9d6c377402fe2f4b8884604c81a08"/><file name="state.phtml" hash="e0e6ad4037aaddebdd6262c229c84ee3"/><file name="view.phtml" hash="7633e62b9097d563b7e5935caa69816c"/></dir><dir name="msrp"><file name="popup.phtml" hash="17959ae24c464e15d396dc7718ba41da"/></dir><dir name="navigation"><file name="left.phtml" hash="8147f13c74b194abfa9364e2ccf87bfe"/></dir><dir name="product"><dir name="compare"><file name="list.phtml" hash="23e2ab54e8efb8f40af3044cf139b2c1"/><file name="sidebar.phtml" hash="2f150ddfde326c4491743cb3201dff6d"/></dir><dir name="list"><file name="related.phtml" hash="bfd36eaecca1316fac9093e13f8d57f0"/><file name="toolbar.phtml" hash="4da6f535d64316236f96375079bd3af7"/><file name="upsell.phtml" hash="74383226e851d393877027448b202bbd"/></dir><file name="list.phtml" hash="ca83ecbdd87fc9f95cd55430efdf982a"/><file name="price.phtml" hash="d5e7d023237bc8e28296c9c815b20b25"/><dir name="view"><file name="addto.phtml" hash="d2686089523841c703851af3818511e5"/><file name="addtocart.phtml" hash="a68639819ba009c8e7af9ede6121d5e9"/><file name="media.phtml" hash="e92c39869cc703e530f88a53c4099587"/><file name="sharing.phtml" hash="e62dfe3626003760a7f12b5df1f5b8bf"/><dir name="type"><dir name="availability"><file name="default.phtml" hash="ade2605d9f21591877c86def935c0985"/><file name="grouped.phtml" hash="5141db76a5eccc9f136dd4aca8de4ee5"/></dir><file name="default.phtml" hash="ea05946d1fc0d9b543575a30dac35b98"/><file name="grouped.phtml" hash="c916b8e0eab6092ec4ae1e5eccced5fb"/><dir name="options"><file name="configurable.phtml" hash="773160249a91428474a17a3453a52821"/></dir></dir></dir><file name="view.phtml" hash="b8dca08c44f76055de3622da9ecbad16"/><dir name="widget"><dir name="new"><dir name="column"><file name="new_default_list.phtml" hash="28f887be48a2e636097e9abe54712c42"/><file name="new_images_list.phtml" hash="8fcfbe34861cdec02a8cf60131c5f673"/><file name="new_names_list.phtml" hash="ccb2f5d414cd6606654e3f9d59285776"/></dir><dir name="content"><file name="new_grid.phtml" hash="4cc962df6eb72c9d94ced9b80c5c609d"/><file name="new_list.phtml" hash="cd58e2462fa8fea042c160afee292831"/></dir></dir></dir></dir></dir><dir name="cataloginventory"><dir name="stockqty"><file name="composite.phtml" hash="7aed9454ef90de54c19de543a8bbc734"/></dir></dir><dir name="catalogsearch"><dir name="advanced"><file name="form.phtml" hash="cf9d110b5ea7d85e583bc536d708ed38"/></dir><file name="form.mini.phtml" hash="58fc82484aba2a6cdb5169621bf73a7c"/><file name="result.phtml" hash="754d72a8a1acb320ff4a3386c789d293"/></dir><dir name="centinel"><dir name="authentication"><file name="start.phtml" hash="e066c848c47bd193bbd68b4668ce0345"/></dir></dir><dir name="checkout"><dir name="cart"><file name="coupon.phtml" hash="bdc2b5f413b5e65b114f03c30d0b9775"/><file name="crosssell.phtml" hash="247beab0d3780189ef6c060e0408569d"/><dir name="item"><dir name="configure"><file name="updatecart.phtml" hash="e435c3d45e2dde30dfa6ec32bdbd46b0"/></dir><file name="default.phtml" hash="ea115f2ea1aa442e125ca7016bf78c70"/></dir><dir name="minicart"><file name="default.phtml" hash="6a8baaa5986f3d8e5fbf4b614cfdd1d9"/><file name="items.phtml" hash="8c456416c7343aeb94f49ff186fcaddb"/></dir><file name="minicart.phtml" hash="91813c69b48fa20571bee15aa768a367"/><dir name="render"><file name="default.phtml" hash="5d33795c46ee79589ff3ea39ab257bc7"/><file name="simple.phtml" hash="8107d83abd4fb6b7cf4de3115fe63616"/></dir><file name="shipping.phtml" hash="8b000bacb4504d56de9ca53c5d2cef5d"/><dir name="sidebar"><file name="default.phtml" hash="6df63cb9d11b83b45a021a6bb73c8f1f"/></dir><file name="sidebar.phtml" hash="a1914db11300714fe5ad82ccaaa5dcb0"/></dir><file name="cart.phtml" hash="e9b4f7d92d8e0b43c8e108c64bda073c"/><dir name="multishipping"><file name="addresses.phtml" hash="461240bec3b53a83233c64c9bdd951b8"/><file name="billing.phtml" hash="160f5e12676c6655c70e370d8c68efcd"/><dir name="item"><file name="default.phtml" hash="c25ff8100d7eae2bdea228440bf6a9fc"/></dir><dir name="overview"><file name="item.phtml" hash="d59426451eccfd4fd53d67a2110a7ccb"/></dir><file name="overview.phtml" hash="27619da9d8f12eef488a4b4a666e2190"/></dir><dir name="onepage"><file name="payment.phtml" hash="44ac8e54e1df03410c97ed9bf3a5b274"/><file name="progress.phtml" hash="16b5f8a0b850849fe07f34418d590643"/><dir name="review"><file name="info.phtml" hash="6dda7d2e901658b4f450e51f300d7225"/><file name="item.phtml" hash="a5b7762e95cc8ea6260a5e7f65982dcc"/></dir><file name="shipping.phtml" hash="2ea286244f18151dec311b02b0d679db"/></dir><file name="onepage.phtml" hash="f712dbbc0ad2bfbd730305ce6d93b854"/></dir><dir name="configurableswatches"><dir name="catalog"><dir name="layer"><dir name="filter"><file name="swatches.phtml" hash="e16ca9d33f00e6508d4e906f4c628fa8"/></dir><dir name="state"><file name="swatch.phtml" hash="c1dea9d4ff7aa1031bb02920c8868afe"/></dir></dir><dir name="media"><file name="js.phtml" hash="6d51a736b921ef01e7a54bcb785fd938"/></dir><dir name="product"><dir name="list"><dir name="price"><file name="js.phtml" hash="8a5a13f63349d3da860dd34ad3abae45"/></dir><file name="swatches.phtml" hash="f20fae51f921f3e5aca09f1c31059595"/></dir><dir name="view"><dir name="type"><dir name="configurable"><file name="swatch-js.phtml" hash="e05534e7fa1f9a3e66c225af6c5c912e"/></dir><dir name="options"><dir name="configurable"><file name="swatches.phtml" hash="a023938249dbf26cc6d36147ea2f795c"/></dir></dir></dir></dir></dir></dir></dir><dir name="contacts"><file name="form.phtml" hash="281fb727a489a5eaf736e5a3778e396a"/></dir><dir name="customer"><dir name="account"><dir name="dashboard"><file name="address.phtml" hash="2feccb593467b669d9b970c27d91731f"/></dir><file name="dashboard.phtml" hash="023a322a491fe0b1612a635f654180c3"/><file name="navigation.phtml" hash="85e45b71f1a96e5253d8f80777505267"/></dir><dir name="address"><file name="edit.phtml" hash="a2ce171a87c482276ac0cf3927c90e05"/></dir><dir name="form"><file name="address.phtml" hash="800d025d15cf24193cdd7edff99250f2"/><file name="changepassword.phtml" hash="43867738c705bff9e55017a34ccbf392"/><file name="confirmation.phtml" hash="da5cbec38f05fdaa8aa90e35a75f483b"/><file name="edit.phtml" hash="446f236638ae0c394525a8c0f22818e5"/><file name="forgotpassword.phtml" hash="0006dd07a38bf902a5e6ce45747e6e73"/><file name="mini.login.phtml" hash="c17a74dccc85e5a80588b7edd9005dc8"/><file name="resetforgottenpassword.phtml" hash="c35070792513e8c3700e37c565c07338"/></dir></dir><dir name="directory"><file name="currency.phtml" hash="e6c82279ce81d014f8d360f2df799c8f"/></dir><dir name="downloadable"><dir name="catalog"><dir name="product"><file name="type.phtml" hash="805a2877587adc919c17625a76899c67"/></dir></dir><dir name="checkout"><dir name="cart"><dir name="item"><file name="default.phtml" hash="4da8e640b1cdfe5173faa63d61116688"/></dir></dir><dir name="onepage"><dir name="review"><file name="item.phtml" hash="84bf8341e9c44b29ae6513f5dad110ad"/></dir></dir></dir><dir name="customer"><dir name="products"><file name="list.phtml" hash="c175e938d4dbae8eb6ddfdb2d4eec509"/></dir></dir><dir name="email"><dir name="order"><dir name="items"><dir name="creditmemo"><file name="downloadable.phtml" hash="57583119e35bf464cd3c6f917e21546f"/></dir><dir name="invoice"><file name="downloadable.phtml" hash="b713d9268caa8f0c6f05a8d41e62c3eb"/></dir><dir name="order"><file name="downloadable.phtml" hash="f778e7eba8982bb235d09e2a2488b11d"/></dir></dir></dir></dir><dir name="sales"><dir name="order"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="d15d0dea0bd936e3dab938bdd4c6535a"/></dir></dir></dir></dir></dir><dir name="email"><dir name="catalog"><dir name="product"><file name="list.phtml" hash="986134172956e21500b84787f6cec388"/><file name="new.phtml" hash="6bc8123b2f36d8c04e25161598f12fc5"/></dir></dir><dir name="order"><dir name="creditmemo"><file name="items.phtml" hash="98e983e11f6b6ebbd39e22bf22318a4c"/></dir><dir name="invoice"><file name="items.phtml" hash="f9dc307b1f5dfe2df393038735132cf6"/></dir><dir name="items"><dir name="creditmemo"><file name="default.phtml" hash="22495dca6f47504ec716f8a2e3bd7b06"/></dir><dir name="invoice"><file name="default.phtml" hash="22495dca6f47504ec716f8a2e3bd7b06"/></dir><dir name="order"><file name="default.phtml" hash="f555f74e3f801fef35dc2daa766c039c"/></dir><dir name="shipment"><file name="default.phtml" hash="b412da02960836b26352ca5b760039c1"/></dir></dir><file name="items.phtml" hash="39119f6889710ff44370b452d4c99bdb"/><dir name="shipment"><file name="items.phtml" hash="b26c762b51e2ca50a02b542b9c22ddb3"/><file name="track.phtml" hash="5a7dae48bb8550646d47766305037f01"/></dir><dir name="totals"><file name="wrapper.phtml" hash="d57ed586ccb245d528c201e2ebb00e7f"/></dir></dir><dir name="productalert"><file name="price.phtml" hash="677588b65b56b6d4fb72264521b9b841"/><file name="stock.phtml" hash="dd96d2380d74c47d518d398de6982fb1"/></dir></dir><dir name="newsletter"><file name="subscribe.phtml" hash="98ed115e79ca4f156f1e10f67407d1f5"/></dir><dir name="oauth"><dir name="authorize"><dir name="form"><file name="login-simple.phtml" hash="97f6694fb6f2bfe3680653a0b2767767"/></dir></dir></dir><dir name="page"><file name="1column.phtml" hash="df3fcec30378b0a4719aa6c05b3b3d45"/><file name="2columns-left.phtml" hash="b4f3a625ea3d8e901fd3a706a687634d"/><file name="2columns-right.phtml" hash="93ed4b3331134023951d4216762a21e7"/><file name="3columns.phtml" hash="a7a2ad542214b908eb4c4bfa72b45618"/><file name="empty.phtml" hash="8be188d867d5c0fdd76c9f945de9f482"/><dir name="html"><file name="footer.phtml" hash="f51a89f353cbac5dcdff9559770e343c"/><file name="header.phtml" hash="6005e3285a785ef73c728ae0d11b8e49"/><file name="pager.phtml" hash="e2afd8e23e55216508ebb63b8ee79184"/><dir name="topmenu"><file name="renderer.phtml" hash="099f471a68c819813df058501914df6d"/></dir><file name="topmenu.phtml" hash="2f8421c90d403f3cc89f90ad4b1da495"/></dir><file name="popup.phtml" hash="a7f34bdd8a280057296c8f59bd14bd75"/><file name="print.phtml" hash="547d87181e28d46332e395c0728d5284"/><dir name="template"><file name="links.phtml" hash="653c6c543f2b4155b6ab56a3f0fbe2fe"/></dir></dir><dir name="payment"><dir name="form"><file name="cc.phtml" hash="ffda3eaf58016bf2e691356773731c78"/><file name="ccsave.phtml" hash="0efed4f140983c1462cd7812930dbb00"/></dir><dir name="info"><file name="default.phtml" hash="04d4159c072e98a5cbb1451ed6660d3b"/></dir></dir><dir name="paypal"><file name="bml.phtml" hash="ea94f68a523635b97bf5dd05641dad85"/><dir name="express"><dir name="minicart"><file name="shortcut.phtml" hash="2142960dd17e25fad9e6351ef0ee1478"/></dir><dir name="product"><file name="shortcut.phtml" hash="ce1e009b74dc9ca6a85576e469d16584"/></dir><dir name="review"><file name="address.phtml" hash="c56035d8007cb5f84446c8d0cf24a864"/><file name="details.phtml" hash="18909790f28faa286f51912f349b51f3"/><dir name="shipping"><file name="method.phtml" hash="2cd9ba78ee125e4e9f7118915872c0b0"/></dir></dir><file name="review.phtml" hash="898229c6db7c342596b2c4c4e82732e1"/></dir><dir name="partner"><file name="us_logo.phtml" hash="d582c8de45f4f6e4338bcf59ac8dcf05"/></dir></dir><dir name="persistent"><dir name="checkout"><dir name="onepage"><file name="billing.phtml" hash="010e9e29369eebd9416e5b1275a42468"/><file name="login.phtml" hash="cc35ee7b2c4f0ff398a3bc8d6847cc86"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="9d293574433074731be99465b66241c6"/><file name="register.phtml" hash="11d218e8ad865ba65ba7e2b7e980b607"/></dir></dir><dir name="header"><file name="links.phtml" hash="196c7f6d8cb889b189cb68dd72d52254"/></dir><file name="remember_me.phtml" hash="a94253926d306c1894a2ba0c867bcbed"/><file name="remember_me_tooltip.phtml" hash="6cf1da6c19645f765ade807fa68b30de"/></dir><dir name="rating"><file name="detailed.phtml" hash="548e2a79e95eb32781d6c6069bf48ae5"/></dir><dir name="reports"><file name="product_viewed.phtml" hash="9726d711b1082bc6e3838247051d99f9"/><dir name="widget"><dir name="compared"><dir name="column"><file name="compared_default_list.phtml" hash="36937f4de1aa6d5fdc830bc081cf67c4"/><file name="compared_images_list.phtml" hash="75bf29c90737d53284ff45aca7836531"/><file name="compared_names_list.phtml" hash="ef44286a7ba6e20896310fd63dfa06f3"/></dir><dir name="content"><file name="compared_grid.phtml" hash="39df06ea7e8f3660cef8d1f77d1ed80b"/><file name="compared_list.phtml" hash="1008914fb16e5ff8ffae3253044e844a"/></dir></dir><dir name="viewed"><dir name="column"><file name="viewed_default_list.phtml" hash="d50e6206b966a9901226b1d9fd3b04e8"/><file name="viewed_images_list.phtml" hash="01e0a72e62b251cb2daa452872d49333"/><file name="viewed_names_list.phtml" hash="6b28050d242fa1c26afa14f260da97f8"/></dir><dir name="content"><file name="viewed_grid.phtml" hash="e89603e8499b62e4524f56d09a1feae6"/><file name="viewed_list.phtml" hash="d221dc3cbbf9739243395e6e5ac94595"/></dir></dir></dir></dir><dir name="review"><dir name="customer"><file name="view.phtml" hash="ad85c9717a69c8762300e29f311582d5"/></dir><file name="form.phtml" hash="a796965b823303c19c4a8bb600a1f8e4"/><dir name="product"><dir name="view"><file name="list.phtml" hash="7e41b3d49553d67dee807d596b273de4"/></dir></dir><file name="view.phtml" hash="8c6b45c5bb9cbe252238054a9eba5360"/></dir><dir name="sales"><dir name="billing"><dir name="agreement"><file name="view.phtml" hash="d73ba9291aa194de8efe1865ab395ae8"/></dir><file name="agreements.phtml" hash="f6d88ecfca79207abd9b9789d2da5633"/></dir><dir name="order"><dir name="creditmemo"><dir name="items"><dir name="renderer"><file name="default.phtml" hash="346c54f4534913f80136e0a18c9c8e13"/></dir></dir><file name="items.phtml" hash="23d74304e9ee4ef85daf0ad526b9f82b"/></dir><file name="history.phtml" hash="bdea6c7cadc75184a45408fcce33ece8"/><dir name="invoice"><dir name="items"><dir name="renderer"><file name="default.phtml" hash="b266163872b1fecb84dd6461a812db9f"/></dir></dir><file name="items.phtml" hash="e9ac03baecb7a4c111eb5396b793c322"/></dir><dir name="items"><dir name="renderer"><file name="default.phtml" hash="19d2940363708fd69043d32a4a501ced"/></dir></dir><file name="items.phtml" hash="55ed05b16bf49bf3d5c5d5630eec8d12"/><file name="recent.phtml" hash="7501563b57b22b3b65e95f7b0cbe23da"/><dir name="shipment"><file name="items.phtml" hash="d86445644e86272ef16ab8c4d8ea2707"/></dir></dir><dir name="recurring"><file name="grid.phtml" hash="a82651c574e2b7e282d42653fd0c8b21"/><dir name="profile"><file name="view.phtml" hash="60522e84040c4ab7e60cc3db302b22dc"/></dir></dir><dir name="widget"><dir name="guest"><file name="form.phtml" hash="4362cc620cf76097f7f37434921d1daf"/></dir></dir></dir><dir name="sendfriend"><file name="send.phtml" hash="9a8b28708623925ae440c0c07f7a1159"/></dir><dir name="wishlist"><dir name="button"><file name="update.phtml" hash="f592505e415cbcdf2b9ec05a8c4722e4"/></dir><dir name="item"><dir name="column"><file name="cart.phtml" hash="ea48fd63bc29db7f736a8c6acdec96af"/><file name="info.phtml" hash="61f6aff2a766debfa00e5de72b3bb7e3"/><file name="price.phtml" hash="cb52b3c96870eb9e9d078db58c95c900"/><file name="quantity.phtml" hash="b1e6601b988a9eb9ff52f04c45292ca4"/></dir><file name="list.phtml" hash="f27eafc6a13a08728db62d08f7204ed9"/></dir><file name="shared.phtml" hash="59b31b93ed8290e45cae603f36f18e32"/><file name="sidebar.phtml" hash="20c961c05b6a3c83542dd4f8aae0a5b5"/><file name="view.phtml" hash="6e65f49752f33e6313c32b07bee1cb1e"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="rwd"><dir name="default"><dir name="css"><file name="madisonisland-ie8.css" hash="965c41e8830dc52b76eff8ecec4a16b3"/><file name="madisonisland.css" hash="d77d84a3527193463a1c502f32dace63"/><file name="scaffold-forms.css" hash="d2e97b5f51473b094bf569fa2c54bad0"/><file name="styles-ie8.css" hash="c41e900c701e5a1557fd6866c30baa12"/><file name="styles.css" hash="aee82704347f57061af9de5cc6c8a369"/></dir><dir name="images"><file name="ajax-loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/><file name="bg_x.png" hash="c321c67f6929326129426c9e83207ea3"/><file name="demo-logo.png" hash="c6f4b110e5379547e71d367479f0f945"/><file name="demo_logo.png" hash="7694461c41abb69ca60c086c69e312cc"/><file name="icon_sprite.png" hash="e15f0103ef5ebe3baf48960bb9ccfaab"/><file name="icon_sprite@2x.png" hash="2e9c31d760a33d9f27951210f8311341"/><file name="logo.gif" hash="b5c6c6f40ba031f613d0f2aaa7f3c087"/><file name="logo_email.gif" hash="9024e782b5ef7fb76e935a47c39f53c6"/><file name="logo_print.gif" hash="b5c6c6f40ba031f613d0f2aaa7f3c087"/><dir name="media"><file name="col_left_callout.jpg" hash="5f762006021e046f9bd536f37ea7c463"/><file name="col_right_callout.jpg" hash="dae22f37a542da272a35195ec286ec25"/><file name="homepage_banner_1.jpg" hash="267b2827f3db118d99f7a623ee02ad8f"/><file name="homepage_banner_1@2x.jpg" hash="3baa6702111d6f5f5dd40d96f148fc60"/><file name="homepage_banner_2.jpg" hash="67f70cfb1690b5de6e185769fb55cd28"/><file name="homepage_callout_1.jpg" hash="4b8451e4e99e87b6c60a015f659d32b6"/><file name="homepage_callout_1@2x.jpg" hash="fb5e215f6cb623abf6f0365b5de1541d"/><file name="homepage_callout_2.jpg" hash="057ab6200f6ea05d4a6793969c5edac3"/><file name="homepage_callout_2@2x.jpg" hash="e923c6323d22235876fe61a9c5588c85"/><file name="homepage_callout_3.jpg" hash="b2cf1e73e87b3330df17425044d22f52"/><file name="homepage_callout_3@2x.jpg" hash="8b98dee63a61608b09c26bd60acea65e"/></dir><file name="opc-ajax-loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/><file name="social_icons.png" hash="a6d0bdaea0ca0f507bd36628a6ad31a2"/><file name="social_icons@2x.png" hash="531cc696a7b949dbc8121809c1bb4d46"/></dir><dir name="js"><file name="app.js" hash="3ce0f2bf7c7888013e278a0e51f222e5"/><dir name="configurableswatches"><file name="configurable-swatch-prices.js" hash="4d13ea12fdf69832fbd5f8dda60f3b6f"/><file name="product-media.js" hash="af6bac22c9dc14136fdc7ce812ec2feb"/><file name="swatches-list.js" hash="d23baf5076b63c71d8d3e96e303d7571"/><file name="swatches-product.js" hash="1fd081174c8b78557bd0f95698d7044f"/></dir><dir name="lib"><dir name="elevatezoom"><file name="jquery.elevateZoom-3.0.8.min.js" hash="a18ff8649464a0c999f5d063a081da61"/><file name="jquery.elevatezoom.js" hash="76494c5afa372e08d0a8a5f4ba7e58ed"/></dir><file name="enquire.js" hash="c11ca42a1f2bf189d004f9a4f42e3ca2"/><file name="fastclick.js" hash="7f1e1673fa395e43cbdc584c8798541b"/><file name="imagesloaded.js" hash="f70def9bddf45be549ec0575645b8038"/><file name="jquery.cycle2.min.js" hash="24f809434b3e494cc7b98c6c08404b33"/><file name="jquery.cycle2.swipe.min.js" hash="15747fbd45dd1adcaf8f04a2d8a71d68"/><file name="matchMedia.addListener.js" hash="6f47448212550bd3157c4265e3ebf085"/><file name="matchMedia.js" hash="89f369588d629240d6a8d4f8788490c8"/><file name="modernizr.custom.min.js" hash="e508acbc792b5761fe98dc892a1fd952"/><file name="selectivizr.js" hash="8e596ea5ffac3cf3eb53f75a15cdc7eb"/></dir><file name="minicart.js" hash="dc3a5fb30ec84d7ef2a045e0b6869feb"/><file name="msrp_rwd.js" hash="502177837071323efcc1b061c3fb359c"/><file name="opcheckout_rwd.js" hash="609dd969261120edc12019e8acb19713"/><file name="slideshow.js" hash="0d450c0571b6b13c6f1f535aab75128b"/></dir><dir name="scss"><file name="_core.scss" hash="906a7cffa2b03c241c562365a0d08fa0"/><file name="_framework.scss" hash="3cb92d145bc178ac486dab0a7f89c845"/><file name="_var.scss" hash="3c0cf1b84cb2e12a40f66ba4ddb99154"/><file name="config.rb" hash="5f50b4dc5eefbab9e22abdfb80f4d689"/><dir name="content"><file name="_category.scss" hash="583ef5cb950e988c133b9f3e0a6a9916"/><file name="_home.scss" hash="d6d819ded02e0b84aa3b7440eaebd3c7"/></dir><dir name="core"><file name="_common.scss" hash="6f8ed0cdab1e84b7c7eb3267eca92baa"/><file name="_form.scss" hash="9298d66ab4f09e9c1b052f972e8cffd2"/><file name="_reset.scss" hash="e10fdce9a02b1d7ade124075708fef31"/><file name="_table.scss" hash="77f81924b6c7a71c448f1a639c960a11"/></dir><file name="email-inline.scss" hash="1be1c74ae6d1852f57ff6fd4919c5a67"/><file name="email-non-inline.scss" hash="4b0cf21e043ca9887fc6509edb8dde1d"/><dir name="function"><file name="_black.scss" hash="e10de44b696ff22e13f1a60695b2dbfd"/><file name="_white.scss" hash="646f8a153606ee49dd2e066295de5d12"/></dir><dir name="layout"><file name="_footer.scss" hash="029890b10ca1c0fe226cc9b4ae73ccaf"/><file name="_global.scss" hash="6b4a022de1ca80630fa7b6841c36e0b9"/><file name="_header-account.scss" hash="257e8c4c563ce341b2072c10262e4fa4"/><file name="_header-cart.scss" hash="142f0d057e42458b65fd1389a1aa8f2c"/><file name="_header-nav.scss" hash="e299cb37d3cd0b72400c05adcc708039"/><file name="_header-search.scss" hash="eb14d9e3d408072b89fc75b4ae430fde"/><file name="_header.scss" hash="c222b86c64f6bae8f7eb17c8b60faf94"/></dir><file name="madisonisland-ie8.scss" hash="726ce86a8e549ae2a575443a124f98de"/><file name="madisonisland.scss" hash="cebbbd38450eef37f128a6c9fcac0d55"/><dir name="mixin"><file name="_breakpoint.scss" hash="faed8ebe353dc4386a387b371f423834"/><file name="_clearfix.scss" hash="c5bc9f75034dbf7897b25efb0fb0484e"/><file name="_if-resolution.scss" hash="1fa7135f41d4602e7cd28d545ccdf25a"/><file name="_image-replacement.scss" hash="7020fbf5fbda338b60c86d95ff7f7176"/><file name="_loading-overlay.scss" hash="c57e8e2775a2d475047558bc13f8ffc3"/><file name="_menu.scss" hash="ba9ce8e03e0a467fd9fa42918f46ce83"/><file name="_not-selectable.scss" hash="32504f52ec7698d2d61d206377b3cf90"/><file name="_toggle-content.scss" hash="d77b1587d918179dbd74b62447f6837b"/><file name="_triangle.scss" hash="21be7b64008c27c1e01b6239e5022c8f"/><file name="_typography.scss" hash="2f050ccbdb43ae73fe777396b638237a"/></dir><dir name="module"><file name="_account-orders.scss" hash="293c980d4de1fe57b43e2d6409e99540"/><file name="_account-reviews.scss" hash="6ebd23607d9bcf331216f59ff4fb12bc"/><file name="_billing-agreements.scss" hash="67c334dd9fd2cb81b55e121cc3871380"/><file name="_captcha.scss" hash="8b85d4f13c6cd724cc7da006cbd08d4a"/><file name="_catalog-compare.scss" hash="cfe6377c5ee119e0f6867ae38655cf79"/><file name="_catalog-msrp.scss" hash="520ff7d05207c4401b43dcec5011c523"/><file name="_catalog-product.scss" hash="f460f8813875dc65d12552ef93229152"/><file name="_checkout-cart-minicart.scss" hash="f69a2ba625f23812a598b9129e2ca50c"/><file name="_checkout-cart.scss" hash="dedd939651d2bba9bd48cea660fac522"/><file name="_checkout-multi-address.scss" hash="c01e9d610d7382c245549e4674b2f699"/><file name="_checkout-onepage.scss" hash="e256f304486fdba9db03be390da5d694"/><file name="_checkout-success.scss" hash="1472505a93ac91c6a15fff10f8641da3"/><file name="_cms.scss" hash="b77cc6efa28d4143a40825fe2926d65f"/><file name="_configurableswatches.scss" hash="4fbe40f48bee8876e139d5891e0efa1f"/><file name="_contacts.scss" hash="8abe19542fce2b4a3275d1f0f87cbaa9"/><file name="_cookies.scss" hash="0b17ddce789b76ea4400c8b5221fecc7"/><file name="_customer.scss" hash="43a94c1671551b131a3ec871b81fea0c"/><file name="_paypal.scss" hash="400f636fdfd06c6e55c104a4aa7d39da"/><file name="_popular-terms.scss" hash="0ae8fc23d9504bbeabce51ed05f9aa69"/><file name="_pricing_conditions.scss" hash="c85df2720194e267460f6ba312040b88"/><file name="_product-list.scss" hash="dea9f90a619fa13e248ba3629fc4a9a6"/><file name="_recurring-profiles.scss" hash="0f9e84245fe6ddeaf10333e5ee3f259b"/><file name="_review.scss" hash="c6490833602f5ec9e9a351bb360fb7ab"/><file name="_search.scss" hash="3b01e69f5629cfbd1a1db1165d1daf7c"/><file name="_slideshow.scss" hash="fef56455471076cff90923f5288d5c4e"/><file name="_tags.scss" hash="19362180cf177e8c423965ed6a28945b"/><file name="_widget.scss" hash="ce115e226c4e33a73a976a4a2b1a78f2"/><file name="_wishlist.scss" hash="5fa9ea34b116ed6ec843cf3053c706f3"/></dir><dir name="override"><file name="_plugin.scss" hash="1526ff50255380d8ccd09e5c18abb3e5"/></dir><file name="scaffold-forms.scss" hash="bcf97a99e6b64ff60a1a47a68053b3ea"/><file name="styles-ie8.scss" hash="50d49b08f1e77392aae3dad1cd3634dc"/><file name="styles.scss" hash="d2fc153728136ebf5411455c681c9249"/><dir name="vendor"><file name="_normalize.scss" hash="d9edffd350bd218571fd141a9c658d29"/></dir><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Interface_Frontend_Rwd_Default-1.9.4.0.xml b/var/package/Interface_Frontend_Rwd_Default-1.9.4.0.xml
new file mode 100644
index 0000000..cda6c93
--- /dev/null
+++ b/var/package/Interface_Frontend_Rwd_Default-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Interface_Frontend_Rwd_Default</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/afl-3.0.php">AFL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>This is a RWD themes base</summary>
+    <description>This is a RWD themes base</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:31:59</time>
+    <contents><target name="magedesign"><dir name="frontend"><dir name="rwd"><dir name="default"><dir name="etc"><file name="theme.xml" hash="b2a69156a1174ff2f31b6c58a406aae2"/><file name="widget.xml" hash="bc759364e57df39fe21fee0a8b67b5d5"/></dir><dir name="layout"><file name="bundle.xml" hash="a715eb3119841a5b4d4677bbab24b9fc"/><file name="catalog.xml" hash="2f954db36d01cf64381f5ee1bd3f7ce3"/><file name="catalog_msrp.xml" hash="88989cab2f9e5da358bfc6c5ee4659d2"/><file name="catalogsearch.xml" hash="9a1574f756ad991f560891da5246d0d9"/><file name="checkout.xml" hash="0ab4f0bb734abfedcc2003fb2ad0ca4d"/><file name="cms.xml" hash="17125b1617bde45d80fda64e8c0f5759"/><file name="configurableswatches.xml" hash="0241108f4b79242802c5831a7d0d1b62"/><file name="contacts.xml" hash="5b45ef85df7aa65dca34a26137cb36d8"/><file name="customer.xml" hash="4f9b20ae2fcd5cdc6be819cfb8e5ebf3"/><file name="directory.xml" hash="6abb61f6a2b48b0d484b7f54f83b60a9"/><file name="downloadable.xml" hash="aaf69b45f0de1734b86f2382bf1cafc9"/><file name="newsletter.xml" hash="653ce3bec784a79a742f102298edc7d5"/><file name="oauth.xml" hash="2efda6d5664c7c2dd9ab41c189b62a18"/><file name="page.xml" hash="ede2b40ae0e9ad35a4236850f26b5a09"/><file name="paypal.xml" hash="46861e221b66b4116ad78f605f6ba8de"/><file name="persistent.xml" hash="72804d8e0f27cbdea8e4bf2be789d05f"/><file name="review.xml" hash="8b7203312ad5d2a917d015ca925d483e"/><file name="rss.xml" hash="aa87cf19e7429e782acbbf1150da0092"/><file name="sales.xml" hash="6fac00269851d98c1657fcb96556c43f"/><file name="wishlist.xml" hash="3c0f8e83d2efec2d8a9586d74464d9bd"/></dir><dir name="template"><dir name="authorizenet"><dir name="directpost"><file name="form.phtml" hash="f942e5c7fd83675d53aaaeacfb97c1fa"/></dir></dir><dir name="bundle"><dir name="catalog"><dir name="product"><dir name="view"><dir name="type"><dir name="bundle"><file name="availability.phtml" hash="d17e41c21cd887181fc36f69697b8f7b"/><dir name="option"><file name="select.phtml" hash="15c9836abe158cb3e749c1f9cf0a42c3"/></dir></dir><file name="bundle.phtml" hash="8e89d8e4084af8424ab74b29cd33f2c4"/></dir></dir></dir></dir><dir name="email"><dir name="order"><dir name="items"><dir name="creditmemo"><file name="default.phtml" hash="8a3a591e1ad974821dda52bb88887960"/></dir><dir name="invoice"><file name="default.phtml" hash="a23860eafae1159e04c62563315aee22"/></dir><dir name="order"><file name="default.phtml" hash="340b74124298efbf9c2cd78da918c42d"/></dir><dir name="shipment"><file name="default.phtml" hash="07066ce5f4d1fc3207bc404be3b4805d"/></dir></dir></dir></dir><dir name="sales"><dir name="order"><dir name="items"><file name="renderer.phtml" hash="edc999ba901b1e1019f17a7f589a70db"/></dir></dir></dir></dir><dir name="captcha"><file name="zend.phtml" hash="ddc2a17ee6665bef97d4e3df65cdf5ff"/></dir><dir name="catalog"><dir name="layer"><file name="filter.phtml" hash="d7f9d6c377402fe2f4b8884604c81a08"/><file name="state.phtml" hash="e0e6ad4037aaddebdd6262c229c84ee3"/><file name="view.phtml" hash="7633e62b9097d563b7e5935caa69816c"/></dir><dir name="msrp"><file name="popup.phtml" hash="17959ae24c464e15d396dc7718ba41da"/></dir><dir name="navigation"><file name="left.phtml" hash="8147f13c74b194abfa9364e2ccf87bfe"/></dir><dir name="product"><dir name="compare"><file name="list.phtml" hash="23e2ab54e8efb8f40af3044cf139b2c1"/><file name="sidebar.phtml" hash="2f150ddfde326c4491743cb3201dff6d"/></dir><dir name="list"><file name="related.phtml" hash="bfd36eaecca1316fac9093e13f8d57f0"/><file name="toolbar.phtml" hash="4da6f535d64316236f96375079bd3af7"/><file name="upsell.phtml" hash="74383226e851d393877027448b202bbd"/></dir><file name="list.phtml" hash="ca83ecbdd87fc9f95cd55430efdf982a"/><file name="price.phtml" hash="d5e7d023237bc8e28296c9c815b20b25"/><dir name="view"><file name="addto.phtml" hash="d2686089523841c703851af3818511e5"/><file name="addtocart.phtml" hash="a68639819ba009c8e7af9ede6121d5e9"/><file name="media.phtml" hash="e92c39869cc703e530f88a53c4099587"/><file name="sharing.phtml" hash="e62dfe3626003760a7f12b5df1f5b8bf"/><dir name="type"><dir name="availability"><file name="default.phtml" hash="ade2605d9f21591877c86def935c0985"/><file name="grouped.phtml" hash="5141db76a5eccc9f136dd4aca8de4ee5"/></dir><file name="default.phtml" hash="ea05946d1fc0d9b543575a30dac35b98"/><file name="grouped.phtml" hash="c916b8e0eab6092ec4ae1e5eccced5fb"/><dir name="options"><file name="configurable.phtml" hash="773160249a91428474a17a3453a52821"/></dir></dir></dir><file name="view.phtml" hash="b8dca08c44f76055de3622da9ecbad16"/><dir name="widget"><dir name="new"><dir name="column"><file name="new_default_list.phtml" hash="28f887be48a2e636097e9abe54712c42"/><file name="new_images_list.phtml" hash="8fcfbe34861cdec02a8cf60131c5f673"/><file name="new_names_list.phtml" hash="ccb2f5d414cd6606654e3f9d59285776"/></dir><dir name="content"><file name="new_grid.phtml" hash="4cc962df6eb72c9d94ced9b80c5c609d"/><file name="new_list.phtml" hash="cd58e2462fa8fea042c160afee292831"/></dir></dir></dir></dir></dir><dir name="cataloginventory"><dir name="stockqty"><file name="composite.phtml" hash="7aed9454ef90de54c19de543a8bbc734"/></dir></dir><dir name="catalogsearch"><dir name="advanced"><file name="form.phtml" hash="cf9d110b5ea7d85e583bc536d708ed38"/></dir><file name="form.mini.phtml" hash="58fc82484aba2a6cdb5169621bf73a7c"/><file name="result.phtml" hash="754d72a8a1acb320ff4a3386c789d293"/></dir><dir name="centinel"><dir name="authentication"><file name="start.phtml" hash="e066c848c47bd193bbd68b4668ce0345"/></dir></dir><dir name="checkout"><dir name="cart"><file name="coupon.phtml" hash="bdc2b5f413b5e65b114f03c30d0b9775"/><file name="crosssell.phtml" hash="247beab0d3780189ef6c060e0408569d"/><dir name="item"><dir name="configure"><file name="updatecart.phtml" hash="e435c3d45e2dde30dfa6ec32bdbd46b0"/></dir><file name="default.phtml" hash="ea115f2ea1aa442e125ca7016bf78c70"/></dir><dir name="minicart"><file name="default.phtml" hash="6a8baaa5986f3d8e5fbf4b614cfdd1d9"/><file name="items.phtml" hash="8c456416c7343aeb94f49ff186fcaddb"/></dir><file name="minicart.phtml" hash="91813c69b48fa20571bee15aa768a367"/><dir name="render"><file name="default.phtml" hash="5d33795c46ee79589ff3ea39ab257bc7"/><file name="simple.phtml" hash="8107d83abd4fb6b7cf4de3115fe63616"/></dir><file name="shipping.phtml" hash="8b000bacb4504d56de9ca53c5d2cef5d"/><dir name="sidebar"><file name="default.phtml" hash="6df63cb9d11b83b45a021a6bb73c8f1f"/></dir><file name="sidebar.phtml" hash="a1914db11300714fe5ad82ccaaa5dcb0"/></dir><file name="cart.phtml" hash="e9b4f7d92d8e0b43c8e108c64bda073c"/><dir name="multishipping"><file name="addresses.phtml" hash="461240bec3b53a83233c64c9bdd951b8"/><file name="billing.phtml" hash="160f5e12676c6655c70e370d8c68efcd"/><dir name="item"><file name="default.phtml" hash="c25ff8100d7eae2bdea228440bf6a9fc"/></dir><dir name="overview"><file name="item.phtml" hash="d59426451eccfd4fd53d67a2110a7ccb"/></dir><file name="overview.phtml" hash="27619da9d8f12eef488a4b4a666e2190"/></dir><dir name="onepage"><file name="payment.phtml" hash="44ac8e54e1df03410c97ed9bf3a5b274"/><file name="progress.phtml" hash="16b5f8a0b850849fe07f34418d590643"/><dir name="review"><file name="info.phtml" hash="6dda7d2e901658b4f450e51f300d7225"/><file name="item.phtml" hash="a5b7762e95cc8ea6260a5e7f65982dcc"/></dir><file name="shipping.phtml" hash="2ea286244f18151dec311b02b0d679db"/></dir><file name="onepage.phtml" hash="f712dbbc0ad2bfbd730305ce6d93b854"/></dir><dir name="configurableswatches"><dir name="catalog"><dir name="layer"><dir name="filter"><file name="swatches.phtml" hash="e16ca9d33f00e6508d4e906f4c628fa8"/></dir><dir name="state"><file name="swatch.phtml" hash="c1dea9d4ff7aa1031bb02920c8868afe"/></dir></dir><dir name="media"><file name="js.phtml" hash="6d51a736b921ef01e7a54bcb785fd938"/></dir><dir name="product"><dir name="list"><dir name="price"><file name="js.phtml" hash="8a5a13f63349d3da860dd34ad3abae45"/></dir><file name="swatches.phtml" hash="f20fae51f921f3e5aca09f1c31059595"/></dir><dir name="view"><dir name="type"><dir name="configurable"><file name="swatch-js.phtml" hash="e05534e7fa1f9a3e66c225af6c5c912e"/></dir><dir name="options"><dir name="configurable"><file name="swatches.phtml" hash="a023938249dbf26cc6d36147ea2f795c"/></dir></dir></dir></dir></dir></dir></dir><dir name="contacts"><file name="form.phtml" hash="281fb727a489a5eaf736e5a3778e396a"/></dir><dir name="customer"><dir name="account"><dir name="dashboard"><file name="address.phtml" hash="2feccb593467b669d9b970c27d91731f"/></dir><file name="dashboard.phtml" hash="023a322a491fe0b1612a635f654180c3"/><file name="navigation.phtml" hash="85e45b71f1a96e5253d8f80777505267"/></dir><dir name="address"><file name="edit.phtml" hash="a2ce171a87c482276ac0cf3927c90e05"/></dir><dir name="form"><file name="address.phtml" hash="800d025d15cf24193cdd7edff99250f2"/><file name="changepassword.phtml" hash="43867738c705bff9e55017a34ccbf392"/><file name="confirmation.phtml" hash="da5cbec38f05fdaa8aa90e35a75f483b"/><file name="edit.phtml" hash="446f236638ae0c394525a8c0f22818e5"/><file name="forgotpassword.phtml" hash="0006dd07a38bf902a5e6ce45747e6e73"/><file name="mini.login.phtml" hash="c17a74dccc85e5a80588b7edd9005dc8"/><file name="resetforgottenpassword.phtml" hash="c35070792513e8c3700e37c565c07338"/></dir></dir><dir name="directory"><file name="currency.phtml" hash="e6c82279ce81d014f8d360f2df799c8f"/></dir><dir name="downloadable"><dir name="catalog"><dir name="product"><file name="type.phtml" hash="805a2877587adc919c17625a76899c67"/></dir></dir><dir name="checkout"><dir name="cart"><dir name="item"><file name="default.phtml" hash="4da8e640b1cdfe5173faa63d61116688"/></dir></dir><dir name="onepage"><dir name="review"><file name="item.phtml" hash="84bf8341e9c44b29ae6513f5dad110ad"/></dir></dir></dir><dir name="customer"><dir name="products"><file name="list.phtml" hash="c175e938d4dbae8eb6ddfdb2d4eec509"/></dir></dir><dir name="email"><dir name="order"><dir name="items"><dir name="creditmemo"><file name="downloadable.phtml" hash="57583119e35bf464cd3c6f917e21546f"/></dir><dir name="invoice"><file name="downloadable.phtml" hash="b713d9268caa8f0c6f05a8d41e62c3eb"/></dir><dir name="order"><file name="downloadable.phtml" hash="f778e7eba8982bb235d09e2a2488b11d"/></dir></dir></dir></dir><dir name="sales"><dir name="order"><dir name="items"><dir name="renderer"><file name="downloadable.phtml" hash="d15d0dea0bd936e3dab938bdd4c6535a"/></dir></dir></dir></dir></dir><dir name="email"><dir name="catalog"><dir name="product"><file name="list.phtml" hash="986134172956e21500b84787f6cec388"/><file name="new.phtml" hash="6bc8123b2f36d8c04e25161598f12fc5"/></dir></dir><dir name="order"><dir name="creditmemo"><file name="items.phtml" hash="98e983e11f6b6ebbd39e22bf22318a4c"/></dir><dir name="invoice"><file name="items.phtml" hash="f9dc307b1f5dfe2df393038735132cf6"/></dir><dir name="items"><dir name="creditmemo"><file name="default.phtml" hash="22495dca6f47504ec716f8a2e3bd7b06"/></dir><dir name="invoice"><file name="default.phtml" hash="22495dca6f47504ec716f8a2e3bd7b06"/></dir><dir name="order"><file name="default.phtml" hash="f555f74e3f801fef35dc2daa766c039c"/></dir><dir name="shipment"><file name="default.phtml" hash="b412da02960836b26352ca5b760039c1"/></dir></dir><file name="items.phtml" hash="39119f6889710ff44370b452d4c99bdb"/><dir name="shipment"><file name="items.phtml" hash="b26c762b51e2ca50a02b542b9c22ddb3"/><file name="track.phtml" hash="5a7dae48bb8550646d47766305037f01"/></dir><dir name="totals"><file name="wrapper.phtml" hash="d57ed586ccb245d528c201e2ebb00e7f"/></dir></dir><dir name="productalert"><file name="price.phtml" hash="677588b65b56b6d4fb72264521b9b841"/><file name="stock.phtml" hash="dd96d2380d74c47d518d398de6982fb1"/></dir></dir><dir name="newsletter"><file name="subscribe.phtml" hash="98ed115e79ca4f156f1e10f67407d1f5"/></dir><dir name="oauth"><dir name="authorize"><dir name="form"><file name="login-simple.phtml" hash="97f6694fb6f2bfe3680653a0b2767767"/></dir></dir></dir><dir name="page"><file name="1column.phtml" hash="df3fcec30378b0a4719aa6c05b3b3d45"/><file name="2columns-left.phtml" hash="b4f3a625ea3d8e901fd3a706a687634d"/><file name="2columns-right.phtml" hash="93ed4b3331134023951d4216762a21e7"/><file name="3columns.phtml" hash="a7a2ad542214b908eb4c4bfa72b45618"/><file name="empty.phtml" hash="8be188d867d5c0fdd76c9f945de9f482"/><dir name="html"><file name="footer.phtml" hash="f51a89f353cbac5dcdff9559770e343c"/><file name="header.phtml" hash="6005e3285a785ef73c728ae0d11b8e49"/><file name="pager.phtml" hash="e2afd8e23e55216508ebb63b8ee79184"/><dir name="topmenu"><file name="renderer.phtml" hash="099f471a68c819813df058501914df6d"/></dir><file name="topmenu.phtml" hash="2f8421c90d403f3cc89f90ad4b1da495"/></dir><file name="popup.phtml" hash="a7f34bdd8a280057296c8f59bd14bd75"/><file name="print.phtml" hash="547d87181e28d46332e395c0728d5284"/><dir name="template"><file name="links.phtml" hash="653c6c543f2b4155b6ab56a3f0fbe2fe"/></dir></dir><dir name="payment"><dir name="form"><file name="cc.phtml" hash="ffda3eaf58016bf2e691356773731c78"/><file name="ccsave.phtml" hash="0efed4f140983c1462cd7812930dbb00"/></dir><dir name="info"><file name="default.phtml" hash="04d4159c072e98a5cbb1451ed6660d3b"/></dir></dir><dir name="paypal"><file name="bml.phtml" hash="ea94f68a523635b97bf5dd05641dad85"/><dir name="express"><dir name="minicart"><file name="shortcut.phtml" hash="2142960dd17e25fad9e6351ef0ee1478"/></dir><dir name="product"><file name="shortcut.phtml" hash="ce1e009b74dc9ca6a85576e469d16584"/></dir><dir name="review"><file name="address.phtml" hash="c56035d8007cb5f84446c8d0cf24a864"/><file name="details.phtml" hash="18909790f28faa286f51912f349b51f3"/><dir name="shipping"><file name="method.phtml" hash="2cd9ba78ee125e4e9f7118915872c0b0"/></dir></dir><file name="review.phtml" hash="898229c6db7c342596b2c4c4e82732e1"/></dir><dir name="partner"><file name="us_logo.phtml" hash="d582c8de45f4f6e4338bcf59ac8dcf05"/></dir></dir><dir name="persistent"><dir name="checkout"><dir name="onepage"><file name="billing.phtml" hash="010e9e29369eebd9416e5b1275a42468"/><file name="login.phtml" hash="cc35ee7b2c4f0ff398a3bc8d6847cc86"/></dir></dir><dir name="customer"><dir name="form"><file name="login.phtml" hash="9d293574433074731be99465b66241c6"/><file name="register.phtml" hash="11d218e8ad865ba65ba7e2b7e980b607"/></dir></dir><dir name="header"><file name="links.phtml" hash="196c7f6d8cb889b189cb68dd72d52254"/></dir><file name="remember_me.phtml" hash="a94253926d306c1894a2ba0c867bcbed"/><file name="remember_me_tooltip.phtml" hash="6cf1da6c19645f765ade807fa68b30de"/></dir><dir name="rating"><file name="detailed.phtml" hash="548e2a79e95eb32781d6c6069bf48ae5"/></dir><dir name="reports"><file name="product_viewed.phtml" hash="9726d711b1082bc6e3838247051d99f9"/><dir name="widget"><dir name="compared"><dir name="column"><file name="compared_default_list.phtml" hash="36937f4de1aa6d5fdc830bc081cf67c4"/><file name="compared_images_list.phtml" hash="75bf29c90737d53284ff45aca7836531"/><file name="compared_names_list.phtml" hash="ef44286a7ba6e20896310fd63dfa06f3"/></dir><dir name="content"><file name="compared_grid.phtml" hash="39df06ea7e8f3660cef8d1f77d1ed80b"/><file name="compared_list.phtml" hash="1008914fb16e5ff8ffae3253044e844a"/></dir></dir><dir name="viewed"><dir name="column"><file name="viewed_default_list.phtml" hash="d50e6206b966a9901226b1d9fd3b04e8"/><file name="viewed_images_list.phtml" hash="01e0a72e62b251cb2daa452872d49333"/><file name="viewed_names_list.phtml" hash="6b28050d242fa1c26afa14f260da97f8"/></dir><dir name="content"><file name="viewed_grid.phtml" hash="e89603e8499b62e4524f56d09a1feae6"/><file name="viewed_list.phtml" hash="d221dc3cbbf9739243395e6e5ac94595"/></dir></dir></dir></dir><dir name="review"><dir name="customer"><file name="view.phtml" hash="ad85c9717a69c8762300e29f311582d5"/></dir><file name="form.phtml" hash="a796965b823303c19c4a8bb600a1f8e4"/><dir name="product"><dir name="view"><file name="list.phtml" hash="7e41b3d49553d67dee807d596b273de4"/></dir></dir><file name="view.phtml" hash="8c6b45c5bb9cbe252238054a9eba5360"/></dir><dir name="sales"><dir name="billing"><dir name="agreement"><file name="view.phtml" hash="d73ba9291aa194de8efe1865ab395ae8"/></dir><file name="agreements.phtml" hash="f6d88ecfca79207abd9b9789d2da5633"/></dir><dir name="order"><dir name="creditmemo"><dir name="items"><dir name="renderer"><file name="default.phtml" hash="346c54f4534913f80136e0a18c9c8e13"/></dir></dir><file name="items.phtml" hash="23d74304e9ee4ef85daf0ad526b9f82b"/></dir><file name="history.phtml" hash="bdea6c7cadc75184a45408fcce33ece8"/><dir name="invoice"><dir name="items"><dir name="renderer"><file name="default.phtml" hash="b266163872b1fecb84dd6461a812db9f"/></dir></dir><file name="items.phtml" hash="e9ac03baecb7a4c111eb5396b793c322"/></dir><dir name="items"><dir name="renderer"><file name="default.phtml" hash="19d2940363708fd69043d32a4a501ced"/></dir></dir><file name="items.phtml" hash="55ed05b16bf49bf3d5c5d5630eec8d12"/><file name="recent.phtml" hash="7501563b57b22b3b65e95f7b0cbe23da"/><dir name="shipment"><file name="items.phtml" hash="d86445644e86272ef16ab8c4d8ea2707"/></dir></dir><dir name="recurring"><file name="grid.phtml" hash="a82651c574e2b7e282d42653fd0c8b21"/><dir name="profile"><file name="view.phtml" hash="60522e84040c4ab7e60cc3db302b22dc"/></dir></dir><dir name="widget"><dir name="guest"><file name="form.phtml" hash="4362cc620cf76097f7f37434921d1daf"/></dir></dir></dir><dir name="sendfriend"><file name="send.phtml" hash="9ccf097d7dae02373e1c4e9cab437339"/></dir><dir name="wishlist"><dir name="button"><file name="update.phtml" hash="f592505e415cbcdf2b9ec05a8c4722e4"/></dir><dir name="item"><dir name="column"><file name="cart.phtml" hash="ea48fd63bc29db7f736a8c6acdec96af"/><file name="info.phtml" hash="61f6aff2a766debfa00e5de72b3bb7e3"/><file name="price.phtml" hash="cb52b3c96870eb9e9d078db58c95c900"/><file name="quantity.phtml" hash="b1e6601b988a9eb9ff52f04c45292ca4"/></dir><file name="list.phtml" hash="f27eafc6a13a08728db62d08f7204ed9"/></dir><file name="shared.phtml" hash="59b31b93ed8290e45cae603f36f18e32"/><file name="sidebar.phtml" hash="20c961c05b6a3c83542dd4f8aae0a5b5"/><file name="view.phtml" hash="6e65f49752f33e6313c32b07bee1cb1e"/></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="rwd"><dir name="default"><dir name="css"><file name="madisonisland-ie8.css" hash="965c41e8830dc52b76eff8ecec4a16b3"/><file name="madisonisland.css" hash="d77d84a3527193463a1c502f32dace63"/><file name="scaffold-forms.css" hash="d2e97b5f51473b094bf569fa2c54bad0"/><file name="styles-ie8.css" hash="c41e900c701e5a1557fd6866c30baa12"/><file name="styles.css" hash="aee82704347f57061af9de5cc6c8a369"/></dir><dir name="images"><file name="ajax-loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/><file name="bg_x.png" hash="c321c67f6929326129426c9e83207ea3"/><file name="demo-logo.png" hash="c6f4b110e5379547e71d367479f0f945"/><file name="demo_logo.png" hash="7694461c41abb69ca60c086c69e312cc"/><file name="icon_sprite.png" hash="e15f0103ef5ebe3baf48960bb9ccfaab"/><file name="icon_sprite@2x.png" hash="2e9c31d760a33d9f27951210f8311341"/><file name="logo.gif" hash="b5c6c6f40ba031f613d0f2aaa7f3c087"/><file name="logo_email.gif" hash="9024e782b5ef7fb76e935a47c39f53c6"/><file name="logo_print.gif" hash="b5c6c6f40ba031f613d0f2aaa7f3c087"/><dir name="media"><file name="col_left_callout.jpg" hash="5f762006021e046f9bd536f37ea7c463"/><file name="col_right_callout.jpg" hash="dae22f37a542da272a35195ec286ec25"/><file name="homepage_banner_1.jpg" hash="267b2827f3db118d99f7a623ee02ad8f"/><file name="homepage_banner_1@2x.jpg" hash="3baa6702111d6f5f5dd40d96f148fc60"/><file name="homepage_banner_2.jpg" hash="67f70cfb1690b5de6e185769fb55cd28"/><file name="homepage_callout_1.jpg" hash="4b8451e4e99e87b6c60a015f659d32b6"/><file name="homepage_callout_1@2x.jpg" hash="fb5e215f6cb623abf6f0365b5de1541d"/><file name="homepage_callout_2.jpg" hash="057ab6200f6ea05d4a6793969c5edac3"/><file name="homepage_callout_2@2x.jpg" hash="e923c6323d22235876fe61a9c5588c85"/><file name="homepage_callout_3.jpg" hash="b2cf1e73e87b3330df17425044d22f52"/><file name="homepage_callout_3@2x.jpg" hash="8b98dee63a61608b09c26bd60acea65e"/></dir><file name="opc-ajax-loader.gif" hash="f48ee069890b16455c3ddcacee9b5f75"/><file name="social_icons.png" hash="a6d0bdaea0ca0f507bd36628a6ad31a2"/><file name="social_icons@2x.png" hash="531cc696a7b949dbc8121809c1bb4d46"/></dir><dir name="js"><file name="app.js" hash="3ce0f2bf7c7888013e278a0e51f222e5"/><dir name="configurableswatches"><file name="configurable-swatch-prices.js" hash="4d13ea12fdf69832fbd5f8dda60f3b6f"/><file name="product-media.js" hash="af6bac22c9dc14136fdc7ce812ec2feb"/><file name="swatches-list.js" hash="d23baf5076b63c71d8d3e96e303d7571"/><file name="swatches-product.js" hash="1fd081174c8b78557bd0f95698d7044f"/></dir><dir name="lib"><dir name="elevatezoom"><file name="jquery.elevateZoom-3.0.8.min.js" hash="a18ff8649464a0c999f5d063a081da61"/><file name="jquery.elevatezoom.js" hash="76494c5afa372e08d0a8a5f4ba7e58ed"/></dir><file name="enquire.js" hash="c11ca42a1f2bf189d004f9a4f42e3ca2"/><file name="fastclick.js" hash="7f1e1673fa395e43cbdc584c8798541b"/><file name="imagesloaded.js" hash="f70def9bddf45be549ec0575645b8038"/><file name="jquery.cycle2.min.js" hash="24f809434b3e494cc7b98c6c08404b33"/><file name="jquery.cycle2.swipe.min.js" hash="15747fbd45dd1adcaf8f04a2d8a71d68"/><file name="matchMedia.addListener.js" hash="6f47448212550bd3157c4265e3ebf085"/><file name="matchMedia.js" hash="89f369588d629240d6a8d4f8788490c8"/><file name="modernizr.custom.min.js" hash="e508acbc792b5761fe98dc892a1fd952"/><file name="selectivizr.js" hash="8e596ea5ffac3cf3eb53f75a15cdc7eb"/></dir><file name="minicart.js" hash="dc3a5fb30ec84d7ef2a045e0b6869feb"/><file name="msrp_rwd.js" hash="502177837071323efcc1b061c3fb359c"/><file name="opcheckout_rwd.js" hash="609dd969261120edc12019e8acb19713"/><file name="slideshow.js" hash="0d450c0571b6b13c6f1f535aab75128b"/></dir><dir name="scss"><file name="_core.scss" hash="906a7cffa2b03c241c562365a0d08fa0"/><file name="_framework.scss" hash="3cb92d145bc178ac486dab0a7f89c845"/><file name="_var.scss" hash="3c0cf1b84cb2e12a40f66ba4ddb99154"/><file name="config.rb" hash="5f50b4dc5eefbab9e22abdfb80f4d689"/><dir name="content"><file name="_category.scss" hash="583ef5cb950e988c133b9f3e0a6a9916"/><file name="_home.scss" hash="d6d819ded02e0b84aa3b7440eaebd3c7"/></dir><dir name="core"><file name="_common.scss" hash="6f8ed0cdab1e84b7c7eb3267eca92baa"/><file name="_form.scss" hash="9298d66ab4f09e9c1b052f972e8cffd2"/><file name="_reset.scss" hash="e10fdce9a02b1d7ade124075708fef31"/><file name="_table.scss" hash="77f81924b6c7a71c448f1a639c960a11"/></dir><file name="email-inline.scss" hash="1be1c74ae6d1852f57ff6fd4919c5a67"/><file name="email-non-inline.scss" hash="4b0cf21e043ca9887fc6509edb8dde1d"/><dir name="function"><file name="_black.scss" hash="e10de44b696ff22e13f1a60695b2dbfd"/><file name="_white.scss" hash="646f8a153606ee49dd2e066295de5d12"/></dir><dir name="layout"><file name="_footer.scss" hash="029890b10ca1c0fe226cc9b4ae73ccaf"/><file name="_global.scss" hash="6b4a022de1ca80630fa7b6841c36e0b9"/><file name="_header-account.scss" hash="257e8c4c563ce341b2072c10262e4fa4"/><file name="_header-cart.scss" hash="142f0d057e42458b65fd1389a1aa8f2c"/><file name="_header-nav.scss" hash="e299cb37d3cd0b72400c05adcc708039"/><file name="_header-search.scss" hash="eb14d9e3d408072b89fc75b4ae430fde"/><file name="_header.scss" hash="c222b86c64f6bae8f7eb17c8b60faf94"/></dir><file name="madisonisland-ie8.scss" hash="726ce86a8e549ae2a575443a124f98de"/><file name="madisonisland.scss" hash="cebbbd38450eef37f128a6c9fcac0d55"/><dir name="mixin"><file name="_breakpoint.scss" hash="faed8ebe353dc4386a387b371f423834"/><file name="_clearfix.scss" hash="c5bc9f75034dbf7897b25efb0fb0484e"/><file name="_if-resolution.scss" hash="1fa7135f41d4602e7cd28d545ccdf25a"/><file name="_image-replacement.scss" hash="7020fbf5fbda338b60c86d95ff7f7176"/><file name="_loading-overlay.scss" hash="c57e8e2775a2d475047558bc13f8ffc3"/><file name="_menu.scss" hash="ba9ce8e03e0a467fd9fa42918f46ce83"/><file name="_not-selectable.scss" hash="32504f52ec7698d2d61d206377b3cf90"/><file name="_toggle-content.scss" hash="d77b1587d918179dbd74b62447f6837b"/><file name="_triangle.scss" hash="21be7b64008c27c1e01b6239e5022c8f"/><file name="_typography.scss" hash="2f050ccbdb43ae73fe777396b638237a"/></dir><dir name="module"><file name="_account-orders.scss" hash="293c980d4de1fe57b43e2d6409e99540"/><file name="_account-reviews.scss" hash="6ebd23607d9bcf331216f59ff4fb12bc"/><file name="_billing-agreements.scss" hash="67c334dd9fd2cb81b55e121cc3871380"/><file name="_captcha.scss" hash="8b85d4f13c6cd724cc7da006cbd08d4a"/><file name="_catalog-compare.scss" hash="cfe6377c5ee119e0f6867ae38655cf79"/><file name="_catalog-msrp.scss" hash="520ff7d05207c4401b43dcec5011c523"/><file name="_catalog-product.scss" hash="f460f8813875dc65d12552ef93229152"/><file name="_checkout-cart-minicart.scss" hash="f69a2ba625f23812a598b9129e2ca50c"/><file name="_checkout-cart.scss" hash="dedd939651d2bba9bd48cea660fac522"/><file name="_checkout-multi-address.scss" hash="c01e9d610d7382c245549e4674b2f699"/><file name="_checkout-onepage.scss" hash="e256f304486fdba9db03be390da5d694"/><file name="_checkout-success.scss" hash="1472505a93ac91c6a15fff10f8641da3"/><file name="_cms.scss" hash="b77cc6efa28d4143a40825fe2926d65f"/><file name="_configurableswatches.scss" hash="4fbe40f48bee8876e139d5891e0efa1f"/><file name="_contacts.scss" hash="8abe19542fce2b4a3275d1f0f87cbaa9"/><file name="_cookies.scss" hash="0b17ddce789b76ea4400c8b5221fecc7"/><file name="_customer.scss" hash="43a94c1671551b131a3ec871b81fea0c"/><file name="_paypal.scss" hash="400f636fdfd06c6e55c104a4aa7d39da"/><file name="_popular-terms.scss" hash="0ae8fc23d9504bbeabce51ed05f9aa69"/><file name="_pricing_conditions.scss" hash="c85df2720194e267460f6ba312040b88"/><file name="_product-list.scss" hash="dea9f90a619fa13e248ba3629fc4a9a6"/><file name="_recurring-profiles.scss" hash="0f9e84245fe6ddeaf10333e5ee3f259b"/><file name="_review.scss" hash="c6490833602f5ec9e9a351bb360fb7ab"/><file name="_search.scss" hash="3b01e69f5629cfbd1a1db1165d1daf7c"/><file name="_slideshow.scss" hash="fef56455471076cff90923f5288d5c4e"/><file name="_tags.scss" hash="19362180cf177e8c423965ed6a28945b"/><file name="_widget.scss" hash="ce115e226c4e33a73a976a4a2b1a78f2"/><file name="_wishlist.scss" hash="5fa9ea34b116ed6ec843cf3053c706f3"/></dir><dir name="override"><file name="_plugin.scss" hash="1526ff50255380d8ccd09e5c18abb3e5"/></dir><file name="scaffold-forms.scss" hash="bcf97a99e6b64ff60a1a47a68053b3ea"/><file name="styles-ie8.scss" hash="50d49b08f1e77392aae3dad1cd3634dc"/><file name="styles.scss" hash="d2fc153728136ebf5411455c681c9249"/><dir name="vendor"><file name="_normalize.scss" hash="d9edffd350bd218571fd141a9c658d29"/></dir><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir></dir></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Interface_Install_Default-1.9.3.10.xml b/var/package/Interface_Install_Default-1.9.3.10.xml
deleted file mode 100644
index f7b050c..0000000
--- a/var/package/Interface_Install_Default-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Interface_Install_Default</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/afl-3.0.php">AFL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Default interface for Install</summary>
-    <description>Default interface for Install</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:13</time>
-    <contents><target name="magedesign"><dir name="install"><dir name="default"><dir name="default"><dir name="etc"><file name="theme.xml" hash="2b8a8e5c60e4784255103ef960654b5c"/></dir><dir name="layout"><file name="main.xml" hash="2cb06d08ba540edaa57211ab1e6b71e3"/></dir><dir name="template"><dir name="install"><file name="begin.phtml" hash="edc909883a0dd894799b11e35ecd4d78"/><file name="config.phtml" hash="23e3cd8fb40fe450f53c8f2989b64628"/><file name="create_admin.phtml" hash="5a3493606f6c6f8dc3aa18c07a26197a"/><dir name="db"><file name="main.phtml" hash="085af57b1eabf603853a5ad54933c8ee"/><file name="mysql4.phtml" hash="3f1311b2485d576e2a5242bf160ce5e3"/></dir><file name="download.phtml" hash="7ea367eccbea0474cc9bfaeb5f5768c4"/><file name="end.phtml" hash="a8dcb42695cf6b34f5818b4d3e4fbb46"/><file name="locale.phtml" hash="19017a22e20311eeaa8c1ca03a388e4e"/><file name="state.phtml" hash="717f306783e754c422b1842dd1cc7830"/></dir><file name="page.phtml" hash="d14f695b33a604ac37d13782ac57464b"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="install"><dir name="default"><dir name="default"><dir name="css"><file name="boxes.css" hash="9a5a383865b0a339a338b5c7dba4d2ef"/><file name="clears.css" hash="385643f0c918bfebaa7a99e04e251bb5"/><file name="ie7minus.css" hash="44645224adb1d5285c44369468391487"/><file name="iestyles.css" hash="5ad54798fe1e80145aac277e420fe2dc"/><file name="reset.css" hash="88f8f9c255d960d4313426de37ba1832"/></dir><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><dir name="images"><file name="error_msg_icon.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="footer_bg.gif" hash="d59784af16fd95ea82226e5708a89232"/><file name="footer_container_bg.gif" hash="d468e3943943cbbf711586e69d40ca42"/><file name="footer_info_separator.gif" hash="7da64eefaf4da3855ab6ee76dbced0c2"/><file name="footer_informational_bg.gif" hash="72d37f4b2ea747bf8969c2654ad1d1e0"/><file name="footer_left.gif" hash="2b15a54bea9409a75c142d14a62f0149"/><file name="footer_legality_bg.gif" hash="4eb1602e3369dccd901ffe98ea0fd4b3"/><file name="footer_right.gif" hash="a45eaf35c8797d299bd4d9b936528e8f"/><file name="header_bg.gif" hash="795c6de754d0d49717ed08d5cd8168c8"/><file name="header_nav_bg.gif" hash="80c6a18686eb0243e06d6176506a2502"/><file name="header_top_bg.jpg" hash="143f524392ee62fcc8183f5930d7258b"/><file name="header_top_container_bg.jpg" hash="294c18f3f6b838bba06ae41dd3c3d638"/><file name="i_notice.gif" hash="ebd56dc80b8346e10e93628bc0e6c372"/><file name="logo.gif" hash="48b7eb03807fdf80bdfb19b872cf84b8"/><file name="main_bg.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="main_container_bg.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="note_msg_icon.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="success_msg_icon.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/></dir></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Interface_Install_Default-1.9.4.0.xml b/var/package/Interface_Install_Default-1.9.4.0.xml
new file mode 100644
index 0000000..f108bb9
--- /dev/null
+++ b/var/package/Interface_Install_Default-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Interface_Install_Default</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/afl-3.0.php">AFL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Default interface for Install</summary>
+    <description>Default interface for Install</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:31:59</time>
+    <contents><target name="magedesign"><dir name="install"><dir name="default"><dir name="default"><dir name="etc"><file name="theme.xml" hash="2b8a8e5c60e4784255103ef960654b5c"/></dir><dir name="layout"><file name="main.xml" hash="2cb06d08ba540edaa57211ab1e6b71e3"/></dir><dir name="template"><dir name="install"><file name="begin.phtml" hash="edc909883a0dd894799b11e35ecd4d78"/><file name="config.phtml" hash="23e3cd8fb40fe450f53c8f2989b64628"/><file name="create_admin.phtml" hash="5a3493606f6c6f8dc3aa18c07a26197a"/><dir name="db"><file name="main.phtml" hash="085af57b1eabf603853a5ad54933c8ee"/><file name="mysql4.phtml" hash="3f1311b2485d576e2a5242bf160ce5e3"/></dir><file name="download.phtml" hash="7ea367eccbea0474cc9bfaeb5f5768c4"/><file name="end.phtml" hash="a8dcb42695cf6b34f5818b4d3e4fbb46"/><file name="locale.phtml" hash="19017a22e20311eeaa8c1ca03a388e4e"/><file name="state.phtml" hash="717f306783e754c422b1842dd1cc7830"/></dir><file name="page.phtml" hash="d14f695b33a604ac37d13782ac57464b"/></dir></dir></dir></dir></target><target name="mageskin"><dir name="install"><dir name="default"><dir name="default"><dir name="css"><file name="boxes.css" hash="9a5a383865b0a339a338b5c7dba4d2ef"/><file name="clears.css" hash="385643f0c918bfebaa7a99e04e251bb5"/><file name="ie7minus.css" hash="44645224adb1d5285c44369468391487"/><file name="iestyles.css" hash="5ad54798fe1e80145aac277e420fe2dc"/><file name="reset.css" hash="88f8f9c255d960d4313426de37ba1832"/></dir><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><dir name="images"><file name="error_msg_icon.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="footer_bg.gif" hash="d59784af16fd95ea82226e5708a89232"/><file name="footer_container_bg.gif" hash="d468e3943943cbbf711586e69d40ca42"/><file name="footer_info_separator.gif" hash="7da64eefaf4da3855ab6ee76dbced0c2"/><file name="footer_informational_bg.gif" hash="72d37f4b2ea747bf8969c2654ad1d1e0"/><file name="footer_left.gif" hash="2b15a54bea9409a75c142d14a62f0149"/><file name="footer_legality_bg.gif" hash="4eb1602e3369dccd901ffe98ea0fd4b3"/><file name="footer_right.gif" hash="a45eaf35c8797d299bd4d9b936528e8f"/><file name="header_bg.gif" hash="795c6de754d0d49717ed08d5cd8168c8"/><file name="header_nav_bg.gif" hash="80c6a18686eb0243e06d6176506a2502"/><file name="header_top_bg.jpg" hash="143f524392ee62fcc8183f5930d7258b"/><file name="header_top_container_bg.jpg" hash="294c18f3f6b838bba06ae41dd3c3d638"/><file name="i_notice.gif" hash="ebd56dc80b8346e10e93628bc0e6c372"/><file name="logo.gif" hash="48b7eb03807fdf80bdfb19b872cf84b8"/><file name="main_bg.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="main_container_bg.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="note_msg_icon.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="success_msg_icon.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/></dir></dir></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Lib_Cm-1.9.3.10.xml b/var/package/Lib_Cm-1.9.3.10.xml
deleted file mode 100644
index 7d29edc..0000000
--- a/var/package/Lib_Cm-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Cm</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://framework.zend.com/license/new-bsd">New BSD</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Redis adapter for Zend_Cache</summary>
-    <description>Redis adapter for Zend_Cache</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Colin Mollenhour</name><user>core</user><email>colin@mollenhour.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:13</time>
-    <contents><target name="magelib"><dir name="Cm"><dir name="Cache"><dir name="Backend"><file name="Redis.php" hash="1c137eef42b9c034fa0b6d5258092c00"/></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Lib_Credis</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Lib_Cm-1.9.4.0.xml b/var/package/Lib_Cm-1.9.4.0.xml
new file mode 100644
index 0000000..dd66b93
--- /dev/null
+++ b/var/package/Lib_Cm-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Cm</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://framework.zend.com/license/new-bsd">New BSD</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Redis adapter for Zend_Cache</summary>
+    <description>Redis adapter for Zend_Cache</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Colin Mollenhour</name><user>core</user><email>colin@mollenhour.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:31:59</time>
+    <contents><target name="magelib"><dir name="Cm"><dir name="Cache"><dir name="Backend"><file name="Redis.php" hash="1c137eef42b9c034fa0b6d5258092c00"/></dir></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Lib_Credis</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Lib_Credis-1.9.3.10.xml b/var/package/Lib_Credis-1.9.3.10.xml
deleted file mode 100644
index 6b4079c..0000000
--- a/var/package/Lib_Credis-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Credis</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Credis Library</summary>
-    <description>Credis Library</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:13</time>
-    <contents><target name="magelib"><dir name="Credis"><file name="Client.php" hash="1fde64fdcd768d51758ec437d5952861"/></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_Credis-1.9.4.0.xml b/var/package/Lib_Credis-1.9.4.0.xml
new file mode 100644
index 0000000..adf6a30
--- /dev/null
+++ b/var/package/Lib_Credis-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Credis</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Credis Library</summary>
+    <description>Credis Library</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:31:59</time>
+    <contents><target name="magelib"><dir name="Credis"><file name="Client.php" hash="1fde64fdcd768d51758ec437d5952861"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_Google_Checkout-1.9.3.10.xml b/var/package/Lib_Google_Checkout-1.9.3.10.xml
deleted file mode 100644
index 5a00a95..0000000
--- a/var/package/Lib_Google_Checkout-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Google_Checkout</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license>Apache License</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Google Checkout Library</summary>
-    <description>Google Checkout Library</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:13</time>
-    <contents></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_Google_Checkout-1.9.4.0.xml b/var/package/Lib_Google_Checkout-1.9.4.0.xml
new file mode 100644
index 0000000..97bf664
--- /dev/null
+++ b/var/package/Lib_Google_Checkout-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Google_Checkout</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license>Apache License</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Google Checkout Library</summary>
+    <description>Google Checkout Library</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:31:59</time>
+    <contents></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_IDNA2-1.9.3.10.xml b/var/package/Lib_IDNA2-1.9.3.10.xml
deleted file mode 100644
index a908cd3..0000000
--- a/var/package/Lib_IDNA2-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_IDNA2</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://www.gnu.org/licenses/lgpl-3.0.en.html">GNU Lesser General Public License</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Magento Library</summary>
-    <description>Magento Library</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:13</time>
-    <contents><target name="magelib"><dir name="Net"><file name="IDNA2.php" hash="def073c649f1033d8a75189f6a99cf9d"/><dir name="IDNA2"><dir name="Exception"><file name="Nameprep.php" hash="06c4217024082f0f3b6c5a7e61ac7130"/></dir><file name="Exception.php" hash="72f605f2f6d9d56e07bb6bcec099d03a"/></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_IDNA2-1.9.4.0.xml b/var/package/Lib_IDNA2-1.9.4.0.xml
new file mode 100644
index 0000000..3cde3b9
--- /dev/null
+++ b/var/package/Lib_IDNA2-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_IDNA2</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://www.gnu.org/licenses/lgpl-3.0.en.html">GNU Lesser General Public License</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Magento Library</summary>
+    <description>Magento Library</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:31:59</time>
+    <contents><target name="magelib"><dir name="Net"><file name="IDNA2.php" hash="def073c649f1033d8a75189f6a99cf9d"/><dir name="IDNA2"><dir name="Exception"><file name="Nameprep.php" hash="06c4217024082f0f3b6c5a7e61ac7130"/></dir><file name="Exception.php" hash="72f605f2f6d9d56e07bb6bcec099d03a"/></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_Js_Calendar-1.51.1.16.xml b/var/package/Lib_Js_Calendar-1.51.1.16.xml
deleted file mode 100644
index 5f275ef..0000000
--- a/var/package/Lib_Js_Calendar-1.51.1.16.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Js_Calendar</name>
-    <version>1.51.1.16</version>
-    <stability>stable</stability>
-    <license>Mixed</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Javascript Calendar for Magento</summary>
-    <description>Javascript Calendar for Magento</description>
-    <notes>1.51.1.16</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:13</time>
-    <contents><target name="mageweb"><dir name="js"><dir name="calendar"><file name="calendar-blue.css" hash="b8bb29e3c1573d0d2917cd3112b5052d"/><file name="calendar-blue2.css" hash="654dfacebcdd70c75ccaf2b4aee2d059"/><file name="calendar-brown.css" hash="f326a6a84037e549a9cd71a92346f210"/><file name="calendar-green.css" hash="b44e2c25ff56efaa6e37d84df202e5d5"/><file name="calendar-setup.js" hash="0c21b9e48ecfad87b4c4885cfb1aca8d"/><file name="calendar-system.css" hash="9b446e2ee0e9e4420fce20922405cec7"/><file name="calendar-tas.css" hash="fa3baa9367504954ef03c1f05d44f1a6"/><file name="calendar-win2k-1.css" hash="e3c61212e6abc28844005381d8fe9690"/><file name="calendar-win2k-2.css" hash="332d8bc7dab6acd575dba49a15b62947"/><file name="calendar-win2k-cold-1.css" hash="b0810ce949e6c954c54053c52b21e74a"/><file name="calendar-win2k-cold-2.css" hash="3487ec4e054141057673d794ce6d1032"/><file name="calendar.js" hash="97705cd3aa011e9671c4441643cc704a"/><file name="img.gif" hash="c1e5255bd358fcd5a0779a0cc310a2fe"/><file name="menuarrow.gif" hash="b5a91d7a2755198b2eb729541ad3288c"/><file name="menuarrow2.gif" hash="1f8c673c8f76832febaeeac88a5f4353"/><dir name="skins"><dir name="aqua"><file name="active-bg.gif" hash="f8fb9f2b7428c94b41320aa1bc9cf601"/><file name="dark-bg.gif" hash="949f6a11667cbdfbb96f8986464ba81b"/><file name="hover-bg.gif" hash="803ac4dbc56c05739f515d6ac6a66163"/><file name="menuarrow.gif" hash="1f8c673c8f76832febaeeac88a5f4353"/><file name="normal-bg.gif" hash="851134e42206fd3b173a3db654981bb6"/><file name="rowhover-bg.gif" hash="c097de7289bcf68723e89c248b9a2749"/><file name="status-bg.gif" hash="123882ca533030f07ee55c3818fc46b9"/><file name="theme.css" hash="ec69465f70d45213258fe1f89c52eceb"/><file name="title-bg.gif" hash="8d652fc5b683706fcbbf1103131c6ac2"/><file name="today-bg.gif" hash="9befc7d912cad22ddf2ec3fc21188bfd"/></dir></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_Js_Calendar-1.51.1.17.xml b/var/package/Lib_Js_Calendar-1.51.1.17.xml
new file mode 100644
index 0000000..f37ab52
--- /dev/null
+++ b/var/package/Lib_Js_Calendar-1.51.1.17.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Js_Calendar</name>
+    <version>1.51.1.17</version>
+    <stability>stable</stability>
+    <license>Mixed</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Javascript Calendar for Magento</summary>
+    <description>Javascript Calendar for Magento</description>
+    <notes>1.51.1.17</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:31:59</time>
+    <contents><target name="mageweb"><dir name="js"><dir name="calendar"><file name="calendar-blue.css" hash="b8bb29e3c1573d0d2917cd3112b5052d"/><file name="calendar-blue2.css" hash="654dfacebcdd70c75ccaf2b4aee2d059"/><file name="calendar-brown.css" hash="f326a6a84037e549a9cd71a92346f210"/><file name="calendar-green.css" hash="b44e2c25ff56efaa6e37d84df202e5d5"/><file name="calendar-setup.js" hash="0c21b9e48ecfad87b4c4885cfb1aca8d"/><file name="calendar-system.css" hash="9b446e2ee0e9e4420fce20922405cec7"/><file name="calendar-tas.css" hash="fa3baa9367504954ef03c1f05d44f1a6"/><file name="calendar-win2k-1.css" hash="e3c61212e6abc28844005381d8fe9690"/><file name="calendar-win2k-2.css" hash="332d8bc7dab6acd575dba49a15b62947"/><file name="calendar-win2k-cold-1.css" hash="b0810ce949e6c954c54053c52b21e74a"/><file name="calendar-win2k-cold-2.css" hash="3487ec4e054141057673d794ce6d1032"/><file name="calendar.js" hash="97705cd3aa011e9671c4441643cc704a"/><file name="img.gif" hash="c1e5255bd358fcd5a0779a0cc310a2fe"/><file name="menuarrow.gif" hash="b5a91d7a2755198b2eb729541ad3288c"/><file name="menuarrow2.gif" hash="1f8c673c8f76832febaeeac88a5f4353"/><dir name="skins"><dir name="aqua"><file name="active-bg.gif" hash="f8fb9f2b7428c94b41320aa1bc9cf601"/><file name="dark-bg.gif" hash="949f6a11667cbdfbb96f8986464ba81b"/><file name="hover-bg.gif" hash="803ac4dbc56c05739f515d6ac6a66163"/><file name="menuarrow.gif" hash="1f8c673c8f76832febaeeac88a5f4353"/><file name="normal-bg.gif" hash="851134e42206fd3b173a3db654981bb6"/><file name="rowhover-bg.gif" hash="c097de7289bcf68723e89c248b9a2749"/><file name="status-bg.gif" hash="123882ca533030f07ee55c3818fc46b9"/><file name="theme.css" hash="ec69465f70d45213258fe1f89c52eceb"/><file name="title-bg.gif" hash="8d652fc5b683706fcbbf1103131c6ac2"/><file name="today-bg.gif" hash="9befc7d912cad22ddf2ec3fc21188bfd"/></dir></dir></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_Js_Ext-1.9.3.10.xml b/var/package/Lib_Js_Ext-1.9.3.10.xml
deleted file mode 100644
index e1db4fb..0000000
--- a/var/package/Lib_Js_Ext-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Js_Ext</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license>Mixed</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Extjs Javascript Libraries for Magento</summary>
-    <description>Extjs Javascript Libraries for Magento</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:13</time>
-    <contents><target name="mageweb"><dir name="js"><dir name="extjs"><dir name="css"><file name="README.txt" hash="66440774774ca4995ad5137ac9ae48e0"/><file name="basic-dialog.css" hash="8fefe8397b484ac4855de7232d00fc5d"/><file name="box.css" hash="e042e86fe72ac68849bb2c927d1b94be"/><file name="button.css" hash="0baa72e592fb9cfddb48491ce74040c2"/><file name="combo.css" hash="5f3457b94b882c6037da7b62b10fd50b"/><file name="core.css" hash="49c87f77493ccaa4867c4c4b54e2f297"/><file name="date-picker.css" hash="cb973d925a5fe95e3a8a23393b9db283"/><file name="dd.css" hash="67c5b243c56a99eb1bdbd4d57fea7ce1"/><file name="debug.css" hash="e22d97cc54ad2f42b4f06daa921da622"/><file name="editor.css" hash="ab513287f9e04386f48980e399d4a0b1"/><file name="ext-all.css" hash="e5acad04d0e7877b829bac608437522c"/><file name="form.css" hash="22877998588bc093dcf9375b8707079c"/><file name="grid.css" hash="79cefd1763bb64802f99177f233bd676"/><file name="layout.css" hash="2ba12ec3ceff9989de97e02296c94281"/><file name="menu.css" hash="13b8de4d5f155bb5d526318431b8317f"/><file name="panel.css" hash="fb6624b2dfc4ef99e08bc11eac723e20"/><file name="qtips.css" hash="67b76bbd4ad59a7341ed74a07c8e2524"/><file name="reset-min.css" hash="9c797c4b3949999b27f0e4108132cb57"/><file name="resizable.css" hash="2271ebacebaa1e429d42ba09da460647"/><file name="tabs.css" hash="d19d0773d75a9e2fe2032b1c35a22161"/><file name="toolbar.css" hash="ff85187d3b869bf3b98a72db95fca184"/><file name="tree.css" hash="d8a55f993187bc822efc5beb03722369"/><file name="ytheme-aero.css" hash="e555e0439f7fc0a43de37784e3df23c6"/><file name="ytheme-gray.css" hash="9d08035f3b052a9c604b0116f9a6c0be"/><file name="ytheme-vista.css" hash="8b13f7980b254be7e7c54abc0d8dcc3f"/></dir><file name="ext-tree-checkbox.js" hash="b9d12cc79c28a69f86390a0c52f4b9c7"/><file name="ext-tree.js" hash="cbf1e494c6a179530e7defa99b15d67e"/><file name="fix-defer-before.js" hash="85d779f5372a11855a09263021f73eaa"/><file name="fix-defer.js" hash="e3f23509ac352690c649b6963be6cad8"/><dir name="resources"><dir name="css"><file name="README.txt" hash="66440774774ca4995ad5137ac9ae48e0"/><file name="basic-dialog.css" hash="4cc973c87f79ea230f372cea597963ba"/><file name="box.css" hash="3809db7ee254d629d52dba0aad472d35"/><file name="button.css" hash="d3f29c8497579832fe5d7aafff7c3544"/><file name="combo.css" hash="483a1a701ca9c7db718e0e767f3d4585"/><file name="core.css" hash="6e82710d5206b6b7c0f70399cf649449"/><file name="date-picker.css" hash="fa68b668561d477e702318fb5d59636c"/><file name="dd.css" hash="f0e5f55969aeda8f65a01033613181c5"/><file name="debug.css" hash="6ef466c0c857e0c405cac7b8911f0824"/><file name="editor.css" hash="2fdb75e85a247c362285d4f079c0a12f"/><file name="ext-all.css" hash="c5e12af950c3ea3a243d0b9ca0dc4dba"/><file name="form.css" hash="38bd5bd602a83075325696af2c447e65"/><file name="grid.css" hash="c6d110f89542c04e4cbf98de73e97e9b"/><file name="layout.css" hash="89251906d248b3756f0ed354491651a6"/><file name="menu.css" hash="88eb8b3754612496ccf9d386694a39e0"/><file name="panel.css" hash="deaf7ccb5526687fadd67c093da9e604"/><file name="qtips.css" hash="2a6e683a7b23cbdf52177d7141d17435"/><file name="reset-min.css" hash="8fddbb1b7930f2817f2d5d215be98d5f"/><file name="resizable.css" hash="a50b8d1ea8e9dfbdd101a43bc63857c3"/><file name="tabs.css" hash="323d6f11f1550a43a02a617e39242ed5"/><file name="toolbar.css" hash="d09eb7507f57178967d217caeaa8b046"/><file name="tree.css" hash="b0104f954fbe1f04ebf49acffcec74ef"/><file name="ytheme-aero.css" hash="c25b48ba1b913f2ea094065fa916e9da"/><file name="ytheme-galdaka.css" hash="8b1917749205e64bdbcecc893e188b09"/><file name="ytheme-gray.css" hash="c45ba874b89038c9c8d9a79a1c591f26"/><file name="ytheme-magento.css" hash="94c3fc72743ad6d1fe7d8e74d713750e"/><file name="ytheme-vista.css" hash="2092ef97154cf5f6b33893bf5e178e21"/></dir><dir name="images"><dir name="default"><dir name="basic-dialog"><file name="btn-arrow.gif" hash="9e2365ef98c6096f6b5f411ab618bb4e"/><file name="btn-sprite.gif" hash="73a8327c23c12ed9ec42ac8f52b072e0"/><file name="close.gif" hash="2d54069e9355f295dd27027f7f779eb9"/><file name="collapse.gif" hash="63b2687a2dc81537765a7d22f9e480da"/><file name="e-handle.gif" hash="f9357e6c1dfbd00da007cf6705e08225"/><file name="expand.gif" hash="740af52fb7de6ca9fd888184e86a5308"/><file name="hd-sprite.gif" hash="6a54ae98bef53397d52282201852c204"/><file name="progress.gif" hash="baff9a083b93588fa7ff3548844a9e1a"/><file name="progress2.gif" hash="339036f9eb530c1b180c77f9a109ef3e"/><file name="s-handle.gif" hash="36b90844c0b35da23da21aac599957d4"/><file name="se-handle.gif" hash="668b22581100befcf947e806599dc0ce"/></dir><dir name="box"><file name="corners-blue.gif" hash="86fd4c5664e0971bfc11959e8442604c"/><file name="corners.gif" hash="d2d1bc2085b369ce35ffd20c0121676e"/><file name="l-blue.gif" hash="ced9ffbf66ea39e77083a591f8257267"/><file name="l.gif" hash="c4d9dbbdc59ae06b5e9e72a6a865c981"/><file name="r-blue.gif" hash="82dbb522a80e3246f6297719371a9494"/><file name="r.gif" hash="bf1e1d4a45f951ae656968a8c834f04a"/><file name="tb-blue.gif" hash="7c4b19eb682afdc1bde0640d2321fb25"/><file name="tb.gif" hash="dd3f63afe7ba90983ba73dad1c66bf2f"/></dir><dir name="dd"><file name="drop-add.gif" hash="95eb34ac70a1a3c95ef39ab826a89491"/><file name="drop-no.gif" hash="ae536c37391ba78143b5c8283cec8d13"/><file name="drop-yes.gif" hash="f3216326c00890259e84f1726dd1043f"/></dir><dir name="editor"><file name="tb-sprite.gif" hash="8908365d736426795ce46de7e328b508"/></dir><dir name="form"><file name="clear-trigger.gif" hash="97b3e5e9edf27b50d63d48098c2f1eae"/><file name="date-trigger.gif" hash="9245675ed8931df277184b419cf4cdad"/><file name="error-tip-corners.gif" hash="364474276178c7b48b6270056b42b808"/><file name="exclamation.gif" hash="40491021e901fa801dbbc09b6c59d73e"/><file name="search-trigger.gif" hash="559ef372cf27a38678d84e8c0b7237fc"/><file name="text-bg.gif" hash="d5ba54c1f417e6a72cbce8b909078727"/><file name="trigger-tpl.gif" hash="d7be20f0dc38f4f46cd318fe32cf3ce3"/><file name="trigger.gif" hash="45019efdf75528242c5a68742821dc57"/></dir><file name="gradient-bg.gif" hash="e117fca9d088e4cd5bbbcec7b99a8408"/><dir name="grid"><file name="Thumbs.db" hash="c3affff39ba36b80da43a08c34a61391"/><file name="arrow-left-white.gif" hash="b04e859bdcbd21ad1f06b8bfa7881df8"/><file name="arrow-right-white.gif" hash="714eb00f8134dde3a65c83f3f71ad2c4"/><file name="col-move-bottom.gif" hash="9c38bcb5cee1dc9b4ce64ad9ab1386f8"/><file name="col-move-top.gif" hash="c4584202d5172464050f675d396d1c6f"/><file name="dirty.gif" hash="decca3b96e2c37cf6eb04ddb0d9f669b"/><file name="done.gif" hash="365266930a93451414fe51ffc524a196"/><file name="drop-no.gif" hash="b53ca86d60fbcc7a45c8917299218bfd"/><file name="drop-yes.gif" hash="af96f4c3b32a470db2f38abb521b5c97"/><file name="footer-bg.gif" hash="65ed63e44c6149f1127ad3b4be4e0108"/><file name="grid-blue-hd.gif" hash="dd35d5c1202c440c2d1a945b335984d3"/><file name="grid-blue-split.gif" hash="0494ba49974ff2bc1bf81e1d82dfee18"/><file name="grid-hrow.gif" hash="55972a5063d80f35fb6b95a79bb0018a"/><file name="grid-loading.gif" hash="9ac6f737eb9b15272f12b00bfeb3c3c6"/><file name="grid-split.gif" hash="3ef419d4b9421d8e94f673a6238dc4c0"/><file name="grid-vista-hd.gif" hash="675f403e8a9cb5ab4bed725da9fe2023"/><file name="grid3-hd-btn.gif" hash="e3e77072c16a6b27556236961f29c552"/><file name="grid3-hrow-over.gif" hash="a92d8f6c106943995720f2884634670e"/><file name="grid3-hrow.gif" hash="4c58074bb961c8f184522355f1b0eb90"/><file name="grid3-special-col-bg.gif" hash="c9df03a1c107360128da89fa47066405"/><file name="grid3-special-col-sel-bg.gif" hash="a94039f89dec164896ceff1fbdf6dbc5"/><file name="hd-pop.gif" hash="e5f27a2f68cc2d13b11cf41c46d298dc"/><file name="hmenu-asc.gif" hash="048e0bc30f7c39d473dad5dabcbe03f2"/><file name="hmenu-desc.gif" hash="f0a987b34b003b25a7c82624d41f018a"/><file name="hmenu-lock.gif" hash="bcef18e25342c69c37c44dab87086065"/><file name="hmenu-lock.png" hash="2a3b0b441834f443c1086930939efdae"/><file name="hmenu-unlock.gif" hash="8cc8205dafa587ef02d8a86903ae8074"/><file name="hmenu-unlock.png" hash="c1f61df70b98c5498ea81e7e7b9effbb"/><file name="invalid_line.gif" hash="04a88e97b56e8a8ece4a66d49cc78828"/><file name="loading.gif" hash="00ef871b291bc03a497d608a5bd8ec99"/><file name="mso-hd.gif" hash="37fba9c02f0eefe57f655890eef1c4a1"/><file name="nowait.gif" hash="23c91166dbb16ba8655363321bf5a400"/><file name="page-first-disabled.gif" hash="8d3185028c541cbcce67b5909c04824e"/><file name="page-first.gif" hash="16ec00fa770d860b768cf5034ddfca96"/><file name="page-last-disabled.gif" hash="1d123237ceeb5109a1b9274f0cf19d73"/><file name="page-last.gif" hash="ef524dd0b8dfe4eefecffaa1c0bb8edd"/><file name="page-next-disabled.gif" hash="0f4b8681772c91921fa93ede9c755ea0"/><file name="page-next.gif" hash="f6f9d2209dfc99912ffc9848d97646db"/><file name="page-prev-disabled.gif" hash="eefcbed15c8d37a89618b08f7b224297"/><file name="page-prev.gif" hash="80daad880483eed682b22ec70514ecc4"/><file name="pick-button.gif" hash="b431fdf306f1e2f033d0a431996de93f"/><file name="refresh.gif" hash="8dae08d3581dcd9a04ca73877eab4b53"/><file name="row-check-sprite.gif" hash="2d0aa7e501c3e6f97a97faf75e35d3c3"/><file name="row-expand-sprite.gif" hash="be81199d9d4fa69bef47a8f036a5a7d8"/><file name="row-over.gif" hash="f639094bd0560aefabc86e51a825f23d"/><file name="row-sel.gif" hash="ca87d6b950386edd5e17c985769d9101"/><file name="sort_asc.gif" hash="cc186187e31b0c39abbb7d2394916292"/><file name="sort_desc.gif" hash="fcfe91243fac2e5f24d05bb44f78ded4"/><file name="wait.gif" hash="b0cd5a5dc070c705ebf8814a909802c3"/></dir><dir name="layout"><file name="collapse.gif" hash="dfcec0803d488a783916c750fd83a897"/><file name="expand.gif" hash="c9c9b0ea5311c3dc016c69dc234912bc"/><file name="gradient-bg.gif" hash="e117fca9d088e4cd5bbbcec7b99a8408"/><file name="ns-collapse.gif" hash="efa9fbd7a1f3f0f1f22360391e16126f"/><file name="ns-expand.gif" hash="da1f9d40c091d3b6dc7a8dee4fc02ac6"/><file name="panel-close.gif" hash="b185da1837344529bfb684a96d8371b5"/><file name="panel-title-bg.gif" hash="b66384c309a397963389a76b07e9ecd4"/><file name="panel-title-light-bg.gif" hash="688d3a263442db125da170e5d3aebf70"/><file name="stick.gif" hash="be9e67ae0b61b01cfd15928ca7a3da51"/><file name="stuck.gif" hash="745e0cacb51250ea0216efc4a1cb50cb"/><file name="tab-close-on.gif" hash="0ae2c978e85391a69f0dce8da18d8b23"/><file name="tab-close.gif" hash="f92107cc6b4cb78af084648a628e01d2"/></dir><dir name="menu"><file name="checked.gif" hash="692bc97badf50c05495f6109143b4b11"/><file name="group-checked.gif" hash="f7973443d91e5e074013f1b07ee79479"/><file name="menu-parent.gif" hash="d303ad7e3ced891736e80f77e1d4e51d"/><file name="menu.gif" hash="5d34732294bbe06a862961dd02bcc962"/><file name="unchecked.gif" hash="9b90ed7c9e8f0892ce09f3b35b19db53"/></dir><dir name="panel"><file name="corners-sprite.gif" hash="06daef2335218cdfd900ce8bf7a68738"/><file name="left-right.gif" hash="49344fefef7c6f866f910b9067f0990f"/><file name="tool-sprite-tpl.gif" hash="e0449768cd5dce80b18fac904818ab33"/><file name="tool-sprites.gif" hash="31ccd74ac8dab4b5669887310a2341df"/><file name="top-bottom.gif" hash="d9a86e8466a31bd1cb87aae2cf55faf2"/><file name="white-corners-sprite.gif" hash="de8b3036676d19b9635f319a8a4aad36"/><file name="white-left-right.gif" hash="77a6389c6737ad507ca5330ad8816524"/><file name="white-top-bottom.gif" hash="f865d7237bff3c45fd4a8c448f97d236"/></dir><dir name="qtip"><file name="bg.gif" hash="49c0a530cc16357bb39d51c13065a88f"/><file name="close.gif" hash="0379d036250096cae2e42b427b3df2e7"/><file name="tip-sprite.gif" hash="11637a20b1f3f2331bf0627146c2f433"/></dir><file name="s.gif" hash="fc94fb0c3ed8a8f909dbc7630a0987ff"/><file name="shadow-c.png" hash="3abbfce345687daada53445adf6fddc7"/><file name="shadow-lr.png" hash="986270d8ab4330fa7499dc33ed135598"/><file name="shadow.png" hash="860bf4f690d2ea2aba7b11500925da62"/><dir name="shared"><file name="calendar.gif" hash="81296cff1f97f5365524f2b9dcf626da"/><file name="glass-bg.gif" hash="bc2cd5c5ac9b3874d956c892d23f2119"/><file name="left-btn.gif" hash="6bf30c6cf0b5d70436c3e463b5532b35"/><file name="right-btn.gif" hash="e7ad3a7f4814791cecf1b90e77e9e139"/><file name="warning.gif" hash="448dc934a7f0dd6092b51f88a1e47b2d"/></dir><dir name="sizer"><file name="e-handle-dark.gif" hash="b86289f41d7ad1a7401dd2b2a9b3c3d8"/><file name="e-handle.gif" hash="510edc95ebaa36306916c50ca10596f7"/><file name="ne-handle-dark.gif" hash="115f71b851c7f0b5f354caa7b8dfff15"/><file name="ne-handle.gif" hash="8e268b962dc909d275997b572ff17a72"/><file name="nw-handle-dark.gif" hash="4a361e6920b2e34a39fd425a515c83b9"/><file name="nw-handle.gif" hash="1120600505249c38c3d1cc2ab120cd13"/><file name="s-handle-dark.gif" hash="4a6bf15d308a4ae580dd03cbd431a95c"/><file name="s-handle.gif" hash="5e3338cb09e9df7f52383d6b1423fc86"/><file name="se-handle-dark.gif" hash="f3d8d8aac23e3e9633072e2366cda847"/><file name="se-handle.gif" hash="71edc3f63f79f447d2c81ee09e1fbbc3"/><file name="square.gif" hash="4431ea1954bfd2a9cea0931f07fc7ffa"/><file name="sw-handle-dark.gif" hash="44b2400d873cf8a23d84424827cde44d"/><file name="sw-handle.gif" hash="c3e0befc4208a51180344765fd7deeda"/></dir><dir name="tabs"><file name="tab-btm-inactive-left-bg.gif" hash="4f141a6abf25d3c9409b6c381333c138"/><file name="tab-btm-inactive-right-bg.gif" hash="eb2423d3b9dd072976ce955ab0c683d6"/><file name="tab-btm-left-bg.gif" hash="a36eb9382ed8b858eff2c5d4e5d7011a"/><file name="tab-btm-right-bg.gif" hash="9e4245776f0f7b6b6c7ddbf40a43103a"/><file name="tab-sprite.gif" hash="6a7d481bf5b74acfbfa0b01a35bd6620"/></dir><dir name="toolbar"><file name="btn-arrow-light.gif" hash="fa49b39a0fd88ef26264da44a2b4edea"/><file name="btn-arrow.gif" hash="12bda29a4c8016cfa047e852c4353f59"/><file name="btn-over-bg.gif" hash="faddf9b24cefa721326ba3f87f3ef31f"/><file name="gray-bg.gif" hash="cf2d9408f320e696e607d8472afa7ff0"/><file name="tb-bg.gif" hash="5309337fd7a22cab9d9467fd9eaa0a0c"/><file name="tb-btn-sprite.gif" hash="3aed28dd646d22e215c8a6a3e983322f"/></dir><dir name="tree"><file name="drop-add.gif" hash="95eb34ac70a1a3c95ef39ab826a89491"/><file name="drop-between.gif" hash="edb544a0de58547d4a39c526e06e3c82"/><file name="drop-no.gif" hash="67f83ea04a2eb1c50614a96faf625f25"/><file name="drop-over.gif" hash="d6b303cfa3de8784057d9d7e66cdaa86"/><file name="drop-under.gif" hash="55e5dbc9451cfa91423832260b0753aa"/><file name="drop-yes.gif" hash="f3216326c00890259e84f1726dd1043f"/><file name="elbow-end-minus-nl.gif" hash="5e5bffba157eceee7989db95b919e4d5"/><file name="elbow-end-minus.gif" hash="a469f6a4394d797c2efeffc70409f6db"/><file name="elbow-end-plus-nl.gif" hash="f0f50c0dd3ee6dd4b11c1f245b36eb01"/><file name="elbow-end-plus.gif" hash="ec1482391363612d9e5f8c7087fddaba"/><file name="elbow-end.gif" hash="345551384aa325189ba28a1c20f3405e"/><file name="elbow-line.gif" hash="90e478158df476dc989a60daaafc87e6"/><file name="elbow-minus-nl.gif" hash="5e5bffba157eceee7989db95b919e4d5"/><file name="elbow-minus.gif" hash="71bb1bd44b1274c60d30dba1de472ed7"/><file name="elbow-plus-nl.gif" hash="f0f50c0dd3ee6dd4b11c1f245b36eb01"/><file name="elbow-plus.gif" hash="945572d06a74b5f952251a86c595f2da"/><file name="elbow.gif" hash="27679f3b1222ba95d9925885d7d82d02"/><file name="folder-open.gif" hash="c569141d6ae7c61d838ed8af26aa9380"/><file name="folder.gif" hash="b7209740bb4a825a06beb8698d92c2b1"/><file name="leaf.gif" hash="23757d6e353f343e3c7edfe28428f198"/><file name="loading.gif" hash="00ef871b291bc03a497d608a5bd8ec99"/><file name="s.gif" hash="fc94fb0c3ed8a8f909dbc7630a0987ff"/></dir><dir name="window"><file name="corners-sprite.gif" hash="b485d6e69678822a0fb77cc312487874"/><file name="left-right.gif" hash="3fe626d6ca2f71d36fc62c32cb1cc52a"/><file name="top-bottom.gif" hash="8a227016c401438e602c2f770a611d5b"/></dir></dir><dir name="magento"><dir name="basic-dialog"><file name="collapse-on.gif" hash="b60dfdc0d00cfb30a8a622e0c22eed84"/><file name="collapse.gif" hash="8525b9d2e93d31e0b071b1f9bf9550e5"/><file name="expand-on.gif" hash="0dfb4ac6d626cdcaa931c14dbb45848e"/><file name="expand.gif" hash="0eb5c03da8b8415e0568784c959e536a"/><file name="hd-sprite.gif" hash="035bf2296afd70af7020cf06b60bf3f6"/><file name="ns-collapse-on.gif" hash="88ed8b7578c803f68d9f1eb171454e00"/><file name="ns-collapse.gif" hash="44b91376c040f91672aaa98c1fcc062b"/><file name="ns-expand-on.gif" hash="587c2ce90066280e5e6cd731bb9d346c"/><file name="ns-expand.gif" hash="57b479b168f8a54200bd1770b5591630"/><file name="panel_close.gif" hash="686c6dfcf341de25487ab4d8ea5954ce"/><file name="pop_close.gif" hash="dd3605531f9959901eff6f089f084bdc"/><file name="pop_collapse.gif" hash="2b8007242ae1c9ae9f26c60a878a63f7"/></dir><dir name="grid"><file name="grid-body-bg.gif" hash="b5fe585c01f57b2171a2b723abcc4a38"/><file name="grid-split.gif" hash="32e210451e8dc4295b53cf7ca13bb4a6"/></dir><dir name="layout"><file name="checkered-bg.gif" hash="f0a0cd29a6120377c289fd39e2ee7e80"/><file name="icon-catalog.gif" hash="435ff2300ddefb9f8a4bad8ee806fb1a"/><file name="icon-category.gif" hash="ce2a146851bb5ec1e41670b68183b56a"/><file name="icon-my-tasks.gif" hash="0ecb888b160701845e25a7140d038af0"/><file name="icon-product.gif" hash="a0707878c5221052209e5ae6a4de0bd2"/></dir><file name="loading_bg.gif" hash="e202ef7e03d0ef3e9beac7480dae65bf"/><dir name="tabs"><file name="tab-sprite.gif" hash="049fb2f4186b6dc9de747ad96456b1ab"/></dir><dir name="toolbar"><file name="btn-arrow.gif" hash="938cffb6de5cc8b1febfd1851fd983c2"/><file name="header_bg.gif" hash="3696842a32740fa159484cabc3340d13"/><file name="toolbar-bg.gif" hash="8d1b465c2a75963407b536d9081f649f"/></dir><dir name="tree"><file name="elbow-end-minus-nl.gif" hash="6dc08c43109cc6a365bd0270f05e2f1c"/><file name="elbow-end-minus.gif" hash="3dbdb88a9297fe5631e832f046b0350b"/><file name="elbow-end-plus-nl.gif" hash="6dc08c43109cc6a365bd0270f05e2f1c"/><file name="elbow-end-plus.gif" hash="5470e5712a9742ba666c26cb429baaeb"/><file name="elbow-end.gif" hash="63fe879440e2784e0cc0d316ce017745"/><file name="elbow-line.gif" hash="b316a39455304e20e01dbc437f57fd32"/><file name="elbow-minus-nl.gif" hash="0e3129bff70475c8f7f297e0e59d1608"/><file name="elbow-minus.gif" hash="e7b18ff6800e65c6e171bbb2a911762e"/><file name="elbow-plus-nl.gif" hash="78a8f737941fa658f1e770258a3791cd"/><file name="elbow-plus.gif" hash="b02cb264df55aef2105b1b245d075e56"/><file name="elbow.gif" hash="b6bd0e0237e3cd413fa2dac27701c724"/><file name="folder-open.gif" hash="e3cd196406d4857dc0c926807f16c409"/><file name="folder.gif" hash="03eb26c42137ac792609822862ef4d0f"/><file name="leaf.gif" hash="e3cd196406d4857dc0c926807f16c409"/><file name="s.gif" hash="df3e567d6f16d040326c7a0ea29a4f41"/></dir></dir></dir></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_Js_Ext-1.9.4.0.xml b/var/package/Lib_Js_Ext-1.9.4.0.xml
new file mode 100644
index 0000000..ff83553
--- /dev/null
+++ b/var/package/Lib_Js_Ext-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Js_Ext</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license>Mixed</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Extjs Javascript Libraries for Magento</summary>
+    <description>Extjs Javascript Libraries for Magento</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:31:59</time>
+    <contents><target name="mageweb"><dir name="js"><dir name="extjs"><dir name="css"><file name="README.txt" hash="66440774774ca4995ad5137ac9ae48e0"/><file name="basic-dialog.css" hash="8fefe8397b484ac4855de7232d00fc5d"/><file name="box.css" hash="e042e86fe72ac68849bb2c927d1b94be"/><file name="button.css" hash="0baa72e592fb9cfddb48491ce74040c2"/><file name="combo.css" hash="5f3457b94b882c6037da7b62b10fd50b"/><file name="core.css" hash="49c87f77493ccaa4867c4c4b54e2f297"/><file name="date-picker.css" hash="cb973d925a5fe95e3a8a23393b9db283"/><file name="dd.css" hash="67c5b243c56a99eb1bdbd4d57fea7ce1"/><file name="debug.css" hash="e22d97cc54ad2f42b4f06daa921da622"/><file name="editor.css" hash="ab513287f9e04386f48980e399d4a0b1"/><file name="ext-all.css" hash="e5acad04d0e7877b829bac608437522c"/><file name="form.css" hash="22877998588bc093dcf9375b8707079c"/><file name="grid.css" hash="79cefd1763bb64802f99177f233bd676"/><file name="layout.css" hash="2ba12ec3ceff9989de97e02296c94281"/><file name="menu.css" hash="13b8de4d5f155bb5d526318431b8317f"/><file name="panel.css" hash="fb6624b2dfc4ef99e08bc11eac723e20"/><file name="qtips.css" hash="67b76bbd4ad59a7341ed74a07c8e2524"/><file name="reset-min.css" hash="9c797c4b3949999b27f0e4108132cb57"/><file name="resizable.css" hash="2271ebacebaa1e429d42ba09da460647"/><file name="tabs.css" hash="d19d0773d75a9e2fe2032b1c35a22161"/><file name="toolbar.css" hash="ff85187d3b869bf3b98a72db95fca184"/><file name="tree.css" hash="d8a55f993187bc822efc5beb03722369"/><file name="ytheme-aero.css" hash="e555e0439f7fc0a43de37784e3df23c6"/><file name="ytheme-gray.css" hash="9d08035f3b052a9c604b0116f9a6c0be"/><file name="ytheme-vista.css" hash="8b13f7980b254be7e7c54abc0d8dcc3f"/></dir><file name="ext-tree-checkbox.js" hash="b9d12cc79c28a69f86390a0c52f4b9c7"/><file name="ext-tree.js" hash="cbf1e494c6a179530e7defa99b15d67e"/><file name="fix-defer-before.js" hash="85d779f5372a11855a09263021f73eaa"/><file name="fix-defer.js" hash="e3f23509ac352690c649b6963be6cad8"/><dir name="resources"><dir name="css"><file name="README.txt" hash="66440774774ca4995ad5137ac9ae48e0"/><file name="basic-dialog.css" hash="4cc973c87f79ea230f372cea597963ba"/><file name="box.css" hash="3809db7ee254d629d52dba0aad472d35"/><file name="button.css" hash="d3f29c8497579832fe5d7aafff7c3544"/><file name="combo.css" hash="483a1a701ca9c7db718e0e767f3d4585"/><file name="core.css" hash="6e82710d5206b6b7c0f70399cf649449"/><file name="date-picker.css" hash="fa68b668561d477e702318fb5d59636c"/><file name="dd.css" hash="f0e5f55969aeda8f65a01033613181c5"/><file name="debug.css" hash="6ef466c0c857e0c405cac7b8911f0824"/><file name="editor.css" hash="2fdb75e85a247c362285d4f079c0a12f"/><file name="ext-all.css" hash="c5e12af950c3ea3a243d0b9ca0dc4dba"/><file name="form.css" hash="38bd5bd602a83075325696af2c447e65"/><file name="grid.css" hash="c6d110f89542c04e4cbf98de73e97e9b"/><file name="layout.css" hash="89251906d248b3756f0ed354491651a6"/><file name="menu.css" hash="88eb8b3754612496ccf9d386694a39e0"/><file name="panel.css" hash="deaf7ccb5526687fadd67c093da9e604"/><file name="qtips.css" hash="2a6e683a7b23cbdf52177d7141d17435"/><file name="reset-min.css" hash="8fddbb1b7930f2817f2d5d215be98d5f"/><file name="resizable.css" hash="a50b8d1ea8e9dfbdd101a43bc63857c3"/><file name="tabs.css" hash="323d6f11f1550a43a02a617e39242ed5"/><file name="toolbar.css" hash="d09eb7507f57178967d217caeaa8b046"/><file name="tree.css" hash="b0104f954fbe1f04ebf49acffcec74ef"/><file name="ytheme-aero.css" hash="c25b48ba1b913f2ea094065fa916e9da"/><file name="ytheme-galdaka.css" hash="8b1917749205e64bdbcecc893e188b09"/><file name="ytheme-gray.css" hash="c45ba874b89038c9c8d9a79a1c591f26"/><file name="ytheme-magento.css" hash="94c3fc72743ad6d1fe7d8e74d713750e"/><file name="ytheme-vista.css" hash="2092ef97154cf5f6b33893bf5e178e21"/></dir><dir name="images"><dir name="default"><dir name="basic-dialog"><file name="btn-arrow.gif" hash="9e2365ef98c6096f6b5f411ab618bb4e"/><file name="btn-sprite.gif" hash="73a8327c23c12ed9ec42ac8f52b072e0"/><file name="close.gif" hash="2d54069e9355f295dd27027f7f779eb9"/><file name="collapse.gif" hash="63b2687a2dc81537765a7d22f9e480da"/><file name="e-handle.gif" hash="f9357e6c1dfbd00da007cf6705e08225"/><file name="expand.gif" hash="740af52fb7de6ca9fd888184e86a5308"/><file name="hd-sprite.gif" hash="6a54ae98bef53397d52282201852c204"/><file name="progress.gif" hash="baff9a083b93588fa7ff3548844a9e1a"/><file name="progress2.gif" hash="339036f9eb530c1b180c77f9a109ef3e"/><file name="s-handle.gif" hash="36b90844c0b35da23da21aac599957d4"/><file name="se-handle.gif" hash="668b22581100befcf947e806599dc0ce"/></dir><dir name="box"><file name="corners-blue.gif" hash="86fd4c5664e0971bfc11959e8442604c"/><file name="corners.gif" hash="d2d1bc2085b369ce35ffd20c0121676e"/><file name="l-blue.gif" hash="ced9ffbf66ea39e77083a591f8257267"/><file name="l.gif" hash="c4d9dbbdc59ae06b5e9e72a6a865c981"/><file name="r-blue.gif" hash="82dbb522a80e3246f6297719371a9494"/><file name="r.gif" hash="bf1e1d4a45f951ae656968a8c834f04a"/><file name="tb-blue.gif" hash="7c4b19eb682afdc1bde0640d2321fb25"/><file name="tb.gif" hash="dd3f63afe7ba90983ba73dad1c66bf2f"/></dir><dir name="dd"><file name="drop-add.gif" hash="95eb34ac70a1a3c95ef39ab826a89491"/><file name="drop-no.gif" hash="ae536c37391ba78143b5c8283cec8d13"/><file name="drop-yes.gif" hash="f3216326c00890259e84f1726dd1043f"/></dir><dir name="editor"><file name="tb-sprite.gif" hash="8908365d736426795ce46de7e328b508"/></dir><dir name="form"><file name="clear-trigger.gif" hash="97b3e5e9edf27b50d63d48098c2f1eae"/><file name="date-trigger.gif" hash="9245675ed8931df277184b419cf4cdad"/><file name="error-tip-corners.gif" hash="364474276178c7b48b6270056b42b808"/><file name="exclamation.gif" hash="40491021e901fa801dbbc09b6c59d73e"/><file name="search-trigger.gif" hash="559ef372cf27a38678d84e8c0b7237fc"/><file name="text-bg.gif" hash="d5ba54c1f417e6a72cbce8b909078727"/><file name="trigger-tpl.gif" hash="d7be20f0dc38f4f46cd318fe32cf3ce3"/><file name="trigger.gif" hash="45019efdf75528242c5a68742821dc57"/></dir><file name="gradient-bg.gif" hash="e117fca9d088e4cd5bbbcec7b99a8408"/><dir name="grid"><file name="Thumbs.db" hash="c3affff39ba36b80da43a08c34a61391"/><file name="arrow-left-white.gif" hash="b04e859bdcbd21ad1f06b8bfa7881df8"/><file name="arrow-right-white.gif" hash="714eb00f8134dde3a65c83f3f71ad2c4"/><file name="col-move-bottom.gif" hash="9c38bcb5cee1dc9b4ce64ad9ab1386f8"/><file name="col-move-top.gif" hash="c4584202d5172464050f675d396d1c6f"/><file name="dirty.gif" hash="decca3b96e2c37cf6eb04ddb0d9f669b"/><file name="done.gif" hash="365266930a93451414fe51ffc524a196"/><file name="drop-no.gif" hash="b53ca86d60fbcc7a45c8917299218bfd"/><file name="drop-yes.gif" hash="af96f4c3b32a470db2f38abb521b5c97"/><file name="footer-bg.gif" hash="65ed63e44c6149f1127ad3b4be4e0108"/><file name="grid-blue-hd.gif" hash="dd35d5c1202c440c2d1a945b335984d3"/><file name="grid-blue-split.gif" hash="0494ba49974ff2bc1bf81e1d82dfee18"/><file name="grid-hrow.gif" hash="55972a5063d80f35fb6b95a79bb0018a"/><file name="grid-loading.gif" hash="9ac6f737eb9b15272f12b00bfeb3c3c6"/><file name="grid-split.gif" hash="3ef419d4b9421d8e94f673a6238dc4c0"/><file name="grid-vista-hd.gif" hash="675f403e8a9cb5ab4bed725da9fe2023"/><file name="grid3-hd-btn.gif" hash="e3e77072c16a6b27556236961f29c552"/><file name="grid3-hrow-over.gif" hash="a92d8f6c106943995720f2884634670e"/><file name="grid3-hrow.gif" hash="4c58074bb961c8f184522355f1b0eb90"/><file name="grid3-special-col-bg.gif" hash="c9df03a1c107360128da89fa47066405"/><file name="grid3-special-col-sel-bg.gif" hash="a94039f89dec164896ceff1fbdf6dbc5"/><file name="hd-pop.gif" hash="e5f27a2f68cc2d13b11cf41c46d298dc"/><file name="hmenu-asc.gif" hash="048e0bc30f7c39d473dad5dabcbe03f2"/><file name="hmenu-desc.gif" hash="f0a987b34b003b25a7c82624d41f018a"/><file name="hmenu-lock.gif" hash="bcef18e25342c69c37c44dab87086065"/><file name="hmenu-lock.png" hash="2a3b0b441834f443c1086930939efdae"/><file name="hmenu-unlock.gif" hash="8cc8205dafa587ef02d8a86903ae8074"/><file name="hmenu-unlock.png" hash="c1f61df70b98c5498ea81e7e7b9effbb"/><file name="invalid_line.gif" hash="04a88e97b56e8a8ece4a66d49cc78828"/><file name="loading.gif" hash="00ef871b291bc03a497d608a5bd8ec99"/><file name="mso-hd.gif" hash="37fba9c02f0eefe57f655890eef1c4a1"/><file name="nowait.gif" hash="23c91166dbb16ba8655363321bf5a400"/><file name="page-first-disabled.gif" hash="8d3185028c541cbcce67b5909c04824e"/><file name="page-first.gif" hash="16ec00fa770d860b768cf5034ddfca96"/><file name="page-last-disabled.gif" hash="1d123237ceeb5109a1b9274f0cf19d73"/><file name="page-last.gif" hash="ef524dd0b8dfe4eefecffaa1c0bb8edd"/><file name="page-next-disabled.gif" hash="0f4b8681772c91921fa93ede9c755ea0"/><file name="page-next.gif" hash="f6f9d2209dfc99912ffc9848d97646db"/><file name="page-prev-disabled.gif" hash="eefcbed15c8d37a89618b08f7b224297"/><file name="page-prev.gif" hash="80daad880483eed682b22ec70514ecc4"/><file name="pick-button.gif" hash="b431fdf306f1e2f033d0a431996de93f"/><file name="refresh.gif" hash="8dae08d3581dcd9a04ca73877eab4b53"/><file name="row-check-sprite.gif" hash="2d0aa7e501c3e6f97a97faf75e35d3c3"/><file name="row-expand-sprite.gif" hash="be81199d9d4fa69bef47a8f036a5a7d8"/><file name="row-over.gif" hash="f639094bd0560aefabc86e51a825f23d"/><file name="row-sel.gif" hash="ca87d6b950386edd5e17c985769d9101"/><file name="sort_asc.gif" hash="cc186187e31b0c39abbb7d2394916292"/><file name="sort_desc.gif" hash="fcfe91243fac2e5f24d05bb44f78ded4"/><file name="wait.gif" hash="b0cd5a5dc070c705ebf8814a909802c3"/></dir><dir name="layout"><file name="collapse.gif" hash="dfcec0803d488a783916c750fd83a897"/><file name="expand.gif" hash="c9c9b0ea5311c3dc016c69dc234912bc"/><file name="gradient-bg.gif" hash="e117fca9d088e4cd5bbbcec7b99a8408"/><file name="ns-collapse.gif" hash="efa9fbd7a1f3f0f1f22360391e16126f"/><file name="ns-expand.gif" hash="da1f9d40c091d3b6dc7a8dee4fc02ac6"/><file name="panel-close.gif" hash="b185da1837344529bfb684a96d8371b5"/><file name="panel-title-bg.gif" hash="b66384c309a397963389a76b07e9ecd4"/><file name="panel-title-light-bg.gif" hash="688d3a263442db125da170e5d3aebf70"/><file name="stick.gif" hash="be9e67ae0b61b01cfd15928ca7a3da51"/><file name="stuck.gif" hash="745e0cacb51250ea0216efc4a1cb50cb"/><file name="tab-close-on.gif" hash="0ae2c978e85391a69f0dce8da18d8b23"/><file name="tab-close.gif" hash="f92107cc6b4cb78af084648a628e01d2"/></dir><dir name="menu"><file name="checked.gif" hash="692bc97badf50c05495f6109143b4b11"/><file name="group-checked.gif" hash="f7973443d91e5e074013f1b07ee79479"/><file name="menu-parent.gif" hash="d303ad7e3ced891736e80f77e1d4e51d"/><file name="menu.gif" hash="5d34732294bbe06a862961dd02bcc962"/><file name="unchecked.gif" hash="9b90ed7c9e8f0892ce09f3b35b19db53"/></dir><dir name="panel"><file name="corners-sprite.gif" hash="06daef2335218cdfd900ce8bf7a68738"/><file name="left-right.gif" hash="49344fefef7c6f866f910b9067f0990f"/><file name="tool-sprite-tpl.gif" hash="e0449768cd5dce80b18fac904818ab33"/><file name="tool-sprites.gif" hash="31ccd74ac8dab4b5669887310a2341df"/><file name="top-bottom.gif" hash="d9a86e8466a31bd1cb87aae2cf55faf2"/><file name="white-corners-sprite.gif" hash="de8b3036676d19b9635f319a8a4aad36"/><file name="white-left-right.gif" hash="77a6389c6737ad507ca5330ad8816524"/><file name="white-top-bottom.gif" hash="f865d7237bff3c45fd4a8c448f97d236"/></dir><dir name="qtip"><file name="bg.gif" hash="49c0a530cc16357bb39d51c13065a88f"/><file name="close.gif" hash="0379d036250096cae2e42b427b3df2e7"/><file name="tip-sprite.gif" hash="11637a20b1f3f2331bf0627146c2f433"/></dir><file name="s.gif" hash="fc94fb0c3ed8a8f909dbc7630a0987ff"/><file name="shadow-c.png" hash="3abbfce345687daada53445adf6fddc7"/><file name="shadow-lr.png" hash="986270d8ab4330fa7499dc33ed135598"/><file name="shadow.png" hash="860bf4f690d2ea2aba7b11500925da62"/><dir name="shared"><file name="calendar.gif" hash="81296cff1f97f5365524f2b9dcf626da"/><file name="glass-bg.gif" hash="bc2cd5c5ac9b3874d956c892d23f2119"/><file name="left-btn.gif" hash="6bf30c6cf0b5d70436c3e463b5532b35"/><file name="right-btn.gif" hash="e7ad3a7f4814791cecf1b90e77e9e139"/><file name="warning.gif" hash="448dc934a7f0dd6092b51f88a1e47b2d"/></dir><dir name="sizer"><file name="e-handle-dark.gif" hash="b86289f41d7ad1a7401dd2b2a9b3c3d8"/><file name="e-handle.gif" hash="510edc95ebaa36306916c50ca10596f7"/><file name="ne-handle-dark.gif" hash="115f71b851c7f0b5f354caa7b8dfff15"/><file name="ne-handle.gif" hash="8e268b962dc909d275997b572ff17a72"/><file name="nw-handle-dark.gif" hash="4a361e6920b2e34a39fd425a515c83b9"/><file name="nw-handle.gif" hash="1120600505249c38c3d1cc2ab120cd13"/><file name="s-handle-dark.gif" hash="4a6bf15d308a4ae580dd03cbd431a95c"/><file name="s-handle.gif" hash="5e3338cb09e9df7f52383d6b1423fc86"/><file name="se-handle-dark.gif" hash="f3d8d8aac23e3e9633072e2366cda847"/><file name="se-handle.gif" hash="71edc3f63f79f447d2c81ee09e1fbbc3"/><file name="square.gif" hash="4431ea1954bfd2a9cea0931f07fc7ffa"/><file name="sw-handle-dark.gif" hash="44b2400d873cf8a23d84424827cde44d"/><file name="sw-handle.gif" hash="c3e0befc4208a51180344765fd7deeda"/></dir><dir name="tabs"><file name="tab-btm-inactive-left-bg.gif" hash="4f141a6abf25d3c9409b6c381333c138"/><file name="tab-btm-inactive-right-bg.gif" hash="eb2423d3b9dd072976ce955ab0c683d6"/><file name="tab-btm-left-bg.gif" hash="a36eb9382ed8b858eff2c5d4e5d7011a"/><file name="tab-btm-right-bg.gif" hash="9e4245776f0f7b6b6c7ddbf40a43103a"/><file name="tab-sprite.gif" hash="6a7d481bf5b74acfbfa0b01a35bd6620"/></dir><dir name="toolbar"><file name="btn-arrow-light.gif" hash="fa49b39a0fd88ef26264da44a2b4edea"/><file name="btn-arrow.gif" hash="12bda29a4c8016cfa047e852c4353f59"/><file name="btn-over-bg.gif" hash="faddf9b24cefa721326ba3f87f3ef31f"/><file name="gray-bg.gif" hash="cf2d9408f320e696e607d8472afa7ff0"/><file name="tb-bg.gif" hash="5309337fd7a22cab9d9467fd9eaa0a0c"/><file name="tb-btn-sprite.gif" hash="3aed28dd646d22e215c8a6a3e983322f"/></dir><dir name="tree"><file name="drop-add.gif" hash="95eb34ac70a1a3c95ef39ab826a89491"/><file name="drop-between.gif" hash="edb544a0de58547d4a39c526e06e3c82"/><file name="drop-no.gif" hash="67f83ea04a2eb1c50614a96faf625f25"/><file name="drop-over.gif" hash="d6b303cfa3de8784057d9d7e66cdaa86"/><file name="drop-under.gif" hash="55e5dbc9451cfa91423832260b0753aa"/><file name="drop-yes.gif" hash="f3216326c00890259e84f1726dd1043f"/><file name="elbow-end-minus-nl.gif" hash="5e5bffba157eceee7989db95b919e4d5"/><file name="elbow-end-minus.gif" hash="a469f6a4394d797c2efeffc70409f6db"/><file name="elbow-end-plus-nl.gif" hash="f0f50c0dd3ee6dd4b11c1f245b36eb01"/><file name="elbow-end-plus.gif" hash="ec1482391363612d9e5f8c7087fddaba"/><file name="elbow-end.gif" hash="345551384aa325189ba28a1c20f3405e"/><file name="elbow-line.gif" hash="90e478158df476dc989a60daaafc87e6"/><file name="elbow-minus-nl.gif" hash="5e5bffba157eceee7989db95b919e4d5"/><file name="elbow-minus.gif" hash="71bb1bd44b1274c60d30dba1de472ed7"/><file name="elbow-plus-nl.gif" hash="f0f50c0dd3ee6dd4b11c1f245b36eb01"/><file name="elbow-plus.gif" hash="945572d06a74b5f952251a86c595f2da"/><file name="elbow.gif" hash="27679f3b1222ba95d9925885d7d82d02"/><file name="folder-open.gif" hash="c569141d6ae7c61d838ed8af26aa9380"/><file name="folder.gif" hash="b7209740bb4a825a06beb8698d92c2b1"/><file name="leaf.gif" hash="23757d6e353f343e3c7edfe28428f198"/><file name="loading.gif" hash="00ef871b291bc03a497d608a5bd8ec99"/><file name="s.gif" hash="fc94fb0c3ed8a8f909dbc7630a0987ff"/></dir><dir name="window"><file name="corners-sprite.gif" hash="b485d6e69678822a0fb77cc312487874"/><file name="left-right.gif" hash="3fe626d6ca2f71d36fc62c32cb1cc52a"/><file name="top-bottom.gif" hash="8a227016c401438e602c2f770a611d5b"/></dir></dir><dir name="magento"><dir name="basic-dialog"><file name="collapse-on.gif" hash="b60dfdc0d00cfb30a8a622e0c22eed84"/><file name="collapse.gif" hash="8525b9d2e93d31e0b071b1f9bf9550e5"/><file name="expand-on.gif" hash="0dfb4ac6d626cdcaa931c14dbb45848e"/><file name="expand.gif" hash="0eb5c03da8b8415e0568784c959e536a"/><file name="hd-sprite.gif" hash="035bf2296afd70af7020cf06b60bf3f6"/><file name="ns-collapse-on.gif" hash="88ed8b7578c803f68d9f1eb171454e00"/><file name="ns-collapse.gif" hash="44b91376c040f91672aaa98c1fcc062b"/><file name="ns-expand-on.gif" hash="587c2ce90066280e5e6cd731bb9d346c"/><file name="ns-expand.gif" hash="57b479b168f8a54200bd1770b5591630"/><file name="panel_close.gif" hash="686c6dfcf341de25487ab4d8ea5954ce"/><file name="pop_close.gif" hash="dd3605531f9959901eff6f089f084bdc"/><file name="pop_collapse.gif" hash="2b8007242ae1c9ae9f26c60a878a63f7"/></dir><dir name="grid"><file name="grid-body-bg.gif" hash="b5fe585c01f57b2171a2b723abcc4a38"/><file name="grid-split.gif" hash="32e210451e8dc4295b53cf7ca13bb4a6"/></dir><dir name="layout"><file name="checkered-bg.gif" hash="f0a0cd29a6120377c289fd39e2ee7e80"/><file name="icon-catalog.gif" hash="435ff2300ddefb9f8a4bad8ee806fb1a"/><file name="icon-category.gif" hash="ce2a146851bb5ec1e41670b68183b56a"/><file name="icon-my-tasks.gif" hash="0ecb888b160701845e25a7140d038af0"/><file name="icon-product.gif" hash="a0707878c5221052209e5ae6a4de0bd2"/></dir><file name="loading_bg.gif" hash="e202ef7e03d0ef3e9beac7480dae65bf"/><dir name="tabs"><file name="tab-sprite.gif" hash="049fb2f4186b6dc9de747ad96456b1ab"/></dir><dir name="toolbar"><file name="btn-arrow.gif" hash="938cffb6de5cc8b1febfd1851fd983c2"/><file name="header_bg.gif" hash="3696842a32740fa159484cabc3340d13"/><file name="toolbar-bg.gif" hash="8d1b465c2a75963407b536d9081f649f"/></dir><dir name="tree"><file name="elbow-end-minus-nl.gif" hash="6dc08c43109cc6a365bd0270f05e2f1c"/><file name="elbow-end-minus.gif" hash="3dbdb88a9297fe5631e832f046b0350b"/><file name="elbow-end-plus-nl.gif" hash="6dc08c43109cc6a365bd0270f05e2f1c"/><file name="elbow-end-plus.gif" hash="5470e5712a9742ba666c26cb429baaeb"/><file name="elbow-end.gif" hash="63fe879440e2784e0cc0d316ce017745"/><file name="elbow-line.gif" hash="b316a39455304e20e01dbc437f57fd32"/><file name="elbow-minus-nl.gif" hash="0e3129bff70475c8f7f297e0e59d1608"/><file name="elbow-minus.gif" hash="e7b18ff6800e65c6e171bbb2a911762e"/><file name="elbow-plus-nl.gif" hash="78a8f737941fa658f1e770258a3791cd"/><file name="elbow-plus.gif" hash="b02cb264df55aef2105b1b245d075e56"/><file name="elbow.gif" hash="b6bd0e0237e3cd413fa2dac27701c724"/><file name="folder-open.gif" hash="e3cd196406d4857dc0c926807f16c409"/><file name="folder.gif" hash="03eb26c42137ac792609822862ef4d0f"/><file name="leaf.gif" hash="e3cd196406d4857dc0c926807f16c409"/><file name="s.gif" hash="df3e567d6f16d040326c7a0ea29a4f41"/></dir></dir></dir></dir></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_Js_Mage-1.9.3.10.xml b/var/package/Lib_Js_Mage-1.9.3.10.xml
deleted file mode 100644
index 37f4245..0000000
--- a/var/package/Lib_Js_Mage-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Js_Mage</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license>Mixed</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Javascript Libraries for Magento</summary>
-    <description>Javascript Libraries for Magento</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:13</time>
-    <contents><target name="mageweb"><dir name="js"><dir name="lib"><file name="FABridge.js" hash="64244d8d58abd42bd71f0ee3309767ad"/><file name="boxover.js" hash="a5ade77452e8d5066cb84dcac3d34ed5"/><file name="ccard.js" hash="d3e849be0977d53de4af933b40293ff6"/><file name="dropdown.js" hash="4c2b33fe18424cdee8fc659216afd3a9"/><file name="ds-sleight.js" hash="85af457d444865d1587bfe4875bd4fc6"/><file name="flex.js" hash="f27867374b9cb7ff86aae31bb39f016f"/><dir name="jquery"><file name="jquery-1.10.2.js" hash="91515770ce8c55de23b306444d8ea998"/><file name="jquery-1.10.2.min.js" hash="841dc30647f93349b7d8ef61deebe411"/><file name="jquery-1.10.2.min.map" hash="6c3ccfc221d36777d383b6e04d0b8af9"/><file name="jquery-1.12.0.js" hash="cd0095b52c4242a8aea3ae91aba35ea8"/><file name="jquery-1.12.0.min.js" hash="cbb11b58473b2d672f4ed53abbb67336"/><file name="jquery-1.12.0.min.map" hash="829c109a5ab3f33acdbd1dcc9819772e"/><file name="noconflict.js" hash="07849ea227cb2aee266dc14250cdcd72"/></dir><dir name="uploader"><file name="flow.min.js" hash="a82a557db407b53d5909fa4e1833a596"/><file name="fusty-flow-factory.js" hash="b3f49be0f28be74e8b8bb76496c52bc3"/><file name="fusty-flow.js" hash="302f440908837093fd4e9b6e76ec01e0"/></dir></dir><dir name="mage"><dir name="adminhtml"><file name="accordion.js" hash="c224339498e1a5304c073992a6d2cdeb"/><file name="backup.js" hash="4f53863337f627518eb0f57e7311a17a"/><file name="browser.js" hash="5bdae849d93e161a4c640735dfddef42"/><file name="events.js" hash="4d00fe8eeca479b3fd6997e681ec27e8"/><file name="flexuploader.js" hash="18328b7c8a81856a079d2994df59f902"/><file name="form.js" hash="8fa0d7ec3b03bb7ca41e5d4642888e94"/><file name="giftmessage.js" hash="2da5ed0ca29f3880e462cedbca8696b1"/><dir name="giftoptions"><file name="tooltip.js" hash="f5f4920568cb210aa7f8a0b2f9e0cb61"/></dir><file name="grid.js" hash="c33482101b7dd98763580acf1a5f2467"/><file name="hash.js" hash="261990e25a4586d43b1f5f4a02c31725"/><file name="image.js" hash="aa2f2fe381fb72a3446cf4d86badf1d8"/><file name="loader.js" hash="13835f1f7a1bd9066421e57b58e47298"/><file name="magento-all.js" hash="18e7474bb5aed97654e5bacd17076ef0"/><dir name="product"><dir name="composite"><file name="configure.js" hash="540ad14016cd4ab412dd2cd53e54cd27"/></dir></dir><file name="product.js" hash="5cf2b85a5c0ce65f6bf23f93ceafddd6"/><file name="rules.js" hash="31038635fcfae3918eabbfeb1048fcc1"/><dir name="sales"><file name="packaging.js" hash="cfb830d02a33c0e187660056a6e96277"/></dir><file name="sales.js" hash="3bef4871048d012d98e2389629501eec"/><file name="scrollbar.js" hash="ff79af2fa0ef8359319c7aec26f0d619"/><file name="tabs.js" hash="591ec7eb2d6ba32312ea7eeed145acb0"/><file name="tools.js" hash="4ecb7d1027caa06eda1166c2047e08a5"/><dir name="uploader"><file name="instance.js" hash="0e183b33955a1d1fb56dae0d2514f2d7"/></dir><file name="uploader.js" hash="e4da8c0e0261633c08dd89763cfdaa0c"/><file name="variables.js" hash="962b37dd6d893bfcc3f6553c2349df2a"/><dir name="wysiwyg"><dir name="tiny_mce"><dir name="plugins"><dir name="magentovariable"><file name="editor_plugin.js" hash="003b55ae437653b03963361b597ca7dd"/><dir name="img"><file name="icon.gif" hash="682b29a0e734f952cb2edabede6a25d1"/></dir></dir><dir name="magentowidget"><file name="editor_plugin.js" hash="c7fae499606d95f57f33300c0abf69f4"/><dir name="img"><file name="icon.gif" hash="532c141286373f098f1f4362e001c7f8"/></dir></dir></dir><file name="setup.js" hash="161bd02789945f1f0d24e0f028cbbd27"/><dir name="themes"><dir name="advanced"><dir name="skins"><dir name="default"><file name="content.css" hash="40e74d28dda4e3ed888ed9c389926ccc"/><file name="dialog.css" hash="e4ee65e17609668f49e60c78bf2ae674"/></dir></dir></dir></dir></dir><file name="widget.js" hash="8da09568baa72ae676f0e1e73be455e3"/></dir></dir><file name="captcha.js" hash="7be5c30bf178e3c1e2669db356a393f6"/><file name="centinel.js" hash="6e1b4524431eefa50d71be4441082083"/><file name="cookies.js" hash="67eadf7b9433d2cfc96546a85ebc5959"/><file name="directpost.js" hash="77a4f2f1017d6fc2d2c436b1c6840228"/><file name="translate.js" hash="5dae341ece021a8e9a9fdfcf89d94534"/><file name="translate_inline.css" hash="94ee55676a3ca446a403d21b7631dad4"/><file name="translate_inline.js" hash="3cfb6136a5756361cabc24773510c41f"/></dir><dir name="varien"><file name="accordion.js" hash="0b3016995870cd0b7050e05889b13098"/><file name="configurable.js" hash="4307b8038f4801db44a7728541a19674"/><file name="form.js" hash="ee2b2973a3595cc4048d6323c4df0dd5"/><file name="iehover-fix.js" hash="b28db3c01092190e221fee9903ac009c"/><file name="js.js" hash="d7d1e41851cfe1e49c65b754def9c082"/><file name="menu.js" hash="f2b0d57545ca03f598a2bb4a323c31ce"/><file name="payment.js" hash="2009cfa0cb7235a2e0b21a6f901cf67b"/><file name="product.js" hash="648b67b08c822cfedfcaea6d4a47f9d6"/><file name="product_options.js" hash="dbfe01736095f1efd73e05bf89624212"/><file name="telephone.js" hash="eb4c304fba714b84af5d7feed3fc239e"/><file name="weee.js" hash="22a837f9bb7d0f1ef95d71bb2533bbd9"/></dir><file name="blank.html" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="index.php" hash="702348421e0df944034bf0e4569f197d"/><file name="spacer.gif" hash="df3e567d6f16d040326c7a0ea29a4f41"/><dir name="flash"><file name="AC_RunActiveContent.js" hash="3e038cea960c1b650442b85cea237053"/></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Lib_Js_Prototype</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Lib_Js_Mage-1.9.4.0.xml b/var/package/Lib_Js_Mage-1.9.4.0.xml
new file mode 100644
index 0000000..e75dfd1
--- /dev/null
+++ b/var/package/Lib_Js_Mage-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Js_Mage</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license>Mixed</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Javascript Libraries for Magento</summary>
+    <description>Javascript Libraries for Magento</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:00</time>
+    <contents><target name="mageweb"><dir name="js"><dir name="lib"><file name="FABridge.js" hash="64244d8d58abd42bd71f0ee3309767ad"/><file name="boxover.js" hash="a5ade77452e8d5066cb84dcac3d34ed5"/><file name="ccard.js" hash="d3e849be0977d53de4af933b40293ff6"/><file name="dropdown.js" hash="4c2b33fe18424cdee8fc659216afd3a9"/><file name="ds-sleight.js" hash="85af457d444865d1587bfe4875bd4fc6"/><file name="flex.js" hash="f27867374b9cb7ff86aae31bb39f016f"/><dir name="jquery"><file name="jquery-1.10.2.js" hash="91515770ce8c55de23b306444d8ea998"/><file name="jquery-1.10.2.min.js" hash="841dc30647f93349b7d8ef61deebe411"/><file name="jquery-1.10.2.min.map" hash="6c3ccfc221d36777d383b6e04d0b8af9"/><file name="jquery-1.12.1.js" hash="62f69d29b6f01c8d477a547cedd922f2"/><file name="jquery-1.12.1.min.js" hash="1d244cb043be8157f0050ce9e45c9ef2"/><file name="jquery-1.12.1.min.map" hash="7761e30c5da1bf6d7cebc61bf612cd0e"/><file name="noconflict.js" hash="07849ea227cb2aee266dc14250cdcd72"/></dir><dir name="uploader"><file name="flow.min.js" hash="a82a557db407b53d5909fa4e1833a596"/><file name="fusty-flow-factory.js" hash="b3f49be0f28be74e8b8bb76496c52bc3"/><file name="fusty-flow.js" hash="302f440908837093fd4e9b6e76ec01e0"/></dir></dir><dir name="mage"><dir name="adminhtml"><file name="accordion.js" hash="c224339498e1a5304c073992a6d2cdeb"/><file name="backup.js" hash="4f53863337f627518eb0f57e7311a17a"/><file name="browser.js" hash="5bdae849d93e161a4c640735dfddef42"/><file name="events.js" hash="4d00fe8eeca479b3fd6997e681ec27e8"/><file name="flexuploader.js" hash="18328b7c8a81856a079d2994df59f902"/><file name="form.js" hash="8fa0d7ec3b03bb7ca41e5d4642888e94"/><file name="giftmessage.js" hash="2da5ed0ca29f3880e462cedbca8696b1"/><dir name="giftoptions"><file name="tooltip.js" hash="f5f4920568cb210aa7f8a0b2f9e0cb61"/></dir><file name="grid.js" hash="c33482101b7dd98763580acf1a5f2467"/><file name="hash.js" hash="261990e25a4586d43b1f5f4a02c31725"/><file name="image.js" hash="aa2f2fe381fb72a3446cf4d86badf1d8"/><file name="loader.js" hash="13835f1f7a1bd9066421e57b58e47298"/><file name="magento-all.js" hash="18e7474bb5aed97654e5bacd17076ef0"/><dir name="product"><dir name="composite"><file name="configure.js" hash="540ad14016cd4ab412dd2cd53e54cd27"/></dir></dir><file name="product.js" hash="5cf2b85a5c0ce65f6bf23f93ceafddd6"/><file name="rules.js" hash="31038635fcfae3918eabbfeb1048fcc1"/><dir name="sales"><file name="packaging.js" hash="cfb830d02a33c0e187660056a6e96277"/></dir><file name="sales.js" hash="3bef4871048d012d98e2389629501eec"/><file name="scrollbar.js" hash="ff79af2fa0ef8359319c7aec26f0d619"/><file name="tabs.js" hash="591ec7eb2d6ba32312ea7eeed145acb0"/><file name="tools.js" hash="4ecb7d1027caa06eda1166c2047e08a5"/><dir name="uploader"><file name="instance.js" hash="0e183b33955a1d1fb56dae0d2514f2d7"/></dir><file name="uploader.js" hash="e4da8c0e0261633c08dd89763cfdaa0c"/><file name="variables.js" hash="962b37dd6d893bfcc3f6553c2349df2a"/><dir name="wysiwyg"><dir name="tiny_mce"><dir name="plugins"><dir name="magentovariable"><file name="editor_plugin.js" hash="003b55ae437653b03963361b597ca7dd"/><dir name="img"><file name="icon.gif" hash="682b29a0e734f952cb2edabede6a25d1"/></dir></dir><dir name="magentowidget"><file name="editor_plugin.js" hash="c7fae499606d95f57f33300c0abf69f4"/><dir name="img"><file name="icon.gif" hash="532c141286373f098f1f4362e001c7f8"/></dir></dir></dir><file name="setup.js" hash="161bd02789945f1f0d24e0f028cbbd27"/><dir name="themes"><dir name="advanced"><dir name="skins"><dir name="default"><file name="content.css" hash="40e74d28dda4e3ed888ed9c389926ccc"/><file name="dialog.css" hash="e4ee65e17609668f49e60c78bf2ae674"/></dir></dir></dir></dir></dir><file name="widget.js" hash="8da09568baa72ae676f0e1e73be455e3"/></dir></dir><file name="captcha.js" hash="7be5c30bf178e3c1e2669db356a393f6"/><file name="centinel.js" hash="6e1b4524431eefa50d71be4441082083"/><file name="cookies.js" hash="67eadf7b9433d2cfc96546a85ebc5959"/><file name="directpost.js" hash="77a4f2f1017d6fc2d2c436b1c6840228"/><file name="translate.js" hash="5dae341ece021a8e9a9fdfcf89d94534"/><file name="translate_inline.css" hash="94ee55676a3ca446a403d21b7631dad4"/><file name="translate_inline.js" hash="3cfb6136a5756361cabc24773510c41f"/></dir><dir name="varien"><file name="accordion.js" hash="0b3016995870cd0b7050e05889b13098"/><file name="configurable.js" hash="4307b8038f4801db44a7728541a19674"/><file name="form.js" hash="ee2b2973a3595cc4048d6323c4df0dd5"/><file name="iehover-fix.js" hash="b28db3c01092190e221fee9903ac009c"/><file name="js.js" hash="d7d1e41851cfe1e49c65b754def9c082"/><file name="menu.js" hash="f2b0d57545ca03f598a2bb4a323c31ce"/><file name="payment.js" hash="2009cfa0cb7235a2e0b21a6f901cf67b"/><file name="product.js" hash="648b67b08c822cfedfcaea6d4a47f9d6"/><file name="product_options.js" hash="dbfe01736095f1efd73e05bf89624212"/><file name="telephone.js" hash="eb4c304fba714b84af5d7feed3fc239e"/><file name="weee.js" hash="22a837f9bb7d0f1ef95d71bb2533bbd9"/></dir><file name="blank.html" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="index.php" hash="702348421e0df944034bf0e4569f197d"/><file name="spacer.gif" hash="df3e567d6f16d040326c7a0ea29a4f41"/><dir name="flash"><file name="AC_RunActiveContent.js" hash="3e038cea960c1b650442b85cea237053"/></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Lib_Js_Prototype</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Lib_Js_Prototype-1.9.3.10.xml b/var/package/Lib_Js_Prototype-1.9.3.10.xml
deleted file mode 100644
index 352f777..0000000
--- a/var/package/Lib_Js_Prototype-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Js_Prototype</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license>Mixed</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Prototype and Scriptaculous Javascript Libraries for Magento</summary>
-    <description>Prototype and Scriptaculous Javascript Libraries for Magento</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:14</time>
-    <contents><target name="mageweb"><dir name="js"><dir name="prototype"><file name="debug.js" hash="d5990eabf728ade1f34496737455c8ff"/><file name="effects.js" hash="91e1b7d8c6043dff4eadbe054a90e3a7"/><file name="extended_debug.js" hash="cc706bc76bb1c5a2610fc296cd85e053"/><file name="prototype.js" hash="3b4b13dad33b475e11feb26fd3468ecc"/><file name="tooltip.js" hash="8509b04b1594b7e6382d7cfdf4ee1236"/><file name="tooltip_manager.js" hash="6b9759cbad296fda3c18d7669d6b5af0"/><file name="validation.js" hash="14ed04cf29c92ef2d489d12fb786284b"/><file name="window.js" hash="1ad7aab8deee02a99403dba716492e97"/><file name="window_effects.js" hash="3c0b47a0f3cd41753a3992d01c118c3d"/><file name="window_ext.js" hash="d5163111a6dc50d05cc3f98360855336"/><file name="window_readme.txt" hash="97306d2a8c4be2ec65f66d2ec233289c"/><dir name="windows"><file name="MIT-LICENSE" hash="a839f717f1675b571481268a4e4a4ee2"/><file name="README" hash="75b8b2e714cbcb48337540a451655967"/><dir name="themes"><dir name="alert"><file name="bottom.gif" hash="e859e3bc00c4f10360fa81a659aa673f"/><file name="bottom_left.gif" hash="53585b1a0351d599e76a85ccc26f7980"/><file name="bottom_right.gif" hash="8170abe3fec71fd17612869a2f036cd6"/><file name="left.gif" hash="4f235c4e6afb0d386d220638c49e4545"/><file name="overlay.png" hash="f4ddcee6f819975bc9c5643b570de6dc"/><file name="progress.gif" hash="86b1ac6d1c485d54efa3a53643e91ceb"/><file name="right.gif" hash="838ade41815529e7a63f99c93b3a01f7"/><file name="top.gif" hash="8702ca9b81c19f6220ce81c4ea215878"/><file name="top_left.gif" hash="a8c097bcb67bddf640c2bd9161b79476"/><file name="top_right.gif" hash="05ef4e1a417a5a2c81fc816406a4842a"/></dir><file name="alert.css" hash="27df86baae5a6fa2e3556bdf1b85ccc6"/><file name="alert_lite.css" hash="fbeaff8f185cd3b302f1a8db5efa0110"/><dir name="alphacube"><file name="bottom-left-c.gif" hash="434cdfc5298f33efb108264cf3370e1c"/><file name="bottom-middle.gif" hash="3f882dd32d57a29a785f448bbba5ed26"/><file name="bottom-right-c.gif" hash="4c37ad7b94fc901a1cfaf54a1742d5fd"/><file name="button-close-focus.gif" hash="99c44a6df2733b58083af7a4d9522116"/><file name="button-max-focus.gif" hash="408cd33fa89269b8395bf10afe69d456"/><file name="button-min-focus.gif" hash="ae06210658bad8bcc88dea377c4dc908"/><file name="frame-left.gif" hash="1bb1207b43425d214d4dc0da108f5449"/><file name="frame-right.gif" hash="8b9c36079881aa15c27a137666c56a38"/><file name="left-top.gif" hash="1ea936a090b4dfe8160fcb3a90ddb145"/><file name="right-top.gif" hash="e1b641feab640cb4207fa52160715e32"/><file name="top-middle.gif" hash="7f94c1018d023832c7c9e1fa468a9555"/></dir><file name="alphacube.css" hash="27c968911eaef53df158c55083ef0c84"/><file name="behavior.htc" hash="5588dff36ad5595f8353730e853044e5"/><dir name="darkX"><file name="button-close-focused.png" hash="5090b529a86a79679e0a26ccb0e1b0c6"/><file name="button-maximize-focused.png" hash="0f84bfcc9626d2cb1826291268b29f20"/><file name="button-minimize-focused.png" hash="630cd8cdd7124d412c6253e5c7cfc32a"/><file name="frame-bottom-left-focused.png" hash="8a34a3be2f349315dfd287ec15148332"/><file name="frame-bottom-mid-focused.png" hash="f1dbacdb64a19e00a485d426126f26db"/><file name="frame-bottom-right-focused.png" hash="17acb7874856dc68c3c017238d42054a"/><file name="frame-left-focused.png" hash="f30ab13888b2e48d0637991164a8f748"/><file name="frame-right-focused.png" hash="1115115c62507971b2f5eed3c2c5c2d0"/><file name="titlebar-left-focused.png" hash="491130dedbdbb3b2682f37424347b14c"/><file name="titlebar-mid-focused.png" hash="ae46975fc8a5e5a9f73f810d0c88809a"/><file name="titlebar-right-focused.png" hash="9560eb10dee94985f3ebe935833e2ae4"/></dir><file name="darkX.css" hash="16a964cfe57a2c979ad3d97831673b79"/><file name="debug.css" hash="63ee9aa7b7d80e0bb5e311407746ccd3"/><dir name="default"><file name="bottom_left.gif" hash="fb99ffa815a8648f95f42698fe5dfaa1"/><file name="bottom_mid.gif" hash="49b9ca7025562ea7f070a9111282364b"/><file name="bottom_right.gif" hash="e46768f632765cd86c5fe5d0166dcf2c"/><file name="bottom_right_resize.gif" hash="1b35a4ec3b734dfe37e31ba87bcc7d99"/><file name="center_left.gif" hash="bd567580b4ee16a7a2734057cfbbe219"/><file name="center_right.gif" hash="eef184d5d89d1710313581a2ccf408e8"/><file name="clear.gif" hash="7af1206eeb0e7834a75e69d70676060d"/><file name="close.gif" hash="8a08f243c37a8e25a88d4ac135b2f07d"/><file name="inspect.gif" hash="aa2a0961067aad5c54b8634919af863b"/><file name="maximize.gif" hash="e73cd71c4979ebeadeb9e27d40a9e8fb"/><file name="minimize.gif" hash="2d2f4b1bd0506f342425f80ab76c49a3"/><file name="overlay.png" hash="536d40e87cda0c7ae7b11f1721aa52d0"/><file name="resize.gif" hash="320f534b5d444b39701e0b679529e779"/><file name="sizer.gif" hash="1b35a4ec3b734dfe37e31ba87bcc7d99"/><file name="top_left.gif" hash="9c5e5920bfc189a45cc618099af93aa8"/><file name="top_mid.gif" hash="a12ff2b944025ad2d127d033dae5e9e1"/><file name="top_right.gif" hash="0cf1ec5b93f8ac8fcce0e2f72cf7f45e"/></dir><file name="default.css" hash="16014098f441d12d06c088135e2fde28"/><dir name="iefix"><file name="blank.gif" hash="56398e76be6355ad5999b262208a17c9"/><file name="iepngfix.css" hash="da3154c9a817850376f73a7976bfcb13"/><file name="iepngfix.htc" hash="b50c4e352a64254c5ceb6c63bcd0b176"/></dir><dir name="lighting"><file name="background_buttons.gif" hash="e66e67aaaf08a7b24f3cd1ba22584b42"/><file name="bottom-left-blue.png" hash="7c9e91d421945141315fc105d464a99f"/><file name="bottom-left-darkblue.png" hash="e88c2380acf403ee28597c6045988cc6"/><file name="bottom-left-green.png" hash="ee25ce8a12229b009fbfd91f7ba51e26"/><file name="bottom-left-grey.png" hash="5fdb3eae397ac7279aa5a7fdaad3dcc2"/><file name="bottom-middle-blue.png" hash="e93cc9d31d88f45c047a98a66be04354"/><file name="bottom-middle-darkblue.png" hash="763c88c424e0900e675042d3f0958bd4"/><file name="bottom-middle-green.png" hash="77e0a22afd2c55a83b5c7fa98a12ef25"/><file name="bottom-middle-grey.png" hash="3a2ebdeff74e2ff63c4471575568dd01"/><file name="bottom-right-blue.png" hash="0bc11a61047e8716451a283ebff897e5"/><file name="bottom-right-darkblue.png" hash="88e33ea702a304ae237edd57bc8447d6"/><file name="bottom-right-green.png" hash="7bce162df013eba43a659ae6e780ae4b"/><file name="bottom-right-grey.png" hash="86eb476492d911aac5688c9747fe7a1d"/><file name="button-close-blue.png" hash="42ae1a35caf8a9a275d6e748c27769fb"/><file name="button-close-darkblue.png" hash="50dbcd898dc519c1e6ac0d3a478978cd"/><file name="button-close-green.png" hash="b4273572fa91cba909a0a3e15b994d19"/><file name="button-close-grey.png" hash="124964b634ba67f2bb6dd08cf8cafd5a"/><file name="button-maximize-blue.png" hash="85b79237d85b09c205e09166dd8f4af0"/><file name="button-maximize-darkblue.png" hash="108d10619214e3365820aa4ab008aed5"/><file name="button-maximize-green.png" hash="90f5527705e4fd81997564e81c6ac2a3"/><file name="button-maximize-grey.png" hash="c46a8c014bd14be167f4c6a2f2dd52ed"/><file name="button-minimize-blue.png" hash="1fd738b99877a4dfa5656491cc3d8e6b"/><file name="button-minimize-darkblue.png" hash="b6d9da1cdf51ab54682fa75a6df2c40d"/><file name="button-minimize-green.png" hash="9e7d26298a0a49ffee3fbab6ea838e01"/><file name="button-minimize-grey.png" hash="0432701c2425cb3a5143d8a04bda0d87"/><file name="left-blue.png" hash="0a6acf0a863c04845a93b681769527cd"/><file name="left-darkblue.png" hash="44cdce8a75de4425d7eb7763092cc38d"/><file name="left-green.png" hash="d83116c49d62dc46bff0b7b4200b4ecf"/><file name="left-grey.png" hash="f3486d3293ae98b5edb8889c4b4082ef"/><file name="pngbehavior.htc" hash="b94c44e30423fd18a8b82bda5a139db3"/><file name="right-blue.png" hash="2c9b6b80d4a6b190b8e38a1c101e828c"/><file name="right-darkblue.png" hash="9b3267c5d36bb3f4588167cc3e78e569"/><file name="right-green.png" hash="4436968c2adbe6ed7c475c225631bc7c"/><file name="right-grey.png" hash="36b3de47bcbbd6b53e2f6e06843ee6e8"/><file name="spinner.gif" hash="c7b3cbb3ec8249a7121b722cdd76b870"/><file name="top-left-blue.png" hash="a5cb9eaa82f67df223d6784a52b26f1f"/><file name="top-left-darkblue.png" hash="e4a3af23d2cae7909331eb1995963c82"/><file name="top-left-green.png" hash="eb4cb604177c342998023d3dcd3aa5b0"/><file name="top-left-grey.png" hash="9f6f39abc4ae9539a0f54567a4a5d4f8"/><file name="top-middle-blue.png" hash="6d01df8637385bbe592b8df369294c8d"/><file name="top-middle-darkblue.png" hash="2c91ea6462e72a29cd07300d4102b88a"/><file name="top-middle-green.png" hash="e0f56311091bfb370fc6783fc7e71068"/><file name="top-middle-grey.png" hash="8c02881b730d602589fe9ed4bcaeb689"/><file name="top-right-blue.png" hash="4afefb06dc63c864211724a6348f25ad"/><file name="top-right-darkblue.png" hash="d8a9031987f648f170af67023179618d"/><file name="top-right-green.png" hash="b38813f9200440051273bdd622f5e545"/><file name="top-right-grey.png" hash="d7f7332ddf8686fb9810e4170767bf52"/></dir><file name="lighting.css" hash="d13de730c8ee7ef04167d361bdf8eebd"/><file name="mac_os_x.css" hash="65204ef34c1eeff0be29c53b0614076a"/><file name="mac_os_x_dialog.css" hash="0b7cd9d6a9e8f940f50bc4a080f54b1b"/><dir name="nuncio"><file name="bottom_left.png" hash="d9be5c7b432a342c6da5ef9b10148267"/><file name="bottom_mid.png" hash="facee2e7ee7c572a8f412750b0ce5387"/><file name="bottom_right.png" hash="6f3c124a066a11ff225897112de8e9d7"/><file name="center_left.png" hash="a11bee83f99addccc0d5eff3d2e82b8f"/><file name="center_right.png" hash="bf6b023ad1751d5f60f9820eea72ac28"/><file name="close.png" hash="46744062a7b54416c8767f8e0ccf1c41"/><file name="minimize.png" hash="bc911a3e90fc0640e0899856759a5e01"/><file name="overlay.png" hash="5ccd88855e923eb8a1bd9da1dec9d7fe"/><file name="top_left.png" hash="d3105aacc2c69954df11af953875a12e"/><file name="top_mid.png" hash="cb679a8c77e9b7485b5f0eca547eb103"/><file name="top_right.png" hash="e65d6fc6bf53891c487e414db16f1038"/></dir><file name="nuncio.css" hash="e30e31b94d96b0b27c80ad6d943d7010"/><dir name="spread"><file name="bottom-left-c.gif" hash="84641d08576f68a11f717103365dfb83"/><file name="bottom-middle.gif" hash="20ab265c67355c5b72cdcdc8739af555"/><file name="bottom-right-c.gif" hash="cb27b72623e997badc599e76024a6e44"/><file name="button-close-focus.gif" hash="99c44a6df2733b58083af7a4d9522116"/><file name="button-max-focus.gif" hash="408cd33fa89269b8395bf10afe69d456"/><file name="button-min-focus.gif" hash="ae06210658bad8bcc88dea377c4dc908"/><file name="frame-left.gif" hash="63dc99b0c4ba0518688f7eca1f1628ca"/><file name="frame-right.gif" hash="a03585eec830f37898c7041d557dafc5"/><file name="left-top.gif" hash="7c78b8b59976d19191acf940cbfc04fb"/><file name="right-top.gif" hash="597530287fe1dc491278f855749f7e01"/><file name="top-middle.gif" hash="fa6fd6b90945c47f8d1718d9139d0a75"/><file name=".gif" hash="9dd39829e7cfdd06f3317a931bdc177e"/></dir><file name="spread.css" hash="a804413d7f1f9550c134477f6f9219ee"/></dir></dir></dir><dir name="scriptaculous"><file name="builder.js" hash="1174f6fc34ca5d54ba10b0c719386e7c"/><file name="controls.js" hash="8c414e1787c0ac9f10b16b252361c8b2"/><file name="dragdrop.js" hash="046759400db7a6096376e50110104edd"/><file name="effects.js" hash="d795089f95a22306cca9b337c439c65a"/><file name="scriptaculous.js" hash="d59eba4e0b14b672208b0862ae1c2196"/><file name="slider.js" hash="6043f96a71d2685fecd02e2ab99e84d9"/><file name="sound.js" hash="0f0fab23fa2cb1bc7717fd2bdf45402e"/><file name="unittest.js" hash="99969698b22272f77bdf4c64586862b3"/></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_Js_Prototype-1.9.4.0.xml b/var/package/Lib_Js_Prototype-1.9.4.0.xml
new file mode 100644
index 0000000..d2699ba
--- /dev/null
+++ b/var/package/Lib_Js_Prototype-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Js_Prototype</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license>Mixed</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Prototype and Scriptaculous Javascript Libraries for Magento</summary>
+    <description>Prototype and Scriptaculous Javascript Libraries for Magento</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:00</time>
+    <contents><target name="mageweb"><dir name="js"><dir name="prototype"><file name="debug.js" hash="d5990eabf728ade1f34496737455c8ff"/><file name="effects.js" hash="91e1b7d8c6043dff4eadbe054a90e3a7"/><file name="extended_debug.js" hash="cc706bc76bb1c5a2610fc296cd85e053"/><file name="prototype.js" hash="3b4b13dad33b475e11feb26fd3468ecc"/><file name="tooltip.js" hash="8509b04b1594b7e6382d7cfdf4ee1236"/><file name="tooltip_manager.js" hash="6b9759cbad296fda3c18d7669d6b5af0"/><file name="validation.js" hash="a841158a1143694d447cc78e1099b3c8"/><file name="window.js" hash="1ad7aab8deee02a99403dba716492e97"/><file name="window_effects.js" hash="3c0b47a0f3cd41753a3992d01c118c3d"/><file name="window_ext.js" hash="d5163111a6dc50d05cc3f98360855336"/><file name="window_readme.txt" hash="97306d2a8c4be2ec65f66d2ec233289c"/><dir name="windows"><file name="MIT-LICENSE" hash="a839f717f1675b571481268a4e4a4ee2"/><file name="README" hash="75b8b2e714cbcb48337540a451655967"/><dir name="themes"><dir name="alert"><file name="bottom.gif" hash="e859e3bc00c4f10360fa81a659aa673f"/><file name="bottom_left.gif" hash="53585b1a0351d599e76a85ccc26f7980"/><file name="bottom_right.gif" hash="8170abe3fec71fd17612869a2f036cd6"/><file name="left.gif" hash="4f235c4e6afb0d386d220638c49e4545"/><file name="overlay.png" hash="f4ddcee6f819975bc9c5643b570de6dc"/><file name="progress.gif" hash="86b1ac6d1c485d54efa3a53643e91ceb"/><file name="right.gif" hash="838ade41815529e7a63f99c93b3a01f7"/><file name="top.gif" hash="8702ca9b81c19f6220ce81c4ea215878"/><file name="top_left.gif" hash="a8c097bcb67bddf640c2bd9161b79476"/><file name="top_right.gif" hash="05ef4e1a417a5a2c81fc816406a4842a"/></dir><file name="alert.css" hash="27df86baae5a6fa2e3556bdf1b85ccc6"/><file name="alert_lite.css" hash="fbeaff8f185cd3b302f1a8db5efa0110"/><dir name="alphacube"><file name="bottom-left-c.gif" hash="434cdfc5298f33efb108264cf3370e1c"/><file name="bottom-middle.gif" hash="3f882dd32d57a29a785f448bbba5ed26"/><file name="bottom-right-c.gif" hash="4c37ad7b94fc901a1cfaf54a1742d5fd"/><file name="button-close-focus.gif" hash="99c44a6df2733b58083af7a4d9522116"/><file name="button-max-focus.gif" hash="408cd33fa89269b8395bf10afe69d456"/><file name="button-min-focus.gif" hash="ae06210658bad8bcc88dea377c4dc908"/><file name="frame-left.gif" hash="1bb1207b43425d214d4dc0da108f5449"/><file name="frame-right.gif" hash="8b9c36079881aa15c27a137666c56a38"/><file name="left-top.gif" hash="1ea936a090b4dfe8160fcb3a90ddb145"/><file name="right-top.gif" hash="e1b641feab640cb4207fa52160715e32"/><file name="top-middle.gif" hash="7f94c1018d023832c7c9e1fa468a9555"/></dir><file name="alphacube.css" hash="27c968911eaef53df158c55083ef0c84"/><file name="behavior.htc" hash="5588dff36ad5595f8353730e853044e5"/><dir name="darkX"><file name="button-close-focused.png" hash="5090b529a86a79679e0a26ccb0e1b0c6"/><file name="button-maximize-focused.png" hash="0f84bfcc9626d2cb1826291268b29f20"/><file name="button-minimize-focused.png" hash="630cd8cdd7124d412c6253e5c7cfc32a"/><file name="frame-bottom-left-focused.png" hash="8a34a3be2f349315dfd287ec15148332"/><file name="frame-bottom-mid-focused.png" hash="f1dbacdb64a19e00a485d426126f26db"/><file name="frame-bottom-right-focused.png" hash="17acb7874856dc68c3c017238d42054a"/><file name="frame-left-focused.png" hash="f30ab13888b2e48d0637991164a8f748"/><file name="frame-right-focused.png" hash="1115115c62507971b2f5eed3c2c5c2d0"/><file name="titlebar-left-focused.png" hash="491130dedbdbb3b2682f37424347b14c"/><file name="titlebar-mid-focused.png" hash="ae46975fc8a5e5a9f73f810d0c88809a"/><file name="titlebar-right-focused.png" hash="9560eb10dee94985f3ebe935833e2ae4"/></dir><file name="darkX.css" hash="16a964cfe57a2c979ad3d97831673b79"/><file name="debug.css" hash="63ee9aa7b7d80e0bb5e311407746ccd3"/><dir name="default"><file name="bottom_left.gif" hash="fb99ffa815a8648f95f42698fe5dfaa1"/><file name="bottom_mid.gif" hash="49b9ca7025562ea7f070a9111282364b"/><file name="bottom_right.gif" hash="e46768f632765cd86c5fe5d0166dcf2c"/><file name="bottom_right_resize.gif" hash="1b35a4ec3b734dfe37e31ba87bcc7d99"/><file name="center_left.gif" hash="bd567580b4ee16a7a2734057cfbbe219"/><file name="center_right.gif" hash="eef184d5d89d1710313581a2ccf408e8"/><file name="clear.gif" hash="7af1206eeb0e7834a75e69d70676060d"/><file name="close.gif" hash="8a08f243c37a8e25a88d4ac135b2f07d"/><file name="inspect.gif" hash="aa2a0961067aad5c54b8634919af863b"/><file name="maximize.gif" hash="e73cd71c4979ebeadeb9e27d40a9e8fb"/><file name="minimize.gif" hash="2d2f4b1bd0506f342425f80ab76c49a3"/><file name="overlay.png" hash="536d40e87cda0c7ae7b11f1721aa52d0"/><file name="resize.gif" hash="320f534b5d444b39701e0b679529e779"/><file name="sizer.gif" hash="1b35a4ec3b734dfe37e31ba87bcc7d99"/><file name="top_left.gif" hash="9c5e5920bfc189a45cc618099af93aa8"/><file name="top_mid.gif" hash="a12ff2b944025ad2d127d033dae5e9e1"/><file name="top_right.gif" hash="0cf1ec5b93f8ac8fcce0e2f72cf7f45e"/></dir><file name="default.css" hash="16014098f441d12d06c088135e2fde28"/><dir name="iefix"><file name="blank.gif" hash="56398e76be6355ad5999b262208a17c9"/><file name="iepngfix.css" hash="da3154c9a817850376f73a7976bfcb13"/><file name="iepngfix.htc" hash="b50c4e352a64254c5ceb6c63bcd0b176"/></dir><dir name="lighting"><file name="background_buttons.gif" hash="e66e67aaaf08a7b24f3cd1ba22584b42"/><file name="bottom-left-blue.png" hash="7c9e91d421945141315fc105d464a99f"/><file name="bottom-left-darkblue.png" hash="e88c2380acf403ee28597c6045988cc6"/><file name="bottom-left-green.png" hash="ee25ce8a12229b009fbfd91f7ba51e26"/><file name="bottom-left-grey.png" hash="5fdb3eae397ac7279aa5a7fdaad3dcc2"/><file name="bottom-middle-blue.png" hash="e93cc9d31d88f45c047a98a66be04354"/><file name="bottom-middle-darkblue.png" hash="763c88c424e0900e675042d3f0958bd4"/><file name="bottom-middle-green.png" hash="77e0a22afd2c55a83b5c7fa98a12ef25"/><file name="bottom-middle-grey.png" hash="3a2ebdeff74e2ff63c4471575568dd01"/><file name="bottom-right-blue.png" hash="0bc11a61047e8716451a283ebff897e5"/><file name="bottom-right-darkblue.png" hash="88e33ea702a304ae237edd57bc8447d6"/><file name="bottom-right-green.png" hash="7bce162df013eba43a659ae6e780ae4b"/><file name="bottom-right-grey.png" hash="86eb476492d911aac5688c9747fe7a1d"/><file name="button-close-blue.png" hash="42ae1a35caf8a9a275d6e748c27769fb"/><file name="button-close-darkblue.png" hash="50dbcd898dc519c1e6ac0d3a478978cd"/><file name="button-close-green.png" hash="b4273572fa91cba909a0a3e15b994d19"/><file name="button-close-grey.png" hash="124964b634ba67f2bb6dd08cf8cafd5a"/><file name="button-maximize-blue.png" hash="85b79237d85b09c205e09166dd8f4af0"/><file name="button-maximize-darkblue.png" hash="108d10619214e3365820aa4ab008aed5"/><file name="button-maximize-green.png" hash="90f5527705e4fd81997564e81c6ac2a3"/><file name="button-maximize-grey.png" hash="c46a8c014bd14be167f4c6a2f2dd52ed"/><file name="button-minimize-blue.png" hash="1fd738b99877a4dfa5656491cc3d8e6b"/><file name="button-minimize-darkblue.png" hash="b6d9da1cdf51ab54682fa75a6df2c40d"/><file name="button-minimize-green.png" hash="9e7d26298a0a49ffee3fbab6ea838e01"/><file name="button-minimize-grey.png" hash="0432701c2425cb3a5143d8a04bda0d87"/><file name="left-blue.png" hash="0a6acf0a863c04845a93b681769527cd"/><file name="left-darkblue.png" hash="44cdce8a75de4425d7eb7763092cc38d"/><file name="left-green.png" hash="d83116c49d62dc46bff0b7b4200b4ecf"/><file name="left-grey.png" hash="f3486d3293ae98b5edb8889c4b4082ef"/><file name="pngbehavior.htc" hash="b94c44e30423fd18a8b82bda5a139db3"/><file name="right-blue.png" hash="2c9b6b80d4a6b190b8e38a1c101e828c"/><file name="right-darkblue.png" hash="9b3267c5d36bb3f4588167cc3e78e569"/><file name="right-green.png" hash="4436968c2adbe6ed7c475c225631bc7c"/><file name="right-grey.png" hash="36b3de47bcbbd6b53e2f6e06843ee6e8"/><file name="spinner.gif" hash="c7b3cbb3ec8249a7121b722cdd76b870"/><file name="top-left-blue.png" hash="a5cb9eaa82f67df223d6784a52b26f1f"/><file name="top-left-darkblue.png" hash="e4a3af23d2cae7909331eb1995963c82"/><file name="top-left-green.png" hash="eb4cb604177c342998023d3dcd3aa5b0"/><file name="top-left-grey.png" hash="9f6f39abc4ae9539a0f54567a4a5d4f8"/><file name="top-middle-blue.png" hash="6d01df8637385bbe592b8df369294c8d"/><file name="top-middle-darkblue.png" hash="2c91ea6462e72a29cd07300d4102b88a"/><file name="top-middle-green.png" hash="e0f56311091bfb370fc6783fc7e71068"/><file name="top-middle-grey.png" hash="8c02881b730d602589fe9ed4bcaeb689"/><file name="top-right-blue.png" hash="4afefb06dc63c864211724a6348f25ad"/><file name="top-right-darkblue.png" hash="d8a9031987f648f170af67023179618d"/><file name="top-right-green.png" hash="b38813f9200440051273bdd622f5e545"/><file name="top-right-grey.png" hash="d7f7332ddf8686fb9810e4170767bf52"/></dir><file name="lighting.css" hash="d13de730c8ee7ef04167d361bdf8eebd"/><file name="mac_os_x.css" hash="65204ef34c1eeff0be29c53b0614076a"/><file name="mac_os_x_dialog.css" hash="0b7cd9d6a9e8f940f50bc4a080f54b1b"/><dir name="nuncio"><file name="bottom_left.png" hash="d9be5c7b432a342c6da5ef9b10148267"/><file name="bottom_mid.png" hash="facee2e7ee7c572a8f412750b0ce5387"/><file name="bottom_right.png" hash="6f3c124a066a11ff225897112de8e9d7"/><file name="center_left.png" hash="a11bee83f99addccc0d5eff3d2e82b8f"/><file name="center_right.png" hash="bf6b023ad1751d5f60f9820eea72ac28"/><file name="close.png" hash="46744062a7b54416c8767f8e0ccf1c41"/><file name="minimize.png" hash="bc911a3e90fc0640e0899856759a5e01"/><file name="overlay.png" hash="5ccd88855e923eb8a1bd9da1dec9d7fe"/><file name="top_left.png" hash="d3105aacc2c69954df11af953875a12e"/><file name="top_mid.png" hash="cb679a8c77e9b7485b5f0eca547eb103"/><file name="top_right.png" hash="e65d6fc6bf53891c487e414db16f1038"/></dir><file name="nuncio.css" hash="e30e31b94d96b0b27c80ad6d943d7010"/><dir name="spread"><file name="bottom-left-c.gif" hash="84641d08576f68a11f717103365dfb83"/><file name="bottom-middle.gif" hash="20ab265c67355c5b72cdcdc8739af555"/><file name="bottom-right-c.gif" hash="cb27b72623e997badc599e76024a6e44"/><file name="button-close-focus.gif" hash="99c44a6df2733b58083af7a4d9522116"/><file name="button-max-focus.gif" hash="408cd33fa89269b8395bf10afe69d456"/><file name="button-min-focus.gif" hash="ae06210658bad8bcc88dea377c4dc908"/><file name="frame-left.gif" hash="63dc99b0c4ba0518688f7eca1f1628ca"/><file name="frame-right.gif" hash="a03585eec830f37898c7041d557dafc5"/><file name="left-top.gif" hash="7c78b8b59976d19191acf940cbfc04fb"/><file name="right-top.gif" hash="597530287fe1dc491278f855749f7e01"/><file name="top-middle.gif" hash="fa6fd6b90945c47f8d1718d9139d0a75"/><file name=".gif" hash="9dd39829e7cfdd06f3317a931bdc177e"/></dir><file name="spread.css" hash="a804413d7f1f9550c134477f6f9219ee"/></dir></dir></dir><dir name="scriptaculous"><file name="builder.js" hash="1174f6fc34ca5d54ba10b0c719386e7c"/><file name="controls.js" hash="8c414e1787c0ac9f10b16b252361c8b2"/><file name="dragdrop.js" hash="046759400db7a6096376e50110104edd"/><file name="effects.js" hash="d795089f95a22306cca9b337c439c65a"/><file name="scriptaculous.js" hash="d59eba4e0b14b672208b0862ae1c2196"/><file name="slider.js" hash="6043f96a71d2685fecd02e2ab99e84d9"/><file name="sound.js" hash="0f0fab23fa2cb1bc7717fd2bdf45402e"/><file name="unittest.js" hash="99969698b22272f77bdf4c64586862b3"/></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_Js_TinyMCE-3.5.11.15.xml b/var/package/Lib_Js_TinyMCE-3.5.11.15.xml
deleted file mode 100644
index 1296134..0000000
--- a/var/package/Lib_Js_TinyMCE-3.5.11.15.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Js_TinyMCE</name>
-    <version>3.5.11.15</version>
-    <stability>stable</stability>
-    <license>Mixed</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>TinyMCE Javascript Libraries for Magento</summary>
-    <description>TinyMCE Javascript Libraries for Magento</description>
-    <notes>3.5.11.15</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:14</time>
-    <contents><target name="mageweb"><dir name="js"><dir name="tiny_mce"><dir name="classes"><file name="AddOnManager.js" hash="394e98bc019eb5c08c657fe4f8a48546"/><file name="ControlManager.js" hash="26cedc474b183b1a9905cdb3d10254dc"/><file name="Editor.Events.js" hash="07af3e1a08aead0078eb0cd6b030b864"/><file name="Editor.js" hash="e921b224172fbe2bd134eaab1974f2e8"/><file name="EditorCommands.js" hash="18b0d752aafddca09cf59fa7cc4d45c2"/><file name="EditorManager.js" hash="68b7a4a6252ab8b326fa5c8ee52d8016"/><file name="EnterKey.js" hash="ecc48ccb75c80dca2bd6bd7023fc906e"/><file name="ForceBlocks.js" hash="186ad2042e7b9416d2c4f9ec5f519893"/><file name="Formatter.js" hash="413f6c83f256d864a01e05718fbe7ce6"/><file name="LegacyInput.js" hash="a14c5e4099e2e4cbc6339eb54d3ec8f9"/><file name="Popup.js" hash="b6775a0e19bd839625b4dfb6b92a9688"/><file name="UndoManager.js" hash="276955286b65fba55ee60833ca2d6671"/><file name="WindowManager.js" hash="794c3d88226e8b62eac09eeeef283c3b"/><dir name="adapter"><dir name="jquery"><file name="adapter.js" hash="a5eea8e2826d7b0929291aa7a927ec29"/><file name="jquery.tinymce.js" hash="f2f319f369a84757b8976c2d66872933"/></dir><dir name="prototype"><file name="adapter.js" hash="37d84615944f028635f68d05b889c5c2"/></dir></dir><dir name="dom"><file name="DOMUtils.js" hash="bb9a7c2b19ad2433c85984cb8511e085"/><file name="Element.js" hash="1208e71eb2bc8e578b5a9cb4ec3b1365"/><file name="EventUtils.js" hash="652351eaf41de2659cfc7e380b694c02"/><file name="Range.js" hash="05c8ac178fa799217f60ebb650b41e0f"/><file name="RangeUtils.js" hash="9948e6204548089899b1e325370355f1"/><file name="ScriptLoader.js" hash="742ce02734095db354ad54ab8399a0ee"/><file name="Selection.js" hash="3332b2293dfc2a93fdb6a67ce5329642"/><file name="Serializer.js" hash="8762f4920ed6d4a57203bfbb8bc8490c"/><file name="Sizzle.js" hash="7930b22f632c7b0240237df1393e5023"/><file name="TreeWalker.js" hash="55425ece6675a529525bad45c6acbd94"/><file name="TridentSelection.js" hash="1fd402d1bb8144fa8549031b5f061733"/></dir><dir name="firebug"><file name="FIREBUG.LICENSE" hash="3b402ea96cec202bac23ea7144653cfa"/><file name="firebug-lite.js" hash="1c9c10926be94a61564ad0541a50624f"/></dir><dir name="html"><file name="DomParser.js" hash="25a47241e40445f2870bc94ce6a10b3c"/><file name="Entities.js" hash="7292e9f893096fb66d3232920be3c3d9"/><file name="Node.js" hash="ea0a5b87b71760018a753eb41a4e0f48"/><file name="SaxParser.js" hash="6dbb27c6762a5f27a9e6e844391393f4"/><file name="Schema.js" hash="e4d6e60fbca99911660f272717b9c08b"/><file name="Serializer.js" hash="ab74a79798a6f20f4267e3f1da17f2da"/><file name="Styles.js" hash="72317437bb3c7f0a05302658ea19dfce"/><file name="Writer.js" hash="3a2e8b824b749c19c5f27f8c830f95a5"/></dir><file name="tinymce.js" hash="546ec1f2bbfbf1ee04b4a33dcc05bc52"/><dir name="ui"><file name="Button.js" hash="82e9cd9d322a714652b0bc8e40e7e503"/><file name="ColorSplitButton.js" hash="06760a696b922b56a482f5889407714e"/><file name="Container.js" hash="7929a5d6aef46380197061e49e4f9dfb"/><file name="Control.js" hash="460a997aaad3b1b24f684bfdbefd3d9c"/><file name="DropMenu.js" hash="3359b973c857ca38105eeb276119b99f"/><file name="KeyboardNavigation.js" hash="f446fdfbadd728e8b009dc4adfc0b0d2"/><file name="ListBox.js" hash="2cd7287ec70ac87cb3903ecf0a2ccfdc"/><file name="Menu.js" hash="02762fee614d37aaea7eaf14f07dece1"/><file name="MenuButton.js" hash="fb0251eb52a5b3779d76ed2c2f8ec77e"/><file name="MenuItem.js" hash="55d400a161aa44d9dd5334d6f58ed956"/><file name="NativeListBox.js" hash="964785fd8a23be00b6db650f96e9ebf7"/><file name="Separator.js" hash="d4c5d779114617360ea78a2c0d523c81"/><file name="SplitButton.js" hash="e78e53578280cce9d97f936a82eca6de"/><file name="Toolbar.js" hash="b742f894f63122c4ee635fa59958167d"/><file name="ToolbarGroup.js" hash="db7b059b984e114ea22b1dc558d3d1f2"/></dir><dir name="util"><file name="Cookie.js" hash="14bc612b28c3c75549138a1699d5c238"/><file name="Dispatcher.js" hash="bf9bd51bbabca1823634833b3b16097c"/><file name="JSON.js" hash="b9b5964dbcd4cff962264dd72d8e4df5"/><file name="JSONP.js" hash="0a39d9e1b8427ab8b6dbdd00177c8c48"/><file name="JSONRequest.js" hash="dd12f1ac5c78ec4ba7459fb825ff9e5e"/><file name="Quirks.js" hash="927b518cc3aa663a41921590d0d3b4ac"/><file name="URI.js" hash="7069a8a2dfa4b0315719778b8c744139"/><file name="VK.js" hash="78114029ce46d5a4a441b01c44f23b4f"/><file name="XHR.js" hash="b00450d636335e7be50d46d2c31cc5a0"/></dir><dir name="xml"><file name="Parser.js" hash="c6d6862014ef2ab23a5a16adaee1af6d"/></dir></dir><file name="jquery.tinymce.js" hash="751418d46d453e7c6b1a7fbd4e60fefa"/><dir name="langs"><file name="en.js" hash="eff36a9433bccea2f3243b1465fe6fe3"/></dir><file name="license.txt" hash="b238d032089de4c340f6e0119210ce3a"/><dir name="plugins"><dir name="advhr"><dir name="css"><file name="advhr.css" hash="15df80b2137bcc04d5455ffa3a51e0c5"/></dir><file name="editor_plugin.js" hash="d0a03059205455e5c19cf3a845a0ebde"/><file name="editor_plugin_src.js" hash="a7fda2e674f15a33baf53cea2e23ec66"/><dir name="js"><file name="rule.js" hash="ef46d7c850c8bcc869ea84ed7ac00c49"/></dir><dir name="langs"><file name="en_dlg.js" hash="af62ab3f1b7a27190f8e001c8aefdfa6"/></dir><file name="rule.htm" hash="492ebbdc24d46061e928d911873d5fc8"/></dir><dir name="advimage"><dir name="css"><file name="advimage.css" hash="1ccd374d5f1e89cc16e1649558a9bb33"/></dir><file name="editor_plugin.js" hash="8af1f904909820d132bc0cbeb6469130"/><file name="editor_plugin_src.js" hash="958a409150fba5532d27e862d52015e9"/><file name="image.htm" hash="0d204c8f7651c3080ab542fb36957881"/><dir name="img"><file name="sample.gif" hash="b9c7057c46716340e8967340ad11766e"/></dir><dir name="js"><file name="image.js" hash="d071360a06b4f8590b4b18a7eca039aa"/></dir><dir name="langs"><file name="en_dlg.js" hash="6f80f834e2209e6a95957403bb4842f0"/></dir></dir><dir name="advlink"><dir name="css"><file name="advlink.css" hash="aaf226732a7b4ae80ee680700f488a1e"/></dir><file name="editor_plugin.js" hash="5e440c6bcb7fd94e7fd597f8a183e16f"/><file name="editor_plugin_src.js" hash="4104cd66aea546becf5d8fca66cf7951"/><dir name="js"><file name="advlink.js" hash="80dd2f99418025b6f9fd757adfdb1a71"/></dir><dir name="langs"><file name="en_dlg.js" hash="8da3a95d6886837c0bca18670f57ae1c"/></dir><file name="link.htm" hash="206ef7aba261ac4bc14e7c6fdbdcc8c5"/></dir><dir name="advlist"><file name="editor_plugin.js" hash="5f1c8625c04a6b0f4567c1c8d5e28ff9"/><file name="editor_plugin_src.js" hash="d451908bf1e060ecd49356787f33fc7c"/></dir><dir name="autolink"><file name="editor_plugin.js" hash="5091233229ffe517f075b787c5f388a6"/><file name="editor_plugin_src.js" hash="f03a8ec9ad17bd53f897a525e3cc30f7"/></dir><dir name="autoresize"><file name="editor_plugin.js" hash="adf5cbe96119e3ed9ab4a86ba26405e7"/><file name="editor_plugin_src.js" hash="4d1cdbe307f73b4d36d1bf9b3bc2d0a9"/></dir><dir name="autosave"><file name="editor_plugin.js" hash="ae4c2aba85a22da66e3655f55d1c89fd"/><file name="editor_plugin_src.js" hash="6177147324865c00736c242b8ccb2de6"/><dir name="langs"><file name="en.js" hash="a33b0322c949a6d74bde7fa164396984"/></dir></dir><dir name="bbcode"><file name="editor_plugin.js" hash="31748a6cc57a13da54a0243c3301f3e6"/><file name="editor_plugin_src.js" hash="842450703b915245adb53df7d478ea5a"/></dir><dir name="contextmenu"><file name="editor_plugin.js" hash="5a0fc9ce2ba71bf2b6f54eb94838619f"/><file name="editor_plugin_src.js" hash="b923e4315f2d98703bbe9699465f84f0"/></dir><dir name="directionality"><file name="editor_plugin.js" hash="e2d925fe1e778dbcade06d55164fc276"/><file name="editor_plugin_src.js" hash="14b7a5b69fdc4f235b654436e4fe3081"/></dir><dir name="emotions"><file name="editor_plugin.js" hash="98cba02e33fc108024f3e993be0b0b62"/><file name="editor_plugin_src.js" hash="4cbc6e9b083a810ab0d3768af8f8f864"/><file name="emotions.htm" hash="9378bfd04b56a828318f7798f5696f67"/><dir name="img"><file name="smiley-cool.gif" hash="e26e97a318f82ec144b0818e5a8f8edb"/><file name="smiley-cry.gif" hash="e72bf995ceca9230273ed9909c5db9c8"/><file name="smiley-embarassed.gif" hash="d59171236e6b0b96091eeda1f7b57ce3"/><file name="smiley-foot-in-mouth.gif" hash="c12d9db6a14ad0b52f66f1e2cf2a38e7"/><file name="smiley-frown.gif" hash="59930208822fe755f651a67ef4b70530"/><file name="smiley-innocent.gif" hash="ec0477c8a206ff250782e40f9bae4b4c"/><file name="smiley-kiss.gif" hash="4ae8945f3960751b5d294f18242e144d"/><file name="smiley-laughing.gif" hash="c37f405db4e13cbebf24e745534687bf"/><file name="smiley-money-mouth.gif" hash="11c14bd1496afd0e21df115d25b68e96"/><file name="smiley-sealed.gif" hash="bb828cb46b377d1589927a02f8fd1762"/><file name="smiley-smile.gif" hash="2968a664098d9580079c66d628dad1a8"/><file name="smiley-surprised.gif" hash="2e136ebd637bf3e6c9fc6bdc20cbe73e"/><file name="smiley-tongue-out.gif" hash="5ec3bb4781c8e43a51d3a1a948b98fc0"/><file name="smiley-undecided.gif" hash="3c0c011d16b1a2331385ed97e160a42a"/><file name="smiley-wink.gif" hash="897275ac7d07032b4d93fb83a0d2a41b"/><file name="smiley-yell.gif" hash="19bb8ebfe3c2f5ef3ffb9aa4a027900d"/></dir><dir name="js"><file name="emotions.js" hash="85efe828d29037950412fec963b6f950"/></dir><dir name="langs"><file name="en_dlg.js" hash="62c052504a77e4f4cec6d90ece0d76c4"/></dir></dir><dir name="example"><file name="dialog.htm" hash="e6170a190a4d44ea5e6af089d2728d7e"/><file name="editor_plugin.js" hash="e0a175dca3d5e437657ccd5d548ff409"/><file name="editor_plugin_src.js" hash="b98bec73743c249187e0fa8f8311e3a3"/><dir name="img"><file name="example.gif" hash="6036655a01df362267183a8b23fead10"/></dir><dir name="js"><file name="dialog.js" hash="83245e76c97e24d466cf5df2308f9bf4"/></dir><dir name="langs"><file name="en.js" hash="78c88182b5fb900fc956845f75885b3a"/><file name="en_dlg.js" hash="7aec7a3b9d4642fbf7bb3ef1ed8a7570"/></dir></dir><dir name="example_dependency"><file name="editor_plugin.js" hash="405d190ae03384a9acb00533568b2cfd"/><file name="editor_plugin_src.js" hash="473878118b45efe326d335f992ff9943"/></dir><dir name="fullpage"><dir name="css"><file name="fullpage.css" hash="2ac64c98369f8b4f7cbf6fa70e25bfca"/></dir><file name="editor_plugin.js" hash="5dfbe0a82c87eb0fb65b11dcd39406d0"/><file name="editor_plugin_src.js" hash="636afe66f3de447eb92611bdcfb7f2b3"/><file name="fullpage.htm" hash="8c58825b698712e7297f95da51a9c03c"/><dir name="js"><file name="fullpage.js" hash="a7913b6b1a1ae634a509c3db9faf381a"/></dir><dir name="langs"><file name="en_dlg.js" hash="963f370d56f19c2f94de09b10a306187"/></dir></dir><dir name="fullscreen"><file name="editor_plugin.js" hash="15134339e36472281b8a1626233f747d"/><file name="editor_plugin_src.js" hash="a28a8a8bf569d6ee5e6dccbc988490ce"/><file name="fullscreen.htm" hash="b6d76297c2f679b9110ec7119d091900"/></dir><dir name="iespell"><file name="editor_plugin.js" hash="22526393cacb6447a0e3bfff2fb47773"/><file name="editor_plugin_src.js" hash="311e13bcc85c06da43decc37dc1b4f83"/></dir><dir name="inlinepopups"><file name="editor_plugin.js" hash="db32751b98f40ca6eee24efc848d6cbb"/><file name="editor_plugin_src.js" hash="d1c1de414c13fef3593ffd14503d37c0"/><dir name="skins"><dir name="clearlooks2"><dir name="img"><file name="alert.gif" hash="568d4cf84413656fb72fe39d1dd60f8d"/><file name="button.gif" hash="19f864cb81177840dcd534df4d537ea3"/><file name="buttons.gif" hash="1743ac9f7f2267a6edafefc536a2265d"/><file name="confirm.gif" hash="1bc337a20c319e531cda6ced531827d0"/><file name="corners.gif" hash="55298b5baaecb7e06a251db9f0a4b14c"/><file name="horizontal.gif" hash="0365e75dd4a9ad61dc98dcb641207c21"/><file name="vertical.gif" hash="0261136fac58ce77bdbd96aa0194947e"/></dir><file name="window.css" hash="f715affab9da63bc26f8c6362a989395"/></dir></dir><file name="template.htm" hash="3d7e3ae05511a9f64c5da924b9e971ba"/></dir><dir name="insertdatetime"><file name="editor_plugin.js" hash="d99072498466cdb2f53ed7c02da85982"/><file name="editor_plugin_src.js" hash="32a2afa1cd3ff8c9b966f8724ba3e0b3"/></dir><dir name="layer"><file name="editor_plugin.js" hash="4e5fc1b467c19d79dcf6246ba3a63cd8"/><file name="editor_plugin_src.js" hash="3754eb57b08539e459509caa74acecc6"/></dir><dir name="legacyoutput"><file name="editor_plugin.js" hash="b732a86187723cd9cc32853d67730061"/><file name="editor_plugin_src.js" hash="8a0a69cbe8d447d722aaef7d4ed7dcc1"/></dir><dir name="lists"><file name="editor_plugin.js" hash="46ba57884d8fe05d92cd9d98d3bb00af"/><file name="editor_plugin_src.js" hash="04e1f245c19d6dc9454dae57faec9b6f"/></dir><dir name="media"><dir name="css"><file name="media.css" hash="f211293a697a2c83da00effd67f535a2"/></dir><file name="editor_plugin.js" hash="5ad7db86c5008f98ec135595db4a4973"/><file name="editor_plugin_src.js" hash="1d03ec1ec36745041db26132b07b0491"/><dir name="img"><file name="flash.gif" hash="6c69b02015d09280332ff8b07e4ea2f3"/><file name="quicktime.gif" hash="9a6a9fdead205b125c07ea37e71ed4f1"/><file name="realmedia.gif" hash="b9734ee16d790e67bea01046feba28b7"/><file name="shockwave.gif" hash="baa643b587565755157618032dc93e3c"/><file name="trans.gif" hash="12bf9e19374920de3146a64775f46a5e"/><file name="windowsmedia.gif" hash="c327cd167b3a7bc263d908b0d0154ead"/></dir><dir name="js"><file name="embed.js" hash="39ebc57f44e1cc683724e1c1ff761894"/><file name="media.js" hash="4f35c0283a30f3556e023e76c34368b2"/></dir><dir name="langs"><file name="en_dlg.js" hash="9523fc123c577642000fd409bd862c3f"/></dir><file name="media.htm" hash="be58b1edf9a4a4dbf3a1993e3d897e1a"/><file name="moxieplayer.swf" hash="9217cea72c76c361fa5033526712284e"/><file name=".htaccess" hash="9f2e3ee0d6e50d80819eb8c0300a0913"/></dir><dir name="nonbreaking"><file name="editor_plugin.js" hash="232f23a586f10bd8ddabf38d767113d4"/><file name="editor_plugin_src.js" hash="fefbda5243d10652038ccf40801b8893"/></dir><dir name="noneditable"><file name="editor_plugin.js" hash="b332a5f8767506024a0f50aa4204b1fe"/><file name="editor_plugin_src.js" hash="273d35e2221889e75f33fd545f77d44e"/></dir><dir name="pagebreak"><dir name="css"><file name="content.css" hash="d9664762a610f2b5f7b10b5781f3299a"/></dir><file name="editor_plugin.js" hash="8be3376740c886fa2842d2f4eb282bbc"/><file name="editor_plugin_src.js" hash="c2d432a5914f0095a859ff443700a5e9"/><dir name="img"><file name="pagebreak.gif" hash="48872075f721bf57a517e3275d61c0ba"/><file name="trans.gif" hash="12bf9e19374920de3146a64775f46a5e"/></dir></dir><dir name="paste"><file name="editor_plugin.js" hash="1b68c59eb95a28ccc2aff2cfb85a8829"/><file name="editor_plugin_src.js" hash="40eef37ac300b571da5383bc0bddf73f"/><dir name="js"><file name="pastetext.js" hash="d6e4b39f19b89118b34b0d21491494b7"/><file name="pasteword.js" hash="112504d12e971e4d32f17a59c5616c36"/></dir><dir name="langs"><file name="en_dlg.js" hash="6ea2189562f65287be8e5e3185c405b7"/></dir><file name="pastetext.htm" hash="8f217769e59a5dd67843c7c17c842f41"/><file name="pasteword.htm" hash="8b9459b98f9a70ed684832326bf1cdf6"/></dir><dir name="preview"><file name="editor_plugin.js" hash="925216b63aabd5adc67d642ca2d04b4a"/><file name="editor_plugin_src.js" hash="6f9c3234dfdc0f62b713e8771f4ca5dc"/><file name="example.html" hash="9b9290408ae10fa29ec29db60682be91"/><dir name="jscripts"><file name="embed.js" hash="39ebc57f44e1cc683724e1c1ff761894"/></dir><file name="preview.html" hash="bb02414f4cdd28c4a66e7fb5ed820f2d"/></dir><dir name="print"><file name="editor_plugin.js" hash="53eb1da78f727ee8337671fb86354c17"/><file name="editor_plugin_src.js" hash="f11547aa114df69b35df319003105e11"/></dir><dir name="save"><file name="editor_plugin.js" hash="307a0743c68c4e4aff005f13027f296f"/><file name="editor_plugin_src.js" hash="4dcbdaab64f06550a2db2b650f99d411"/></dir><dir name="searchreplace"><dir name="css"><file name="searchreplace.css" hash="ad0addca1bd5727432f39ec9b7fdac1e"/></dir><file name="editor_plugin.js" hash="ed4f1fa6e12844b533c86258647a298f"/><file name="editor_plugin_src.js" hash="7292198991a0fda1b9c7b28c921c6521"/><dir name="js"><file name="searchreplace.js" hash="0eeedb83f5bf1240348e1c6e77be2c47"/></dir><dir name="langs"><file name="en_dlg.js" hash="fbd47078679d87b541479000589ef4c9"/></dir><file name="searchreplace.htm" hash="4d01ee3be4045a600778fca1e11cee61"/></dir><dir name="spellchecker"><dir name="css"><file name="content.css" hash="ac0c7dbbbe44022d29d63b7b05123e3d"/></dir><file name="editor_plugin.js" hash="629a571ee7686ace6ee7ad1181be916b"/><file name="editor_plugin_src.js" hash="bae03899e91abca8b4b77c8ea886b561"/><dir name="img"><file name="wline.gif" hash="c136c9f8e00718a98947a21d8adbcc56"/></dir></dir><dir name="style"><dir name="css"><file name="props.css" hash="c2d2adc78609ea65760dae2dab058395"/></dir><file name="editor_plugin.js" hash="f9bcd692d63dfef1fe5c586d27ecd91b"/><file name="editor_plugin_src.js" hash="2ec50d9d37ce1e732380a746fabceefc"/><dir name="js"><file name="props.js" hash="f3614bf040f29057162e423822b89e11"/></dir><dir name="langs"><file name="en_dlg.js" hash="62a82106cfd480a6da4442b4763a2f2d"/></dir><file name="props.htm" hash="32f3f16194be9170386419c9dcc5b99a"/><file name="readme.txt" hash="ced5c8e014184a33da5507dbcd96b91f"/></dir><dir name="tabfocus"><file name="editor_plugin.js" hash="d3e5ef7a1a203516af0d8fdf94952fd2"/><file name="editor_plugin_src.js" hash="12889ccf8caf1d466859ba949f52fbca"/></dir><dir name="table"><file name="cell.htm" hash="f427b778a4924154a5e2317ddfd0f567"/><dir name="css"><file name="cell.css" hash="56394e6cdb267d97e23a07a98820e84b"/><file name="row.css" hash="81a75523c1e83be93e524c8bb901a089"/><file name="table.css" hash="f5e651f5a32284f1c4e0faa1d7cd5ff4"/></dir><file name="editor_plugin.js" hash="c12f0891c5bf0a7a6dd43ef0bd44dd82"/><file name="editor_plugin_src.js" hash="8228b4ab83fe4dfe2e377850dc2cf97e"/><dir name="js"><file name="cell.js" hash="8b0d4a7fe48c2f92c8b9b79dbb12cca1"/><file name="merge_cells.js" hash="3650484c93d6c9a197d03a5c3c3d2e80"/><file name="row.js" hash="d1cf0ab3d974f0b528e467d4b5c5c89f"/><file name="table.js" hash="f894721e5f5a6c2efa1a232c4b4a85b6"/></dir><dir name="langs"><file name="en_dlg.js" hash="ee3484503050cdae74d2cafa7d2e9999"/></dir><file name="merge_cells.htm" hash="f939ddd56826c0ec3c9e6e9a478346bf"/><file name="row.htm" hash="7ad9e68624759b28be626ac4b53c8907"/><file name="table.htm" hash="88fb36057ec1cb1681fed2dcb0b44693"/></dir><dir name="template"><file name="blank.htm" hash="9553e76581d74579d23bea5c7ea8a807"/><dir name="css"><file name="template.css" hash="5b2c159120cbef004c9b0804c292820b"/></dir><file name="editor_plugin.js" hash="70cb20c4e287110ae8aeed999893c532"/><file name="editor_plugin_src.js" hash="336af7b2ec3e0f7c83a7d05bf16cd018"/><dir name="js"><file name="template.js" hash="75abfd82a90ae648fb18c5517dfd925b"/></dir><dir name="langs"><file name="en_dlg.js" hash="1ce03c0fcf0f1aa74c132459abe30f39"/></dir><file name="template.htm" hash="b55e174e239e5c4b3a52d6ad60eb991d"/></dir><dir name="visualblocks"><dir name="css"><file name="visualblocks.css" hash="1fe4f62cc93864784b9b2d6b11b050b7"/></dir><file name="editor_plugin.js" hash="592e70a44aeb7c974eb9c5ff05c107a7"/><file name="editor_plugin_src.js" hash="6d1a4ea64bfedf8797260792e33f4c17"/></dir><dir name="visualchars"><file name="editor_plugin.js" hash="e494d07c71e24040a407b20017ca63e3"/><file name="editor_plugin_src.js" hash="f285c8f2ffac745325e86687b8cf0fb5"/></dir><dir name="wordcount"><file name="editor_plugin.js" hash="fb71ed139697b519f0054179d28ec782"/><file name="editor_plugin_src.js" hash="a034fddb393e4b6e7d25fc3761bea529"/></dir><dir name="xhtmlxtras"><file name="abbr.htm" hash="e514d143e00e4b121cab8fe8dfae48d2"/><file name="acronym.htm" hash="ec632b3d4b6afb189c055afa234e6291"/><file name="attributes.htm" hash="cf540b962f752babf53faa7a47bde108"/><file name="cite.htm" hash="1468438313b9cb1de0e53e50d75c92fa"/><dir name="css"><file name="attributes.css" hash="abc1b941c6eef8e1ea76915984e8a03e"/><file name="popup.css" hash="ed53e7b6ab799f6a249c3d403047dcfc"/></dir><file name="del.htm" hash="81bbcce0d19d78698fad760ee90b6948"/><file name="editor_plugin.js" hash="c9f91af5f1b8a1ba7a1e4ccf53fc7790"/><file name="editor_plugin_src.js" hash="b8b8236893ef2347a46cb131fc1a8c69"/><file name="ins.htm" hash="47e7db25678cee383fe6532ebb9e3fcb"/><dir name="js"><file name="abbr.js" hash="d91ae7d986336de4ecb977d19dcfab19"/><file name="acronym.js" hash="0a19f79bdc9222d3273712fe37a8051c"/><file name="attributes.js" hash="e75f23fae888b9febb57a29f2eb5a86c"/><file name="cite.js" hash="ba39487ce6a625538b838c21502bbaa7"/><file name="del.js" hash="be96fef888076d27384dd3546e8b6b6f"/><file name="element_common.js" hash="b817f5e2d514147d72765c92c1f60f3d"/><file name="ins.js" hash="6148dd4151e58dcda9112933908b97b1"/></dir><dir name="langs"><file name="en_dlg.js" hash="45db1586e7debc385f63092a13a9f43c"/></dir></dir></dir><dir name="themes"><dir name="advanced"><file name="about.htm" hash="ff135857e9b930d4d4658f92077e051c"/><file name="anchor.htm" hash="79d46a2b007b5cb08a3920e922a5da7f"/><file name="charmap.htm" hash="be712e4cf08670a1212e9eed2f452693"/><file name="color_picker.htm" hash="8db4d59dec910525149039f006a2bb9e"/><file name="editor_template.js" hash="a2b3085f0ab3c323dd28187b739139ec"/><file name="editor_template_src.js" hash="1fa308a86046cee68c5227ca58013bba"/><file name="image.htm" hash="2cb986c0cad7efd0592a4d8c35e41f0a"/><dir name="img"><file name="colorpicker.jpg" hash="9bcc36292defe94bca5a013a1736c7d7"/><file name="flash.gif" hash="33adee48d32bbbba3e6412cc54ecf335"/><file name="icons.gif" hash="75ad72872bc6280c32609e12fc3b610a"/><file name="iframe.gif" hash="a1af02e9ba370f64297087b46e80591e"/><file name="pagebreak.gif" hash="48872075f721bf57a517e3275d61c0ba"/><file name="quicktime.gif" hash="61da1ff8729ca5016344c4e8eb173369"/><file name="realmedia.gif" hash="b9734ee16d790e67bea01046feba28b7"/><file name="shockwave.gif" hash="1ce7d48784981aac9d4375cf2effdc4d"/><file name="trans.gif" hash="12bf9e19374920de3146a64775f46a5e"/><file name="video.gif" hash="f85c56813ea016a75e496bba50d66ab4"/><file name="windowsmedia.gif" hash="c327cd167b3a7bc263d908b0d0154ead"/></dir><dir name="js"><file name="about.js" hash="606c16492a17240ebded6e9fce75a555"/><file name="anchor.js" hash="da6a28397899bec3570216b2d2106684"/><file name="charmap.js" hash="02f40a38033ef8a0abeac870e5f4eda8"/><file name="color_picker.js" hash="cfc0f59a846661e748cae1c0adca77dc"/><file name="image.js" hash="75df8142a91f0245367e4121a2da7065"/><file name="link.js" hash="71949506dce04e923bbbc2ecc8ab5f1f"/><file name="source_editor.js" hash="4cbdfdf929a0949070f4d7ab4818b0f2"/></dir><dir name="langs"><file name="en.js" hash="58c814313230f1dec07fe45ad5f304e5"/><file name="en_dlg.js" hash="3a2c8aed5b7579ae45be6bd2b34ef06b"/></dir><file name="link.htm" hash="65c56f5a6d714fdbdc47c68ec9422976"/><file name="shortcuts.htm" hash="2bae05c8667b54b9ec019b529e743327"/><dir name="skins"><dir name="default"><file name="content.css" hash="1779499935490440d7a2423157756bc5"/><file name="dialog.css" hash="ab94126c11ff9c79445cc4ad537b2823"/><dir name="img"><file name="buttons.png" hash="33b2f2e08cc3ade5254fec64c4183558"/><file name="items.gif" hash="d201498a710fc8aac6e117820b9814b7"/><file name="menu_arrow.gif" hash="e21752451a9d80e276fef7b602bdbdba"/><file name="menu_check.gif" hash="c7d003885737f94768eecae49dcbca63"/><file name="progress.gif" hash="50c5e3e79b276c92df6cc52caeb464f0"/><file name="tabs.gif" hash="6473bbcd0a011e9fcdd9f777ef437410"/></dir><file name="ui.css" hash="823d750bb9c2bde55084d322f44b17c1"/></dir><dir name="highcontrast"><file name="content.css" hash="8294a1222d0ab5fa7520879cc9073e85"/><file name="dialog.css" hash="f6e95a7450471eb7473f8dbc3e6b6581"/><file name="ui.css" hash="1bdbee2f94594ca00c65b4d6a930bbf6"/></dir><dir name="o2k7"><file name="content.css" hash="c696812903368f41cd65616574c81484"/><file name="dialog.css" hash="661f54aa4a283b67c0acd25f91f2f213"/><dir name="img"><file name="button_bg.png" hash="36fd9fbd748860f515df259443367163"/><file name="button_bg_black.png" hash="9645f90b37102a3618a52be18b74b02b"/><file name="button_bg_silver.png" hash="15fbf2b4a20dbaa86205af6764f4fee4"/></dir><file name="ui.css" hash="a108668128c143e61bc44990dff89fe6"/><file name="ui_black.css" hash="ba8d82d9bff6e2854b29b1f97ead05fe"/><file name="ui_silver.css" hash="b42c7d51247d02ddca437a1661e748e5"/></dir></dir><file name="source_editor.htm" hash="42f3a13b55ffcf7c2d3ab768012abfcc"/></dir><dir name="simple"><file name="editor_template.js" hash="3ac3fd3129ee9605052b8470f8d58538"/><file name="editor_template_src.js" hash="409e0cce50eb6c62463d6dd9c6120859"/><dir name="img"><file name="icons.gif" hash="273dad62be4d114c5d52210b50a5838f"/></dir><dir name="langs"><file name="en.js" hash="50dce0602a45ba9fac56f12f76a63ec3"/></dir><dir name="skins"><dir name="default"><file name="content.css" hash="0f70f3ca9624e252d1c41ea064fc65e7"/><file name="ui.css" hash="c46c68283c617bb61dada1cd2494dd9f"/></dir><dir name="o2k7"><file name="content.css" hash="eb7a087c67578b6e3b5e0987caa4ba64"/><dir name="img"><file name="button_bg.png" hash="405ca3d63b48667ef485553192507f59"/></dir><file name="ui.css" hash="f0ec0273462e01b81e1dfd292f64451e"/></dir></dir></dir></dir><file name="tiny_mce.js" hash="199630688fff7a8bb0a549cd80187cbd"/><file name="tiny_mce_dev.js" hash="3a3819b032736635cc608076a02b3dbe"/><file name="tiny_mce_jquery.js" hash="87ee7a1967b86d56f5cdb1ba985ef4ce"/><file name="tiny_mce_jquery_src.js" hash="212727559aacdd03ea9ae6f5c6ede65a"/><file name="tiny_mce_popup.js" hash="5a318277fedf491a0301e177a9ef10b3"/><file name="tiny_mce_prototype.js" hash="0c65808fab93d86cf8552976f691b9c8"/><file name="tiny_mce_prototype_src.js" hash="3629c32a57bcf63cb52f455f18709223"/><file name="tiny_mce_src.js" hash="98575c8e6816a36f73145c2d97b0846a"/><dir name="utils"><file name="editable_selects.js" hash="e760eb21f60892a1ef2298da7df313e5"/><file name="form_utils.js" hash="579b2803ffca7953c50f53dcbef5df7e"/><file name="mctabs.js" hash="51b9bfe349fe76204ac5b65254bbef6f"/><file name="validate.js" hash="bfbaf5dc8058ff772afe2d87f4e82fbf"/></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_Js_TinyMCE-3.5.11.16.xml b/var/package/Lib_Js_TinyMCE-3.5.11.16.xml
new file mode 100644
index 0000000..e8db77f
--- /dev/null
+++ b/var/package/Lib_Js_TinyMCE-3.5.11.16.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Js_TinyMCE</name>
+    <version>3.5.11.16</version>
+    <stability>stable</stability>
+    <license>Mixed</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>TinyMCE Javascript Libraries for Magento</summary>
+    <description>TinyMCE Javascript Libraries for Magento</description>
+    <notes>3.5.11.16</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:00</time>
+    <contents><target name="mageweb"><dir name="js"><dir name="tiny_mce"><dir name="classes"><file name="AddOnManager.js" hash="394e98bc019eb5c08c657fe4f8a48546"/><file name="ControlManager.js" hash="26cedc474b183b1a9905cdb3d10254dc"/><file name="Editor.Events.js" hash="07af3e1a08aead0078eb0cd6b030b864"/><file name="Editor.js" hash="e921b224172fbe2bd134eaab1974f2e8"/><file name="EditorCommands.js" hash="18b0d752aafddca09cf59fa7cc4d45c2"/><file name="EditorManager.js" hash="68b7a4a6252ab8b326fa5c8ee52d8016"/><file name="EnterKey.js" hash="ecc48ccb75c80dca2bd6bd7023fc906e"/><file name="ForceBlocks.js" hash="186ad2042e7b9416d2c4f9ec5f519893"/><file name="Formatter.js" hash="413f6c83f256d864a01e05718fbe7ce6"/><file name="LegacyInput.js" hash="a14c5e4099e2e4cbc6339eb54d3ec8f9"/><file name="Popup.js" hash="b6775a0e19bd839625b4dfb6b92a9688"/><file name="UndoManager.js" hash="276955286b65fba55ee60833ca2d6671"/><file name="WindowManager.js" hash="794c3d88226e8b62eac09eeeef283c3b"/><dir name="adapter"><dir name="jquery"><file name="adapter.js" hash="a5eea8e2826d7b0929291aa7a927ec29"/><file name="jquery.tinymce.js" hash="f2f319f369a84757b8976c2d66872933"/></dir><dir name="prototype"><file name="adapter.js" hash="37d84615944f028635f68d05b889c5c2"/></dir></dir><dir name="dom"><file name="DOMUtils.js" hash="bb9a7c2b19ad2433c85984cb8511e085"/><file name="Element.js" hash="1208e71eb2bc8e578b5a9cb4ec3b1365"/><file name="EventUtils.js" hash="652351eaf41de2659cfc7e380b694c02"/><file name="Range.js" hash="05c8ac178fa799217f60ebb650b41e0f"/><file name="RangeUtils.js" hash="9948e6204548089899b1e325370355f1"/><file name="ScriptLoader.js" hash="742ce02734095db354ad54ab8399a0ee"/><file name="Selection.js" hash="3332b2293dfc2a93fdb6a67ce5329642"/><file name="Serializer.js" hash="8762f4920ed6d4a57203bfbb8bc8490c"/><file name="Sizzle.js" hash="7930b22f632c7b0240237df1393e5023"/><file name="TreeWalker.js" hash="55425ece6675a529525bad45c6acbd94"/><file name="TridentSelection.js" hash="1fd402d1bb8144fa8549031b5f061733"/></dir><dir name="firebug"><file name="FIREBUG.LICENSE" hash="3b402ea96cec202bac23ea7144653cfa"/><file name="firebug-lite.js" hash="1c9c10926be94a61564ad0541a50624f"/></dir><dir name="html"><file name="DomParser.js" hash="25a47241e40445f2870bc94ce6a10b3c"/><file name="Entities.js" hash="7292e9f893096fb66d3232920be3c3d9"/><file name="Node.js" hash="ea0a5b87b71760018a753eb41a4e0f48"/><file name="SaxParser.js" hash="6dbb27c6762a5f27a9e6e844391393f4"/><file name="Schema.js" hash="e4d6e60fbca99911660f272717b9c08b"/><file name="Serializer.js" hash="ab74a79798a6f20f4267e3f1da17f2da"/><file name="Styles.js" hash="72317437bb3c7f0a05302658ea19dfce"/><file name="Writer.js" hash="3a2e8b824b749c19c5f27f8c830f95a5"/></dir><file name="tinymce.js" hash="546ec1f2bbfbf1ee04b4a33dcc05bc52"/><dir name="ui"><file name="Button.js" hash="82e9cd9d322a714652b0bc8e40e7e503"/><file name="ColorSplitButton.js" hash="06760a696b922b56a482f5889407714e"/><file name="Container.js" hash="7929a5d6aef46380197061e49e4f9dfb"/><file name="Control.js" hash="460a997aaad3b1b24f684bfdbefd3d9c"/><file name="DropMenu.js" hash="3359b973c857ca38105eeb276119b99f"/><file name="KeyboardNavigation.js" hash="f446fdfbadd728e8b009dc4adfc0b0d2"/><file name="ListBox.js" hash="2cd7287ec70ac87cb3903ecf0a2ccfdc"/><file name="Menu.js" hash="02762fee614d37aaea7eaf14f07dece1"/><file name="MenuButton.js" hash="fb0251eb52a5b3779d76ed2c2f8ec77e"/><file name="MenuItem.js" hash="55d400a161aa44d9dd5334d6f58ed956"/><file name="NativeListBox.js" hash="964785fd8a23be00b6db650f96e9ebf7"/><file name="Separator.js" hash="d4c5d779114617360ea78a2c0d523c81"/><file name="SplitButton.js" hash="e78e53578280cce9d97f936a82eca6de"/><file name="Toolbar.js" hash="b742f894f63122c4ee635fa59958167d"/><file name="ToolbarGroup.js" hash="db7b059b984e114ea22b1dc558d3d1f2"/></dir><dir name="util"><file name="Cookie.js" hash="14bc612b28c3c75549138a1699d5c238"/><file name="Dispatcher.js" hash="bf9bd51bbabca1823634833b3b16097c"/><file name="JSON.js" hash="b9b5964dbcd4cff962264dd72d8e4df5"/><file name="JSONP.js" hash="0a39d9e1b8427ab8b6dbdd00177c8c48"/><file name="JSONRequest.js" hash="dd12f1ac5c78ec4ba7459fb825ff9e5e"/><file name="Quirks.js" hash="927b518cc3aa663a41921590d0d3b4ac"/><file name="URI.js" hash="7069a8a2dfa4b0315719778b8c744139"/><file name="VK.js" hash="78114029ce46d5a4a441b01c44f23b4f"/><file name="XHR.js" hash="b00450d636335e7be50d46d2c31cc5a0"/></dir><dir name="xml"><file name="Parser.js" hash="c6d6862014ef2ab23a5a16adaee1af6d"/></dir></dir><file name="jquery.tinymce.js" hash="751418d46d453e7c6b1a7fbd4e60fefa"/><dir name="langs"><file name="en.js" hash="eff36a9433bccea2f3243b1465fe6fe3"/></dir><file name="license.txt" hash="b238d032089de4c340f6e0119210ce3a"/><dir name="plugins"><dir name="advhr"><dir name="css"><file name="advhr.css" hash="15df80b2137bcc04d5455ffa3a51e0c5"/></dir><file name="editor_plugin.js" hash="d0a03059205455e5c19cf3a845a0ebde"/><file name="editor_plugin_src.js" hash="a7fda2e674f15a33baf53cea2e23ec66"/><dir name="js"><file name="rule.js" hash="ef46d7c850c8bcc869ea84ed7ac00c49"/></dir><dir name="langs"><file name="en_dlg.js" hash="af62ab3f1b7a27190f8e001c8aefdfa6"/></dir><file name="rule.htm" hash="492ebbdc24d46061e928d911873d5fc8"/></dir><dir name="advimage"><dir name="css"><file name="advimage.css" hash="1ccd374d5f1e89cc16e1649558a9bb33"/></dir><file name="editor_plugin.js" hash="8af1f904909820d132bc0cbeb6469130"/><file name="editor_plugin_src.js" hash="958a409150fba5532d27e862d52015e9"/><file name="image.htm" hash="0d204c8f7651c3080ab542fb36957881"/><dir name="img"><file name="sample.gif" hash="b9c7057c46716340e8967340ad11766e"/></dir><dir name="js"><file name="image.js" hash="d071360a06b4f8590b4b18a7eca039aa"/></dir><dir name="langs"><file name="en_dlg.js" hash="6f80f834e2209e6a95957403bb4842f0"/></dir></dir><dir name="advlink"><dir name="css"><file name="advlink.css" hash="aaf226732a7b4ae80ee680700f488a1e"/></dir><file name="editor_plugin.js" hash="5e440c6bcb7fd94e7fd597f8a183e16f"/><file name="editor_plugin_src.js" hash="4104cd66aea546becf5d8fca66cf7951"/><dir name="js"><file name="advlink.js" hash="80dd2f99418025b6f9fd757adfdb1a71"/></dir><dir name="langs"><file name="en_dlg.js" hash="8da3a95d6886837c0bca18670f57ae1c"/></dir><file name="link.htm" hash="206ef7aba261ac4bc14e7c6fdbdcc8c5"/></dir><dir name="advlist"><file name="editor_plugin.js" hash="5f1c8625c04a6b0f4567c1c8d5e28ff9"/><file name="editor_plugin_src.js" hash="d451908bf1e060ecd49356787f33fc7c"/></dir><dir name="autolink"><file name="editor_plugin.js" hash="5091233229ffe517f075b787c5f388a6"/><file name="editor_plugin_src.js" hash="f03a8ec9ad17bd53f897a525e3cc30f7"/></dir><dir name="autoresize"><file name="editor_plugin.js" hash="adf5cbe96119e3ed9ab4a86ba26405e7"/><file name="editor_plugin_src.js" hash="4d1cdbe307f73b4d36d1bf9b3bc2d0a9"/></dir><dir name="autosave"><file name="editor_plugin.js" hash="ae4c2aba85a22da66e3655f55d1c89fd"/><file name="editor_plugin_src.js" hash="6177147324865c00736c242b8ccb2de6"/><dir name="langs"><file name="en.js" hash="a33b0322c949a6d74bde7fa164396984"/></dir></dir><dir name="bbcode"><file name="editor_plugin.js" hash="31748a6cc57a13da54a0243c3301f3e6"/><file name="editor_plugin_src.js" hash="842450703b915245adb53df7d478ea5a"/></dir><dir name="contextmenu"><file name="editor_plugin.js" hash="5a0fc9ce2ba71bf2b6f54eb94838619f"/><file name="editor_plugin_src.js" hash="b923e4315f2d98703bbe9699465f84f0"/></dir><dir name="directionality"><file name="editor_plugin.js" hash="e2d925fe1e778dbcade06d55164fc276"/><file name="editor_plugin_src.js" hash="14b7a5b69fdc4f235b654436e4fe3081"/></dir><dir name="emotions"><file name="editor_plugin.js" hash="98cba02e33fc108024f3e993be0b0b62"/><file name="editor_plugin_src.js" hash="4cbc6e9b083a810ab0d3768af8f8f864"/><file name="emotions.htm" hash="9378bfd04b56a828318f7798f5696f67"/><dir name="img"><file name="smiley-cool.gif" hash="e26e97a318f82ec144b0818e5a8f8edb"/><file name="smiley-cry.gif" hash="e72bf995ceca9230273ed9909c5db9c8"/><file name="smiley-embarassed.gif" hash="d59171236e6b0b96091eeda1f7b57ce3"/><file name="smiley-foot-in-mouth.gif" hash="c12d9db6a14ad0b52f66f1e2cf2a38e7"/><file name="smiley-frown.gif" hash="59930208822fe755f651a67ef4b70530"/><file name="smiley-innocent.gif" hash="ec0477c8a206ff250782e40f9bae4b4c"/><file name="smiley-kiss.gif" hash="4ae8945f3960751b5d294f18242e144d"/><file name="smiley-laughing.gif" hash="c37f405db4e13cbebf24e745534687bf"/><file name="smiley-money-mouth.gif" hash="11c14bd1496afd0e21df115d25b68e96"/><file name="smiley-sealed.gif" hash="bb828cb46b377d1589927a02f8fd1762"/><file name="smiley-smile.gif" hash="2968a664098d9580079c66d628dad1a8"/><file name="smiley-surprised.gif" hash="2e136ebd637bf3e6c9fc6bdc20cbe73e"/><file name="smiley-tongue-out.gif" hash="5ec3bb4781c8e43a51d3a1a948b98fc0"/><file name="smiley-undecided.gif" hash="3c0c011d16b1a2331385ed97e160a42a"/><file name="smiley-wink.gif" hash="897275ac7d07032b4d93fb83a0d2a41b"/><file name="smiley-yell.gif" hash="19bb8ebfe3c2f5ef3ffb9aa4a027900d"/></dir><dir name="js"><file name="emotions.js" hash="85efe828d29037950412fec963b6f950"/></dir><dir name="langs"><file name="en_dlg.js" hash="62c052504a77e4f4cec6d90ece0d76c4"/></dir></dir><dir name="example"><file name="dialog.htm" hash="e6170a190a4d44ea5e6af089d2728d7e"/><file name="editor_plugin.js" hash="e0a175dca3d5e437657ccd5d548ff409"/><file name="editor_plugin_src.js" hash="b98bec73743c249187e0fa8f8311e3a3"/><dir name="img"><file name="example.gif" hash="6036655a01df362267183a8b23fead10"/></dir><dir name="js"><file name="dialog.js" hash="83245e76c97e24d466cf5df2308f9bf4"/></dir><dir name="langs"><file name="en.js" hash="78c88182b5fb900fc956845f75885b3a"/><file name="en_dlg.js" hash="7aec7a3b9d4642fbf7bb3ef1ed8a7570"/></dir></dir><dir name="example_dependency"><file name="editor_plugin.js" hash="405d190ae03384a9acb00533568b2cfd"/><file name="editor_plugin_src.js" hash="473878118b45efe326d335f992ff9943"/></dir><dir name="fullpage"><dir name="css"><file name="fullpage.css" hash="2ac64c98369f8b4f7cbf6fa70e25bfca"/></dir><file name="editor_plugin.js" hash="5dfbe0a82c87eb0fb65b11dcd39406d0"/><file name="editor_plugin_src.js" hash="636afe66f3de447eb92611bdcfb7f2b3"/><file name="fullpage.htm" hash="8c58825b698712e7297f95da51a9c03c"/><dir name="js"><file name="fullpage.js" hash="a7913b6b1a1ae634a509c3db9faf381a"/></dir><dir name="langs"><file name="en_dlg.js" hash="963f370d56f19c2f94de09b10a306187"/></dir></dir><dir name="fullscreen"><file name="editor_plugin.js" hash="15134339e36472281b8a1626233f747d"/><file name="editor_plugin_src.js" hash="a28a8a8bf569d6ee5e6dccbc988490ce"/><file name="fullscreen.htm" hash="b6d76297c2f679b9110ec7119d091900"/></dir><dir name="iespell"><file name="editor_plugin.js" hash="22526393cacb6447a0e3bfff2fb47773"/><file name="editor_plugin_src.js" hash="311e13bcc85c06da43decc37dc1b4f83"/></dir><dir name="inlinepopups"><file name="editor_plugin.js" hash="db32751b98f40ca6eee24efc848d6cbb"/><file name="editor_plugin_src.js" hash="d1c1de414c13fef3593ffd14503d37c0"/><dir name="skins"><dir name="clearlooks2"><dir name="img"><file name="alert.gif" hash="568d4cf84413656fb72fe39d1dd60f8d"/><file name="button.gif" hash="19f864cb81177840dcd534df4d537ea3"/><file name="buttons.gif" hash="1743ac9f7f2267a6edafefc536a2265d"/><file name="confirm.gif" hash="1bc337a20c319e531cda6ced531827d0"/><file name="corners.gif" hash="55298b5baaecb7e06a251db9f0a4b14c"/><file name="horizontal.gif" hash="0365e75dd4a9ad61dc98dcb641207c21"/><file name="vertical.gif" hash="0261136fac58ce77bdbd96aa0194947e"/></dir><file name="window.css" hash="f715affab9da63bc26f8c6362a989395"/></dir></dir><file name="template.htm" hash="3d7e3ae05511a9f64c5da924b9e971ba"/></dir><dir name="insertdatetime"><file name="editor_plugin.js" hash="d99072498466cdb2f53ed7c02da85982"/><file name="editor_plugin_src.js" hash="32a2afa1cd3ff8c9b966f8724ba3e0b3"/></dir><dir name="layer"><file name="editor_plugin.js" hash="4e5fc1b467c19d79dcf6246ba3a63cd8"/><file name="editor_plugin_src.js" hash="3754eb57b08539e459509caa74acecc6"/></dir><dir name="legacyoutput"><file name="editor_plugin.js" hash="b732a86187723cd9cc32853d67730061"/><file name="editor_plugin_src.js" hash="8a0a69cbe8d447d722aaef7d4ed7dcc1"/></dir><dir name="lists"><file name="editor_plugin.js" hash="46ba57884d8fe05d92cd9d98d3bb00af"/><file name="editor_plugin_src.js" hash="04e1f245c19d6dc9454dae57faec9b6f"/></dir><dir name="media"><dir name="css"><file name="media.css" hash="f211293a697a2c83da00effd67f535a2"/></dir><file name="editor_plugin.js" hash="5ad7db86c5008f98ec135595db4a4973"/><file name="editor_plugin_src.js" hash="1d03ec1ec36745041db26132b07b0491"/><dir name="img"><file name="flash.gif" hash="6c69b02015d09280332ff8b07e4ea2f3"/><file name="quicktime.gif" hash="9a6a9fdead205b125c07ea37e71ed4f1"/><file name="realmedia.gif" hash="b9734ee16d790e67bea01046feba28b7"/><file name="shockwave.gif" hash="baa643b587565755157618032dc93e3c"/><file name="trans.gif" hash="12bf9e19374920de3146a64775f46a5e"/><file name="windowsmedia.gif" hash="c327cd167b3a7bc263d908b0d0154ead"/></dir><dir name="js"><file name="embed.js" hash="39ebc57f44e1cc683724e1c1ff761894"/><file name="media.js" hash="4f35c0283a30f3556e023e76c34368b2"/></dir><dir name="langs"><file name="en_dlg.js" hash="9523fc123c577642000fd409bd862c3f"/></dir><file name="media.htm" hash="be58b1edf9a4a4dbf3a1993e3d897e1a"/><file name="moxieplayer.swf" hash="9217cea72c76c361fa5033526712284e"/><file name=".htaccess" hash="9f2e3ee0d6e50d80819eb8c0300a0913"/></dir><dir name="nonbreaking"><file name="editor_plugin.js" hash="232f23a586f10bd8ddabf38d767113d4"/><file name="editor_plugin_src.js" hash="fefbda5243d10652038ccf40801b8893"/></dir><dir name="noneditable"><file name="editor_plugin.js" hash="b332a5f8767506024a0f50aa4204b1fe"/><file name="editor_plugin_src.js" hash="273d35e2221889e75f33fd545f77d44e"/></dir><dir name="pagebreak"><dir name="css"><file name="content.css" hash="d9664762a610f2b5f7b10b5781f3299a"/></dir><file name="editor_plugin.js" hash="8be3376740c886fa2842d2f4eb282bbc"/><file name="editor_plugin_src.js" hash="c2d432a5914f0095a859ff443700a5e9"/><dir name="img"><file name="pagebreak.gif" hash="48872075f721bf57a517e3275d61c0ba"/><file name="trans.gif" hash="12bf9e19374920de3146a64775f46a5e"/></dir></dir><dir name="paste"><file name="editor_plugin.js" hash="1b68c59eb95a28ccc2aff2cfb85a8829"/><file name="editor_plugin_src.js" hash="40eef37ac300b571da5383bc0bddf73f"/><dir name="js"><file name="pastetext.js" hash="d6e4b39f19b89118b34b0d21491494b7"/><file name="pasteword.js" hash="112504d12e971e4d32f17a59c5616c36"/></dir><dir name="langs"><file name="en_dlg.js" hash="6ea2189562f65287be8e5e3185c405b7"/></dir><file name="pastetext.htm" hash="8f217769e59a5dd67843c7c17c842f41"/><file name="pasteword.htm" hash="8b9459b98f9a70ed684832326bf1cdf6"/></dir><dir name="preview"><file name="editor_plugin.js" hash="925216b63aabd5adc67d642ca2d04b4a"/><file name="editor_plugin_src.js" hash="6f9c3234dfdc0f62b713e8771f4ca5dc"/><file name="example.html" hash="9b9290408ae10fa29ec29db60682be91"/><dir name="jscripts"><file name="embed.js" hash="39ebc57f44e1cc683724e1c1ff761894"/></dir><file name="preview.html" hash="bb02414f4cdd28c4a66e7fb5ed820f2d"/></dir><dir name="print"><file name="editor_plugin.js" hash="53eb1da78f727ee8337671fb86354c17"/><file name="editor_plugin_src.js" hash="f11547aa114df69b35df319003105e11"/></dir><dir name="save"><file name="editor_plugin.js" hash="307a0743c68c4e4aff005f13027f296f"/><file name="editor_plugin_src.js" hash="4dcbdaab64f06550a2db2b650f99d411"/></dir><dir name="searchreplace"><dir name="css"><file name="searchreplace.css" hash="ad0addca1bd5727432f39ec9b7fdac1e"/></dir><file name="editor_plugin.js" hash="ed4f1fa6e12844b533c86258647a298f"/><file name="editor_plugin_src.js" hash="7292198991a0fda1b9c7b28c921c6521"/><dir name="js"><file name="searchreplace.js" hash="0eeedb83f5bf1240348e1c6e77be2c47"/></dir><dir name="langs"><file name="en_dlg.js" hash="fbd47078679d87b541479000589ef4c9"/></dir><file name="searchreplace.htm" hash="4d01ee3be4045a600778fca1e11cee61"/></dir><dir name="spellchecker"><dir name="css"><file name="content.css" hash="ac0c7dbbbe44022d29d63b7b05123e3d"/></dir><file name="editor_plugin.js" hash="629a571ee7686ace6ee7ad1181be916b"/><file name="editor_plugin_src.js" hash="bae03899e91abca8b4b77c8ea886b561"/><dir name="img"><file name="wline.gif" hash="c136c9f8e00718a98947a21d8adbcc56"/></dir></dir><dir name="style"><dir name="css"><file name="props.css" hash="c2d2adc78609ea65760dae2dab058395"/></dir><file name="editor_plugin.js" hash="f9bcd692d63dfef1fe5c586d27ecd91b"/><file name="editor_plugin_src.js" hash="2ec50d9d37ce1e732380a746fabceefc"/><dir name="js"><file name="props.js" hash="f3614bf040f29057162e423822b89e11"/></dir><dir name="langs"><file name="en_dlg.js" hash="62a82106cfd480a6da4442b4763a2f2d"/></dir><file name="props.htm" hash="32f3f16194be9170386419c9dcc5b99a"/><file name="readme.txt" hash="ced5c8e014184a33da5507dbcd96b91f"/></dir><dir name="tabfocus"><file name="editor_plugin.js" hash="d3e5ef7a1a203516af0d8fdf94952fd2"/><file name="editor_plugin_src.js" hash="12889ccf8caf1d466859ba949f52fbca"/></dir><dir name="table"><file name="cell.htm" hash="f427b778a4924154a5e2317ddfd0f567"/><dir name="css"><file name="cell.css" hash="56394e6cdb267d97e23a07a98820e84b"/><file name="row.css" hash="81a75523c1e83be93e524c8bb901a089"/><file name="table.css" hash="f5e651f5a32284f1c4e0faa1d7cd5ff4"/></dir><file name="editor_plugin.js" hash="c12f0891c5bf0a7a6dd43ef0bd44dd82"/><file name="editor_plugin_src.js" hash="8228b4ab83fe4dfe2e377850dc2cf97e"/><dir name="js"><file name="cell.js" hash="8b0d4a7fe48c2f92c8b9b79dbb12cca1"/><file name="merge_cells.js" hash="3650484c93d6c9a197d03a5c3c3d2e80"/><file name="row.js" hash="d1cf0ab3d974f0b528e467d4b5c5c89f"/><file name="table.js" hash="f894721e5f5a6c2efa1a232c4b4a85b6"/></dir><dir name="langs"><file name="en_dlg.js" hash="ee3484503050cdae74d2cafa7d2e9999"/></dir><file name="merge_cells.htm" hash="f939ddd56826c0ec3c9e6e9a478346bf"/><file name="row.htm" hash="7ad9e68624759b28be626ac4b53c8907"/><file name="table.htm" hash="88fb36057ec1cb1681fed2dcb0b44693"/></dir><dir name="template"><file name="blank.htm" hash="9553e76581d74579d23bea5c7ea8a807"/><dir name="css"><file name="template.css" hash="5b2c159120cbef004c9b0804c292820b"/></dir><file name="editor_plugin.js" hash="70cb20c4e287110ae8aeed999893c532"/><file name="editor_plugin_src.js" hash="336af7b2ec3e0f7c83a7d05bf16cd018"/><dir name="js"><file name="template.js" hash="75abfd82a90ae648fb18c5517dfd925b"/></dir><dir name="langs"><file name="en_dlg.js" hash="1ce03c0fcf0f1aa74c132459abe30f39"/></dir><file name="template.htm" hash="b55e174e239e5c4b3a52d6ad60eb991d"/></dir><dir name="visualblocks"><dir name="css"><file name="visualblocks.css" hash="1fe4f62cc93864784b9b2d6b11b050b7"/></dir><file name="editor_plugin.js" hash="592e70a44aeb7c974eb9c5ff05c107a7"/><file name="editor_plugin_src.js" hash="6d1a4ea64bfedf8797260792e33f4c17"/></dir><dir name="visualchars"><file name="editor_plugin.js" hash="e494d07c71e24040a407b20017ca63e3"/><file name="editor_plugin_src.js" hash="f285c8f2ffac745325e86687b8cf0fb5"/></dir><dir name="wordcount"><file name="editor_plugin.js" hash="fb71ed139697b519f0054179d28ec782"/><file name="editor_plugin_src.js" hash="a034fddb393e4b6e7d25fc3761bea529"/></dir><dir name="xhtmlxtras"><file name="abbr.htm" hash="e514d143e00e4b121cab8fe8dfae48d2"/><file name="acronym.htm" hash="ec632b3d4b6afb189c055afa234e6291"/><file name="attributes.htm" hash="cf540b962f752babf53faa7a47bde108"/><file name="cite.htm" hash="1468438313b9cb1de0e53e50d75c92fa"/><dir name="css"><file name="attributes.css" hash="abc1b941c6eef8e1ea76915984e8a03e"/><file name="popup.css" hash="ed53e7b6ab799f6a249c3d403047dcfc"/></dir><file name="del.htm" hash="81bbcce0d19d78698fad760ee90b6948"/><file name="editor_plugin.js" hash="c9f91af5f1b8a1ba7a1e4ccf53fc7790"/><file name="editor_plugin_src.js" hash="b8b8236893ef2347a46cb131fc1a8c69"/><file name="ins.htm" hash="47e7db25678cee383fe6532ebb9e3fcb"/><dir name="js"><file name="abbr.js" hash="d91ae7d986336de4ecb977d19dcfab19"/><file name="acronym.js" hash="0a19f79bdc9222d3273712fe37a8051c"/><file name="attributes.js" hash="e75f23fae888b9febb57a29f2eb5a86c"/><file name="cite.js" hash="ba39487ce6a625538b838c21502bbaa7"/><file name="del.js" hash="be96fef888076d27384dd3546e8b6b6f"/><file name="element_common.js" hash="b817f5e2d514147d72765c92c1f60f3d"/><file name="ins.js" hash="6148dd4151e58dcda9112933908b97b1"/></dir><dir name="langs"><file name="en_dlg.js" hash="45db1586e7debc385f63092a13a9f43c"/></dir></dir></dir><dir name="themes"><dir name="advanced"><file name="about.htm" hash="ff135857e9b930d4d4658f92077e051c"/><file name="anchor.htm" hash="79d46a2b007b5cb08a3920e922a5da7f"/><file name="charmap.htm" hash="be712e4cf08670a1212e9eed2f452693"/><file name="color_picker.htm" hash="8db4d59dec910525149039f006a2bb9e"/><file name="editor_template.js" hash="a2b3085f0ab3c323dd28187b739139ec"/><file name="editor_template_src.js" hash="1fa308a86046cee68c5227ca58013bba"/><file name="image.htm" hash="2cb986c0cad7efd0592a4d8c35e41f0a"/><dir name="img"><file name="colorpicker.jpg" hash="9bcc36292defe94bca5a013a1736c7d7"/><file name="flash.gif" hash="33adee48d32bbbba3e6412cc54ecf335"/><file name="icons.gif" hash="75ad72872bc6280c32609e12fc3b610a"/><file name="iframe.gif" hash="a1af02e9ba370f64297087b46e80591e"/><file name="pagebreak.gif" hash="48872075f721bf57a517e3275d61c0ba"/><file name="quicktime.gif" hash="61da1ff8729ca5016344c4e8eb173369"/><file name="realmedia.gif" hash="b9734ee16d790e67bea01046feba28b7"/><file name="shockwave.gif" hash="1ce7d48784981aac9d4375cf2effdc4d"/><file name="trans.gif" hash="12bf9e19374920de3146a64775f46a5e"/><file name="video.gif" hash="f85c56813ea016a75e496bba50d66ab4"/><file name="windowsmedia.gif" hash="c327cd167b3a7bc263d908b0d0154ead"/></dir><dir name="js"><file name="about.js" hash="606c16492a17240ebded6e9fce75a555"/><file name="anchor.js" hash="da6a28397899bec3570216b2d2106684"/><file name="charmap.js" hash="02f40a38033ef8a0abeac870e5f4eda8"/><file name="color_picker.js" hash="cfc0f59a846661e748cae1c0adca77dc"/><file name="image.js" hash="75df8142a91f0245367e4121a2da7065"/><file name="link.js" hash="71949506dce04e923bbbc2ecc8ab5f1f"/><file name="source_editor.js" hash="4cbdfdf929a0949070f4d7ab4818b0f2"/></dir><dir name="langs"><file name="en.js" hash="58c814313230f1dec07fe45ad5f304e5"/><file name="en_dlg.js" hash="3a2c8aed5b7579ae45be6bd2b34ef06b"/></dir><file name="link.htm" hash="65c56f5a6d714fdbdc47c68ec9422976"/><file name="shortcuts.htm" hash="2bae05c8667b54b9ec019b529e743327"/><dir name="skins"><dir name="default"><file name="content.css" hash="1779499935490440d7a2423157756bc5"/><file name="dialog.css" hash="ab94126c11ff9c79445cc4ad537b2823"/><dir name="img"><file name="buttons.png" hash="33b2f2e08cc3ade5254fec64c4183558"/><file name="items.gif" hash="d201498a710fc8aac6e117820b9814b7"/><file name="menu_arrow.gif" hash="e21752451a9d80e276fef7b602bdbdba"/><file name="menu_check.gif" hash="c7d003885737f94768eecae49dcbca63"/><file name="progress.gif" hash="50c5e3e79b276c92df6cc52caeb464f0"/><file name="tabs.gif" hash="6473bbcd0a011e9fcdd9f777ef437410"/></dir><file name="ui.css" hash="823d750bb9c2bde55084d322f44b17c1"/></dir><dir name="highcontrast"><file name="content.css" hash="8294a1222d0ab5fa7520879cc9073e85"/><file name="dialog.css" hash="f6e95a7450471eb7473f8dbc3e6b6581"/><file name="ui.css" hash="1bdbee2f94594ca00c65b4d6a930bbf6"/></dir><dir name="o2k7"><file name="content.css" hash="c696812903368f41cd65616574c81484"/><file name="dialog.css" hash="661f54aa4a283b67c0acd25f91f2f213"/><dir name="img"><file name="button_bg.png" hash="36fd9fbd748860f515df259443367163"/><file name="button_bg_black.png" hash="9645f90b37102a3618a52be18b74b02b"/><file name="button_bg_silver.png" hash="15fbf2b4a20dbaa86205af6764f4fee4"/></dir><file name="ui.css" hash="a108668128c143e61bc44990dff89fe6"/><file name="ui_black.css" hash="ba8d82d9bff6e2854b29b1f97ead05fe"/><file name="ui_silver.css" hash="b42c7d51247d02ddca437a1661e748e5"/></dir></dir><file name="source_editor.htm" hash="42f3a13b55ffcf7c2d3ab768012abfcc"/></dir><dir name="simple"><file name="editor_template.js" hash="3ac3fd3129ee9605052b8470f8d58538"/><file name="editor_template_src.js" hash="409e0cce50eb6c62463d6dd9c6120859"/><dir name="img"><file name="icons.gif" hash="273dad62be4d114c5d52210b50a5838f"/></dir><dir name="langs"><file name="en.js" hash="50dce0602a45ba9fac56f12f76a63ec3"/></dir><dir name="skins"><dir name="default"><file name="content.css" hash="0f70f3ca9624e252d1c41ea064fc65e7"/><file name="ui.css" hash="c46c68283c617bb61dada1cd2494dd9f"/></dir><dir name="o2k7"><file name="content.css" hash="eb7a087c67578b6e3b5e0987caa4ba64"/><dir name="img"><file name="button_bg.png" hash="405ca3d63b48667ef485553192507f59"/></dir><file name="ui.css" hash="f0ec0273462e01b81e1dfd292f64451e"/></dir></dir></dir></dir><file name="tiny_mce.js" hash="199630688fff7a8bb0a549cd80187cbd"/><file name="tiny_mce_dev.js" hash="3a3819b032736635cc608076a02b3dbe"/><file name="tiny_mce_jquery.js" hash="87ee7a1967b86d56f5cdb1ba985ef4ce"/><file name="tiny_mce_jquery_src.js" hash="212727559aacdd03ea9ae6f5c6ede65a"/><file name="tiny_mce_popup.js" hash="5a318277fedf491a0301e177a9ef10b3"/><file name="tiny_mce_prototype.js" hash="0c65808fab93d86cf8552976f691b9c8"/><file name="tiny_mce_prototype_src.js" hash="3629c32a57bcf63cb52f455f18709223"/><file name="tiny_mce_src.js" hash="98575c8e6816a36f73145c2d97b0846a"/><dir name="utils"><file name="editable_selects.js" hash="e760eb21f60892a1ef2298da7df313e5"/><file name="form_utils.js" hash="579b2803ffca7953c50f53dcbef5df7e"/><file name="mctabs.js" hash="51b9bfe349fe76204ac5b65254bbef6f"/><file name="validate.js" hash="bfbaf5dc8058ff772afe2d87f4e82fbf"/></dir></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_LinLibertineFont-2.8.14.16.xml b/var/package/Lib_LinLibertineFont-2.8.14.16.xml
deleted file mode 100644
index d05cd56..0000000
--- a/var/package/Lib_LinLibertineFont-2.8.14.16.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_LinLibertineFont</name>
-    <version>2.8.14.16</version>
-    <stability>stable</stability>
-    <license uri="http://www.gnu.org/licenses/gpl.html">GPL</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Libertine Open Fonts Project fonts for PDF print-outs</summary>
-    <description>Libertine Open Fonts Project fonts for PDF print-outs</description>
-    <notes>2.8.14.16</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:14</time>
-    <contents><target name="magelib"><dir name="LinLibertineFont"><file name="Bugs" hash="9ecefd5b5d739618917f6ff1a496af4d"/><file name="ChangeLog.txt" hash="c4a43af51dc70f4acbd09eeda8a1f95d"/><file name="GPL.txt" hash="ae32e069c670f1247694f4313efcc977"/><file name="LICENCE.txt" hash="9752e08000ee88048cb953607250dd7b"/><file name="LinLibertineC_Re-2.8.0.ttf" hash="7c98097ee899568bc86c28a8eafd77a3"/><file name="LinLibertine_Bd-2.8.1.ttf" hash="81c9c61a6c91fc6ccb93f1e6ec6ed06a"/><file name="LinLibertine_It-2.8.2.ttf" hash="5d334990c5d59bd428ae684ce8490c5c"/><file name="LinLibertine_Re-4.4.1.ttf" hash="de5bccf92a5145f4532b126f9506c28d"/><file name="OFL.txt" hash="6237e6976dcefd3d9fc3f1264b3c3bb9"/><file name="Readme" hash="9bbff4f7c21eb0a037527720e4b8473d"/><file name="Readme-TEX.txt" hash="14cb95ee0acecf6c3ef563f1b906443b"/></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_LinLibertineFont-2.8.14.17.xml b/var/package/Lib_LinLibertineFont-2.8.14.17.xml
new file mode 100644
index 0000000..c2ffc1c
--- /dev/null
+++ b/var/package/Lib_LinLibertineFont-2.8.14.17.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_LinLibertineFont</name>
+    <version>2.8.14.17</version>
+    <stability>stable</stability>
+    <license uri="http://www.gnu.org/licenses/gpl.html">GPL</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Libertine Open Fonts Project fonts for PDF print-outs</summary>
+    <description>Libertine Open Fonts Project fonts for PDF print-outs</description>
+    <notes>2.8.14.17</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:01</time>
+    <contents><target name="magelib"><dir name="LinLibertineFont"><file name="Bugs" hash="9ecefd5b5d739618917f6ff1a496af4d"/><file name="ChangeLog.txt" hash="c4a43af51dc70f4acbd09eeda8a1f95d"/><file name="GPL.txt" hash="ae32e069c670f1247694f4313efcc977"/><file name="LICENCE.txt" hash="9752e08000ee88048cb953607250dd7b"/><file name="LinLibertineC_Re-2.8.0.ttf" hash="7c98097ee899568bc86c28a8eafd77a3"/><file name="LinLibertine_Bd-2.8.1.ttf" hash="81c9c61a6c91fc6ccb93f1e6ec6ed06a"/><file name="LinLibertine_It-2.8.2.ttf" hash="5d334990c5d59bd428ae684ce8490c5c"/><file name="LinLibertine_Re-4.4.1.ttf" hash="de5bccf92a5145f4532b126f9506c28d"/><file name="OFL.txt" hash="6237e6976dcefd3d9fc3f1264b3c3bb9"/><file name="Readme" hash="9bbff4f7c21eb0a037527720e4b8473d"/><file name="Readme-TEX.txt" hash="14cb95ee0acecf6c3ef563f1b906443b"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_Mage-1.9.3.10.xml b/var/package/Lib_Mage-1.9.3.10.xml
deleted file mode 100644
index 9171cc3..0000000
--- a/var/package/Lib_Mage-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Mage</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Mage Library</summary>
-    <description>Mage Library</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:15</time>
-    <contents><target name="magelib"><dir name="Mage"><dir name="Archive"><file name="Abstract.php" hash="7219e31d44a1ad2263795f24f80fd557"/><file name="Bz.php" hash="ddda0a3dfbb7b81ce9a6e69c6b44e540"/><file name="Gz.php" hash="385b2740aacefcd317273448ed95ef83"/><dir name="Helper"><dir name="File"><file name="Bz.php" hash="0611e0df836dafa206aeac06ab609724"/><file name="Gz.php" hash="13c15537156d0293cc86588cca629267"/></dir><file name="File.php" hash="314284e414f094c7e7ea81ffe8f6a9ee"/></dir><file name="Interface.php" hash="212679c1c16ad7e35eff39e55c2ec510"/><file name="Tar.php" hash="93dce1abf2d3b717778aff701ce35d40"/></dir><file name="Archive.php" hash="736c17d5666816627fba72fe7d4f6140"/><dir name="Autoload"><file name="Simple.php" hash="aacee169c0bdcd87e470269641473631"/></dir><dir name="Backup"><file name="Abstract.php" hash="c3de48d5961070832d1ed0f7177ee4a2"/><dir name="Archive"><file name="Tar.php" hash="8bd53f96d6ba93d5887b0e7aa72f9269"/></dir><file name="Db.php" hash="89f62bd52b21db1dd708a02ae4347248"/><dir name="Exception"><file name="CantLoadSnapshot.php" hash="4f53c1142257ab85784198a402d2f425"/><file name="FtpConnectionFailed.php" hash="5fefd3d3b8be727781a6f5fdb138852f"/><file name="FtpValidationFailed.php" hash="cec68f36cf698a50e41471d46722d57c"/><file name="NotEnoughFreeSpace.php" hash="ccdd5e27479a58a1b3866c64533822c1"/><file name="NotEnoughPermissions.php" hash="3afd5fa76513cc11b55082bab2ebeb26"/></dir><file name="Exception.php" hash="d75dc453d7950a04329ba6309da002a9"/><dir name="Filesystem"><file name="Helper.php" hash="dc10bc252a7a55258278f52c5165f172"/><dir name="Iterator"><file name="File.php" hash="c85c788b168fc0a4645a4cdaf10caa80"/><file name="Filter.php" hash="174deec59e7fe57014725a3a623b074c"/></dir><dir name="Rollback"><file name="Abstract.php" hash="271c9e6032f86e8d71e660b9778e71a9"/><file name="Fs.php" hash="c6ca689d7bfd4c0fe4101ccb74a96c97"/><file name="Ftp.php" hash="c6f3318d266f386a52be726b3ed28c20"/></dir></dir><file name="Filesystem.php" hash="a2ac0ad741f06e862da5cc2a8d0c3a36"/><file name="Interface.php" hash="2550d86498a20a3d5d83672415ae7f91"/><file name="Media.php" hash="dd1f7d5304b53206c6d770ae668d254b"/><file name="Nomedia.php" hash="1d7f11e8507fbba3893be459d331891b"/><file name="Snapshot.php" hash="d3b7c974ed49905937cde4b69075ab4e"/></dir><file name="Backup.php" hash="951e7982ed239d7799e7722ac67435eb"/><dir name="Cache"><dir name="Backend"><file name="File.php" hash="458b0c266c9bc8a191335442522a645b"/><file name="Redis.php" hash="c398f19df4b0aef55450a14747f3c61b"/></dir></dir><dir name="Connect"><dir name="Channel"><file name="Generator.php" hash="b3dbdf1fdd1d5a462a522c68627d2bba"/><file name="Parser.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="VO.php" hash="38e61a3a3b877639cdeb427f8746ced1"/></dir><dir name="Command"><file name="Channels.php" hash="c13a8190309ee8b816eb044422d02dc4"/><file name="Channels_Header.php" hash="ef497284ed4c24aa7234dbfe48d238dc"/><file name="Config.php" hash="33bff8743fd8a86cb292f3e94edbdf50"/><file name="Config_Header.php" hash="11b772152974cbd6be72b76335a91896"/><file name="Install.php" hash="19de11c9f04c7b1a161a23fa843f5a1e"/><file name="Install_Header.php" hash="5bd1465e62f45dc30cb8f249c399a65e"/><file name="Package.php" hash="79fd89514981e32d13de63a6d8cf164a"/><file name="Package_Header.php" hash="f30cba27b0e6233f39bf5dcd06af3ba5"/><file name="Registry.php" hash="e88277d0fdeffae71097cc4d4cbe8441"/><file name="Registry_Header.php" hash="9fa6bff3f86a4e7a87d9ca50000ef999"/><file name="Remote.php" hash="1291065611ca8320c6948d1f1e458857"/><file name="Remote_Header.php" hash="27419e6e322ce60848994cc45bc71bcd"/></dir><file name="Command.php" hash="bc170c01333fc3867a6cd537219a4c10"/><file name="Config.php" hash="56b877abd4a1604e1989bea18473418d"/><file name="Converter.php" hash="fea5425f9074136c9fc10d6d7b15a4f8"/><dir name="Frontend"><file name="CLI.php" hash="abb0ea49598d20bb2c4b91a507e6e2a0"/></dir><file name="Frontend.php" hash="39e10184f8d83572b5edbea240642cfa"/><file name="Ftp.php" hash="ecc1ee16683875cc8779ff22168508fb"/><dir name="Loader"><file name="Ftp.php" hash="b59ab0750f9ad9f8462ec43583eb8d3e"/></dir><file name="Loader.php" hash="355ed95e925fa98bdec382f37cfeeb39"/><dir name="Package"><file name="Extension.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Hotfix.php" hash="31f281c8485a8c010230eebc64d2fdc9"/><file name="Maintainer.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Reader.php" hash="94dd06082e803182e7d54a9b6a3a9117"/><file name="Target.php" hash="3769c486343cee9e9c20ab0a7d211288"/><file name="VO.php" hash="bfbe38745c9f36fe9b79aa1c0bf3c106"/><file name="Writer.php" hash="19ea81f6f2dc4d2828ebecf7ba84ca44"/></dir><file name="Package.php" hash="1b3f2d9c00d37cd66edae1068ae7ace4"/><file name="Packager.php" hash="002b9d6df3513b2e6622d5a92888d976"/><dir name="Repository"><file name="Abstract.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><dir name="Channel"><file name="Abstract.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Commercial.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Community.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Core.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/></dir><file name="Channel.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Local.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/></dir><file name="Repository.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Rest.php" hash="62b4562a1ec60a923bd9360e4395ae1e"/><file name="Singleconfig.php" hash="03d046a07f52a29e27da2a184e61c5cd"/><dir name="Structures"><file name="Graph.php" hash="907ec31e395ed931d3468bab30c8a865"/><file name="Node.php" hash="bfa5cc71b8e0787ddf41917faaa8d859"/></dir><file name="Validator.php" hash="ea9b801aff843b3bda84200b9f612e76"/></dir><dir name="DB"><file name="Exception.php" hash="1651c02af32d13cb09f18e55fe41a454"/><file name="Mysqli.php" hash="1afea21a74a5c95afb3aa0fac88dd8f1"/></dir><file name="Exception.php" hash="b2841a64f422bb6de9ca9deb16483199"/><dir name="HTTP"><dir name="Client"><file name="Curl.php" hash="9fc530e406f64aadb1d18a8af8c22f9d"/><file name="Socket.php" hash="2403f0c937a01759262eca2bd838b13a"/></dir><file name="Client.php" hash="6de915c729f44d8700147a4929de5a08"/><file name="IClient.php" hash="1bb87d5c7b0027db0288a58d2691c1f8"/></dir><dir name="System"><file name="Args.php" hash="c95ce3451a31af33ed0a0987fc007a80"/><file name="Dirs.php" hash="557f6440351c8c0f5a34b30340ac2601"/><file name="Ftp.php" hash="d5d2052fd9d8799b4aaa26fc6bb2d05c"/></dir><dir name="Xml"><file name="Generator.php" hash="dbbf15cac6bef48830f921ece90b4382"/><file name="Parser.php" hash="4dab68fb16c447bf58897b57a9e7f589"/></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_Mage-1.9.4.0.xml b/var/package/Lib_Mage-1.9.4.0.xml
new file mode 100644
index 0000000..0901bf9
--- /dev/null
+++ b/var/package/Lib_Mage-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Mage</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Mage Library</summary>
+    <description>Mage Library</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:01</time>
+    <contents><target name="magelib"><dir name="Mage"><dir name="Archive"><file name="Abstract.php" hash="7219e31d44a1ad2263795f24f80fd557"/><file name="Bz.php" hash="ddda0a3dfbb7b81ce9a6e69c6b44e540"/><file name="Gz.php" hash="385b2740aacefcd317273448ed95ef83"/><dir name="Helper"><dir name="File"><file name="Bz.php" hash="0611e0df836dafa206aeac06ab609724"/><file name="Gz.php" hash="13c15537156d0293cc86588cca629267"/></dir><file name="File.php" hash="314284e414f094c7e7ea81ffe8f6a9ee"/></dir><file name="Interface.php" hash="212679c1c16ad7e35eff39e55c2ec510"/><file name="Tar.php" hash="93dce1abf2d3b717778aff701ce35d40"/></dir><file name="Archive.php" hash="736c17d5666816627fba72fe7d4f6140"/><dir name="Autoload"><file name="Simple.php" hash="aacee169c0bdcd87e470269641473631"/></dir><dir name="Backup"><file name="Abstract.php" hash="c3de48d5961070832d1ed0f7177ee4a2"/><dir name="Archive"><file name="Tar.php" hash="8bd53f96d6ba93d5887b0e7aa72f9269"/></dir><file name="Db.php" hash="89f62bd52b21db1dd708a02ae4347248"/><dir name="Exception"><file name="CantLoadSnapshot.php" hash="4f53c1142257ab85784198a402d2f425"/><file name="FtpConnectionFailed.php" hash="5fefd3d3b8be727781a6f5fdb138852f"/><file name="FtpValidationFailed.php" hash="cec68f36cf698a50e41471d46722d57c"/><file name="NotEnoughFreeSpace.php" hash="ccdd5e27479a58a1b3866c64533822c1"/><file name="NotEnoughPermissions.php" hash="3afd5fa76513cc11b55082bab2ebeb26"/></dir><file name="Exception.php" hash="d75dc453d7950a04329ba6309da002a9"/><dir name="Filesystem"><file name="Helper.php" hash="dc10bc252a7a55258278f52c5165f172"/><dir name="Iterator"><file name="File.php" hash="c85c788b168fc0a4645a4cdaf10caa80"/><file name="Filter.php" hash="174deec59e7fe57014725a3a623b074c"/></dir><dir name="Rollback"><file name="Abstract.php" hash="271c9e6032f86e8d71e660b9778e71a9"/><file name="Fs.php" hash="c6ca689d7bfd4c0fe4101ccb74a96c97"/><file name="Ftp.php" hash="c6f3318d266f386a52be726b3ed28c20"/></dir></dir><file name="Filesystem.php" hash="a2ac0ad741f06e862da5cc2a8d0c3a36"/><file name="Interface.php" hash="2550d86498a20a3d5d83672415ae7f91"/><file name="Media.php" hash="dd1f7d5304b53206c6d770ae668d254b"/><file name="Nomedia.php" hash="1d7f11e8507fbba3893be459d331891b"/><file name="Snapshot.php" hash="d3b7c974ed49905937cde4b69075ab4e"/></dir><file name="Backup.php" hash="951e7982ed239d7799e7722ac67435eb"/><dir name="Cache"><dir name="Backend"><file name="File.php" hash="458b0c266c9bc8a191335442522a645b"/><file name="Redis.php" hash="c398f19df4b0aef55450a14747f3c61b"/></dir></dir><dir name="Connect"><dir name="Channel"><file name="Generator.php" hash="b3dbdf1fdd1d5a462a522c68627d2bba"/><file name="Parser.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="VO.php" hash="38e61a3a3b877639cdeb427f8746ced1"/></dir><dir name="Command"><file name="Channels.php" hash="c13a8190309ee8b816eb044422d02dc4"/><file name="Channels_Header.php" hash="ef497284ed4c24aa7234dbfe48d238dc"/><file name="Config.php" hash="33bff8743fd8a86cb292f3e94edbdf50"/><file name="Config_Header.php" hash="11b772152974cbd6be72b76335a91896"/><file name="Install.php" hash="19de11c9f04c7b1a161a23fa843f5a1e"/><file name="Install_Header.php" hash="5bd1465e62f45dc30cb8f249c399a65e"/><file name="Package.php" hash="79fd89514981e32d13de63a6d8cf164a"/><file name="Package_Header.php" hash="f30cba27b0e6233f39bf5dcd06af3ba5"/><file name="Registry.php" hash="e88277d0fdeffae71097cc4d4cbe8441"/><file name="Registry_Header.php" hash="9fa6bff3f86a4e7a87d9ca50000ef999"/><file name="Remote.php" hash="1291065611ca8320c6948d1f1e458857"/><file name="Remote_Header.php" hash="27419e6e322ce60848994cc45bc71bcd"/></dir><file name="Command.php" hash="bc170c01333fc3867a6cd537219a4c10"/><file name="Config.php" hash="56b877abd4a1604e1989bea18473418d"/><file name="Converter.php" hash="fea5425f9074136c9fc10d6d7b15a4f8"/><dir name="Frontend"><file name="CLI.php" hash="abb0ea49598d20bb2c4b91a507e6e2a0"/></dir><file name="Frontend.php" hash="39e10184f8d83572b5edbea240642cfa"/><file name="Ftp.php" hash="ecc1ee16683875cc8779ff22168508fb"/><dir name="Loader"><file name="Ftp.php" hash="b59ab0750f9ad9f8462ec43583eb8d3e"/></dir><file name="Loader.php" hash="355ed95e925fa98bdec382f37cfeeb39"/><dir name="Package"><file name="Extension.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Hotfix.php" hash="31f281c8485a8c010230eebc64d2fdc9"/><file name="Maintainer.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Reader.php" hash="94dd06082e803182e7d54a9b6a3a9117"/><file name="Target.php" hash="3769c486343cee9e9c20ab0a7d211288"/><file name="VO.php" hash="bfbe38745c9f36fe9b79aa1c0bf3c106"/><file name="Writer.php" hash="19ea81f6f2dc4d2828ebecf7ba84ca44"/></dir><file name="Package.php" hash="1b3f2d9c00d37cd66edae1068ae7ace4"/><file name="Packager.php" hash="002b9d6df3513b2e6622d5a92888d976"/><dir name="Repository"><file name="Abstract.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><dir name="Channel"><file name="Abstract.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Commercial.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Community.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Core.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/></dir><file name="Channel.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Local.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/></dir><file name="Repository.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Rest.php" hash="62b4562a1ec60a923bd9360e4395ae1e"/><file name="Singleconfig.php" hash="03d046a07f52a29e27da2a184e61c5cd"/><dir name="Structures"><file name="Graph.php" hash="907ec31e395ed931d3468bab30c8a865"/><file name="Node.php" hash="bfa5cc71b8e0787ddf41917faaa8d859"/></dir><file name="Validator.php" hash="ea9b801aff843b3bda84200b9f612e76"/></dir><dir name="DB"><file name="Exception.php" hash="1651c02af32d13cb09f18e55fe41a454"/><file name="Mysqli.php" hash="1afea21a74a5c95afb3aa0fac88dd8f1"/></dir><file name="Exception.php" hash="b2841a64f422bb6de9ca9deb16483199"/><dir name="HTTP"><dir name="Client"><file name="Curl.php" hash="9fc530e406f64aadb1d18a8af8c22f9d"/><file name="Socket.php" hash="2403f0c937a01759262eca2bd838b13a"/></dir><file name="Client.php" hash="6de915c729f44d8700147a4929de5a08"/><file name="IClient.php" hash="1bb87d5c7b0027db0288a58d2691c1f8"/></dir><dir name="System"><file name="Args.php" hash="c95ce3451a31af33ed0a0987fc007a80"/><file name="Dirs.php" hash="557f6440351c8c0f5a34b30340ac2601"/><file name="Ftp.php" hash="d5d2052fd9d8799b4aaa26fc6bb2d05c"/></dir><dir name="Xml"><file name="Generator.php" hash="dbbf15cac6bef48830f921ece90b4382"/><file name="Parser.php" hash="4dab68fb16c447bf58897b57a9e7f589"/></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_Magento-1.9.3.10.xml b/var/package/Lib_Magento-1.9.3.10.xml
deleted file mode 100644
index 9b5c4ab..0000000
--- a/var/package/Lib_Magento-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Magento</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Magento Library</summary>
-    <description>Magento Library</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:15</time>
-    <contents><target name="magelib"><dir name="Magento"><dir name="Autoload"><file name="ClassMap.php" hash="0c278d60e2c12dbe4ed34aa05816099f"/><file name="IncludePath.php" hash="7ed33a977845bacf0ac132978a6bfd92"/><file name="Simple.php" hash="76230e87f5557fa5d804f9c41c3141aa"/></dir><file name="Crypt.php" hash="a00c241177a5e666d5dab59bb538c283"/><dir name="Db"><dir name="Adapter"><dir name="Pdo"><file name="Mysql.php" hash="8c0fb38753426719991081ec22ae2f08"/></dir></dir><dir name="Object"><file name="Interface.php" hash="24ddf513994dde357f8934bcdbc9a182"/><file name="Table.php" hash="aeeac7ef5d85e6f6513962c1afe5f143"/><file name="Trigger.php" hash="2c46164f6fb21c35e6b92ae0429f67be"/><file name="View.php" hash="75bb64fdd6ba76332d1da56025c334ae"/></dir><file name="Object.php" hash="0857207e7e7b27575912512ba71d1401"/><dir name="Sql"><file name="Select.php" hash="433372e6bd00f43ee5f0ced15c30745e"/><file name="Trigger.php" hash="e961171ab02c054c0f9994c8d627db75"/></dir></dir><file name="Exception.php" hash="dd1ff8f6b66ad294b3998647f9727912"/><dir name="Profiler"><dir name="Output"><file name="Csvfile.php" hash="46187439941f8a93cd8ecd0a1873d2c5"/><file name="Firebug.php" hash="37d7aae1a60fb5d6318132bc82755605"/><file name="Html.php" hash="4b624ab12401c750eb199319dd3ce085"/></dir><file name="OutputAbstract.php" hash="6df96db27d29ca1a85f0ac4c2f078332"/></dir><file name="Profiler.php" hash="1f53ea480dcd53042d3794519c9b9f2a"/></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_Magento-1.9.4.0.xml b/var/package/Lib_Magento-1.9.4.0.xml
new file mode 100644
index 0000000..4aa9bbe
--- /dev/null
+++ b/var/package/Lib_Magento-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Magento</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Magento Library</summary>
+    <description>Magento Library</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:01</time>
+    <contents><target name="magelib"><dir name="Magento"><dir name="Autoload"><file name="ClassMap.php" hash="0c278d60e2c12dbe4ed34aa05816099f"/><file name="IncludePath.php" hash="7ed33a977845bacf0ac132978a6bfd92"/><file name="Simple.php" hash="76230e87f5557fa5d804f9c41c3141aa"/></dir><file name="Crypt.php" hash="a00c241177a5e666d5dab59bb538c283"/><dir name="Db"><dir name="Adapter"><dir name="Pdo"><file name="Mysql.php" hash="8c0fb38753426719991081ec22ae2f08"/></dir></dir><dir name="Object"><file name="Interface.php" hash="24ddf513994dde357f8934bcdbc9a182"/><file name="Table.php" hash="aeeac7ef5d85e6f6513962c1afe5f143"/><file name="Trigger.php" hash="2c46164f6fb21c35e6b92ae0429f67be"/><file name="View.php" hash="75bb64fdd6ba76332d1da56025c334ae"/></dir><file name="Object.php" hash="0857207e7e7b27575912512ba71d1401"/><dir name="Sql"><file name="Select.php" hash="433372e6bd00f43ee5f0ced15c30745e"/><file name="Trigger.php" hash="e961171ab02c054c0f9994c8d627db75"/></dir></dir><file name="Exception.php" hash="dd1ff8f6b66ad294b3998647f9727912"/><dir name="Profiler"><dir name="Output"><file name="Csvfile.php" hash="46187439941f8a93cd8ecd0a1873d2c5"/><file name="Firebug.php" hash="37d7aae1a60fb5d6318132bc82755605"/><file name="Html.php" hash="4b624ab12401c750eb199319dd3ce085"/></dir><file name="OutputAbstract.php" hash="6df96db27d29ca1a85f0ac4c2f078332"/></dir><file name="Profiler.php" hash="1f53ea480dcd53042d3794519c9b9f2a"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_Mcryptcompat-1.9.4.0.xml b/var/package/Lib_Mcryptcompat-1.9.4.0.xml
new file mode 100644
index 0000000..b2c892b
--- /dev/null
+++ b/var/package/Lib_Mcryptcompat-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Mcryptcompat</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://www.opensource.org/licenses/mit-license.html">MIT</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Mcrypt Library</summary>
+    <description>PHP 7.1 removed the mcrypt extension. This provides a compatibility layer for legacy applications.</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Jim Wigginton</name><user>core</user><email>terrafrost@php.net</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:01</time>
+    <contents><target name="magelib"><dir name="mcryptcompat"><file name="mcrypt.php" hash="bf8efc3ef65399aba6c1f08e9b3adbe0"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_Pelago-1.9.3.10.xml b/var/package/Lib_Pelago-1.9.3.10.xml
deleted file mode 100644
index 7bdba21..0000000
--- a/var/package/Lib_Pelago-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Pelago</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Pelago Library</summary>
-    <description>Pelago Library</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:15</time>
-    <contents><target name="magelib"><dir name="Pelago"><file name="Emogrifier.php" hash="de3919d36c718834d9755dd1cb68df87"/></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_Pelago-1.9.4.0.xml b/var/package/Lib_Pelago-1.9.4.0.xml
new file mode 100644
index 0000000..6145361
--- /dev/null
+++ b/var/package/Lib_Pelago-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Pelago</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Pelago Library</summary>
+    <description>Pelago Library</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:01</time>
+    <contents><target name="magelib"><dir name="Pelago"><file name="Emogrifier.php" hash="de3919d36c718834d9755dd1cb68df87"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_Phpseclib-1.9.3.10.xml b/var/package/Lib_Phpseclib-1.9.3.10.xml
deleted file mode 100644
index 64a9598..0000000
--- a/var/package/Lib_Phpseclib-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Phpseclib</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://www.gnu.org/licenses/lgpl.txt">LGPL v.3</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Phpseclib Library</summary>
-    <description>Phpseclib Library</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:15</time>
-    <contents><target name="magelib"><dir name="phpseclib"><dir name="Crypt"><file name="AES.php" hash="6af09e1f2da7eb069760d788ee0d54e0"/><file name="DES.php" hash="1b75baa9ddad68309b8e82a6cebc8dc1"/><file name="Hash.php" hash="f8ca80e79e2d570afeb2f78023f213d4"/><file name="RC4.php" hash="2e507f5635b6d98d9daaa341a8a6fb8b"/><file name="RSA.php" hash="579c11f7b2e05cae01b67b31461ca264"/><file name="Random.php" hash="6e86dfbd3f8f19f32f13a53a756e53af"/><file name="Rijndael.php" hash="3a0aa237cbc23ffba12aad6dd5215ab8"/><file name="TripleDES.php" hash="db12eebd6ed7290e4ac0d521ab5c55ce"/></dir><dir name="Math"><file name="BigInteger.php" hash="8dd950e566864b28c92b58acb06e1535"/></dir><dir name="Net"><file name="SFTP.php" hash="4665bea6e721ec016e0e70207cf45339"/><file name="SSH1.php" hash="19155c50cf00370152905b2a4a6ce657"/><file name="SSH2.php" hash="65563b38d6e6df3e8ebc628cec86f86d"/></dir><dir name="PHP"><dir name="Compat"><dir name="Function"><file name="array_fill.php" hash="2c0a4268deed10ced9491155e2284a82"/><file name="bcpowmod.php" hash="37fc1de34085874a930eaa76888f0cb1"/><file name="str_split.php" hash="889ab2b0d90b0962ded2ee65f1bfbc37"/></dir></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_Phpseclib-1.9.4.0.xml b/var/package/Lib_Phpseclib-1.9.4.0.xml
new file mode 100644
index 0000000..299b108
--- /dev/null
+++ b/var/package/Lib_Phpseclib-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Phpseclib</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://www.gnu.org/licenses/lgpl.txt">LGPL v.3</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Phpseclib Library</summary>
+    <description>Phpseclib Library</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:01</time>
+    <contents><target name="magelib"><dir name="phpseclib"><dir name="Crypt"><file name="AES.php" hash="22d0024134a5291b96ba1e04ff5706cc"/><file name="Base.php" hash="30f53da6745acd05de335bbf8a81c171"/><file name="Blowfish.php" hash="af6bf1aa8864cba2be2cd01059504f8c"/><file name="DES.php" hash="dd4ec1b7a4b4a67d0b41fc45a3d9a060"/><file name="Hash.php" hash="eb18f40942a4431ef8704b7e3a8013fd"/><file name="RC2.php" hash="e26943cba9cf24f4231fc9fa52002eca"/><file name="RC4.php" hash="de8b1dcc1a3e0a18b4d0b27f9f56c063"/><file name="RSA.php" hash="450260568ddca20f50130fb54f3907a7"/><file name="Random.php" hash="93193a666526c63ba95629cd71504aef"/><file name="Rijndael.php" hash="e695ed56c5178ac7ee1f438e728f1f24"/><file name="TripleDES.php" hash="3c282665b77ed6a970f2f34ec0305953"/><file name="Twofish.php" hash="5eb765fe5f99cee6236198ef6b0ce273"/></dir><dir name="File"><file name="ANSI.php" hash="0bbcc6b7de2830e94d8653123441eabe"/><dir name="ASN1"><file name="Element.php" hash="c94013bbb82d49d0c467a5e48fc318bd"/></dir><file name="ASN1.php" hash="f08c586b9ae2d22439620659410e0d8f"/><file name="X509.php" hash="b1c6ed7a19714520d227eb9d951c0963"/></dir><dir name="Math"><file name="BigInteger.php" hash="ac5a5a2c4575e74393c3137cc76e0919"/></dir><dir name="Net"><file name="SCP.php" hash="6f04a3784d5b677391fac09b152d2c86"/><dir name="SFTP"><file name="Stream.php" hash="819f66e981bbd02ad8237413c8cb13a2"/></dir><file name="SFTP.php" hash="81b700bba41e7578744b87f0daf5da6d"/><file name="SSH1.php" hash="aa19523d08b5db590d8413795f7d9f41"/><file name="SSH2.php" hash="97b204231f064dd38b0751aaf7617e48"/></dir><dir name="PHP"><dir name="Compat"><dir name="Function"><file name="array_fill.php" hash="2c0a4268deed10ced9491155e2284a82"/><file name="bcpowmod.php" hash="37fc1de34085874a930eaa76888f0cb1"/><file name="str_split.php" hash="889ab2b0d90b0962ded2ee65f1bfbc37"/></dir></dir></dir><dir name="System"><dir name="SSH"><dir name="Agent"><file name="Identity.php" hash="0592ff991d07c93a2bcbb2dfcbd85e5b"/></dir><file name="Agent.php" hash="4d1554ca5700f3359c827a8cb9c9ca07"/></dir></dir><file name="bootstrap.php" hash="1fd3efc24ca047574642e5fe830e6194"/><file name="openssl.cnf" hash="b4409823562c617107907cd04d67c8fa"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_Unserialize-1.9.3.10.xml b/var/package/Lib_Unserialize-1.9.3.10.xml
deleted file mode 100644
index 6fec564..0000000
--- a/var/package/Lib_Unserialize-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Unserialize</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/osl-3.0.php">Magento Core Edition</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Magento Library</summary>
-    <description>Magento Library</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:15</time>
-    <contents><target name="magelib"><dir name="Unserialize"><file name="Parser.php" hash="a6ed4dfff7ea3c5a9a25faabd3c4b8ce"/><dir name="Reader"><file name="Arr.php" hash="c64df9e432b8d27ab17f5eb76cace94a"/><file name="ArrKey.php" hash="120e34968eed7cae3bcabc6c3b47806e"/><file name="ArrValue.php" hash="61f5b23442dd9a098f381316fd239441"/><file name="Bool.php" hash="a644633ffe141e995ae17ec5cd381c85"/><file name="Dbl.php" hash="d1272d69b5672c9120fc8d39e55f92ff"/><file name="Int.php" hash="fa568e8f975fbff5efc38c6545b161dd"/><file name="Null.php" hash="980301f21c3ed844e58d204beb0d808e"/><file name="Str.php" hash="65cac13641db41bb55853576499e781d"/></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_Unserialize-1.9.4.0.xml b/var/package/Lib_Unserialize-1.9.4.0.xml
new file mode 100644
index 0000000..a74ad54
--- /dev/null
+++ b/var/package/Lib_Unserialize-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Unserialize</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/osl-3.0.php">Magento Core Edition</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Magento Library</summary>
+    <description>Magento Library</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:01</time>
+    <contents><target name="magelib"><dir name="Unserialize"><file name="Parser.php" hash="a6ed4dfff7ea3c5a9a25faabd3c4b8ce"/><dir name="Reader"><file name="Arr.php" hash="c64df9e432b8d27ab17f5eb76cace94a"/><file name="ArrKey.php" hash="120e34968eed7cae3bcabc6c3b47806e"/><file name="ArrValue.php" hash="61f5b23442dd9a098f381316fd239441"/><file name="Bool.php" hash="a644633ffe141e995ae17ec5cd381c85"/><file name="Dbl.php" hash="d1272d69b5672c9120fc8d39e55f92ff"/><file name="Int.php" hash="fa568e8f975fbff5efc38c6545b161dd"/><file name="Null.php" hash="980301f21c3ed844e58d204beb0d808e"/><file name="Str.php" hash="65cac13641db41bb55853576499e781d"/></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Lib_Varien-1.9.3.10.xml b/var/package/Lib_Varien-1.9.3.10.xml
deleted file mode 100644
index 8ee56bf..0000000
--- a/var/package/Lib_Varien-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_Varien</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Varien Library</summary>
-    <description>Varien Library</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:15</time>
-    <contents><target name="magelib"><dir name="Varien"><file name="Autoload.php" hash="f95cf98bb8d81e13b862777427d70277"/><dir name="Cache"><dir name="Backend"><file name="Database.php" hash="f10f11b0cd11baed0cb2306a9443a6cd"/><file name="Eaccelerator.php" hash="cc97685065562865dba40b108edf32b6"/><file name="Memcached.php" hash="7a5c748a9f2eeec61cc07d9de9472387"/></dir><file name="Core.php" hash="c5b5ad380e58fbc08318131523156b99"/></dir><dir name="Convert"><dir name="Action"><file name="Abstract.php" hash="f08cdad50faa8fccbc92e1de32241e64"/><file name="Interface.php" hash="f98e70c7da35df8e10fd94d60e2ff449"/></dir><file name="Action.php" hash="3b97e7c79ff9eb71e3f0526e876896c0"/><dir name="Adapter"><file name="Abstract.php" hash="9e95ba1f0a96c078834b7ccaebc09e62"/><dir name="Db"><file name="Table.php" hash="54727e849fe22ff68ab63492d503010f"/></dir><dir name="Http"><file name="Curl.php" hash="5955504a3ccbc61715d40c14bb4a7f62"/></dir><file name="Http.php" hash="7e12f3e9e1b2a182889f474c07a6a975"/><file name="Interface.php" hash="4ecd613e941abf46798154cac25bbe5c"/><file name="Io.php" hash="44fa563ae5aa2121f174146f93d25972"/><file name="Soap.php" hash="e925540ce1d250606ce93e6799d25722"/><file name="Std.php" hash="2c0b95e5b951aa2d7295c0ca0e96302d"/><dir name="Zend"><file name="Cache.php" hash="ab00f6b0e4765ab05635dc028d849829"/><file name="Db.php" hash="9b8a7aa60eb6d48b05bcf7346ac49bff"/></dir></dir><dir name="Container"><file name="Abstract.php" hash="e405297bed690cb85db8b3ba128064f9"/><file name="Collection.php" hash="9479ab2fd8053670c9bca6a3a29f9771"/><file name="Generic.php" hash="4d1af502665cc2358cdd42a36da2965f"/><file name="Interface.php" hash="312ab40a2a6060f4bf6849d4ecc5af2b"/></dir><file name="Exception.php" hash="c198c87ac4077346323921516318f55d"/><dir name="Mapper"><file name="Abstract.php" hash="4fc92ece94b10c34ad7652ae65a73b67"/><file name="Column.php" hash="6e4608ee0bc9b90a8cd6d384e63c2e2d"/><file name="Interface.php" hash="09efdacbea50e9238229dfa74d401f07"/></dir><dir name="Parser"><file name="Abstract.php" hash="382e8b73bbd42ac0a016eab4e025c033"/><file name="Csv.php" hash="792baac6606d380c8992f337506797ad"/><file name="Interface.php" hash="06a65a77e00f63e75d4c8471ba5fee53"/><file name="Serialize.php" hash="66712f86ef3c72475b5f2437232533cd"/><dir name="Xml"><file name="Excel.php" hash="bd3fccae662ee6f9a457277a1b61d4b4"/></dir></dir><dir name="Profile"><file name="Abstract.php" hash="eb43c2ef32390fbc68cbbab9a635fbe2"/><file name="Collection.php" hash="1a8f9975c44e6ee9ab0e5ed417ebb69c"/></dir><file name="Profile.php" hash="0370c1e24bcc52c50c3ec010464068d6"/><dir name="Validator"><file name="Abstract.php" hash="c30d6ea61664e526b80693747fab8dca"/><file name="Column.php" hash="cf76fe39fa11750d6d5ecf7d49704f62"/><file name="Dryrun.php" hash="6fb6fa70b9e50086da18c6f410d129c7"/><file name="Interface.php" hash="0c3882b052cca2e3288aedee02989830"/></dir></dir><file name="Convert.php" hash="46a7e86a8ace0c13b521b7fea63e12e6"/><dir name="Crypt"><file name="Abstract.php" hash="eb1cafa758bddb5e4b16d82a6c58c53b"/><file name="Mcrypt.php" hash="029c1701f5d850bf9b636b2ab0e8aa25"/></dir><file name="Crypt.php" hash="2961fc8be8f2a01c697ef0c80fdd5f05"/><dir name="Data"><dir name="Collection"><file name="Db.php" hash="360d280e1e465aa4798ec000c143d8ed"/><file name="Filesystem.php" hash="edf7736ae0592e7b037a8055956ca038"/></dir><file name="Collection.php" hash="a6a58e45c273c3e80482692801eca87d"/><dir name="Form"><file name="Abstract.php" hash="68e6d626779b575961957f0ba5764662"/><dir name="Element"><file name="Abstract.php" hash="fa28645308fa7afe0553ec4b9fc5a2eb"/><file name="Button.php" hash="14053ef464963479967e5d92b8f7f2e1"/><file name="Checkbox.php" hash="71be65c99441f9ebc266e52d5f0c3ce9"/><file name="Checkboxes.php" hash="7cfaa815ccfbfe7797140a305393ac0c"/><file name="Collection.php" hash="9cb710827d7833c3c163280db0a0f8ce"/><file name="Column.php" hash="981c5cc0eca4a5dc77cfebf88a30cf33"/><file name="Date.php" hash="206e89d0dc4ab59bc57ff84690b9b068"/><file name="Datetime.php" hash="c1f342fe6639eaf9ebe7b4cce7a86295"/><file name="Editor.php" hash="53ba59a7010fdb301c035cac8f0c3760"/><file name="Fieldset.php" hash="45f2e0e602644fd44758b3be880629fc"/><file name="File.php" hash="cbe609ce2ce4c791f9249d06e3be6c7c"/><file name="Gallery.php" hash="87a3207d14500cd65725a66918fae2a8"/><file name="Hidden.php" hash="e8b46511eea3a5233071a137fcefe406"/><file name="Image.php" hash="a27af0545a6795b543e4a74baeca06c0"/><file name="Imagefile.php" hash="c665eaae499b8a031b73a0dc7f785840"/><file name="Label.php" hash="28bf2d22964397d9299dd07470dcc3e3"/><file name="Link.php" hash="6528d397238cedd1377a8d5622d62291"/><file name="Multiline.php" hash="4d963a66cea1fc47a80007ac28c96a30"/><file name="Multiselect.php" hash="10593b01d8206c385366510ab7c7fa87"/><file name="Note.php" hash="40716d10385639bc3d02107682b81927"/><file name="Obscure.php" hash="36f7a3338959855a43c9e515b8d1fa6a"/><file name="Password.php" hash="7a2b4bb659b5de8636c1be54c72acd32"/><file name="Radio.php" hash="2d79fcc287e7ce2e270e80f835dba8a3"/><file name="Radios.php" hash="b49934be42ee2fabe8674b17986a8f2d"/><dir name="Renderer"><file name="Interface.php" hash="f29db3bc3a621fd234eb9002d01b5774"/></dir><file name="Reset.php" hash="37a93fe24e647569da0dc5e3ea6f6b9a"/><file name="Select.php" hash="10236470a728b841ade5e198ed649c6c"/><file name="Submit.php" hash="165d17de52334eb7d8e34e03d5f6fb7e"/><file name="Text.php" hash="c5ea165f4a51705857dca24390be50aa"/><file name="Textarea.php" hash="df882762f2c1d59a96f130b615453a23"/><file name="Time.php" hash="1135575de5522b7288b1cf47333af428"/></dir><dir name="Filter"><file name="Date.php" hash="3a824ffe28a4256bb565124900d3a4be"/><file name="Datetime.php" hash="746f36a2e7694a07c4055a9a0d8ea435"/><file name="Escapehtml.php" hash="5d1f6b46bcf48732a00431a1bc19aef8"/><file name="Interface.php" hash="d04e2fec8e5ac11670d7f55ddbd773bd"/><file name="Striptags.php" hash="17155dec034f60136dff596884f9e222"/></dir></dir><file name="Form.php" hash="21310a418407c727298db35a0daf1f3d"/><dir name="Tree"><file name="Db.php" hash="df3ea304d0cfb8cbd25c9d28c87703bd"/><file name="Dbp.php" hash="9c0d64b0f6ec2d09bac5a9a0092dc433"/><dir name="Node"><file name="Collection.php" hash="b70bd872ad6fdc73ecd7f0633952a381"/></dir><file name="Node.php" hash="607ff14056b49b7c51d31af235c33d41"/></dir><file name="Tree.php" hash="2bf738a89219853173d373acc9a640fb"/></dir><file name="Date.php" hash="fee00689f607a7ecf069e00c4187d5ee"/><dir name="Db"><dir name="Adapter"><file name="Interface.php" hash="c13a55c43bbaa8b566d6e2353944b890"/><file name="Mysqli.php" hash="b6c036d18132ca0ca80d26700751dd89"/><dir name="Pdo"><file name="Mysql.php" hash="6d9d8d7c48d5afac49fa92ef90c48611"/></dir></dir><dir name="Ddl"><file name="Table.php" hash="20a1563e2610e6161317b17e3f81d1c0"/></dir><file name="Exception.php" hash="c099346a2e4c0c9034a6e7630778f7e8"/><file name="Helper.php" hash="73eedcb369100f90eefaa80a766c64c4"/><file name="Select.php" hash="f0b8f7a95449c9d8b0317e779e9ede68"/><dir name="Statement"><file name="Parameter.php" hash="eb73496668b9d0112e6697c1216a5346"/><dir name="Pdo"><file name="Mysql.php" hash="fd1e46ceb0b9ac253b33371317375e8f"/></dir></dir><dir name="Tree"><file name="Exception.php" hash="19dbeee477e639b088ee807e4bd84dc2"/><dir name="Node"><file name="Exception.php" hash="b18689e161efa37981ea924e70d87738"/></dir><file name="Node.php" hash="fd4896d033af1c9fa7762ab4d88be3b3"/><dir name="NodeSet"><file name="Exception.php" hash="142dfe2d6b0fd295b513f62a5870b4d3"/></dir><file name="NodeSet.php" hash="ae772ac03fba4ff292fa6fa08d51ad3d"/></dir><file name="Tree.php" hash="4081f9dde4cc5fc216b2eb36b5bf62e8"/></dir><file name="Debug.php" hash="f28e98293553fa1a2552a4ef444eef75"/><dir name="Directory"><file name="Collection.php" hash="e5f1c5052a3a749ebcdea94694a3aaa2"/><file name="Factory.php" hash="f1fd7212a10c6a9cb7ebe9ab21e91d77"/><file name="IFactory.php" hash="0d117aa06ac87f6e3c5f09766b38e13a"/><file name="a.txt" hash="026e450c46ac92ea375302955a4f42fb"/></dir><dir name="Event"><file name="Collection.php" hash="9d99e1a5b2d678c8009f7b672cbae4c6"/><dir name="Observer"><file name="Collection.php" hash="200b88fec0363e745e83dbc789173af0"/><file name="Cron.php" hash="c05f829caafdcb21ae6b4902f660f95d"/><file name="Regex.php" hash="e988f035c549b6b15c0e244a1bb11367"/></dir><file name="Observer.php" hash="66c279124f63bc73c24ce63a86d97ed6"/></dir><file name="Event.php" hash="4ce1363eee411291fc83db4c0669e619"/><file name="Exception.php" hash="f942caba0b856d4c84c9c23857323ca6"/><dir name="File"><file name="Csv.php" hash="78ad2ad633e37aad62178af9d479aaee"/><file name="CsvMulty.php" hash="cc7c533d96bb9b633462604d9493e4fe"/><file name="Object.php" hash="3b4e18159835d64b27fc2b09cdb21aa2"/><dir name="Transfer"><dir name="Adapter"><file name="Http.php" hash="f51917fa3176f40947213242b104b467"/></dir></dir><dir name="Uploader"><file name="Image.php" hash="c69ac6f559f7e35e987a19cf792d162a"/></dir><file name="Uploader.php" hash="cce8ab39e60b9ff3e623a1bd16a162d1"/></dir><dir name="Filter"><dir name="Array"><file name="Grid.php" hash="f717b1ef6e91b580f1ac491691f9edaf"/></dir><file name="Array.php" hash="fd5dabce1a8280ebab4ff47505005619"/><file name="Email.php" hash="d9f891cf1c048108cbfc0247990e8fb3"/><file name="FormElementName.php" hash="1726a40e399ca9418aa2c9a6730dbb8c"/><file name="Money.php" hash="63d238c3555094ade8a14eb6d42010af"/><dir name="Object"><file name="Grid.php" hash="850263994ebc6ad5edeb483f317db179"/></dir><file name="Object.php" hash="b315a6ae1f95f31787474cf694d6bbc8"/><file name="Sprintf.php" hash="2fffd1470053951886d7a574f3671497"/><dir name="Template"><file name="Simple.php" hash="a23d47096582716a01f55d25e6f267e0"/><dir name="Tokenizer"><file name="Abstract.php" hash="78735e5cc10d138e57913a465086de5f"/><file name="Parameter.php" hash="dcaa7d54f6f9bbc7cc46580c468e82cb"/><file name="Variable.php" hash="176437ed02703970392956e3ebe1a635"/></dir></dir><file name="Template.php" hash="f68942ca438fd163b3e7d61c14d708c5"/></dir><dir name="Http"><dir name="Adapter"><file name="Curl.php" hash="5cd76ff6c6abee1bb9d68761af446ca9"/></dir><file name="Client.php" hash="f10044719a133419d9f262507f75c75f"/></dir><dir name="Image"><dir name="Adapter"><file name="Abstract.php" hash="0812e524a0467377ca8a7f7a8e3fd0af"/><file name="Gd2.php" hash="c6b0d8ae75d76f82d347ff84e1f27f74"/></dir><file name="Adapter.php" hash="971f7941dec2fa4d542fea26e092a9ce"/></dir><file name="Image.php" hash="f3ceb270d95ad7447a22b3b7b2207eae"/><dir name="Io"><file name="Abstract.php" hash="a0013ae157c383c79396cca3a3f95104"/><file name="Exception.php" hash="a7785c16c28846d4d269634b0577b75d"/><file name="File.php" hash="3cb64844e4235f3bacdd27e3dbc40b1d"/><file name="Ftp.php" hash="26f51613ff21c56401d7a6e619e6d128"/><file name="Interface.php" hash="5cfdbec1a6c94d0c47ceb84ca06c1252"/><file name="Sftp.php" hash="d31c91e2af9a7f136b679c73c9306108"/></dir><dir name="Object"><file name="Cache.php" hash="185457f3c1b369d8bc44c2550ebb7790"/><file name="Mapper.php" hash="6ba50bea44b2a5d7d8174f6caca95838"/></dir><file name="Object.php" hash="73b091578424f92b65725403f083cd63"/><dir name="Pear"><file name="Frontend.php" hash="83313301512d529f71a8c3bdbd39a5ff"/><file name="Package.php" hash="3084b59014bbd3fad2466fcf8072c04c"/><file name="Registry.php" hash="31ec6e3fd934f097bd0c1d308d6d4b8d"/></dir><file name="Pear.php" hash="960057984b3515d6a337be700abbd257"/><file name="Profiler.php" hash="98121aa7a444c9bdf2064354a0797996"/><dir name="Simplexml"><dir name="Config"><dir name="Cache"><file name="Abstract.php" hash="63b77872096068ff5b122258272516d3"/><file name="File.php" hash="7f6d2894e22a668cbec7218421afec24"/></dir></dir><file name="Config.php" hash="88f772f3d981ff18100336957aa75183"/><file name="Element.php" hash="a55c460c2002e788cc7b28e0d49bd5d9"/></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Lib_ZF</name><channel>community</channel><min>1.12.10.15</min><max>1.12.10.15</max></package><extension><name>PDO</name><min/><max/></extension><extension><name>SPL</name><min/><max/></extension><extension><name>curl</name><min/><max/></extension><extension><name>SimpleXML</name><min/><max/></extension><extension><name>dom</name><min/><max/></extension><extension><name>gd</name><min/><max/></extension><extension><name>iconv</name><min/><max/></extension><extension><name>pdo_mysql</name><min/><max/></extension><extension><name>mcrypt</name><min/><max/></extension><extension><name>pcre</name><min/><max/></extension><extension><name>Reflection</name><min/><max/></extension><extension><name>session</name><min/><max/></extension></required></dependencies>
-</package>
diff --git a/var/package/Lib_Varien-1.9.4.0.xml b/var/package/Lib_Varien-1.9.4.0.xml
new file mode 100644
index 0000000..6fc0373
--- /dev/null
+++ b/var/package/Lib_Varien-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_Varien</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Varien Library</summary>
+    <description>Varien Library</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:01</time>
+    <contents><target name="magelib"><dir name="Varien"><file name="Autoload.php" hash="1afe7d1796e64e4bba412384442de930"/><dir name="Cache"><dir name="Backend"><file name="Database.php" hash="f10f11b0cd11baed0cb2306a9443a6cd"/><file name="Eaccelerator.php" hash="cc97685065562865dba40b108edf32b6"/><file name="Memcached.php" hash="7a5c748a9f2eeec61cc07d9de9472387"/></dir><file name="Core.php" hash="c5b5ad380e58fbc08318131523156b99"/></dir><dir name="Convert"><dir name="Action"><file name="Abstract.php" hash="f08cdad50faa8fccbc92e1de32241e64"/><file name="Interface.php" hash="f98e70c7da35df8e10fd94d60e2ff449"/></dir><file name="Action.php" hash="3b97e7c79ff9eb71e3f0526e876896c0"/><dir name="Adapter"><file name="Abstract.php" hash="9e95ba1f0a96c078834b7ccaebc09e62"/><dir name="Db"><file name="Table.php" hash="54727e849fe22ff68ab63492d503010f"/></dir><dir name="Http"><file name="Curl.php" hash="5955504a3ccbc61715d40c14bb4a7f62"/></dir><file name="Http.php" hash="7e12f3e9e1b2a182889f474c07a6a975"/><file name="Interface.php" hash="4ecd613e941abf46798154cac25bbe5c"/><file name="Io.php" hash="44fa563ae5aa2121f174146f93d25972"/><file name="Soap.php" hash="e925540ce1d250606ce93e6799d25722"/><file name="Std.php" hash="2c0b95e5b951aa2d7295c0ca0e96302d"/><dir name="Zend"><file name="Cache.php" hash="ab00f6b0e4765ab05635dc028d849829"/><file name="Db.php" hash="9b8a7aa60eb6d48b05bcf7346ac49bff"/></dir></dir><dir name="Container"><file name="Abstract.php" hash="e405297bed690cb85db8b3ba128064f9"/><file name="Collection.php" hash="9479ab2fd8053670c9bca6a3a29f9771"/><file name="Generic.php" hash="4d1af502665cc2358cdd42a36da2965f"/><file name="Interface.php" hash="312ab40a2a6060f4bf6849d4ecc5af2b"/></dir><file name="Exception.php" hash="c198c87ac4077346323921516318f55d"/><dir name="Mapper"><file name="Abstract.php" hash="4fc92ece94b10c34ad7652ae65a73b67"/><file name="Column.php" hash="6e4608ee0bc9b90a8cd6d384e63c2e2d"/><file name="Interface.php" hash="09efdacbea50e9238229dfa74d401f07"/></dir><dir name="Parser"><file name="Abstract.php" hash="382e8b73bbd42ac0a016eab4e025c033"/><file name="Csv.php" hash="792baac6606d380c8992f337506797ad"/><file name="Interface.php" hash="06a65a77e00f63e75d4c8471ba5fee53"/><file name="Serialize.php" hash="66712f86ef3c72475b5f2437232533cd"/><dir name="Xml"><file name="Excel.php" hash="bd3fccae662ee6f9a457277a1b61d4b4"/></dir></dir><dir name="Profile"><file name="Abstract.php" hash="eb43c2ef32390fbc68cbbab9a635fbe2"/><file name="Collection.php" hash="1a8f9975c44e6ee9ab0e5ed417ebb69c"/></dir><file name="Profile.php" hash="0370c1e24bcc52c50c3ec010464068d6"/><dir name="Validator"><file name="Abstract.php" hash="c30d6ea61664e526b80693747fab8dca"/><file name="Column.php" hash="cf76fe39fa11750d6d5ecf7d49704f62"/><file name="Dryrun.php" hash="6fb6fa70b9e50086da18c6f410d129c7"/><file name="Interface.php" hash="0c3882b052cca2e3288aedee02989830"/></dir></dir><file name="Convert.php" hash="46a7e86a8ace0c13b521b7fea63e12e6"/><dir name="Crypt"><file name="Abstract.php" hash="eb1cafa758bddb5e4b16d82a6c58c53b"/><file name="Mcrypt.php" hash="029c1701f5d850bf9b636b2ab0e8aa25"/></dir><file name="Crypt.php" hash="2961fc8be8f2a01c697ef0c80fdd5f05"/><dir name="Data"><dir name="Collection"><file name="Db.php" hash="360d280e1e465aa4798ec000c143d8ed"/><file name="Filesystem.php" hash="edf7736ae0592e7b037a8055956ca038"/></dir><file name="Collection.php" hash="a6a58e45c273c3e80482692801eca87d"/><dir name="Form"><file name="Abstract.php" hash="68e6d626779b575961957f0ba5764662"/><dir name="Element"><file name="Abstract.php" hash="fa28645308fa7afe0553ec4b9fc5a2eb"/><file name="Button.php" hash="14053ef464963479967e5d92b8f7f2e1"/><file name="Checkbox.php" hash="71be65c99441f9ebc266e52d5f0c3ce9"/><file name="Checkboxes.php" hash="7cfaa815ccfbfe7797140a305393ac0c"/><file name="Collection.php" hash="9cb710827d7833c3c163280db0a0f8ce"/><file name="Column.php" hash="981c5cc0eca4a5dc77cfebf88a30cf33"/><file name="Date.php" hash="206e89d0dc4ab59bc57ff84690b9b068"/><file name="Datetime.php" hash="c1f342fe6639eaf9ebe7b4cce7a86295"/><file name="Editor.php" hash="53ba59a7010fdb301c035cac8f0c3760"/><file name="Fieldset.php" hash="45f2e0e602644fd44758b3be880629fc"/><file name="File.php" hash="cbe609ce2ce4c791f9249d06e3be6c7c"/><file name="Gallery.php" hash="87a3207d14500cd65725a66918fae2a8"/><file name="Hidden.php" hash="e8b46511eea3a5233071a137fcefe406"/><file name="Image.php" hash="a27af0545a6795b543e4a74baeca06c0"/><file name="Imagefile.php" hash="c665eaae499b8a031b73a0dc7f785840"/><file name="Label.php" hash="28bf2d22964397d9299dd07470dcc3e3"/><file name="Link.php" hash="6528d397238cedd1377a8d5622d62291"/><file name="Multiline.php" hash="4d963a66cea1fc47a80007ac28c96a30"/><file name="Multiselect.php" hash="10593b01d8206c385366510ab7c7fa87"/><file name="Note.php" hash="40716d10385639bc3d02107682b81927"/><file name="Obscure.php" hash="36f7a3338959855a43c9e515b8d1fa6a"/><file name="Password.php" hash="7a2b4bb659b5de8636c1be54c72acd32"/><file name="Radio.php" hash="2d79fcc287e7ce2e270e80f835dba8a3"/><file name="Radios.php" hash="b49934be42ee2fabe8674b17986a8f2d"/><dir name="Renderer"><file name="Interface.php" hash="f29db3bc3a621fd234eb9002d01b5774"/></dir><file name="Reset.php" hash="37a93fe24e647569da0dc5e3ea6f6b9a"/><file name="Select.php" hash="10236470a728b841ade5e198ed649c6c"/><file name="Submit.php" hash="165d17de52334eb7d8e34e03d5f6fb7e"/><file name="Text.php" hash="c5ea165f4a51705857dca24390be50aa"/><file name="Textarea.php" hash="df882762f2c1d59a96f130b615453a23"/><file name="Time.php" hash="1135575de5522b7288b1cf47333af428"/></dir><dir name="Filter"><file name="Date.php" hash="3a824ffe28a4256bb565124900d3a4be"/><file name="Datetime.php" hash="746f36a2e7694a07c4055a9a0d8ea435"/><file name="Escapehtml.php" hash="5d1f6b46bcf48732a00431a1bc19aef8"/><file name="Interface.php" hash="d04e2fec8e5ac11670d7f55ddbd773bd"/><file name="Striptags.php" hash="17155dec034f60136dff596884f9e222"/></dir></dir><file name="Form.php" hash="21310a418407c727298db35a0daf1f3d"/><dir name="Tree"><file name="Db.php" hash="df3ea304d0cfb8cbd25c9d28c87703bd"/><file name="Dbp.php" hash="9c0d64b0f6ec2d09bac5a9a0092dc433"/><dir name="Node"><file name="Collection.php" hash="b70bd872ad6fdc73ecd7f0633952a381"/></dir><file name="Node.php" hash="607ff14056b49b7c51d31af235c33d41"/></dir><file name="Tree.php" hash="2bf738a89219853173d373acc9a640fb"/></dir><file name="Date.php" hash="fee00689f607a7ecf069e00c4187d5ee"/><dir name="Db"><dir name="Adapter"><file name="Interface.php" hash="c13a55c43bbaa8b566d6e2353944b890"/><file name="Mysqli.php" hash="b6c036d18132ca0ca80d26700751dd89"/><dir name="Pdo"><file name="Mysql.php" hash="6d9d8d7c48d5afac49fa92ef90c48611"/></dir></dir><dir name="Ddl"><file name="Table.php" hash="20a1563e2610e6161317b17e3f81d1c0"/></dir><file name="Exception.php" hash="c099346a2e4c0c9034a6e7630778f7e8"/><file name="Helper.php" hash="73eedcb369100f90eefaa80a766c64c4"/><file name="Select.php" hash="f0b8f7a95449c9d8b0317e779e9ede68"/><dir name="Statement"><file name="Parameter.php" hash="eb73496668b9d0112e6697c1216a5346"/><dir name="Pdo"><file name="Mysql.php" hash="fd1e46ceb0b9ac253b33371317375e8f"/></dir></dir><dir name="Tree"><file name="Exception.php" hash="19dbeee477e639b088ee807e4bd84dc2"/><dir name="Node"><file name="Exception.php" hash="b18689e161efa37981ea924e70d87738"/></dir><file name="Node.php" hash="fd4896d033af1c9fa7762ab4d88be3b3"/><dir name="NodeSet"><file name="Exception.php" hash="142dfe2d6b0fd295b513f62a5870b4d3"/></dir><file name="NodeSet.php" hash="ae772ac03fba4ff292fa6fa08d51ad3d"/></dir><file name="Tree.php" hash="4081f9dde4cc5fc216b2eb36b5bf62e8"/></dir><file name="Debug.php" hash="f28e98293553fa1a2552a4ef444eef75"/><dir name="Directory"><file name="Collection.php" hash="e5f1c5052a3a749ebcdea94694a3aaa2"/><file name="Factory.php" hash="f1fd7212a10c6a9cb7ebe9ab21e91d77"/><file name="IFactory.php" hash="0d117aa06ac87f6e3c5f09766b38e13a"/><file name="a.txt" hash="026e450c46ac92ea375302955a4f42fb"/></dir><dir name="Event"><file name="Collection.php" hash="9d99e1a5b2d678c8009f7b672cbae4c6"/><dir name="Observer"><file name="Collection.php" hash="200b88fec0363e745e83dbc789173af0"/><file name="Cron.php" hash="c05f829caafdcb21ae6b4902f660f95d"/><file name="Regex.php" hash="e988f035c549b6b15c0e244a1bb11367"/></dir><file name="Observer.php" hash="66c279124f63bc73c24ce63a86d97ed6"/></dir><file name="Event.php" hash="4ce1363eee411291fc83db4c0669e619"/><file name="Exception.php" hash="f942caba0b856d4c84c9c23857323ca6"/><dir name="File"><file name="Csv.php" hash="78ad2ad633e37aad62178af9d479aaee"/><file name="CsvMulty.php" hash="cc7c533d96bb9b633462604d9493e4fe"/><file name="Object.php" hash="3b4e18159835d64b27fc2b09cdb21aa2"/><dir name="Transfer"><dir name="Adapter"><file name="Http.php" hash="f51917fa3176f40947213242b104b467"/></dir></dir><dir name="Uploader"><file name="Image.php" hash="c69ac6f559f7e35e987a19cf792d162a"/></dir><file name="Uploader.php" hash="83a7ff76dc32bb7af4ef7de883be27ad"/></dir><dir name="Filter"><dir name="Array"><file name="Grid.php" hash="f717b1ef6e91b580f1ac491691f9edaf"/></dir><file name="Array.php" hash="fd5dabce1a8280ebab4ff47505005619"/><file name="Email.php" hash="d9f891cf1c048108cbfc0247990e8fb3"/><file name="FormElementName.php" hash="1726a40e399ca9418aa2c9a6730dbb8c"/><file name="Money.php" hash="63d238c3555094ade8a14eb6d42010af"/><dir name="Object"><file name="Grid.php" hash="850263994ebc6ad5edeb483f317db179"/></dir><file name="Object.php" hash="b315a6ae1f95f31787474cf694d6bbc8"/><file name="Sprintf.php" hash="2fffd1470053951886d7a574f3671497"/><dir name="Template"><file name="Simple.php" hash="a23d47096582716a01f55d25e6f267e0"/><dir name="Tokenizer"><file name="Abstract.php" hash="78735e5cc10d138e57913a465086de5f"/><file name="Parameter.php" hash="dcaa7d54f6f9bbc7cc46580c468e82cb"/><file name="Variable.php" hash="176437ed02703970392956e3ebe1a635"/></dir></dir><file name="Template.php" hash="f68942ca438fd163b3e7d61c14d708c5"/></dir><dir name="Http"><dir name="Adapter"><file name="Curl.php" hash="5cd76ff6c6abee1bb9d68761af446ca9"/></dir><file name="Client.php" hash="f10044719a133419d9f262507f75c75f"/></dir><dir name="Image"><dir name="Adapter"><file name="Abstract.php" hash="0812e524a0467377ca8a7f7a8e3fd0af"/><file name="Gd2.php" hash="c6b0d8ae75d76f82d347ff84e1f27f74"/></dir><file name="Adapter.php" hash="971f7941dec2fa4d542fea26e092a9ce"/></dir><file name="Image.php" hash="f3ceb270d95ad7447a22b3b7b2207eae"/><dir name="Io"><file name="Abstract.php" hash="a0013ae157c383c79396cca3a3f95104"/><file name="Exception.php" hash="a7785c16c28846d4d269634b0577b75d"/><file name="File.php" hash="3cb64844e4235f3bacdd27e3dbc40b1d"/><file name="Ftp.php" hash="26f51613ff21c56401d7a6e619e6d128"/><file name="Interface.php" hash="5cfdbec1a6c94d0c47ceb84ca06c1252"/><file name="Sftp.php" hash="c0133c7ea78f445df46a2651270a5649"/></dir><dir name="Object"><file name="Cache.php" hash="185457f3c1b369d8bc44c2550ebb7790"/><file name="Mapper.php" hash="6ba50bea44b2a5d7d8174f6caca95838"/></dir><file name="Object.php" hash="73b091578424f92b65725403f083cd63"/><dir name="Pear"><file name="Frontend.php" hash="83313301512d529f71a8c3bdbd39a5ff"/><file name="Package.php" hash="3084b59014bbd3fad2466fcf8072c04c"/><file name="Registry.php" hash="31ec6e3fd934f097bd0c1d308d6d4b8d"/></dir><file name="Pear.php" hash="960057984b3515d6a337be700abbd257"/><file name="Profiler.php" hash="98121aa7a444c9bdf2064354a0797996"/><dir name="Simplexml"><dir name="Config"><dir name="Cache"><file name="Abstract.php" hash="63b77872096068ff5b122258272516d3"/><file name="File.php" hash="7f6d2894e22a668cbec7218421afec24"/></dir></dir><file name="Config.php" hash="88f772f3d981ff18100336957aa75183"/><file name="Element.php" hash="a55c460c2002e788cc7b28e0d49bd5d9"/></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Lib_ZF</name><channel>community</channel><min>1.12.10.16</min><max>1.12.10.16</max></package><extension><name>PDO</name><min/><max/></extension><extension><name>SPL</name><min/><max/></extension><extension><name>curl</name><min/><max/></extension><extension><name>SimpleXML</name><min/><max/></extension><extension><name>dom</name><min/><max/></extension><extension><name>gd</name><min/><max/></extension><extension><name>iconv</name><min/><max/></extension><extension><name>pdo_mysql</name><min/><max/></extension><extension><name>mcrypt</name><min/><max/></extension><extension><name>pcre</name><min/><max/></extension><extension><name>Reflection</name><min/><max/></extension><extension><name>session</name><min/><max/></extension></required></dependencies>
+</package>
diff --git a/var/package/Lib_ZF-1.12.10.15.xml b/var/package/Lib_ZF-1.12.10.15.xml
deleted file mode 100644
index 706694d..0000000
--- a/var/package/Lib_ZF-1.12.10.15.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_ZF</name>
-    <version>1.12.10.15</version>
-    <stability>stable</stability>
-    <license uri="http://framework.zend.com/license/new-bsd">New BSD</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Zend Framework</summary>
-    <description>Zend Framework</description>
-    <notes>1.12.10.15</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:15</time>
-    <contents><target name="magelib"><dir name="Zend"><dir name="Acl"><dir name="Assert"><file name="Interface.php" hash="753f4c058211502ad047851c4550a121"/></dir><file name="Exception.php" hash="833945ed22a5631224398ec5d1a51736"/><dir name="Resource"><file name="Interface.php" hash="ec27f75c67a2ddb21ede3e8f5cf2188c"/></dir><file name="Resource.php" hash="1eac5e2cda19d6f595ce678ee9b27065"/><dir name="Role"><file name="Interface.php" hash="e61127c46f87a10799582eb5d58673ca"/><dir name="Registry"><file name="Exception.php" hash="1ab8aea40c56fb9754ea4d76cf022893"/></dir><file name="Registry.php" hash="b13b4d4f96691f26328aba33d2a725f6"/></dir><file name="Role.php" hash="4ffca60ba53123c02874b9f412a1d5a0"/></dir><file name="Acl.php" hash="9362ea321157987e2d667ce6ba6640c4"/><dir name="Amf"><dir name="Adobe"><file name="Auth.php" hash="5f1b8fa4bc0646bfc7e1a0248af99e4d"/><file name="DbInspector.php" hash="c945730a861cc8dfb79affc681d935cd"/><file name="Introspector.php" hash="1faa52d4a734963e2114f0244b4eb0fc"/></dir><dir name="Auth"><file name="Abstract.php" hash="eb1eebcde25e987e8cfd64b097a64438"/></dir><file name="Constants.php" hash="27f591080a8aa87a7603079496b03f31"/><file name="Exception.php" hash="c37e40e651b342f39763d2651a86e907"/><dir name="Parse"><dir name="Amf0"><file name="Deserializer.php" hash="91d9e217cf20c9012993d945e3f7e744"/><file name="Serializer.php" hash="fc6f4e7a3adcee15df87e6f5e918891d"/></dir><dir name="Amf3"><file name="Deserializer.php" hash="63f1c82ab2bf8029208347a5d6188cf9"/><file name="Serializer.php" hash="94893d06b63c1c7b89958790051a96b8"/></dir><file name="Deserializer.php" hash="6bf0ed466d51a8ed7d47842ae56b0c2e"/><file name="InputStream.php" hash="8825ad088d82c7b0e1eec7f1fc2a977f"/><file name="OutputStream.php" hash="f6954a735a7abc530b3d08c3a66a1610"/><dir name="Resource"><file name="MysqlResult.php" hash="f93006c3cf636f4426559266c7254301"/><file name="MysqliResult.php" hash="3ff39905a315dc50438612cdfd044003"/><file name="Stream.php" hash="9fac77c33d3b8a5932618b7140eb480e"/></dir><file name="Serializer.php" hash="89f6dade3493238bcebd57f7aec7c441"/><file name="TypeLoader.php" hash="2eb3de6c0c76a88c84e52d053db1b3c3"/></dir><dir name="Request"><file name="Http.php" hash="3ceb2e9419c58b42b8a91dfa518bdbe6"/></dir><file name="Request.php" hash="210fafeb570fabde64f45367aa2b818f"/><dir name="Response"><file name="Http.php" hash="9165da2b40ea937760d21e82d14fccfd"/></dir><file name="Response.php" hash="df120c6bdcd3624007e264387c3ea49d"/><dir name="Server"><file name="Exception.php" hash="b49d17bc0487b1f94e263edc3cd63b80"/></dir><file name="Server.php" hash="a382bc11323a9e000c8b903609842a60"/><dir name="Util"><file name="BinaryStream.php" hash="2be5bd9b9c7daf56a578bb98c79c4393"/></dir><dir name="Value"><file name="ByteArray.php" hash="3501ce99e15b597c7159a47a166585b3"/><file name="MessageBody.php" hash="8b61f8ee1c39105e5c19ee0c3df1eedf"/><file name="MessageHeader.php" hash="3719e3197128d0db242a664278740de3"/><dir name="Messaging"><file name="AbstractMessage.php" hash="3091614466f82c843414c7f780e2713f"/><file name="AcknowledgeMessage.php" hash="0102f33c15054d697d29ab872d587e75"/><file name="ArrayCollection.php" hash="5070cc263f4b56b4aa6a62110c563ae7"/><file name="AsyncMessage.php" hash="ad0d187dc1179ce2cad255fe5fbd00a6"/><file name="CommandMessage.php" hash="46b117af57383509740a975f1d35a801"/><file name="ErrorMessage.php" hash="cd980b1cc29739aa685d714e3645f5bd"/><file name="RemotingMessage.php" hash="acaa5c29b712d4d24168bb384d512bd8"/></dir><file name="TraitsInfo.php" hash="91da9ed050e8e44979a229eadf433bf4"/></dir></dir><dir name="Application"><dir name="Bootstrap"><file name="Bootstrap.php" hash="a54f574a13568e3b0d79f9792b58a77b"/><file name="BootstrapAbstract.php" hash="85403088f5775085724427f2db4e3f41"/><file name="Bootstrapper.php" hash="f6ffc93f65f911d74273c97480019ebc"/><file name="Exception.php" hash="592efcd13a2430fb8a8051c77af2bdbf"/><file name="ResourceBootstrapper.php" hash="b5697b89f0bee36d64f1323ae0e6fad7"/></dir><file name="Exception.php" hash="33b45075f371aa758ab73043d9bb345b"/><dir name="Module"><file name="Autoloader.php" hash="561bbbddfd1d5d66e9950b1c5435e822"/><file name="Bootstrap.php" hash="a982af99ca3f8583e7e06754c932bee6"/></dir><dir name="Resource"><file name="Cachemanager.php" hash="aed3b8889084e6b3b46b9e1ad2482309"/><file name="Db.php" hash="a5bc7745dd9416c3cee07ca45701672d"/><file name="Dojo.php" hash="ed17a22f02f2b4b52219cb1a8f5f283f"/><file name="Exception.php" hash="e7cc6162f923bea3163ab3c72a9144c2"/><file name="Frontcontroller.php" hash="4096de73ec4a62565475ade369fa2f10"/><file name="Layout.php" hash="cc29553ce7af25e5497433b38cb33d96"/><file name="Locale.php" hash="d9ddba5ce3e52cf74e06bcaa28e9f701"/><file name="Log.php" hash="6425ed565c8ffa8d6a2061b4bed90c77"/><file name="Mail.php" hash="43d891a5921b267f2298392f5de16f2e"/><file name="Modules.php" hash="de2fead30f02effe859de66503972e1a"/><file name="Multidb.php" hash="f958bb43354951af50a592a27c1de9c0"/><file name="Navigation.php" hash="fa7ac38efd17722bb2fd0181131af18d"/><file name="Resource.php" hash="fea870fdc0a7fe568ff6f7d1d10ab523"/><file name="ResourceAbstract.php" hash="5808f3f8a2c6a349aa21e4de678fef40"/><file name="Router.php" hash="54f15d496ef84d800897d8571523e5b5"/><file name="Session.php" hash="714544fe025fa8e5db47686b58fd410b"/><file name="Translate.php" hash="9b75da2a9e3f571a90f30f14bbe72582"/><file name="Useragent.php" hash="17a0a2deba744c0fd4091fb48958b782"/><file name="View.php" hash="18803d667bd908ccfc04edc3e39d209b"/></dir></dir><file name="Application.php" hash="a0c9ea8a48289b2bd9bafd2dfe76765c"/><dir name="Auth"><dir name="Adapter"><file name="DbTable.php" hash="c8b79405b8855b67ffd8d6f82e6a4045"/><file name="Digest.php" hash="bbc1edafb9a244774ca986a2790e5661"/><file name="Exception.php" hash="194d445ab6929d8c5a6faefe604c64a0"/><dir name="Http"><dir name="Resolver"><file name="Exception.php" hash="cf95d8463e66b8dcc7eb679aaa0127cb"/><file name="File.php" hash="56c75079c07a8f3081841dff74f4f8b5"/><file name="Interface.php" hash="136ff303d6f17f676641db12415a679e"/></dir></dir><file name="Http.php" hash="0cfb159e07de35d89ab6754c9e409b1e"/><file name="Interface.php" hash="9baba8292deab88415d58155627009ea"/><file name="Ldap.php" hash="5bec476c61237745110b07a6981f0ba7"/><file name="OpenId.php" hash="9b87324993b0882e8add83140b24799b"/></dir><file name="Exception.php" hash="0cbee6397372cb825d4d2330f1e01cbf"/><file name="Result.php" hash="011bad9ebfb3e12cde52dc199c1b9b0c"/><dir name="Storage"><file name="Exception.php" hash="7c0657994ccacd29c396728dd3e40ead"/><file name="Interface.php" hash="336438156ed6a7db4183fbb365ec24e0"/><file name="NonPersistent.php" hash="88366aa8fd16a4c565e7a6cf467c9d45"/><file name="Session.php" hash="128255a8d51a1d9fa137e137f17b773f"/></dir></dir><file name="Auth.php" hash="6ec79877089d5629bf32dc9cfca8a5ed"/><dir name="Barcode"><file name="Exception.php" hash="5cf74c43e0bb3bda36dab4cdcf435a7c"/><dir name="Object"><file name="Code128.php" hash="989d2bf6723d392c704a9d793a0870c6"/><file name="Code25.php" hash="945a62bd63cefd4bc548aca2175a798e"/><file name="Code25interleaved.php" hash="163795899dd207d6777ed489b3652783"/><file name="Code39.php" hash="6a9d919307643317d2670d0b5a0cfc75"/><file name="Ean13.php" hash="d073b0b3b0d548aa553128e61a8f739e"/><file name="Ean2.php" hash="244bfc6ef32a4d56629c045c929138f1"/><file name="Ean5.php" hash="198f60f22d8bb1d165bff02c5820a20b"/><file name="Ean8.php" hash="8cea912422779ab67e11d8a169063216"/><file name="Error.php" hash="20edaea0778ac6253009722af4bc1ba8"/><file name="Exception.php" hash="4222bc4babead0b78ff6cd53aa72e359"/><file name="Identcode.php" hash="8a1ac5c7c3b04d3e62aa8265c4e1c2f7"/><file name="Itf14.php" hash="9384e00165c9961a203d1f135a3eaa5d"/><file name="Leitcode.php" hash="3c805e7d37dfb51e8de1f35d16ed5da5"/><file name="ObjectAbstract.php" hash="017bd4e5560bfddab60971b889d9f0a0"/><file name="Planet.php" hash="e1c10362fbc9baa5aabede9041060d79"/><file name="Postnet.php" hash="5f6845e59e609f8991fa580bbdc5eefc"/><file name="Royalmail.php" hash="8cc2c93b813ed89f4b0f6cd60df29f77"/><file name="Upca.php" hash="1485da9e266c49e993a00f9d287b4019"/><file name="Upce.php" hash="7cbde278294ce55ff3cb0857f5c014c5"/></dir><dir name="Renderer"><file name="Exception.php" hash="8579d580dcc35ccd16c82590ff39c1b9"/><file name="Image.php" hash="dba737459af451c5c51bad867b77a0a6"/><file name="Pdf.php" hash="1e2d590fe769d9ebf74d901a34635aa7"/><file name="RendererAbstract.php" hash="359cbfacb66cc0fb5ae362845b3fbf58"/><file name="Svg.php" hash="93544d770411772a4dc2c995cced685e"/></dir></dir><file name="Barcode.php" hash="0586994cdf9871ebabd7aa8079566258"/><dir name="Cache"><dir name="Backend"><file name="Apc.php" hash="0770aacd96ff057d06978bcc7a22035e"/><file name="BlackHole.php" hash="f51e1f122876be7d7ba667e39c540901"/><file name="ExtendedInterface.php" hash="fb6c1f28d7049d8ebb5b367586a386b4"/><file name="File.php" hash="292986e780e4b420968b5dfa15267a01"/><file name="Interface.php" hash="9e9a235e4aa33de40ff9fbc97efa468d"/><file name="Libmemcached.php" hash="2f9d3d284be576c031ff2195afaabc20"/><file name="Memcached.php" hash="cbee447e2af7453a2a37ddee2206f971"/><file name="Sqlite.php" hash="8c2ffff28dbe7e5c27a2bfb6fa1a4759"/><file name="Static.php" hash="8b4e8ac2f3e416316d447266e1a6f8dd"/><file name="Test.php" hash="6bcaf9deb1e13215d9fada844fa0bb25"/><file name="TwoLevels.php" hash="1d48225fde0e61fc38401841b28740da"/><file name="WinCache.php" hash="57da7293a57294e3cc2878d872230aea"/><file name="Xcache.php" hash="364f350bb7e58a221a9dda26dfd940d3"/><file name="ZendPlatform.php" hash="dd2264172835c8ac2b1cd0eba670d1ee"/><dir name="ZendServer"><file name="Disk.php" hash="092b29cf8ea2e0391e156ca38a9c8dbd"/><file name="ShMem.php" hash="94d219bd689df1b0ce1f5fe48c0fda7e"/></dir><file name="ZendServer.php" hash="6397a63f6ceba054b9c4c774451109a6"/></dir><file name="Backend.php" hash="046904b4b5c7661bbdcb6c3ec7969af3"/><file name="Core.php" hash="26e9ed27936fe7c894f36a1241b6aa35"/><file name="Exception.php" hash="64896658ade26dbd6b15851aee788379"/><dir name="Frontend"><file name="Capture.php" hash="5e7254e902e587587a9f7c1749787690"/><file name="Class.php" hash="e0fba9da74e040fc5fcbfeede03147d2"/><file name="File.php" hash="291450665f2b240c3a1d0b8f81d9e505"/><file name="Function.php" hash="80926f9d0d94953c8534f381b3e9e92b"/><file name="Output.php" hash="b3902a3f0ddf1b4608b84f6172a317e6"/><file name="Page.php" hash="d447d1e18b8c9ccfe95f5cbd4f8ad0aa"/></dir><file name="Manager.php" hash="bba8e1dfc892616eccc5f033d3849aec"/></dir><file name="Cache.php" hash="dd6b3426e3682f832f5e73a5a5e7bbe4"/><dir name="Captcha"><file name="Adapter.php" hash="c80da3e14f86386865a1a11f386509f0"/><file name="Base.php" hash="f3f587f183c8dbb0f71b588a99f56728"/><file name="Dumb.php" hash="42cf7479a157ab4f6d92f4ea2edd402f"/><file name="Exception.php" hash="a1ea444d80d4629ae987f5120d7b6ab4"/><file name="Figlet.php" hash="9434c31c17fa4558d823f72863bda27e"/><file name="Image.php" hash="8f1bb1448407f673d986cc387846bf3f"/><file name="ReCaptcha.php" hash="7213da2f0082b6a209bf5659d5279036"/><file name="Word.php" hash="2b20aa38f1132306e259f4032ad1de6e"/></dir><dir name="Cloud"><file name="AbstractFactory.php" hash="0360f699d631c5eb6f1f5e117a2a6524"/><dir name="DocumentService"><dir name="Adapter"><file name="AbstractAdapter.php" hash="3679fe7eef0b73516d98565b35e90366"/><dir name="SimpleDb"><file name="Query.php" hash="163f21a702cb5aa76d58682d29559bd2"/></dir><file name="SimpleDb.php" hash="78628ea1029ec6f267c83c302611b6e8"/><dir name="WindowsAzure"><file name="Query.php" hash="657934a415bd7d731906ebb3fa42187d"/></dir><file name="WindowsAzure.php" hash="9a48103bc6327e24a98f27307641c397"/></dir><file name="Adapter.php" hash="22799d67b8935e871e9fcb5403617a9d"/><file name="Document.php" hash="e76315e7e307aa99dae6d634b51c2ece"/><file name="DocumentSet.php" hash="53cabe8e2d6454beab6b476953fb9a58"/><file name="Exception.php" hash="e69eb63ef3ac0476422e553c0f9d0b7c"/><file name="Factory.php" hash="d11189e3ba364466584a8461e9bea29b"/><file name="Query.php" hash="dcf377f4d08e1adc178dcef42a7e21d4"/><file name="QueryAdapter.php" hash="b683d5360841a57b8b58f0ac937b4991"/></dir><file name="Exception.php" hash="baa1da441578d83ef668c947bc26993a"/><dir name="Infrastructure"><dir name="Adapter"><file name="AbstractAdapter.php" hash="1a0c85424e055522ed27fd848641adb9"/><file name="Ec2.php" hash="f702d42320cb2a843124faeff6308673"/><file name="Rackspace.php" hash="12ca011eaa260a98e5f0b021497d6d9f"/></dir><file name="Adapter.php" hash="8fd0db5ff41dd87d2730981cf6a651e6"/><file name="Exception.php" hash="dd74945bd044a9b569715d8b8f33d6c6"/><file name="Factory.php" hash="e35fedab839a9897bd494b4525c70d74"/><file name="Image.php" hash="d0b5a851095a8a6d00cc758e66de65d0"/><file name="ImageList.php" hash="330f4330efa43095c73963860719d8dc"/><file name="Instance.php" hash="aa600d04524311d6da4bfac324aae00f"/><file name="InstanceList.php" hash="9f5c27c450518e4090aa5200261e0804"/></dir><file name="OperationNotAvailableException.php" hash="cb15f6dfb2c6caf15bf3d3c7192a2859"/><dir name="QueueService"><dir name="Adapter"><file name="AbstractAdapter.php" hash="6aafd9d7c44e76e68dd7b8ea83aea6fe"/><file name="Sqs.php" hash="03b431d971a7679aa43dba8d235fd9bb"/><file name="WindowsAzure.php" hash="b4762cebc1460850e73552d5a617ea6d"/><file name="ZendQueue.php" hash="d8aaa2f4ec3302693fcaee2833339bac"/></dir><file name="Adapter.php" hash="c950feca6fdab3f115ba62146e9c4061"/><file name="Exception.php" hash="0406a9d40baf106b1e7c7a52c58622ce"/><file name="Factory.php" hash="1489be14015fdbc7364317e2e6fdb4dc"/><file name="Message.php" hash="48907828e50d23674d1500834ac33d96"/><file name="MessageSet.php" hash="f4371e5f68036dbea532b7899c59679c"/></dir><dir name="StorageService"><dir name="Adapter"><file name="FileSystem.php" hash="c2066ccb70e97bfccf1dc6eca5beabed"/><file name="Rackspace.php" hash="d5b49d598b7a2ca875599df0c07d17e2"/><file name="S3.php" hash="36d663a296803282ec6ffbb4d1f6ecf7"/><file name="WindowsAzure.php" hash="1c266330be81f9034e491cdc5c0becee"/></dir><file name="Adapter.php" hash="4bf256cad4b27a0b4ccd0ea0d2e5df44"/><file name="Exception.php" hash="b1938d4a1d75a132c7896c9d1d49c316"/><file name="Factory.php" hash="e60551fd66495592c25f2143683c0eae"/></dir></dir><dir name="CodeGenerator"><file name="Abstract.php" hash="8bb5c3fb76b0953dad77b8aefd240552"/><file name="Exception.php" hash="2f35c31886c1506cbce95bd48ceb8302"/><dir name="Php"><file name="Abstract.php" hash="7ffc414197119b98d09c089d38b745cf"/><file name="Body.php" hash="4354cf77549e88c8ef742f74df428824"/><file name="Class.php" hash="e96e076b5e9a7a41b9dff5d65d65cbf8"/><dir name="Docblock"><dir name="Tag"><file name="License.php" hash="fa6989bdda9dcc8eed58dfcd5cd11d3e"/><file name="Param.php" hash="c5402463f594b0ada366547e2140c087"/><file name="Return.php" hash="d36a1b1dbd2383043b9703449212218e"/></dir><file name="Tag.php" hash="94c4d5bf7254f1122a9140578562cf4a"/></dir><file name="Docblock.php" hash="3630eee3a36264ed70bb414b1b6659d2"/><file name="Exception.php" hash="4d0d644d274ba0d93c86edabe96a937a"/><file name="File.php" hash="16190c6965142355870ea2d86065c2f3"/><dir name="Member"><file name="Abstract.php" hash="a07d1b1c01755725fd9c670b83e14c6e"/><file name="Container.php" hash="52c0f2936e0dd96e3efaca239e97a537"/></dir><file name="Method.php" hash="facb978030d8ed1148d3fd9b27647a5c"/><dir name="Parameter"><file name="DefaultValue.php" hash="402dc7efb5a973be4b3695d97df9d5e6"/></dir><file name="Parameter.php" hash="f963e92d375973d82c64e9aeeb99aa68"/><dir name="Property"><file name="DefaultValue.php" hash="23583ff2c6b01162f217d3f18e17f5bb"/></dir><file name="Property.php" hash="5d85c620c090d866edd2cc4af3bb0737"/></dir></dir><dir name="Config"><file name="Exception.php" hash="825b93db4d92fc10ff2334d0701ac39a"/><file name="Ini.php" hash="bc377745cc51608820d81f08bb5e622c"/><file name="Json.php" hash="191c7eb21cbb2042491e5548a59087a4"/><dir name="Writer"><file name="Array.php" hash="fa6b3a9d9f68cc5973db7309b93454eb"/><file name="FileAbstract.php" hash="14f344ccee37bac7224aa203e5be6bf5"/><file name="Ini.php" hash="c658c697e401b7fab66edac3e5ab5edf"/><file name="Json.php" hash="675cff174476aab6e44540ce20b9ef6f"/><file name="Xml.php" hash="0ff4954d3f6be816d2911cc236d588de"/><file name="Yaml.php" hash="0a6d7e361af7f4f5cff8a9eb81264318"/></dir><file name="Writer.php" hash="7bca990f32b4a7bf64b6d7bcd6a8b144"/><file name="Xml.php" hash="24d64c4d3269a55f1577d40717069b3f"/><file name="Yaml.php" hash="d559550b7de8c77f03a6d8c5ab1af715"/></dir><file name="Config.php" hash="0ec674c135a25bb65bf7f2f536496373"/><dir name="Console"><dir name="Getopt"><file name="Exception.php" hash="ba4d96e50ff729964f51d3ff320a695b"/></dir><file name="Getopt.php" hash="a8165d6a04ff959844c118bd1517d4af"/></dir><dir name="Controller"><dir name="Action"><file name="Exception.php" hash="5c5bfb99e09c49bfd42afc92cca046a3"/><dir name="Helper"><file name="Abstract.php" hash="2db15ec4775320a42a86fc96ded791f6"/><file name="ActionStack.php" hash="72d618b0c01345a39b86362d00b519e5"/><file name="AjaxContext.php" hash="d25cd19237deee404b1d78c3babc51e6"/><dir name="AutoComplete"><file name="Abstract.php" hash="8265a4c01db3fc5ef8359855b5bc7de7"/></dir><file name="AutoCompleteDojo.php" hash="bc727565a422d34c4ee642604bca989f"/><file name="AutoCompleteScriptaculous.php" hash="423035f705a0ead78f0b508915f9f11d"/><file name="Cache.php" hash="5e1ee2f20930ce3ce6c9ff95c7986fd5"/><file name="ContextSwitch.php" hash="bbde32302aea3a45df7525ee558ba61b"/><file name="FlashMessenger.php" hash="6f60de563b5b400d75b630f359ce09be"/><file name="Json.php" hash="46f702a70e0d5e4ecff66439b34502aa"/><file name="Redirector.php" hash="246b26f4b71cdab25a5992577986b119"/><file name="Url.php" hash="16c5a98afe9f6f14bee59bbb0ee58583"/><file name="ViewRenderer.php" hash="6eac5b3e0152d2c000145c6a4076456a"/></dir><dir name="HelperBroker"><file name="PriorityStack.php" hash="9919f1af00251ac5d7a362dba0a280c8"/></dir><file name="HelperBroker.php" hash="aa9cf211934ac5b4fc9e4220ad26d7ca"/><file name="Interface.php" hash="0cb0ece63ce5a245010b9c79927149fe"/></dir><file name="Action.php" hash="1eff5915284945de72327a06cb10c10a"/><dir name="Dispatcher"><file name="Abstract.php" hash="3a481b8b2beb61d223f1c90757339a6d"/><file name="Exception.php" hash="21e0c2b4a1f642448f391e0601bf8327"/><file name="Interface.php" hash="323c3bfe932dca40b3f0f18ebaa39bf4"/><file name="Standard.php" hash="ccbde33f1d7616c2c35ee556039b12a0"/></dir><file name="Exception.php" hash="75ef40958ca34b2ce0007a6a9bd11b62"/><file name="Front.php" hash="a0cd827d65e2d2cc1d51d96009d61032"/><dir name="Plugin"><file name="Abstract.php" hash="4f9c2a5fcb32f0f02d01559c2900e2ff"/><file name="ActionStack.php" hash="dc0f223ebf96304711e62b0ff066cbe6"/><file name="Broker.php" hash="4558d24e01418e1a7a4a45f8a0419b05"/><file name="ErrorHandler.php" hash="1b86cb0d967cb3a80091271532e5f29f"/><file name="PutHandler.php" hash="5b65c0f667538e81cd5152060b1fc50e"/></dir><dir name="Request"><file name="Abstract.php" hash="479150985f9f5b1ad60da1c627ba5422"/><file name="Apache404.php" hash="6e4073adcf927bc08c36267350259110"/><file name="Exception.php" hash="401a6bfe6ee4f2eef739d5622d457235"/><file name="Http.php" hash="4866762dc4e2d7f2f70ebcf3ec3f3174"/><file name="HttpTestCase.php" hash="fee8b0ea3da866bae3125716977e609a"/><file name="Simple.php" hash="4debb461f0bf9c865b3ef7e9a2f9eec1"/></dir><dir name="Response"><file name="Abstract.php" hash="41812ba5c1950b91ca6db21c36a65022"/><file name="Cli.php" hash="1be9de58bd3af4e70797422c5936b9f0"/><file name="Exception.php" hash="daf74bb0fb6ffed9c50a414b78947388"/><file name="Http.php" hash="1b97675e6f09aca759dd04cadc2ada31"/><file name="HttpTestCase.php" hash="b8e25dbcd9245fce7f9e985aedb53ab2"/></dir><dir name="Router"><file name="Abstract.php" hash="7c3976721fbba2c462793f6152a7952a"/><file name="Exception.php" hash="10f91dd02d28dfb9c5de84d778f5e451"/><file name="Interface.php" hash="3f0e4586ac18e02e172ff65e1228a197"/><file name="Rewrite.php" hash="333634b9f184476914d985f68d06b12a"/><dir name="Route"><file name="Abstract.php" hash="c0437b622e03a117783fc6d8c2a581da"/><file name="Chain.php" hash="eb747ff18f4f5549888a7964b8f16f2e"/><file name="Hostname.php" hash="b54e6b9f68ffa63f9c493f82606ab2ac"/><file name="Interface.php" hash="80dd1da3a1fe916fcf173891716985cc"/><file name="Module.php" hash="dca7ac356221ebd066c5b17a72557551"/><file name="Regex.php" hash="4bcd3642f6ee8d66b9ec9cf591cfa121"/><file name="Static.php" hash="2bc26cb37610470e8fbb0e9302e76175"/></dir><file name="Route.php" hash="9be953ae63b6074535656826c99f88dd"/></dir></dir><dir name="Crypt"><dir name="DiffieHellman"><file name="Exception.php" hash="27066062da23c7b0b5c8ea405d63424f"/></dir><file name="DiffieHellman.php" hash="b146591071090ba7dc2d120c8d7cfcb1"/><file name="Exception.php" hash="98d264f8b46a12e8e1fa644b37488636"/><dir name="Hmac"><file name="Exception.php" hash="3b8bf2fed9087ce573c7d9e461211d01"/></dir><file name="Hmac.php" hash="7beea2bae905ad98fc8212a5a2ba906c"/><dir name="Math"><dir name="BigInteger"><file name="Bcmath.php" hash="7ad0514366aa1cfbbacf9a841d17209d"/><file name="Exception.php" hash="c7047b1ec96c2c5bf9d2ec8fd516c232"/><file name="Gmp.php" hash="1e136ad9748ff4e120be567de7195084"/><file name="Interface.php" hash="a1a15aadc0d1232e19e3660778e25a4e"/></dir><file name="BigInteger.php" hash="5941fbc6fa7558f254212a5c704de46f"/><file name="Exception.php" hash="0a2a9e2cdf2619549bb1891d31565cb4"/></dir><file name="Math.php" hash="0e54c36e33bb980ba251c42719e72e48"/><dir name="Rsa"><file name="Exception.php" hash="9af79ec754f6202584671b395e9898cb"/><dir name="Key"><file name="Private.php" hash="6b8486eba224159d7c05dea23039ec8e"/><file name="Public.php" hash="8cd4ac9225b58e1a2990659f4a97a45d"/></dir><file name="Key.php" hash="a0c0daf511c3a74d1e754faeaace0f83"/></dir><file name="Rsa.php" hash="e46289dffb56184f7c15faa3b24a0a68"/></dir><file name="Crypt.php" hash="ae1d981cb224263c8625604621d0ffc9"/><dir name="Currency"><file name="CurrencyInterface.php" hash="c52c23140b8d66185e2792cb10c65b40"/><file name="Exception.php" hash="f04c4fcb9b9b4117ab0c91e688904a06"/></dir><file name="Currency.php" hash="e380eca83740d28bb55435c3489204cf"/><dir name="Date"><file name="Cities.php" hash="4698b47f264db687c97ea7fa5ccd717e"/><file name="DateObject.php" hash="05ef22746ef2b1925cce51d42a5670b9"/><file name="Exception.php" hash="b91a2d166cf91afa1325a07747bafe57"/></dir><file name="Date.php" hash="6d17472f661d6b599477f215dda67f82"/><dir name="Db"><dir name="Adapter"><file name="Abstract.php" hash="7d5a1b64e9f292c018fec8fca159311b"/><dir name="Db2"><file name="Exception.php" hash="b64143620db1d7e5cd7b90312aeaf7bf"/></dir><file name="Db2.php" hash="d27757593a5be92da47326b25af8b4a4"/><file name="Exception.php" hash="461a43822f24e3e79bf8a844541235a3"/><dir name="Mysqli"><file name="Exception.php" hash="71ae5837eee0e261ba7639dff878845c"/></dir><file name="Mysqli.php" hash="c997a7381205b413a03efba602f2debd"/><dir name="Oracle"><file name="Exception.php" hash="8a08377363d09d1711c31ed0e2b4f220"/></dir><file name="Oracle.php" hash="2c539f9ac5ce7e656f3432c9aa00daae"/><dir name="Pdo"><file name="Abstract.php" hash="1f71eaf0415b750ee0573a80374e61cb"/><dir name="Ibm"><file name="Db2.php" hash="b947c61e9abf1f277adb40dc1aaf6319"/><file name="Ids.php" hash="a2d4fcf42c7b9435515399862224d74c"/></dir><file name="Ibm.php" hash="1042d1f01417241dc09679e1edb3a248"/><file name="Mssql.php" hash="139b7b3957b4e2b347d220b9dc8e959d"/><file name="Mysql.php" hash="0ca1bc627085e101ce51e02328b16347"/><file name="Oci.php" hash="819a1b3d31d7f65ba3f9de49ceecdf30"/><file name="Pgsql.php" hash="1b7fde0593b3799e4afa1f74b63499d7"/><file name="Sqlite.php" hash="efb68039f3e1b9e34a81c3dc9d0e8f20"/></dir><dir name="Sqlsrv"><file name="Exception.php" hash="097530f562d1993a992d6f62aadea809"/></dir><file name="Sqlsrv.php" hash="0fb64191a2d9e688410094c736d5eda6"/></dir><file name="Exception.php" hash="aebb5d861915d6a2494c58fc343f2752"/><file name="Expr.php" hash="2dca05427df6b34d6da9fb872517f684"/><dir name="Profiler"><file name="Exception.php" hash="42d03d9fd63aada757d6dabacdb73cb0"/><file name="Firebug.php" hash="1f5b0198a97091bba6ec8a8f74f3cf1a"/><file name="Query.php" hash="fe0bfc38389c14cecc76d528e33bfe83"/></dir><file name="Profiler.php" hash="e7327368b94ae8e094c602e41f617609"/><dir name="Select"><file name="Exception.php" hash="f8b241a9791bc28c77ca8c14cf80ba84"/></dir><file name="Select.php" hash="0fb5975684da5ea68ed45e4437d759d6"/><dir name="Statement"><dir name="Db2"><file name="Exception.php" hash="05225962b3d3107841d87d0d6c4ca9de"/></dir><file name="Db2.php" hash="36c397903c5e07ebe5b82b5e76030c7a"/><file name="Exception.php" hash="d41110267373d38bb4af77e1785329ae"/><file name="Interface.php" hash="222f50673200f578767b1e0c43d5a6bd"/><dir name="Mysqli"><file name="Exception.php" hash="1932b0ae9232ab79ccacadd46a45f022"/></dir><file name="Mysqli.php" hash="64e3e41642115ec95cce487da79fe737"/><dir name="Oracle"><file name="Exception.php" hash="59588ef7feadf4b0a726d1e1410f10bd"/></dir><file name="Oracle.php" hash="3fd727a08bbb347495dd6a2fb044defb"/><dir name="Pdo"><file name="Ibm.php" hash="aadb46dbcc67223ab9e240c35301cb0d"/><file name="Oci.php" hash="75a7032f82e8e29f52a8994a847e9533"/></dir><file name="Pdo.php" hash="91da6eddeaa94a88bcea2c3c912480bb"/><dir name="Sqlsrv"><file name="Exception.php" hash="925701544428f06183ecbb6718047839"/></dir><file name="Sqlsrv.php" hash="4d49d2edc91902768b1685768ac0421c"/></dir><file name="Statement.php" hash="48578c5307d13998d3b9dc73486bb666"/><dir name="Table"><file name="Abstract.php" hash="d1f0eb94b3a83abab809a132edec8d70"/><file name="Definition.php" hash="056d17187e24f48f42059889802ade8d"/><file name="Exception.php" hash="4ad0192e2759ce865081bfd65fba1537"/><dir name="Row"><file name="Abstract.php" hash="79e1dca4c87a158d36b171b11ec721a5"/><file name="Exception.php" hash="3182c2febc7a67988a02a2f4e3262c7c"/></dir><file name="Row.php" hash="adb2429446ad01b98bf74a1c79802009"/><dir name="Rowset"><file name="Abstract.php" hash="6474578f17e077f0d176de3d41bd43fa"/><file name="Exception.php" hash="c5e373d4e4d06e728572b3ca8c5d7d40"/></dir><file name="Rowset.php" hash="0534466fa3f58d60e28761013df1035d"/><dir name="Select"><file name="Exception.php" hash="c87230b6b7401370de518e6ad7218203"/></dir><file name="Select.php" hash="4a86cf29c8e383613e79caa5ef51ca36"/></dir><file name="Table.php" hash="bddf2a8c1ee791ef8a75fd81362a95b9"/></dir><file name="Db.php" hash="944811d3042ae76f201ce5ccee064693"/><file name="Debug.php" hash="e91277596844e74a3189f72b260d743f"/><dir name="Dojo"><file name="BuildLayer.php" hash="59fd3f007b9ddfe836308735a4fad349"/><file name="Data.php" hash="584f49393cc79deedcd43f36ff7cf68e"/><file name="Exception.php" hash="ce849ec1ac41925ce396495a4c0b5e5f"/><dir name="Form"><dir name="Decorator"><file name="AccordionContainer.php" hash="5ccfa22f987078a553c8334a1751a78e"/><file name="AccordionPane.php" hash="bfb6959fc54968e6e631a7b812f795cc"/><file name="BorderContainer.php" hash="3630699c89e4d611d463952ab7b616af"/><file name="ContentPane.php" hash="f5e7d589fc667a74c537f1c4a1d2f1ee"/><file name="DijitContainer.php" hash="6e30cb3a91ee447e6d9ae587a5b08fdc"/><file name="DijitElement.php" hash="63a591c8ae6f23a5fac3c4c4799849b6"/><file name="DijitForm.php" hash="3107c8e3a51efd7cd960a4d140fd2552"/><file name="SplitContainer.php" hash="32118776073ace34a7a6e6b775f7a41d"/><file name="StackContainer.php" hash="511f80fb7e777c7420df3a33e5d36df3"/><file name="TabContainer.php" hash="bfba332a70e20ac8e4bc1f9a7b488ffe"/></dir><file name="DisplayGroup.php" hash="4fc35365159beb7532119735b43ac5ae"/><dir name="Element"><file name="Button.php" hash="3ed66e9ab5b21731a355a35cc0bdadc5"/><file name="CheckBox.php" hash="cdf55f6261658dc12c508397228c86d5"/><file name="ComboBox.php" hash="ad263405d78671cb38f39a42f4153306"/><file name="CurrencyTextBox.php" hash="8a0101a9a7fdc7504fe882222df91d8b"/><file name="DateTextBox.php" hash="b1a766b9190c2c124d34d59d8c742f04"/><file name="Dijit.php" hash="8389aeca66aecb8a39d9341f81ded916"/><file name="DijitMulti.php" hash="bd0fe55261b57bcd2c92ea196eceaf08"/><file name="Editor.php" hash="bb3636533a931bc1f9a5782ac4c66565"/><file name="FilteringSelect.php" hash="d330a4330b410089733f8c1eeb1839e2"/><file name="HorizontalSlider.php" hash="b23bd0da212335080121f31e318f743d"/><file name="NumberSpinner.php" hash="9ae185b60accc9edb7baed24b93ca540"/><file name="NumberTextBox.php" hash="cc340c040ab7c8eaa02bf401a9a91bc3"/><file name="PasswordTextBox.php" hash="48b304d5bbfb2417adf1724362e032b6"/><file name="RadioButton.php" hash="80e8b86eaf8258626084f54272a7a576"/><file name="SimpleTextarea.php" hash="69791b92fb7d656676266fe53592b6b0"/><file name="Slider.php" hash="21f9f99bb495bcf2997a022f6a43c276"/><file name="SubmitButton.php" hash="52c7e25fd90d33b9501150746b046e14"/><file name="TextBox.php" hash="874413d9bf8c39f9a7a73d7175842cf5"/><file name="Textarea.php" hash="1fab8c9619163b0fd1cdeaf4bf4113c7"/><file name="TimeTextBox.php" hash="6ab9be9f6555bdc14ba9a02fb18c3157"/><file name="ValidationTextBox.php" hash="dd456a154f47bc74e05834800490ad53"/><file name="VerticalSlider.php" hash="c99c979911b12b2907b9ce727d595f42"/></dir><file name="SubForm.php" hash="46b28da42e2447cdf7f23ce8635a6243"/></dir><file name="Form.php" hash="5dc7b152deef6e0fedf0c0caa73f7c68"/><dir name="View"><file name="Exception.php" hash="fed5a27397fd8fb08841c1db38364df7"/><dir name="Helper"><file name="AccordionContainer.php" hash="3b2eaa765a22ea9a2d3d2e507da446b8"/><file name="AccordionPane.php" hash="94b8d5edb317926ca8aee3539c33ce8a"/><file name="BorderContainer.php" hash="f8b3939b919a3f961c8da6196b2166be"/><file name="Button.php" hash="e1e816f2362a2f973acceadb1414de98"/><file name="CheckBox.php" hash="43f1a6ad27883f62cda4bc1b560c9f89"/><file name="ComboBox.php" hash="d2811e390eb44a4f3e953c241949db0e"/><file name="ContentPane.php" hash="041084c11934376f3f759154a1835abf"/><file name="CurrencyTextBox.php" hash="56f2046e985a0d1cd81ba0d045f91a7a"/><file name="CustomDijit.php" hash="34bfe4e1501f8dc1227adcc9b7e2b20b"/><file name="DateTextBox.php" hash="81bdffce0b2acb693a7c2cbd3941f156"/><file name="Dijit.php" hash="7a1eb3742998cbbabac1b2338a590566"/><file name="DijitContainer.php" hash="3091a920fbfb48215a59f73be1988eaa"/><dir name="Dojo"><file name="Container.php" hash="e40d8395af2e395a2e81d593e8f4602c"/></dir><file name="Dojo.php" hash="6303c9d4ede5b67cc828ead89c4016a6"/><file name="Editor.php" hash="f251624a2b798b53eea465d9938ac276"/><file name="FilteringSelect.php" hash="60bbdd84239febff9241199104b4cf1a"/><file name="Form.php" hash="105f502558eb241c81c39be0e5d85a72"/><file name="HorizontalSlider.php" hash="7b3c19156aee3db41dbaee18abe2ded7"/><file name="NumberSpinner.php" hash="cf27c892acfeb8ba60027bba29d8715a"/><file name="NumberTextBox.php" hash="9674fa01666c5622896d4513da69ce8d"/><file name="PasswordTextBox.php" hash="0ba727cff497c3b580bffaf04eecc75b"/><file name="RadioButton.php" hash="ddd9733fd29a47cf20f224115895d2cb"/><file name="SimpleTextarea.php" hash="8162db2b947a8b380099ee4266bd2edb"/><file name="Slider.php" hash="b09cd129a4885cb799978b234e8ef496"/><file name="SplitContainer.php" hash="8fa96d45ff63d2b0f24250856afea806"/><file name="StackContainer.php" hash="f3f24abf9640124f26274b9663eccd5d"/><file name="SubmitButton.php" hash="9083d4797eb4be0a879951a88be9a6f3"/><file name="TabContainer.php" hash="8b6865aa0b8015b220896d3487ec0966"/><file name="TextBox.php" hash="75b65da85221b840ff6f3bd4d38890e2"/><file name="Textarea.php" hash="58421d644f61edc039bdaf8b2d13af7d"/><file name="TimeTextBox.php" hash="7865f42c62fd06ead74987324d2310d0"/><file name="ValidationTextBox.php" hash="59bc7469004e22811c038791462d67a7"/><file name="VerticalSlider.php" hash="9c113d757c1b99048d09ba8949452034"/></dir></dir></dir><file name="Dojo.php" hash="3d5a5b6120bb16fbde6a24fc082bb2e7"/><dir name="Dom"><file name="Exception.php" hash="764e44b0e7b8346387c4b677e725d6bf"/><dir name="Query"><file name="Css2Xpath.php" hash="84d8020779e37ed005fa2ca53052731c"/><file name="Result.php" hash="2c8f3fdb6f945804d2a2b5881b5c0567"/></dir><file name="Query.php" hash="ac0c71f2c7a030485756a780c2ca5904"/></dir><dir name="EventManager"><file name="Event.php" hash="73a22bba4a1536ad0bedb311992ed841"/><file name="EventCollection.php" hash="6846535fe1c08a148593082878839b2b"/><file name="EventDescription.php" hash="6cb5b7a743c322cc486c09de9e2466c1"/><file name="EventManager.php" hash="775973335393a6aab98b63fd7e580f6f"/><file name="EventManagerAware.php" hash="616ae31ca46f1f0206e28851f408e777"/><dir name="Exception"><file name="InvalidArgumentException.php" hash="4651b42388b3cc0f6a8c77b8c92a988f"/></dir><file name="Exception.php" hash="a7a76fcb8615694bebfd1b7a6c63cc2e"/><dir name="Filter"><file name="FilterIterator.php" hash="479bdbab563e57ade8718744d6a9eaed"/></dir><file name="Filter.php" hash="a6705be98a15d9abb250329a18bc5f44"/><file name="FilterChain.php" hash="0bbe4e22e4bd7731c91b0d8849e24dd4"/><file name="GlobalEventManager.php" hash="2448f17e7235ad32e0986dccaaf6f21f"/><file name="ListenerAggregate.php" hash="e0bf702bb54b9ba2d54828a2d66d2954"/><file name="ResponseCollection.php" hash="14500f355513b35b17a7dd7e947f5301"/><file name="SharedEventCollection.php" hash="0504cdf3c7168fa6e6a1d164705617c7"/><file name="SharedEventCollectionAware.php" hash="c53dea67b8742191c78911a87cf4c1c5"/><file name="SharedEventManager.php" hash="973daf2597a36f485ec43ae91f53fbef"/><file name="StaticEventManager.php" hash="47bc3c834d44e64eab6ea0b0c0a83eba"/></dir><file name="Exception.php" hash="fdca55eece8acc76af7ec98eca620311"/><dir name="Feed"><file name="Abstract.php" hash="66b85329fd8524fc66b93c16397cc49d"/><file name="Atom.php" hash="24d80774c71e1932b8be5054793d4fd6"/><dir name="Builder"><file name="Entry.php" hash="4871eb1a5d2084552d48b346fb9424ae"/><file name="Exception.php" hash="f8d2074819dd7157b4de4428579958c9"/><dir name="Header"><file name="Itunes.php" hash="da87e20a7e6b587316644377c8cc3c55"/></dir><file name="Header.php" hash="7e1b1053ef90762e3b6d9933cab4964b"/><file name="Interface.php" hash="407dbfd89e522c6e033214974954ad9c"/></dir><file name="Builder.php" hash="9453c5958f2cc22bd37a1e8e8de22ff7"/><file name="Element.php" hash="04f6a067ec047936af106f5a3ee9f0ee"/><dir name="Entry"><file name="Abstract.php" hash="44340d16439984b02edd6f26d7a1885e"/><file name="Atom.php" hash="a2642776469712e0e2dfcc0912e98aa3"/><file name="Rss.php" hash="93e478df77e9c9c43c55334ce2165a8d"/></dir><file name="Exception.php" hash="3ce015184369dd3392923dba02ccb4ab"/><dir name="Pubsubhubbub"><file name="CallbackAbstract.php" hash="5fc3da695c59069c88f54206485038c9"/><file name="CallbackInterface.php" hash="3b8478bc6bac3d9309c0fe7ba6f89dd0"/><file name="Exception.php" hash="028e2d741379246df90e62b96393ffe9"/><file name="HttpResponse.php" hash="6a929e3ac877b89fd0b8664b9894f953"/><dir name="Model"><file name="ModelAbstract.php" hash="ce0a0b0b03f77348b066a947e4d4a087"/><file name="Subscription.php" hash="99c0b396f4e21b0fe2bc3c068220958e"/><file name="SubscriptionInterface.php" hash="63f95bde2e9254d0e3c31b905fea78bc"/></dir><file name="Publisher.php" hash="44d781a089ad5ac1ee949b74badad6ca"/><dir name="Subscriber"><file name="Callback.php" hash="c50e22f4bec18ed4365b7a7fd472db69"/></dir><file name="Subscriber.php" hash="3a06e76251527da315017fd545595ee2"/></dir><file name="Pubsubhubbub.php" hash="9187f4accebd9b1b23010e141485f2c8"/><dir name="Reader"><dir name="Collection"><file name="Author.php" hash="bd0aee1688a6905cfa60ad3df2876d42"/><file name="Category.php" hash="0ac74f5a4ea9492998e7f76e6e959283"/><file name="CollectionAbstract.php" hash="a0d023979ca9ca7c2fdf93e0acb36745"/></dir><file name="Collection.php" hash="6a92b8355578f92468d24f03c33f6e7b"/><dir name="Entry"><file name="Atom.php" hash="c4f9ba356c97d5ad4ad6a5a210fa5d31"/><file name="Rss.php" hash="01b9d9b750ec9c730bc3fa624629deeb"/></dir><file name="EntryAbstract.php" hash="b9e05d05ad657e24bca3947764bf4aba"/><file name="EntryInterface.php" hash="3e33c60c08158ac0398bb9f05ec2090b"/><dir name="Extension"><dir name="Atom"><file name="Entry.php" hash="6baacc2e3ddc23ad3cfa9e190fd54157"/><file name="Feed.php" hash="16e84c49d96b759d10b1fe86982cca2f"/></dir><dir name="Content"><file name="Entry.php" hash="4a01e7b785bc08518739d03825f8c7af"/></dir><dir name="CreativeCommons"><file name="Entry.php" hash="4c7cc6a5ddcb6971e2a7d30c701151b7"/><file name="Feed.php" hash="40b8c9f5146271c2fe7433f7daff07ac"/></dir><dir name="DublinCore"><file name="Entry.php" hash="3ff54fc3fe5df35c8ba4075ed42dabeb"/><file name="Feed.php" hash="56f06a3e2739c70c66da54e7608c9496"/></dir><file name="EntryAbstract.php" hash="fb62ce68f7a440fac11ec666e9e4bc22"/><file name="FeedAbstract.php" hash="c1283a62809662e762cd0a7875b0b913"/><dir name="Podcast"><file name="Entry.php" hash="738c47a9b19c44bedbce6a6e901ee173"/><file name="Feed.php" hash="23c593352bc891c6bbce22e98da18f6e"/></dir><dir name="Slash"><file name="Entry.php" hash="29d24797987342ea6a580a48af0accb5"/></dir><dir name="Syndication"><file name="Feed.php" hash="67ec064681ba8a77b4f6d44a35d4d8f7"/></dir><dir name="Thread"><file name="Entry.php" hash="202da1cb171c55d435b125cfb264d874"/></dir><dir name="WellFormedWeb"><file name="Entry.php" hash="88c3ee8f88632712522d206426a2927c"/></dir></dir><dir name="Feed"><dir name="Atom"><file name="Source.php" hash="71d4bceda67dd3a4acbc45bbee33853a"/></dir><file name="Atom.php" hash="042c93075ae2e933e5241750c101d3de"/><file name="Rss.php" hash="e354bd24fbf48a5bab9d518e3912bd93"/></dir><file name="FeedAbstract.php" hash="e577cfdd039f4025877f12d2d08dcce6"/><file name="FeedInterface.php" hash="7eaed63ef055848aa1b299bc98d8cc11"/><file name="FeedSet.php" hash="5ba5f156ac7607b73929dac85826c659"/></dir><file name="Reader.php" hash="d9bc6e5b898eb8be4fa72e313e89bccb"/><file name="Rss.php" hash="e14ca674ad56d9ce18df5d9728c770bc"/><dir name="Writer"><file name="Deleted.php" hash="35aad5db793b86ca638a81d052c6ae14"/><file name="Entry.php" hash="87c1a1d4b637d4918f5fabe8b56c1a9a"/><dir name="Exception"><file name="InvalidMethodException.php" hash="02419d36ca4d923b7ae46f8cf5e9808b"/></dir><dir name="Extension"><dir name="Atom"><dir name="Renderer"><file name="Feed.php" hash="e1c642e0775de8ace9639daff1a932aa"/></dir></dir><dir name="Content"><dir name="Renderer"><file name="Entry.php" hash="f86cd399902d04ab6652aa952c81916f"/></dir></dir><dir name="DublinCore"><dir name="Renderer"><file name="Entry.php" hash="6f79082f7b75e1d7b73930169ff6d5e0"/><file name="Feed.php" hash="8b6825b40579ce795e0018eac48a0fa6"/></dir></dir><dir name="ITunes"><file name="Entry.php" hash="e23d802f1cc74b432a3c5362be650c55"/><file name="Feed.php" hash="ffa388bb1b1c868a92978ee85f3c8d50"/><dir name="Renderer"><file name="Entry.php" hash="184f5e6f780c987cb55374c6b899dee2"/><file name="Feed.php" hash="c5df3307f99f2349024d3a31612d67a5"/></dir></dir><file name="RendererAbstract.php" hash="427c8bd29a3f0aec64f2034405b8fa89"/><file name="RendererInterface.php" hash="2cbb9d13b450a08098921fe99f5084bf"/><dir name="Slash"><dir name="Renderer"><file name="Entry.php" hash="95b4d946971ccd12e852d36125e241ad"/></dir></dir><dir name="Threading"><dir name="Renderer"><file name="Entry.php" hash="81fa4f73e25ce35482f8ea2d01ceac48"/></dir></dir><dir name="WellFormedWeb"><dir name="Renderer"><file name="Entry.php" hash="45c4795ca01add23d35af6ca1961a27b"/></dir></dir></dir><dir name="Feed"><file name="FeedAbstract.php" hash="65fa012f95547e0e63deb8715038c9c0"/></dir><file name="Feed.php" hash="699463ea19aa24d3cf48d9ddf37d63d4"/><dir name="Renderer"><dir name="Entry"><dir name="Atom"><file name="Deleted.php" hash="65126201b8fb20b29f945956c3c7aa14"/></dir><file name="Atom.php" hash="fd98f2be04963b4a660c49cd0bb9db5e"/><file name="Rss.php" hash="f0e70e6a183416e6c04a1aa58d91b128"/></dir><dir name="Feed"><dir name="Atom"><file name="AtomAbstract.php" hash="2762eb27cc4182026d7cb5d4a2d8e7d0"/><file name="Source.php" hash="b4432fc84152c9922c2a0318043431e2"/></dir><file name="Atom.php" hash="a4e0a7056233cc18c1abcbcf45895b3a"/><file name="Rss.php" hash="b01a32487ec79c8e29848e56d12f4fef"/></dir><file name="RendererAbstract.php" hash="e818b72ef7cccb7e411218194c4a90c2"/><file name="RendererInterface.php" hash="b9d0002ea9fd72117b6438231ca2db9e"/></dir><file name="Source.php" hash="3cce4bf24782f65948e0078eee3af8b8"/></dir><file name="Writer.php" hash="31915fe86b889b38f29cd365dfa2eef8"/></dir><file name="Feed.php" hash="90930372cd8489f1be5480df69e492a3"/><dir name="File"><file name="ClassFileLocator.php" hash="a763041253fb82e55d99e50078f9e791"/><file name="PhpClassFile.php" hash="95812fdfe2ea77215eaf98220970d2bc"/><dir name="Transfer"><dir name="Adapter"><file name="Abstract.php" hash="9f8caf0965ee20c3e394cc9abd39dc64"/><file name="Http.php" hash="98db3d564539a149becd025db2996089"/></dir><file name="Exception.php" hash="825fcee61f10cdfe37140f8053177a3f"/></dir><file name="Transfer.php" hash="3b238f59905a999aa851bd4e7b641d64"/></dir><dir name="Filter"><file name="Alnum.php" hash="4ca46f20de00a3ae2c141f1ceff56bad"/><file name="Alpha.php" hash="5b07ed4ed80ac52058355dc25eab7f17"/><file name="BaseName.php" hash="625ce144adaded5d1a792f2cdff08ddb"/><file name="Boolean.php" hash="8a4ccc8b5fe35cc6371f2a876c1687c4"/><file name="Callback.php" hash="877df95b6818f3919ff98ef2b792beab"/><dir name="Compress"><file name="Bz2.php" hash="85a13672065e12d52a4a53c7d57b5956"/><file name="CompressAbstract.php" hash="e31d6c9f72772def373f5f947ebb4857"/><file name="CompressInterface.php" hash="fea3425ce29a7262ac9aa37ca15e7ccd"/><file name="Gz.php" hash="e1a5c9d4301ba780b0fc2a2ab69b9cef"/><file name="Lzf.php" hash="238dbeb23d34fab2ce1fd53c5728c981"/><file name="Rar.php" hash="ee424491867ca2fce1556bdcf01e0a7f"/><file name="Tar.php" hash="e9fc01174f800ebf4e87294361714fe8"/><file name="Zip.php" hash="1adcddd63511b526c388dbbfb2693ca5"/></dir><file name="Compress.php" hash="17af88fb4588855a0fa2ad0c747e567c"/><file name="Decompress.php" hash="9900b029a91c9c1620903061b15d8b5d"/><file name="Decrypt.php" hash="ea36fb417859a47bc8090908f91c79b0"/><file name="Digits.php" hash="988e652d047ccb2b3f51368702b39932"/><file name="Dir.php" hash="ded6da050ac44e21c8729c4fd74559f0"/><dir name="Encrypt"><file name="Interface.php" hash="02481da5488767e23939a73b434d6728"/><file name="Mcrypt.php" hash="2320868b4e3235e934023f6339edb9ee"/><file name="Openssl.php" hash="37f02c9e5fd864557aca070ca8525e36"/></dir><file name="Encrypt.php" hash="41b1fa4536947b9ce5e4dcadb3bf80b7"/><file name="Exception.php" hash="ee7fa3aa3daed6b376e4fe3ff0533a65"/><dir name="File"><file name="Decrypt.php" hash="f82c770a201d0016ed0054874f39c90f"/><file name="Encrypt.php" hash="63c6232b0c216381bee8c18df751ab59"/><file name="LowerCase.php" hash="664f911dfcba8fb26ad86605eda4ad93"/><file name="Rename.php" hash="d854b8b98abd89db4d4b0eca30a2b496"/><file name="UpperCase.php" hash="9aad43cc07b024188734fe231ec7a80e"/></dir><file name="HtmlEntities.php" hash="6ce1c0425b0b5f48c21649c15ffe1d26"/><file name="Inflector.php" hash="b6b671c8956fe8c359af7739c56867a8"/><file name="Input.php" hash="fc8cc25c2f9da1b1da7b2839eb914c99"/><file name="Int.php" hash="41724f5b9f96f08b6b01281891bc3eab"/><file name="Interface.php" hash="0f810dcab23fc1f455c960af3f317a04"/><file name="LocalizedToNormalized.php" hash="6b98acca5dc278027620e0d5361a316e"/><file name="NormalizedToLocalized.php" hash="27f9795714f46c3d4a143330e77219ce"/><file name="Null.php" hash="fe5c2ff3f08d7ef9ffc140ad251dd6da"/><file name="PregReplace.php" hash="7b0c18825dcc9016d0cc2a0fea8fee53"/><file name="RealPath.php" hash="133f0776eaa042a0712e2d8e7db3ed7c"/><file name="StringToLower.php" hash="9a7352bfa73b4ac825bc2af9fef3c286"/><file name="StringToUpper.php" hash="ec2165f772585dcf346b589bbf9bc716"/><file name="StringTrim.php" hash="ca76b8743fd9ec88290ef11a24d48a03"/><file name="StripNewlines.php" hash="fe69c99129f9bd2b69ea16c0bbfc61c1"/><file name="StripTags.php" hash="78d7393075f2327644e873d4e9196082"/><dir name="Word"><file name="CamelCaseToDash.php" hash="3793e4ef36c6778b9e5df032dfc15b67"/><file name="CamelCaseToSeparator.php" hash="cd445e16f5d3ef145c4b0f35a10b1dcd"/><file name="CamelCaseToUnderscore.php" hash="932bcf0ead2bda7d9ba9544458fe2de8"/><file name="DashToCamelCase.php" hash="705245ae67e4a9eede0bb3c0bf0e6ac4"/><file name="DashToSeparator.php" hash="6edcb2382b8fc7acc8448679d6fb46b4"/><file name="DashToUnderscore.php" hash="1075b2edc67d246d7f300c336a00a745"/><dir name="Separator"><file name="Abstract.php" hash="7c13a127a26229fc8d5e0678e8efcb5f"/></dir><file name="SeparatorToCamelCase.php" hash="87f3c3a2ab24e2146db100710050d873"/><file name="SeparatorToDash.php" hash="d13f2d966ffd8cfb05114fbb9f3906b1"/><file name="SeparatorToSeparator.php" hash="3f70eae82b1616c098cd9aec7be41f9c"/><file name="UnderscoreToCamelCase.php" hash="5f19c37337b901edd5fe5080a8353116"/><file name="UnderscoreToDash.php" hash="2f25783e6e165b827fc113f046f30f44"/><file name="UnderscoreToSeparator.php" hash="b0e92b24b679b3dcbee459cd752a2478"/></dir></dir><file name="Filter.php" hash="383fca34ab08e0a803adb2c7766fad95"/><dir name="Form"><dir name="Decorator"><file name="Abstract.php" hash="8522e625655a35646b477ad4ff99dfe5"/><file name="Callback.php" hash="190782b871a222c75dfc8444b863da11"/><dir name="Captcha"><file name="ReCaptcha.php" hash="39b4156e05bfd86a8bc607c94f437e32"/><file name="Word.php" hash="880894024cfbed08b5f1078076512a25"/></dir><file name="Captcha.php" hash="1d07f76a5ba267e35b801bbfa6437b1f"/><file name="Description.php" hash="4c386b676076f9d5839eea503b633567"/><file name="DtDdWrapper.php" hash="124076232159f0fa26fc9fe67685830f"/><file name="Errors.php" hash="e10d634460b6dae52065a83cd5c3b3a2"/><file name="Exception.php" hash="7540f704e53237cd3a6715d1e480c3b9"/><file name="Fieldset.php" hash="6bd5c5b9ff8e9e489e5a7c560aff175a"/><file name="File.php" hash="c06f2200db61e4ebffa266d99260c726"/><file name="Form.php" hash="c0117ea6a352a32b780baae652d717b9"/><file name="FormElements.php" hash="8cb9c8f03fb877b45696b534c1b39b14"/><file name="FormErrors.php" hash="723036887204776c398e63c715b762fa"/><file name="HtmlTag.php" hash="2b90f769619b1e6624e14922dc2c32ec"/><file name="Image.php" hash="2a1a7dd1624ee71cfc13b7c96b4796e9"/><file name="Interface.php" hash="60d51f6f15d396b5a16519ba5eeec204"/><file name="Label.php" hash="277f64b41efc25890d78eba58db9b780"/><dir name="Marker"><dir name="File"><file name="Interface.php" hash="30667e6ff2ccced89c3b62cf0e13f931"/></dir></dir><file name="PrepareElements.php" hash="0ff6fb16d6c5a748c9c3d3e48037755d"/><file name="Tooltip.php" hash="bb7394628ade765908544c69c6790844"/><file name="ViewHelper.php" hash="c5cc8db2e0cec01b77be69fa2e1b9299"/><file name="ViewScript.php" hash="23ef6fc6fdac5fd8c9105738c5cd3ccf"/></dir><file name="DisplayGroup.php" hash="ee080ba86203eeb41ac17d38877651f5"/><dir name="Element"><file name="Button.php" hash="730df0b76e3957882f877197447d5f1d"/><file name="Captcha.php" hash="0752ad99fb0f43536c91367c70a494df"/><file name="Checkbox.php" hash="e39255d645c7c1b2ac042cc64c2e7cc9"/><file name="Exception.php" hash="c1a78bc6fbcad9d8544ef102ee578bd7"/><file name="File.php" hash="8a78cdb33c6d598fee1f22fe008e7479"/><file name="Hash.php" hash="98a63f7085dc662488f510b8341a450a"/><file name="Hidden.php" hash="4f1b7d49e10c937cbe9bc1f481a24e9e"/><file name="Image.php" hash="050990ff646853c7def62d5912a3a57e"/><file name="Multi.php" hash="546108cee3f938abc94159392b279638"/><file name="MultiCheckbox.php" hash="8da3e1c8f63673889aa82c8a477bc19e"/><file name="Multiselect.php" hash="70685894797a172bfbfeed0b3ca0c8c9"/><file name="Note.php" hash="db0386ab8c66da2df8c912e37b11110f"/><file name="Password.php" hash="4cee94cd5c56812e101f9cae256d79cf"/><file name="Radio.php" hash="088e0a26f8b959fd252edc7080cbe3c6"/><file name="Reset.php" hash="782f1aa0cbe1a792a0d05a51d58d8beb"/><file name="Select.php" hash="ee8919ec27665b02cc44cc0083609878"/><file name="Submit.php" hash="0a97601d86f82bd50d3ea6777937254c"/><file name="Text.php" hash="781ee2e638e37fc613ad760bbd2d30bb"/><file name="Textarea.php" hash="85a7119e8e0fa3377b0576b16aa05c51"/><file name="Xhtml.php" hash="4c20761fbbb7ca24ea9b49ac3cd41e58"/></dir><file name="Element.php" hash="f03fcc6dcd7b3e0da5a36046d36d727f"/><file name="Exception.php" hash="d33a48b9d1ec7e213210383b1f7bca68"/><file name="SubForm.php" hash="ba968be3402ccdf8b4185f4d53234120"/></dir><file name="Form.php" hash="4001592cf753a1170ba2cf1c178c17ce"/><dir name="Gdata"><dir name="Analytics"><file name="AccountEntry.php" hash="e12468f4c63d78e8edecbc473933aa4a"/><file name="AccountFeed.php" hash="a2f9b14dbdc470693a82907f57c4d258"/><file name="AccountQuery.php" hash="8f5b153ae38c2c0598dcdd0f4ca851a4"/><file name="DataEntry.php" hash="e45ec9042ba8356cdf29505e1e9e2d0b"/><file name="DataFeed.php" hash="5db9ffeb61cefb3659e9be8400ed20e8"/><file name="DataQuery.php" hash="f42425d8f43dada50bb8f128d8f975f6"/><dir name="Extension"><file name="Dimension.php" hash="38282ab7af5abb515f4aa658f820fc34"/><file name="Goal.php" hash="2c46c1d7db9b5f507a47e4bb121e2b4c"/><file name="Metric.php" hash="8560747659930f23b28cc94bd837440b"/><file name="Property.php" hash="d1ba271f052e44a1152eed24533824b0"/><file name="TableId.php" hash="60e5a4486c861d393b6f3183c2485267"/></dir></dir><file name="Analytics.php" hash="a97cd7d0faa0f65351e65f55c28fcc60"/><dir name="App"><file name="AuthException.php" hash="6f8d23065cd17d239b2cec093015ad8e"/><file name="BadMethodCallException.php" hash="86fe8ce683680f512145d94a22ab21d5"/><file name="Base.php" hash="109e590e151826d3347d1f2f58dcab56"/><file name="BaseMediaSource.php" hash="d1ec6648e8c89711225d42a07e4738d7"/><file name="CaptchaRequiredException.php" hash="7a3e3893b6f8a9c282d920acb9928e21"/><file name="Entry.php" hash="06786f3fe9e30b60c79888be9c70c067"/><file name="Exception.php" hash="82c41ada4e9863867adb2795fe7b1ca0"/><dir name="Extension"><file name="Author.php" hash="2df6f04ec34d35d1d79bbd189a9c53a8"/><file name="Category.php" hash="273bbd08b463d8394b8528294f2f43ef"/><file name="Content.php" hash="ba2ae463fc480db7c017c495c47f8380"/><file name="Contributor.php" hash="b06a5ee82e874422c7053e9bc4efa7a7"/><file name="Control.php" hash="2215659703162befaa49e7a18ad7abe1"/><file name="Draft.php" hash="45da888e1837d3002d099e483cc4e117"/><file name="Edited.php" hash="94503a1886214c959eb189dc1331a1e3"/><file name="Element.php" hash="1ff84c0f8b8e3e9be1edf28774125044"/><file name="Email.php" hash="f3733ecc80e481cd3e35b93df18a216d"/><file name="Generator.php" hash="aef1362208e44f2be51e4094089b4795"/><file name="Icon.php" hash="36d027f0cf96a2deb42b6c1aab0468ef"/><file name="Id.php" hash="9609dfb9218d0b8263086504e6b0d63c"/><file name="Link.php" hash="de21b9578b8592c5b3e3fcfb84419671"/><file name="Logo.php" hash="23c88a04e6897da7a7606733d5880094"/><file name="Name.php" hash="bcefb468fb70012b66b7322b1b9c618f"/><file name="Person.php" hash="5190427185a73d6cd253d4ad37d3130e"/><file name="Published.php" hash="f5b6d374545f8fea7382644413c786ee"/><file name="Rights.php" hash="add154a43b16eea075f70fef1dc0c614"/><file name="Source.php" hash="9b5c51a557d100b8d32f04c2e631d51e"/><file name="Subtitle.php" hash="87ccbc9582dabb57b4e5254c3cdb5419"/><file name="Summary.php" hash="308fcbd2860bac275a68bbaa455d75e5"/><file name="Text.php" hash="bcb0f1d994917499bb98c2045839cf78"/><file name="Title.php" hash="37736e9d970dbfb6508fe95c8b1d4c4a"/><file name="Updated.php" hash="3a00f1cac5e73b47fe960a4568d753a2"/><file name="Uri.php" hash="c8a0fd8b1e0ef4620dcb4f8d3bdf2f02"/></dir><file name="Extension.php" hash="e8d500cede8625e9a513241cb9340b8b"/><file name="Feed.php" hash="2a9b8a370e645cac248df5cec9752bf4"/><file name="FeedEntryParent.php" hash="03a2448db19430ce9d63af5a794c49ee"/><file name="FeedSourceParent.php" hash="ad513f8bba194a7c597d62332e1b748d"/><file name="HttpException.php" hash="e235854ac6db814217beb8e0f4432bda"/><file name="IOException.php" hash="4fe86dbdc8efd68b4f4e91eb720476fe"/><file name="InvalidArgumentException.php" hash="bb79aa3b093b89f2d1740e3de29c591b"/><file name="LoggingHttpClientAdapterSocket.php" hash="6c6fcbec1d914d2f0f1b4c9f9f9d6ded"/><file name="MediaEntry.php" hash="665829aa3a0b00efad9d39516ac20296"/><file name="MediaFileSource.php" hash="33e29faf6b09ad55399f8c4605de560b"/><file name="MediaSource.php" hash="956d976c017eb2969ec6980ba6a10227"/><file name="Util.php" hash="a978ace39e376ebb7a77168bb980e500"/><file name="VersionException.php" hash="46a96dcdf49d163f2b558f6af76770f8"/></dir><file name="App.php" hash="0611ada3705cf91a416144719aa34f4d"/><file name="AuthSub.php" hash="7d6c8fa90f00569465838f7485e6f8c9"/><dir name="Books"><file name="CollectionEntry.php" hash="e9400464091b197c1406c31904c89f46"/><file name="CollectionFeed.php" hash="50eb4262a08af25008fc23dc8ce38261"/><dir name="Extension"><file name="AnnotationLink.php" hash="229515a8187537875bec1df18a216e70"/><file name="BooksCategory.php" hash="94043b4e41582b92bd585a2f6ca55401"/><file name="BooksLink.php" hash="d4d4d737a079e5a06f9ec239156acc3b"/><file name="Embeddability.php" hash="02ea13af1b4c9e4bdf019cf85bd2e1e3"/><file name="InfoLink.php" hash="e901bc048235143eca51ac93750e148f"/><file name="PreviewLink.php" hash="96cc9f7155d4a8420b59dfab337df144"/><file name="Review.php" hash="8263c22752814fc5b8ed79f5b8fb0c64"/><file name="ThumbnailLink.php" hash="d39c8c46fdcd113b6e78b0a291e3fb7e"/><file name="Viewability.php" hash="00ab00c410d09d756c1f4eac2617dd85"/></dir><file name="VolumeEntry.php" hash="c792cd0a1600d1f82b359e4488ca96d6"/><file name="VolumeFeed.php" hash="df63b570832f03352f8fd9caf5dd0ad9"/><file name="VolumeQuery.php" hash="7c4eafbfe2dffe63d19da553d7116784"/></dir><file name="Books.php" hash="2b24e8b1f35eeb6c045c82aaea8ff279"/><dir name="Calendar"><file name="EventEntry.php" hash="3a8929e9b816b58b948bb27c5f5b7b11"/><file name="EventFeed.php" hash="cb77e63f75b7b00e3ad977160bf1df3b"/><file name="EventQuery.php" hash="c87b0d6fb40e7b41509bbf0c72c35563"/><dir name="Extension"><file name="AccessLevel.php" hash="0c08117546cfc5687e831e7c1c911386"/><file name="Color.php" hash="173b3b7765f71816d9474b4d662fa78b"/><file name="Hidden.php" hash="e013d7fa1de0281467fd342b68d82e47"/><file name="Link.php" hash="9024ffbc848c26dc7142791d334ed4c6"/><file name="QuickAdd.php" hash="b27ef7921a5f849c6d3670e80205a826"/><file name="Selected.php" hash="af19756358007c35c1e97b25d3c40f98"/><file name="SendEventNotifications.php" hash="ad25cf943facb4ca07b5eea08b29d6c0"/><file name="Timezone.php" hash="f42b5243c11888a5ba4075b0e9663d64"/><file name="WebContent.php" hash="b7097ddc1f180e4a85097a414b96bba9"/></dir><file name="ListEntry.php" hash="0579d1450de838b1b893f9720a7dacc1"/><file name="ListFeed.php" hash="e21a404f7d250f78fdac64f729d2b377"/></dir><file name="Calendar.php" hash="507e33fa6d185c57b0c2c351c0fbc060"/><file name="ClientLogin.php" hash="d5025122f58267716ea25d7546da7d62"/><dir name="Docs"><file name="DocumentListEntry.php" hash="08219506950f07c0cb16e1196dc4e09c"/><file name="DocumentListFeed.php" hash="dd7d591781ad9cf3293f73bc94e64e78"/><file name="Query.php" hash="e6c962a8f8cfe02d3ca0701b932dd5c9"/></dir><file name="Docs.php" hash="f29d7a621a95734e8b83a4afa5a6fe42"/><dir name="DublinCore"><dir name="Extension"><file name="Creator.php" hash="c56d34f65d24a0ad25e60a4e913fd54a"/><file name="Date.php" hash="54b46f21e08d7ca7d230c6b7e83e7210"/><file name="Description.php" hash="6f4bb927deae9cb5b501b37e4cbdeca7"/><file name="Format.php" hash="a2eb4fd88c1197f1b122adfcca64e4c5"/><file name="Identifier.php" hash="7900202e14b61bf0323069f736521521"/><file name="Language.php" hash="b47e4dafd3fcebd4d11b4ac0806cea70"/><file name="Publisher.php" hash="1660d7ee8e0fa26d24376ed8414849e3"/><file name="Rights.php" hash="1cddf53544c56ad8a29f012f1501501e"/><file name="Subject.php" hash="a287af1b176e22b3f7001e4a8d69129f"/><file name="Title.php" hash="77bbd2f9afb01b6337b03b12c19cd0ba"/></dir></dir><file name="DublinCore.php" hash="6fa896e35490d67182eb013b08ef6d75"/><file name="Entry.php" hash="b2f85f13672d64d288bbcf9824058488"/><dir name="Exif"><file name="Entry.php" hash="cba9027e69ca0d3431f5fa8e84519d22"/><dir name="Extension"><file name="Distance.php" hash="69d8d71b3c8f02fd85e22e72453f5e7c"/><file name="Exposure.php" hash="5b4f1e1c91ada58e661412e391c9167c"/><file name="FStop.php" hash="78c90acf5134d6a8cd7debc8dfff3942"/><file name="Flash.php" hash="bc1c363115d8ee05fc043ae829ca9398"/><file name="FocalLength.php" hash="ba8dba20995e7ad0dc5fbe056a13a431"/><file name="ImageUniqueId.php" hash="3007c391ed138e7db78cca05ad964cb5"/><file name="Iso.php" hash="9b7340beb6cd2f991d0b590da9929207"/><file name="Make.php" hash="b96528e1c95904dcf7a32b6d2b855c4a"/><file name="Model.php" hash="de354ebd3ac53b26c7ba7d07b7eaf74e"/><file name="Tags.php" hash="0b6dca99d61d601cd89ddfe6d9af5990"/><file name="Time.php" hash="880ab5825cab35d85036460d54b18148"/></dir><file name="Feed.php" hash="d102e026496f926fa8dbf0024e75ea22"/></dir><file name="Exif.php" hash="31c98117fa58af3fbc8a9504aed7f05d"/><dir name="Extension"><file name="AttendeeStatus.php" hash="dac3c0490bccbf09f924948ad44232cd"/><file name="AttendeeType.php" hash="3b42bd943b0536d5bde7e735fd8615d4"/><file name="Comments.php" hash="9afbcf4a4ce1d7dd52706e0e8928a8ee"/><file name="EntryLink.php" hash="5a280e630417eb616c257813c3ead727"/><file name="EventStatus.php" hash="61f988f2bfafa564543cabe4e7f86f29"/><file name="ExtendedProperty.php" hash="2d80f08e6e2e79da98134e959b58fbbd"/><file name="FeedLink.php" hash="679a6f5c9ebed486b6b41bac1522fba3"/><file name="OpenSearchItemsPerPage.php" hash="8430c39b6ce1bfb8deb8d2ff4070edf6"/><file name="OpenSearchStartIndex.php" hash="118645c4f8d38b135ebdd9792ba30234"/><file name="OpenSearchTotalResults.php" hash="8e7bbe094d00d023b1ac76184bbc871c"/><file name="OriginalEvent.php" hash="799806cbff3654b92028550a96d3f418"/><file name="Rating.php" hash="96f79437551070a76a0ffc8cf0ce3f93"/><file name="Recurrence.php" hash="da2e478f7368e9fae3e91aa4975769b9"/><file name="RecurrenceException.php" hash="1565fac963250d130a9a18d0e87a9462"/><file name="Reminder.php" hash="84525523e8827d09cda261f02f4c4214"/><file name="Transparency.php" hash="2c99f3896ceaa90632f565d3910eba43"/><file name="Visibility.php" hash="df49298225481498f3a082cc88092ed6"/><file name="When.php" hash="4a02d7db9ade6210d5d01fd401938732"/><file name="Where.php" hash="5d1d9557f1a8a24be5c6076464f35cda"/><file name="Who.php" hash="8d3c827558b62b6fbbdb1786bc6dc8f0"/></dir><file name="Extension.php" hash="3dbf28598313aea3fbcb6ae0a9218373"/><file name="Feed.php" hash="8ae61588a220ed9e612bd0d306ed7be9"/><dir name="Gapps"><file name="EmailListEntry.php" hash="beeaa4d8624538255fd4fa414bf2aa2b"/><file name="EmailListFeed.php" hash="dae8f9390c01ce354aacf7a03b56faa3"/><file name="EmailListQuery.php" hash="38e4255133125d1c3cd461769ff2bbf6"/><file name="EmailListRecipientEntry.php" hash="5042400a2ccf63b598d11098c08a02a8"/><file name="EmailListRecipientFeed.php" hash="e67f7530086c3c3de9bf49ce731ba816"/><file name="EmailListRecipientQuery.php" hash="6b48a9d58feb39241c63a1c448259894"/><file name="Error.php" hash="2739432a885e3aa64112124acf85666a"/><dir name="Extension"><file name="EmailList.php" hash="d83a001f6b79d69a55a534c352df4518"/><file name="Login.php" hash="068572b0a7d975d816564d334aa6cf07"/><file name="Name.php" hash="b895fe7b562ab015bc391c82be75d63e"/><file name="Nickname.php" hash="12ce7eb02489b501861272c13acec59d"/><file name="Property.php" hash="4517466631d6a91e771e3eba6c4d028e"/><file name="Quota.php" hash="18a9c44fdf6146c74b51d123c00bd7d4"/></dir><file name="GroupEntry.php" hash="5c36b2030c5394629693de197c909286"/><file name="GroupFeed.php" hash="13b68ebe7768fabe2f408b5a317bb088"/><file name="GroupQuery.php" hash="fc3f172f6fda1a3b50c6c8c2f3beebd6"/><file name="MemberEntry.php" hash="987fddd8e68938e62d4fb4c80a0b7586"/><file name="MemberFeed.php" hash="aaec820fc096293a6e6f4e5dc9a213a7"/><file name="MemberQuery.php" hash="1fe4b7f18ca161de836a9bf2b18cf123"/><file name="NicknameEntry.php" hash="f0fbcba505a6cac9d64328acf86c168a"/><file name="NicknameFeed.php" hash="80df6633ccad4aea2f1b0ff1fc56fedc"/><file name="NicknameQuery.php" hash="b3fc90f01854679f692ca2d34f1ef867"/><file name="OwnerEntry.php" hash="a66d48e8d46fddf2a9e3ea0330bcea45"/><file name="OwnerFeed.php" hash="98123454cb3cc6dc134d9ad827d297b2"/><file name="OwnerQuery.php" hash="5c829232390b828f06565012b2af3ce6"/><file name="Query.php" hash="a893bb0bebd43c558fac8f7b58477577"/><file name="ServiceException.php" hash="e62bc29c1a67ab44455ebc10fb033887"/><file name="UserEntry.php" hash="327e60ce8bad4fad8aa9d785902a0488"/><file name="UserFeed.php" hash="12a6e44ebb6b809f1ab17884c957d034"/><file name="UserQuery.php" hash="36d9b6e3c53812f1a0b3ba58b8348d1f"/></dir><file name="Gapps.php" hash="006b69cd2b4bb52efbc481cba3ded85d"/><dir name="Gbase"><file name="Entry.php" hash="d1c0594bd7f509ee8b71a0d4c6e93cef"/><dir name="Extension"><file name="BaseAttribute.php" hash="9860f259d07b1d7c48953ac145e91173"/></dir><file name="Feed.php" hash="a3a9a55b4dafc0c71da475d0b8ab4ed3"/><file name="ItemEntry.php" hash="4ad3d155cdb9fce8010cb9ff27d3ff54"/><file name="ItemFeed.php" hash="44ffbf3810fe7d602fa50a219f4d0c6b"/><file name="ItemQuery.php" hash="d85aa16b033dfc7478cbfa9cd38cbd69"/><file name="Query.php" hash="feaa71301ffc82297a5c768b267ff5b2"/><file name="SnippetEntry.php" hash="023249497ffc22f6fbad8645c50dc78d"/><file name="SnippetFeed.php" hash="5197182ca6edcf33fa8452f809597510"/><file name="SnippetQuery.php" hash="17365d8dc24d1da93b8b730c6fe6d864"/></dir><file name="Gbase.php" hash="78c17b83a499c8c31d31762990d83d3b"/><dir name="Geo"><file name="Entry.php" hash="bf5d39448208c58aba61ec64d6a79ad8"/><dir name="Extension"><file name="GeoRssWhere.php" hash="914e0e1155c117f5908f07dadc6ee889"/><file name="GmlPoint.php" hash="a5bf5b02bdec49c06e1aa44763bba1a8"/><file name="GmlPos.php" hash="8ef27447e497a39031e475372a8cb08a"/></dir><file name="Feed.php" hash="c2adb51ac77e046f74ac15f7bcfb53d3"/></dir><file name="Geo.php" hash="2a5a5a2dfa2462e061234e4946fbc8f4"/><dir name="Health"><dir name="Extension"><file name="Ccr.php" hash="5f6686a6c63958e949db8bf5deb92f2b"/></dir><file name="ProfileEntry.php" hash="a2c0dd3747b54680f62089aa25ca26c0"/><file name="ProfileFeed.php" hash="1a41a46d2871e28239c45f23f0b50868"/><file name="ProfileListEntry.php" hash="ee7b66b18af7f3d7406c10c82dbe903a"/><file name="ProfileListFeed.php" hash="1d15e991cf6dc94a83b52ec64aed7a2a"/><file name="Query.php" hash="6dd89b579a5aa4d35de32e74c0df5502"/></dir><file name="Health.php" hash="6b0a156697fe84a09efbde31eea3f497"/><file name="HttpAdapterStreamingProxy.php" hash="6b2964e32bf7c0e110b8ab25445ed53f"/><file name="HttpAdapterStreamingSocket.php" hash="b5b74e5c1cb8206da4b163666a81fed4"/><file name="HttpClient.php" hash="9cee0a291d6c4b11f7358628923f925f"/><dir name="Kind"><file name="EventEntry.php" hash="1f1204191536089911a984770ce0cb47"/></dir><dir name="Media"><file name="Entry.php" hash="9cc1bd304119ff7d428225d3107c3a34"/><dir name="Extension"><file name="MediaCategory.php" hash="8f9345afe735f43c0936d2741556db13"/><file name="MediaContent.php" hash="947b1ca390fa6021690d0a67f81c0c28"/><file name="MediaCopyright.php" hash="947dadff8c8d2708ccb7af6aaa5d928e"/><file name="MediaCredit.php" hash="6d2b9d4be6e3c896fc9c9f9a9581ce9d"/><file name="MediaDescription.php" hash="eeaf98530facd9f42d2e3c46661db3f3"/><file name="MediaGroup.php" hash="9e6dcb6e453393b23d7efb8dde3fb4b0"/><file name="MediaHash.php" hash="2f84bf6db86d3302709347222ad1eba4"/><file name="MediaKeywords.php" hash="6a1a4c5eee620173c5c1995a8bc0aa25"/><file name="MediaPlayer.php" hash="c7d51126d6604718daec1674785e90af"/><file name="MediaRating.php" hash="915d64d3fa690969aa6697c945ef7b28"/><file name="MediaRestriction.php" hash="8921f3bd9d80f7a530b826ab009668c4"/><file name="MediaText.php" hash="557defecdbd618e8917ed5fcd6ccddbf"/><file name="MediaThumbnail.php" hash="e5e272a715318c877fae805dc78e3fee"/><file name="MediaTitle.php" hash="4134d9c00494d89ba462ae9500d1e2bc"/></dir><file name="Feed.php" hash="f67c9bb85cbfbf098fb53ae50a026044"/></dir><file name="Media.php" hash="752e78b67dca41a50ffb85dee3b3e483"/><file name="MediaMimeStream.php" hash="de9b3dd42e0f9f62341fa075bb900c6c"/><file name="MimeBodyString.php" hash="ea742b4f32d34ddac64454b990d4ef37"/><file name="MimeFile.php" hash="0afbad3bc750c1cc5d3f93c54c3c5019"/><dir name="Photos"><file name="AlbumEntry.php" hash="1ab5e6bdc070df30938e912d52eada85"/><file name="AlbumFeed.php" hash="07c42ecd6819d25e428b94f31882c1a0"/><file name="AlbumQuery.php" hash="5da3a372fe52f8c076e9d97a35f823e1"/><file name="CommentEntry.php" hash="f7822566e08ea7b3f74c955abf89a41f"/><dir name="Extension"><file name="Access.php" hash="8d4c3dfe21dbb25632e87659070125d1"/><file name="AlbumId.php" hash="45b3059567bf5e49a6f8edf6b8a16937"/><file name="BytesUsed.php" hash="fd2a43339909b5c7402208dccbdf68c0"/><file name="Checksum.php" hash="5ca31e3430e2e9b747d91c94c000de8a"/><file name="Client.php" hash="2a3276f0666bc92c7d7155bcfbc74f42"/><file name="CommentCount.php" hash="48176e51ea9b1c3c0de6edcf24e25d19"/><file name="CommentingEnabled.php" hash="5b460e8f02be0079867d34af9ab54bce"/><file name="Height.php" hash="d913feb4798b7f3c8ba645bc6ecd1d59"/><file name="Id.php" hash="c5c6fcef6647a1523b99463cfb0a6ebe"/><file name="Location.php" hash="b2b10096aeca032d37e138b09f4ce18e"/><file name="MaxPhotosPerAlbum.php" hash="d1b61411c47e1eb91cb0b80be60998a0"/><file name="Name.php" hash="7e6637d23584ef1ebc3834940fc2ad52"/><file name="Nickname.php" hash="c4345329b15d815de6527d0f8e0277e6"/><file name="NumPhotos.php" hash="160edc7a3b4837435a36befe5378e01e"/><file name="NumPhotosRemaining.php" hash="a3b358f036c2fbefdf93830c92a027fd"/><file name="PhotoId.php" hash="ff997a353b24d944f439702d4ece0966"/><file name="Position.php" hash="cf9f8b0c29c98c1680b2675ebf47e6b2"/><file name="QuotaCurrent.php" hash="a57ff86ba83287a1f145f272ca463756"/><file name="QuotaLimit.php" hash="00c6e94954fbe136a09d4b7ca8f7128c"/><file name="Rotation.php" hash="513a2712c12e10fb61dde21976824b7e"/><file name="Size.php" hash="ab29ba1766a003c1b3ad22db180d18cc"/><file name="Thumbnail.php" hash="6a59c5bebc192e34992e8058ccfd11c1"/><file name="Timestamp.php" hash="b52abdc854529af5cb545691692375ec"/><file name="User.php" hash="3a21cef935fd5fb42f97e308b1997583"/><file name="Version.php" hash="9625bc1c6aefcf580c5fbe0d2f045b4e"/><file name="Weight.php" hash="a8bc3ed41e626323f92adf87410af458"/><file name="Width.php" hash="06f910c1bb1e4e747c38c26ed409522b"/></dir><file name="PhotoEntry.php" hash="ada12abf9bb991fa672ca9a05cb979a5"/><file name="PhotoFeed.php" hash="3b29ec6d750456cdd799bcbaa751e89b"/><file name="PhotoQuery.php" hash="93b28eba3750d181f44fe41181e45663"/><file name="TagEntry.php" hash="8c088bb0af6e8a14eced2775aa3a291c"/><file name="UserEntry.php" hash="15e59c396a645fc30f03cb42d2efc351"/><file name="UserFeed.php" hash="e1498967cc3f5d361c96a0bcde82437d"/><file name="UserQuery.php" hash="26f3ef6227851523817358a97544ebd6"/></dir><file name="Photos.php" hash="c46ff72fca949809ff42f17b0079c069"/><file name="Query.php" hash="100dee31d0a572c4d2e990a96f7e9a0e"/><dir name="Spreadsheets"><file name="CellEntry.php" hash="93cc5079095d6daa6c2147b62131a890"/><file name="CellFeed.php" hash="ca07b9478e1b6ecae9147bc2105c8bd7"/><file name="CellQuery.php" hash="bc7fbfd4e84481e19df568357bc22e37"/><file name="DocumentQuery.php" hash="fd2935ddca76445d1bea58c4f6799ebc"/><dir name="Extension"><file name="Cell.php" hash="917abed62f74a5101511f4449c805140"/><file name="ColCount.php" hash="dba4f0796d79fe80ff15d4dc9bebcd24"/><file name="Custom.php" hash="8f805dee81206d515ab43097cecedb1b"/><file name="RowCount.php" hash="be76b9f5b367cb349576283ab9765d34"/></dir><file name="ListEntry.php" hash="7b8c759afeb6cee40fc5ce231dcf6f2e"/><file name="ListFeed.php" hash="688c2cd0aab8cffabce85d835e4fe077"/><file name="ListQuery.php" hash="2bd4f1eb97b6b3c92c8d2f52fcdbbccf"/><file name="SpreadsheetEntry.php" hash="e43a1862baadf19907770d4a61a56626"/><file name="SpreadsheetFeed.php" hash="2cd1cf91c61a54ea236e1aaf73877009"/><file name="WorksheetEntry.php" hash="7091ab92f732197dbf7e45dcc9c87bf3"/><file name="WorksheetFeed.php" hash="3a4c334028cc35e76255507be1efe061"/></dir><file name="Spreadsheets.php" hash="5706fa18d101c716c73b5f1f6869f33b"/><dir name="YouTube"><file name="ActivityEntry.php" hash="19c73663008cbcbb141c35e8717521aa"/><file name="ActivityFeed.php" hash="5e45cff4ae0df9e35683067769a26386"/><file name="CommentEntry.php" hash="8f17768b645f4165b9601e59fab4045a"/><file name="CommentFeed.php" hash="a391a8ea8c0b27904e365eace8b03458"/><file name="ContactEntry.php" hash="440d8c1c0196e59dd80c6c52e30b2459"/><file name="ContactFeed.php" hash="ae3698b6ccf9d339f7a30b4a5789f698"/><dir name="Extension"><file name="AboutMe.php" hash="8011ef3b524bea9fff089882ea4ed0ab"/><file name="Age.php" hash="e2a9893b2e911b3db507465320cbcf63"/><file name="Books.php" hash="89b35f4bc0027463f91824b5cd2e47cb"/><file name="Company.php" hash="549c355f976cc892cebc6811fe2580a1"/><file name="Control.php" hash="578a083eabf62931b62d095600b80003"/><file name="CountHint.php" hash="666969cd9d5d77e06c9a115fae9de6b8"/><file name="Description.php" hash="8a7dbf10f59ccd573eb0c90cc5971cf6"/><file name="Duration.php" hash="24f2181f720fe6db1cb22503ffee459c"/><file name="FirstName.php" hash="d28dd3cd580a2fa7c6bfb829e8711166"/><file name="Gender.php" hash="260b84dc18e9c01eac563404d0fa5f5d"/><file name="Hobbies.php" hash="2dd89e1c8199ef743d771702ecc95c8f"/><file name="Hometown.php" hash="fda3ebb42524b3ab8d54467887da61f5"/><file name="LastName.php" hash="f19b93c1d745cafe6ecf20c7bc8d0c3d"/><file name="Link.php" hash="d93c9801f25b8c8cb13d87ff3b3b460e"/><file name="Location.php" hash="20909b4d155c9fd517081322b835f306"/><file name="MediaContent.php" hash="1b53bccaa9f1de51c19378fc8c442868"/><file name="MediaCredit.php" hash="4571da70916493177e72f0aebeaa78ac"/><file name="MediaGroup.php" hash="36cca7fb741bb294f4dcb4142733d100"/><file name="MediaRating.php" hash="099d0984cdb2c9110ca259311047d0de"/><file name="Movies.php" hash="464957a1f90eb56899ec503c4ede6ef9"/><file name="Music.php" hash="947c3294f34d0f35ab88c7f7a9c4f4b3"/><file name="NoEmbed.php" hash="1e6e4a5995de606554e7145a0df0b6d4"/><file name="Occupation.php" hash="b33c3053639572a312fec678395d7436"/><file name="PlaylistId.php" hash="af87bcfda7115ae9c55bf3c1f2986754"/><file name="PlaylistTitle.php" hash="79b89ae7bdce993a758fd1bf45188252"/><file name="Position.php" hash="d92a78e714b2f7afdfabd8d09f73ff1d"/><file name="Private.php" hash="93bd6eeaf228e882ccceda591813228f"/><file name="QueryString.php" hash="5e5c57c2e219ef2e5ca3184997d87ccd"/><file name="Racy.php" hash="ad019d20c5c40d12da9cfc9df9daeaec"/><file name="Recorded.php" hash="7af195c7f3f045946f13504cc38522a0"/><file name="Relationship.php" hash="b42aac9538b504662222635a29149436"/><file name="ReleaseDate.php" hash="beb4a4d9830ff40a06816a341de8dd15"/><file name="School.php" hash="51a1ff928489cc7cd3aacc7a7aaf08a3"/><file name="State.php" hash="04cd3d54d4050aafc5ce27e719d234e9"/><file name="Statistics.php" hash="73270160b45c7ec91914467ccda850ef"/><file name="Status.php" hash="aadcb325d6f3b51cae180406d4caf9a4"/><file name="Token.php" hash="8686b59bd2a0048283389bc01acf77bb"/><file name="Uploaded.php" hash="9ee6ea6660e515f1440d92b2ef4d97dd"/><file name="Username.php" hash="c3782552a9accafea073e8f0081e43f3"/><file name="VideoId.php" hash="30fdd4c5cd5b212a1e4c17cd28fbb12b"/></dir><file name="InboxEntry.php" hash="24eb593b56341f919f0bc0446b4b71f8"/><file name="InboxFeed.php" hash="69487f9424ad1686f1b00e2b1f73ad29"/><file name="MediaEntry.php" hash="924fd5fcbfec4c44e965812618c08b6e"/><file name="PlaylistListEntry.php" hash="367ad32e10ea7203408d99bcfae836a2"/><file name="PlaylistListFeed.php" hash="6a2db1a031b1f749231326b4bd57d9bd"/><file name="PlaylistVideoEntry.php" hash="5453811dc274201e95b9ca6450180669"/><file name="PlaylistVideoFeed.php" hash="54be8eb4c90f3a5a4b6ce1ce578f7e56"/><file name="SubscriptionEntry.php" hash="f602292610ce553fb7493cda0bc25cb0"/><file name="SubscriptionFeed.php" hash="576b63779940d7e3576a1c505bff284f"/><file name="UserProfileEntry.php" hash="4eafc0f86b477f85405429572ba1ba62"/><file name="VideoEntry.php" hash="1ef39076a4e9cd95f91bf8d69bf4f52c"/><file name="VideoFeed.php" hash="aa4889f83dab3ed5524583b48a7a5a22"/><file name="VideoQuery.php" hash="a2a973590b187f7314e994d824a6a288"/></dir><file name="YouTube.php" hash="a8dc12d5116ec45b159b59dacddbf946"/></dir><file name="Gdata.php" hash="f1583b57defcf04cb1b35c2875a95ea1"/><dir name="Http"><dir name="Client"><dir name="Adapter"><file name="Curl.php" hash="a4300f6a2b52d63e0edd1e81c4fe2dd5"/><file name="Exception.php" hash="edeae8782f6926386f145d8a873d23bb"/><file name="Interface.php" hash="588b60a6607675c8698be8b3fd2d4e22"/><file name="Proxy.php" hash="6892b7d0c9de3a441adb25d4fbbd22ec"/><file name="Socket.php" hash="6078a103596ba3a8b2544563d252d505"/><file name="Stream.php" hash="14a0106f768a6388688690a54a3eef27"/><file name="Test.php" hash="35e3087f1d6baa3b6fa2cda8228febf9"/></dir><file name="Exception.php" hash="a5f986ab6d87cb83bed91a1caf56ac00"/></dir><file name="Client.php" hash="26f6df4ccf15f65b213ebd0f5538978a"/><file name="Cookie.php" hash="a56a600d64c9bae67c66ae784de2fe58"/><file name="CookieJar.php" hash="7d93690c2caf40108c35a66b10e25586"/><file name="Exception.php" hash="b345b84b1e9b8a1ae2478ff04f37fc2f"/><dir name="Header"><dir name="Exception"><file name="InvalidArgumentException.php" hash="02d00d00a945c0595a648ea418fe3673"/><file name="RuntimeException.php" hash="8c166ae41ab4e516abda9289f19e973c"/></dir><file name="HeaderValue.php" hash="c0e08b696c63818f37faa68a0f733d32"/><file name="SetCookie.php" hash="5f5620b08a9a298bd60cab553cc4f213"/></dir><dir name="Response"><file name="Stream.php" hash="8a41b22b489629a6766dfb3cb96e0ed2"/></dir><file name="Response.php" hash="a34c934977d3bbc1da1a2153692a5743"/><dir name="UserAgent"><file name="AbstractDevice.php" hash="e52f1ad149795aad5075c4bc6cf977f3"/><file name="Bot.php" hash="e5679a2e30d3f1ef581d508446c1f482"/><file name="Checker.php" hash="0b6bb9cb341b75ca7bfb749cb2c871bd"/><file name="Console.php" hash="93650b34bd1238887e88c238291853c0"/><file name="Desktop.php" hash="9829ee285a2cdc4388326a07644d042c"/><file name="Device.php" hash="72533d95dea2a7fe6366bd2145b5b938"/><file name="Email.php" hash="f0a3fab08e59378c0189073237611af7"/><file name="Exception.php" hash="beb38f75f587ac56cbb7a843f59a84ae"/><dir name="Features"><dir name="Adapter"><file name="Browscap.php" hash="a88ccf8fa0b5aca789f32a08f83c98e7"/><file name="DeviceAtlas.php" hash="725061814353e65cc2d89e2a67a00673"/><file name="TeraWurfl.php" hash="1f91bc3ded39c5b108d8232d18cd17f4"/></dir><file name="Adapter.php" hash="a4dcf44cd31de8969f3e941f9a14d0a5"/><file name="Exception.php" hash="a8fba4a7bf9a1a58225ab313b5fa4dd3"/></dir><file name="Feed.php" hash="716918e5334ac352997eac35ca5956dc"/><file name="Mobile.php" hash="00d3e607c4ac5e298492bd3d7762c555"/><file name="Offline.php" hash="6c1ce88c65a43a63416928292c5f9f5c"/><file name="Probe.php" hash="b4df007dbdeb6ef7c49f599d728eed49"/><file name="Spam.php" hash="a4402ccfc92bdf4c49ed1a27bb1905eb"/><dir name="Storage"><file name="Exception.php" hash="ab40f3958bb905a85cfa5cf14af640d4"/><file name="NonPersistent.php" hash="9c8d459eb114f70df099bd397a542a1f"/><file name="Session.php" hash="6b94c84a472e0a767d42be7e26aec3c7"/></dir><file name="Storage.php" hash="ec42c71aae122ea711cbf87ef261c4e4"/><file name="Text.php" hash="711458780f3c17ad437f3d56b5109321"/><file name="Validator.php" hash="69d6afb8a82293c61a642c791f5a16db"/></dir><file name="UserAgent.php" hash="460734f564ed89053481a1204db01c79"/></dir><dir name="Json"><file name="Decoder.php" hash="be80f4b8fe57afd69752fc51c349dcc8"/><file name="Encoder.php" hash="0282ee4cb81e78771c8829398f64082f"/><file name="Exception.php" hash="949bff931d3430258aa0d8688d70df18"/><file name="Expr.php" hash="5985e830701d7f8d5daeb230ce56b1a3"/><dir name="Server"><file name="Cache.php" hash="149b4bcdb085ccd0d535903aa463a0a6"/><file name="Error.php" hash="f3bec127c343a8e14a7a9b1339ab28aa"/><file name="Exception.php" hash="1b0ac33c450ec1bee800421995576fa7"/><dir name="Request"><file name="Http.php" hash="832d82cb88edefb954c4d4d730d0a95c"/></dir><file name="Request.php" hash="35999aec48306723cd44da4c5a62fe35"/><dir name="Response"><file name="Http.php" hash="a5f156d547e04bd224295be634e864da"/></dir><file name="Response.php" hash="a3c115766d7a5e6e57cb4a27887cad2a"/><dir name="Smd"><file name="Service.php" hash="9aef500f4cef8c72886b6103820397e5"/></dir><file name="Smd.php" hash="c8dce4255950f809a22ee60febb2bc2c"/></dir><file name="Server.php" hash="90dcadb42953db253627a783aafa0b80"/></dir><file name="Json.php" hash="9c8bd17cde28999638cd2f05fe470cbb"/><dir name="Layout"><dir name="Controller"><dir name="Action"><dir name="Helper"><file name="Layout.php" hash="c049699d9228b85c2823d7bfdba7d8de"/></dir></dir><dir name="Plugin"><file name="Layout.php" hash="2af276e070314489ccdd514b841d86ad"/></dir></dir><file name="Exception.php" hash="a479f33598f2c4e1cb228883ae6f22ac"/></dir><file name="Layout.php" hash="6d7b1d2ad0c1bf5d5d1ea058ca5a24f7"/><dir name="Ldap"><file name="Attribute.php" hash="a334347a968defb0fda698c3c54f46d7"/><dir name="Collection"><dir name="Iterator"><file name="Default.php" hash="8f8a4876cf258d6b1f71582a805df017"/></dir></dir><file name="Collection.php" hash="ac57de545867cf7cd1df3d6c113263ca"/><dir name="Converter"><file name="Exception.php" hash="4e029f2da6d5c7df7644bfd2c434c6d0"/></dir><file name="Converter.php" hash="8e09bff7ca34d3051cee4a873f5b58a1"/><file name="Dn.php" hash="b5653205b12da006a91e498ca7fc7dc4"/><file name="Exception.php" hash="e12baa19246087c376b7d5cbf0ab7eca"/><dir name="Filter"><file name="Abstract.php" hash="efc802cd50bc28c4181e5bbab247e725"/><file name="And.php" hash="662ca1c25383de02b569c76bc62a058f"/><file name="Exception.php" hash="4f8ae5e40c68e60f00550dd5ccd7aa34"/><file name="Logical.php" hash="06aad3c5c574bae76adc46927ae21474"/><file name="Mask.php" hash="904d6707c87b202d9b66e1e3532fbd94"/><file name="Not.php" hash="028697704f21551b33dcb7c160369691"/><file name="Or.php" hash="8dec15db06446ad375c61c7f46912d7c"/><file name="String.php" hash="b1cc0c074d1822be6124f6c48e351a86"/></dir><file name="Filter.php" hash="c50df357d992c35c217ac7803ce314b2"/><dir name="Ldif"><file name="Encoder.php" hash="d1116ef8bfa81ce18fd5cbae52942227"/></dir><dir name="Node"><file name="Abstract.php" hash="e84bbf67046f975a1f5775aa0d49348d"/><file name="ChildrenIterator.php" hash="8b0c6775e5111e80938ccc9cb60aed0c"/><file name="Collection.php" hash="11098b8c84df455895877fad99f30a20"/><dir name="RootDse"><file name="ActiveDirectory.php" hash="c5f5e80b8dd2cb1e31ac3e03fc279024"/><file name="OpenLdap.php" hash="dcd6e7ebc3775e6a5cba8485bd78c8d6"/><file name="eDirectory.php" hash="f946fccdb3015b015d3cff00829a6ea6"/></dir><file name="RootDse.php" hash="c247acc47a79441717304abade296309"/><dir name="Schema"><file name="ActiveDirectory.php" hash="85bc7915ab42dae47c2d4fb8e3dba51c"/><dir name="AttributeType"><file name="ActiveDirectory.php" hash="04a142f499e0848e9ae43a64786328d4"/><file name="Interface.php" hash="ae4ab45b50efa4e032e32912d9c6a776"/><file name="OpenLdap.php" hash="a823f4b81c597a3820e4fe67e5454e70"/></dir><file name="Item.php" hash="fe670cbd69aa5863f9f66efadfcd3dd2"/><dir name="ObjectClass"><file name="ActiveDirectory.php" hash="e678fbe8c0e965cf7db01e829adff67f"/><file name="Interface.php" hash="166b71e4032d84ecfc88365d89b1de11"/><file name="OpenLdap.php" hash="428b8707dc060e1f9e7854005c51d58e"/></dir><file name="OpenLdap.php" hash="2e52c69ae03823a1d0f42e83aff2f316"/></dir><file name="Schema.php" hash="2745fb40a9578d326a48718ee91cc5fa"/></dir><file name="Node.php" hash="648c759b832b68b000e8bf08af0339ce"/></dir><file name="Ldap.php" hash="da470d2a2a451bc59b2ed1ecb118ec5d"/><dir name="Loader"><dir name="Autoloader"><file name="Interface.php" hash="5a8847bbf702beb3c5d03d9b6620291a"/><file name="Resource.php" hash="b9e4409e67051a21f4e2ae855c1bd691"/></dir><file name="Autoloader.php" hash="4882de8624fe2953294bb4a2a2a6f8f6"/><file name="AutoloaderFactory.php" hash="3ec199fa5c2dec860143b37f17b5ce65"/><file name="ClassMapAutoloader.php" hash="2acb3037511952ac7eb2bab70501dcd9"/><dir name="Exception"><file name="InvalidArgumentException.php" hash="4286045d7c3bad36fa3e101f0beadfaa"/></dir><file name="Exception.php" hash="81dbec797bf5464d3dd93886de055be3"/><dir name="PluginLoader"><file name="Exception.php" hash="fba867bd38d0dbb235f86cc6899d834e"/><file name="Interface.php" hash="60638720a3d503c41b6679d1a12c9e59"/></dir><file name="PluginLoader.php" hash="6be3d7edad844778eb79c52494f04eb8"/><file name="SplAutoloader.php" hash="b35315f66536a170485d6a91cc962a4f"/><file name="StandardAutoloader.php" hash="181406bd273d500ef771e5f24b0bd909"/></dir><file name="Loader.php" hash="817eebfff3c19cf057a8bd92f0c9c679"/><dir name="Log"><file name="Exception.php" hash="b163db6d6600897c6d7d9675f5b2082a"/><file name="FactoryInterface.php" hash="950fce8f1016b9149a3afa78cb5d6bdd"/><dir name="Filter"><file name="Abstract.php" hash="588c7a33b8cc18516fb09f45b6e4df27"/><file name="Interface.php" hash="8e207e5fde37a093bc429eca471abdb5"/><file name="Message.php" hash="42c00aa794507e263369816ebd6ecfb9"/><file name="Priority.php" hash="3bc818826edb7d8d47778c71534968ca"/><file name="Suppress.php" hash="6198f609922c91844696ad749f8f988b"/></dir><dir name="Formatter"><file name="Abstract.php" hash="f6b6a3a2f08104b92f02916dfae10819"/><file name="Firebug.php" hash="18bf525dd98a338a0068adc7223004aa"/><file name="Interface.php" hash="f304a62a7dc3774938c9a4c0386e312a"/><file name="Simple.php" hash="e99de8b500f61444ef4ffd6bd44f8b28"/><file name="Xml.php" hash="dc3361c1aeaa94dca0dac28920c7ea8d"/></dir><dir name="Writer"><file name="Abstract.php" hash="79ccb8a60f0146adc3d1019487a99a69"/><file name="Db.php" hash="e9dd86777ca1735ccec177c7e385316e"/><file name="Firebug.php" hash="6227fe3e164c36db1829e4afd5fdddd2"/><file name="Mail.php" hash="3f76aaf2c1bfa288b7f126efd127c306"/><file name="Mock.php" hash="be44a2526cd397f294cb3350334479cc"/><file name="Null.php" hash="7dc63aa32e13ee72975d68873d87d85d"/><file name="Stream.php" hash="5a287635e4c1d74763215959ba19b70a"/><file name="Syslog.php" hash="06022b333a8ca4d896eaea75f92fe543"/><file name="ZendMonitor.php" hash="3e508d727439f6c10212e70617d68b20"/></dir></dir><file name="Log.php" hash="1c6f8b389780f0bb85202471def93ea7"/><dir name="Mail"><file name="Exception.php" hash="8d01b40eca451bee7c9401d2498ae65d"/><dir name="Header"><file name="HeaderName.php" hash="ecd8c8336e3619779a72d1e1f105675c"/><file name="HeaderValue.php" hash="d55840608558bb29022bca0c565ae55e"/></dir><dir name="Message"><file name="File.php" hash="7415d6300a134322e1f9b5723f456375"/><file name="Interface.php" hash="37f65eeadf5f7d8c46e5740810a91f31"/></dir><file name="Message.php" hash="eea17eeae16ed0696aef9794f947791b"/><dir name="Part"><file name="File.php" hash="2973a0c512d8a12ae250f0310e7ab715"/><file name="Interface.php" hash="5a08dd0d4abfeba0e2b6a3bcd0647cb0"/></dir><file name="Part.php" hash="b948eb534e24b93bb22d34d6dc78c494"/><dir name="Protocol"><file name="Abstract.php" hash="75f76eb34f20aef472da005983e4ade4"/><file name="Exception.php" hash="324b88f119661b2fb45e50e03fdbb797"/><file name="Imap.php" hash="4be011d91db7e932867a9ef04b9e3f1c"/><file name="Pop3.php" hash="a3f36e5260b3fdf15ff91afb4edd06c8"/><dir name="Smtp"><dir name="Auth"><file name="Crammd5.php" hash="989efed470312ec3d252f04f48b13f1f"/><file name="Login.php" hash="eeb279a39d84d0c34b5b3c57a0d8e1fb"/><file name="Plain.php" hash="4e4fb49d2c0a4c3cc6326b9362663812"/></dir></dir><file name="Smtp.php" hash="a99437c462526c3ab7c4a16e6dd73dd5"/></dir><dir name="Storage"><file name="Abstract.php" hash="c80a746bb73014c266f2785247770e77"/><file name="Exception.php" hash="8dfb9dc508a506017fa2aba591171706"/><dir name="Folder"><file name="Interface.php" hash="e46d56b2092b8e66b0de59f089f28dbc"/><file name="Maildir.php" hash="2ffec84ff5cebbc06f42a4bf4e8e49a0"/><file name="Mbox.php" hash="a6bc27702d0e9acbc52d83efdbb623c0"/></dir><file name="Folder.php" hash="710f0f79f55eb9c16523b59b3e46026d"/><file name="Imap.php" hash="63b4ec9c47e81d973c0cecb781a0e398"/><file name="Maildir.php" hash="c298cee3127aebf1d902bc6a263cd67f"/><file name="Mbox.php" hash="96e1d239b5d88772aacd245255d35cc5"/><file name="Pop3.php" hash="fe599c6260e22c23dcd3bfd698271b77"/><dir name="Writable"><file name="Interface.php" hash="a5a3487a8b0dcc8c1f957e10b9535c96"/><file name="Maildir.php" hash="f9dc51e0430fed3cb7fb06a6fc46b4c1"/></dir></dir><file name="Storage.php" hash="bf94dde2f63c2ea5933cff36fd0d96d2"/><dir name="Transport"><file name="Abstract.php" hash="b5e088f0f4a65356307e1e6048558c5a"/><file name="Exception.php" hash="2fc585f21c0c0bbfb8d9218788a99d91"/><file name="File.php" hash="976dec70144df18e87d527ff7e516758"/><file name="Sendmail.php" hash="0a64fedcc87ebe0c9c15695805201bef"/><file name="Smtp.php" hash="6f916608a1b6f93dc6d116e8d8f40b94"/></dir></dir><file name="Mail.php" hash="233f0679a2a5101183c73419cc14e184"/><dir name="Markup"><file name="Exception.php" hash="6acb9e012348c31a98e8016f689bd83b"/><dir name="Parser"><file name="Bbcode.php" hash="fe5258254d43407c8ebf45121d5d3443"/><file name="Exception.php" hash="96b47171a5e4994dcb75bfeb964a3261"/><file name="ParserInterface.php" hash="22f4cab8c966e18965cc16bf1ac58a2e"/></dir><dir name="Renderer"><file name="Exception.php" hash="c27375ebcd69a8eb56a5c3e3229ef88c"/><dir name="Html"><file name="Code.php" hash="c919be3dcefb797b425cd65153302f6e"/><file name="HtmlAbstract.php" hash="7dc1ee614c7d125582f34ded495bd5a3"/><file name="Img.php" hash="6a130ace451a6ed0a2d0a1f1ea3bff58"/><file name="List.php" hash="e8474711d02734026d531708832e1310"/><file name="Url.php" hash="6bb6f2015aa632299941bf9997e8110e"/></dir><file name="Html.php" hash="b607c5add3adcb046c58771b79ecdca5"/><file name="RendererAbstract.php" hash="bf2e4d797e26ef28885babcf2d9e2722"/><file name="TokenConverterInterface.php" hash="e5b38c0b3ba387f0df071a35c7fb1f3f"/></dir><file name="Token.php" hash="925b6878c35fd1e0855a73ecf684f25c"/><file name="TokenList.php" hash="590aa72556941d672184f1aca02ef30c"/></dir><file name="Markup.php" hash="70327a385551a40429dbf98def244565"/><dir name="Measure"><file name="Abstract.php" hash="a844b711aca6638ea933630264ab309f"/><file name="Acceleration.php" hash="f6b1c64dd6bacb4f38d91f72cd8db6d9"/><file name="Angle.php" hash="6c7ec7f864050be14c1735017d149b18"/><file name="Area.php" hash="88b0f14de44d235235da841062691dd1"/><file name="Binary.php" hash="5f9e527c1e8d01535d9bfea7105ac76c"/><file name="Capacitance.php" hash="8bff74324cadcd21836b5acc547a544e"/><dir name="Cooking"><file name="Volume.php" hash="334d3bd9a1023acfed66eb41bf307a15"/><file name="Weight.php" hash="d970ef6d6f08a37db72285917d30ccd6"/></dir><file name="Current.php" hash="1747ffe7532a5c7c060343e3271a27f2"/><file name="Density.php" hash="f4cb05733337475f59762b41a29ae3bc"/><file name="Energy.php" hash="2ed086e65b6f7a4ce1280d8ef9d0f1c3"/><file name="Exception.php" hash="d00039899c6aa43c6b250588bbc07e35"/><dir name="Flow"><file name="Mass.php" hash="2d322913557ff2bfc45afc2ab480babd"/><file name="Mole.php" hash="ff0fe19858605f8c65cbc6f1f377aba4"/><file name="Volume.php" hash="66df34980d0aa473755280393b0f0d7c"/></dir><file name="Force.php" hash="9525a6c47d1e4cbaded7b3477d3c4ba7"/><file name="Frequency.php" hash="80bf10cfe7eeebc3d281b7ed11b397ea"/><file name="Illumination.php" hash="98ee18ab173727ba4dc93a3ada6edd33"/><file name="Length.php" hash="7318f5740bfe039f8c6bda66f172251a"/><file name="Lightness.php" hash="ea419ded90ccd0f5c053262458cc80eb"/><file name="Number.php" hash="7a63c36bbf2089aef5e8ee3e7347e24c"/><file name="Power.php" hash="c896cc783192f260057584f2ba881f87"/><file name="Pressure.php" hash="49c451f9eacd6d162ba6bb629e9118e1"/><file name="Speed.php" hash="c601fe3564d6f3d1f8813a0a7013e335"/><file name="Temperature.php" hash="0d5d33464d00562675fd5d801eebe117"/><file name="Time.php" hash="1c8b825d84b6ccffd76906404d92173a"/><file name="Torque.php" hash="1f530a46616ba82d78541493fb321445"/><dir name="Viscosity"><file name="Dynamic.php" hash="5f002bc79a1c1138cacacec371db37ab"/><file name="Kinematic.php" hash="bd10456069dc6d35a3e1713bd4c6dd71"/></dir><file name="Volume.php" hash="0fbf0ca1290f4aa1af5b23982a6914c3"/><file name="Weight.php" hash="a821fffd5941ccd527cc1d0694336b00"/></dir><dir name="Memory"><file name="AccessController.php" hash="a70d4c42eea7b98f61113d798b55259a"/><dir name="Container"><file name="Interface.php" hash="6068d380217bf27b6453cf894edb8695"/><file name="Locked.php" hash="9bc2f25899430f7ad02853e88dfca0a9"/><file name="Movable.php" hash="4c3c042f5e2bcc2531715dde401171cf"/></dir><file name="Container.php" hash="8feed8c3f2b8f5f0e8d688f13c48c2aa"/><file name="Exception.php" hash="3329d69fccf497932b1a2c27e9919c18"/><file name="Manager.php" hash="1a5c0de427d4436a95fb9d2c0953f279"/><file name="Value.php" hash="697a03309f774813690845eac71d4702"/></dir><file name="Memory.php" hash="2e82b15d077661c5c4b8201ea5bab1fc"/><dir name="Mime"><file name="Decode.php" hash="0cd721f3b84a257348cbfcb73919759e"/><file name="Exception.php" hash="994fc2875e99f10a522cb82e4a54b2b7"/><file name="Message.php" hash="4e3dd5e95f8621955641c7e1b4de46c5"/><file name="Part.php" hash="a11ac478688ef12d8cd0ccecff33670c"/></dir><file name="Mime.php" hash="39042a59c2be063d736a04dac55e903f"/><dir name="Mobile"><file name="Exception.php" hash="519a024f65881a7a4237732573710059"/><dir name="Push"><file name="Abstract.php" hash="456f8a825509d342fcfef1439673f54c"/><file name="Apns.php" hash="d8429732ef082dd5db604fea4c8915b5"/><dir name="Exception"><file name="DeviceQuotaExceeded.php" hash="86b9ff4bc83a799a58f7dffea7382284"/><file name="InvalidAuthToken.php" hash="5ad87658c33a7d9cc6f917d0b5920253"/><file name="InvalidPayload.php" hash="25c5f5d11619d662e9274418d98ed4f8"/><file name="InvalidRegistration.php" hash="8658ffa721150d321de50135d2e5a807"/><file name="InvalidToken.php" hash="713a8d260276537743a4d04b4aa81c11"/><file name="InvalidTopic.php" hash="7c829b73a958a1a5b2727d2819061578"/><file name="QuotaExceeded.php" hash="be67af28f9904f0fc42004751daff33a"/><file name="ServerUnavailable.php" hash="ed4b06b1ef3e3c429b90731ae2920412"/></dir><file name="Exception.php" hash="f894173f4a187922ee49522cf8d3353a"/><file name="Gcm.php" hash="920c224bf5d2829b12e860785f1fcb02"/><file name="Interface.php" hash="8ac308916b40869193bfe9f4924c6d8d"/><dir name="Message"><file name="Abstract.php" hash="60010ad2c300cc7aaeef6e09bd1f0eb7"/><file name="Apns.php" hash="3aa335c6ee551991ad704c6ec1965399"/><file name="Exception.php" hash="14efc16a622ee08a4d66f6b966aa8afc"/><file name="Gcm.php" hash="8e5c08acd168e10c7e0b7be393683846"/><file name="Interface.php" hash="aa9b1e963e71262791a2e85f9d5e03d4"/><dir name="Mpns"><file name="Raw.php" hash="cd49049ab99df63e747b3cf21ce49056"/><file name="Tile.php" hash="eeb12c6d00f840c828e8f928ef28e747"/><file name="Toast.php" hash="6b7b461af1ebd47bc8278388762e186d"/></dir><file name="Mpns.php" hash="bfb031f22738438461df23e002feb93c"/></dir><file name="Mpns.php" hash="d027a3baf86b7808b8f5dd097dd748dc"/><dir name="Response"><file name="Gcm.php" hash="02cdfb00622182c505e7c4916fb51397"/></dir><dir name="Test"><file name="ApnsProxy.php" hash="ef5b18b7cac0826d10cca487ab851180"/></dir></dir></dir><dir name="Navigation"><file name="Container.php" hash="ae908f801587df5bbc7a44d94e290365"/><file name="Exception.php" hash="1f907b7d1a68ca8d29b29f8f9694ca3c"/><dir name="Page"><file name="Mvc.php" hash="bb408e6676cc27d470e41f21084d050f"/><file name="Uri.php" hash="45e78f322e869f7570a82cac147f9985"/></dir><file name="Page.php" hash="ecc7fc65c84c45b552ea81d280fc13d2"/></dir><file name="Navigation.php" hash="bee97615ae02af0c039d61863d0b1e00"/><dir name="Oauth"><file name="Client.php" hash="74d6c02debac4961c253da9d8cc2fe5e"/><dir name="Config"><file name="ConfigInterface.php" hash="1cabd35d6a7f0f92529457b4ea62e17a"/></dir><file name="Config.php" hash="a02e7f37acbb42bc34feebc920d49871"/><file name="Consumer.php" hash="3dc938414065746a37763d2b592e1ee5"/><file name="Exception.php" hash="570bf15ce9b8ccf76e4bcd949adeef50"/><dir name="Http"><file name="AccessToken.php" hash="986d7e25f96d5bed67914e08404bbb5f"/><file name="RequestToken.php" hash="f4f86a01a6e424aaa7e8edb99e518f59"/><file name="UserAuthorization.php" hash="758cc6c3df942ac5ac3b103527a99a10"/><file name="Utility.php" hash="9c69fe9d58add25eda7730460eeb4ae1"/></dir><file name="Http.php" hash="cef52b37622bcfb2efd2a9644babc94d"/><dir name="Signature"><file name="Hmac.php" hash="26331323b06095d36ea1b3d8de214c79"/><file name="Plaintext.php" hash="11266c5bf1d868c63fac84ff14c22061"/><file name="Rsa.php" hash="4ea7e936077c094ee6365ee33707c4fb"/><file name="SignatureAbstract.php" hash="09e632d7cfb30720b43cd8e33ca867f7"/></dir><dir name="Token"><file name="Access.php" hash="974b61753e392b577562e7090dec4102"/><file name="AuthorizedRequest.php" hash="2c5a7071f93bfc03e8098a367c1b95ad"/><file name="Request.php" hash="3253abe4f0340e7fa12d6c26c669e1cf"/></dir><file name="Token.php" hash="19cbcf77a287619c7043efc9cf4cc2fb"/></dir><file name="Oauth.php" hash="239174147ad1cac48ff43b86ca768b5d"/><dir name="OpenId"><dir name="Consumer"><dir name="Storage"><file name="File.php" hash="53a1aec62db8e0bf8153d2363b8afdcd"/></dir><file name="Storage.php" hash="96636f4707d5090dd777ca16ff5f9498"/></dir><file name="Consumer.php" hash="d4129677162161a383a8327a8a5f5cb4"/><file name="Exception.php" hash="9ae51477a152a9993db86a2b3e87a792"/><dir name="Extension"><file name="Sreg.php" hash="a46ab3f654e7718b74f256863398070d"/></dir><file name="Extension.php" hash="d0cbcdb2874105fad8d517731ee682dd"/><dir name="Provider"><dir name="Storage"><file name="File.php" hash="78e54dc83e5862422be8c086458815bb"/></dir><file name="Storage.php" hash="a111906ee39dd25c3e8f03edf73a3f0b"/><dir name="User"><file name="Session.php" hash="184de6934deff211975387b3d0eea0c7"/></dir><file name="User.php" hash="1130cc8407f1607fcc19e0e0e7048953"/></dir><file name="Provider.php" hash="e82af61658678702cf9b92879c70494d"/></dir><file name="OpenId.php" hash="3afe8be181b4ee86ebca1531a1bd8b0b"/><dir name="Paginator"><dir name="Adapter"><file name="Array.php" hash="b19b7013fca38d006a2b638b89312764"/><file name="DbSelect.php" hash="3bd5b7dc7a01b4dcb161f396be0b8670"/><file name="DbTableSelect.php" hash="cab2b30b8210b2979b0c6bed4b123fad"/><file name="Interface.php" hash="5762707d8b9db19faf2a773eb78edd76"/><file name="Iterator.php" hash="3a51f92d688197a2967eef55d802f56e"/><file name="Null.php" hash="2e58e92129e83d96b61e5ba5bf679157"/></dir><file name="AdapterAggregate.php" hash="b6ed68617efff6b9dd41ba5d27cde51f"/><file name="Exception.php" hash="bd8961847f8ea166c7e222e2344d586b"/><dir name="ScrollingStyle"><file name="All.php" hash="7a024155b60bcbb024b3ab8418ea1737"/><file name="Elastic.php" hash="a7d8784429dc1e520b3f98d14c5eac09"/><file name="Interface.php" hash="1d6adbef71c9c1966676ede68de7f977"/><file name="Jumping.php" hash="2e2e9f1633d9ec60e0e111a5794aed93"/><file name="Sliding.php" hash="9f768e8bcaf3bd6f12e0e939c00775d4"/></dir><file name="SerializableLimitIterator.php" hash="411f2359e449e170c5dadaa24803a54b"/></dir><file name="Paginator.php" hash="0d3667499c2f0c3a8c9e5907e812b7a5"/><dir name="Pdf"><dir name="Action"><file name="GoTo.php" hash="d1e30bb7d45aedbeaa31b5dc8b40e287"/><file name="GoTo3DView.php" hash="fcd5460403b8433315caeca12418a5cf"/><file name="GoToE.php" hash="599ebb6d2df80852cfca9a9cedb8d6b0"/><file name="GoToR.php" hash="474402a7102d563261bd914a721b36d2"/><file name="Hide.php" hash="8810efbd459a87d1ee9de7cd007d1644"/><file name="ImportData.php" hash="ecd6feef7d654d60b8efc24bf26d4662"/><file name="JavaScript.php" hash="9bdf7f5f8360300bc95e3e293431f425"/><file name="Launch.php" hash="3e3b49828aefff82b9b44b295084e413"/><file name="Movie.php" hash="b65daa361fc8e77f5ffc4ecedb3becff"/><file name="Named.php" hash="7a1ea555152631327d04a9eb263b4a5a"/><file name="Rendition.php" hash="363bd0314e6d20994934dabd3ad63684"/><file name="ResetForm.php" hash="f4637cd51199245ab14aa6021ffe71be"/><file name="SetOCGState.php" hash="301da63cac76237c91818aac076cbddc"/><file name="Sound.php" hash="ee1e489704abce5aa0dee9047bd8b456"/><file name="SubmitForm.php" hash="657a9f4bc9cd87ca3551370d195b7a35"/><file name="Thread.php" hash="ecee0d4d74deafefed77cd0f6798093a"/><file name="Trans.php" hash="d9f99fb44efc3651ca5e2c56fd7e96b6"/><file name="URI.php" hash="7e52db0fd92d4edb87ab4f4e789d45e3"/><file name="Unknown.php" hash="a8602a55e7a0792d6cd0615c9ac23c41"/></dir><file name="Action.php" hash="ec5a813b9a9a0caf8beb63b890c68450"/><dir name="Annotation"><file name="FileAttachment.php" hash="f3864019953d49d9cd83d322f9a54f4d"/><file name="Link.php" hash="bff1663cb2b899d96d2b5e539f516d63"/><file name="Markup.php" hash="ab0f2e3e12ec5c7e75b2daf9851c59d1"/><file name="Text.php" hash="7b507f12f45421db845a74e91a0c78fb"/></dir><file name="Annotation.php" hash="0d098c2160f4b3267e7fd7f367f30290"/><dir name="Canvas"><file name="Abstract.php" hash="364364cb99b19cdf0d622397424e155d"/><file name="Interface.php" hash="1795a31a88af11db1f8eaefae3751d65"/></dir><file name="Canvas.php" hash="00dcbc00ee5b0678292c40c62709bb37"/><dir name="Cmap"><dir name="ByteEncoding"><file name="Static.php" hash="bca21500f7be22a1c6349cce6b489afa"/></dir><file name="ByteEncoding.php" hash="84d9e9e1afe70befb0b7c193516a7ad6"/><file name="SegmentToDelta.php" hash="34570bbef3c618d344e056a65a86310e"/><file name="TrimmedTable.php" hash="1a8eaed30b4393a4ad1972ccfa586275"/></dir><file name="Cmap.php" hash="9d7432c932a1f5260c8752cd0eb09cb9"/><dir name="Color"><file name="Cmyk.php" hash="9024fe208254093dfedb355f1a56bfa3"/><file name="GrayScale.php" hash="ac29a955a5422d31e3c6342c9ba5df7f"/><file name="Html.php" hash="98c75da7b5c1e27d72029a612973c33b"/><file name="Rgb.php" hash="db12cfc9dfbb80831d4b1e5436ff8323"/></dir><file name="Color.php" hash="104cf49d07c358cc85220fc3122e800e"/><dir name="Destination"><file name="Explicit.php" hash="13bd68687766542d36847199a9dd478a"/><file name="Fit.php" hash="1aa3f00fde3170cae69b69bd17786c3b"/><file name="FitBoundingBox.php" hash="b59f2ed44504d9f3df4a8e05450c0f07"/><file name="FitBoundingBoxHorizontally.php" hash="1271088bf2557a2eb8c18f388e1853ee"/><file name="FitBoundingBoxVertically.php" hash="16948b893fe63488b34891f82d409d52"/><file name="FitHorizontally.php" hash="88e880e0528a4f7060d233e687e90667"/><file name="FitRectangle.php" hash="408a9be40986151fff98af1efabe8a28"/><file name="FitVertically.php" hash="136c71dd521fb51103f98a76734fb8c1"/><file name="Named.php" hash="a65c919e6fa48d4453a9581ebb908adb"/><file name="Unknown.php" hash="1a2e8b67ee995941dc43b43070a3971f"/><file name="Zoom.php" hash="c9325d991fc179afcca30c3636e72e1b"/></dir><file name="Destination.php" hash="b7605192c93386f3fd25520d180343dc"/><dir name="Element"><file name="Array.php" hash="b644069461389d8cffe6d3bd1cc49835"/><file name="Boolean.php" hash="d4a4de598d871b0ae391dd72ee4cbd2a"/><file name="Dictionary.php" hash="fa2156732ab46185f1412c3e22c54c92"/><file name="Name.php" hash="be8084d6e0fec7b6941bfcb2cbc93535"/><file name="Null.php" hash="a982c3b2f79e698e80cccc4cd794219a"/><file name="Numeric.php" hash="020e5a151377a7f95b0ab846f4cf5829"/><dir name="Object"><file name="Stream.php" hash="9a4d7197a43ba30df5e1871cf85a05f2"/></dir><file name="Object.php" hash="f0b69fb983587a2f68a1f40e3e417663"/><dir name="Reference"><file name="Context.php" hash="e15ad61d18c94f11179594e9a58cb6d3"/><file name="Table.php" hash="6a90fd67ff295547877255bf8bfbe2a1"/></dir><file name="Reference.php" hash="0725ddc6094e61656354a949986d4def"/><file name="Stream.php" hash="166a0bef11c118de4591b7436a9e999f"/><dir name="String"><file name="Binary.php" hash="f6a6e7ce998124ba104470dcb4734dec"/></dir><file name="String.php" hash="e776be7acc388a17af23bec80954de82"/></dir><file name="Element.php" hash="3595c5f91616d00f51af614feafda5f5"/><dir name="ElementFactory"><file name="Interface.php" hash="d1a6e36aaeee2b4a4a7f8b6111facbec"/><file name="Proxy.php" hash="a07e4d22cba4810f367ca6b7240fbc83"/></dir><file name="ElementFactory.php" hash="024f30704c4c693597c11f4b032dfedc"/><file name="Exception.php" hash="7b3b6c5890b43cd2fb05b68f6282f521"/><dir name="FileParser"><dir name="Font"><dir name="OpenType"><file name="TrueType.php" hash="b493bcd28a5c4006be3f5c0a1081b28c"/></dir><file name="OpenType.php" hash="a5d6ab27fa54d414b01532d4830ef090"/></dir><file name="Font.php" hash="56634e0dcb7ade369b564643c5a5d171"/><dir name="Image"><file name="Png.php" hash="15d071e3ce65f9eb9936ca4149910fb7"/></dir><file name="Image.php" hash="29748c74077a30e3b3d108c316ee1910"/></dir><file name="FileParser.php" hash="4d54f7155401a9fb7df70998a2da9a50"/><dir name="FileParserDataSource"><file name="File.php" hash="1e9148d68ab81b33f2d88c403d9495a5"/><file name="String.php" hash="e4cd122d052ef39e6da5c38ec452d161"/></dir><file name="FileParserDataSource.php" hash="eb883b69beb455a62c8931a878151085"/><dir name="Filter"><file name="Ascii85.php" hash="b65b7f97285f88f9f11265191cf20849"/><file name="AsciiHex.php" hash="ed846de8708cd7026f551d78de57782d"/><dir name="Compression"><file name="Flate.php" hash="faf5cfc2e9c94444e43d7e6944247988"/><file name="Lzw.php" hash="9c28f750f6600ce94877b78ad7c71324"/></dir><file name="Compression.php" hash="73050021440ac2c7b18bd20513157c3f"/><file name="Interface.php" hash="e90f59d18816fbaacd86b59b392686d4"/><file name="RunLength.php" hash="e80a6edbe6fa87c4702d09d65db1a2ea"/></dir><file name="Font.php" hash="51087d7787fad796537357c3ac69dc73"/><file name="Image.php" hash="7877b76dd9e150104b83037266258658"/><file name="NameTree.php" hash="da4cc3e1566938790d1c613174aa23eb"/><dir name="Outline"><file name="Created.php" hash="9d373dc681d5b2805d30b5685ef862c2"/><file name="Loaded.php" hash="d6d0bcbbbc7125de10670b4e6562b59d"/></dir><file name="Outline.php" hash="f26766891dc3d3bce49b037adcfef12e"/><file name="Page.php" hash="13f4483dfd5d93e7e94d273c662b46ac"/><file name="Parser.php" hash="ba36ebc92a1b6e525ed8c0408e251bef"/><file name="RecursivelyIteratableObjectsContainer.php" hash="715f93a595f54a38111141fd5968213d"/><dir name="Resource"><file name="ContentStream.php" hash="a1749fec0cba8e9cb72efb1304de2346"/><file name="Extractor.php" hash="bb8efb4919fa8775f711f61d183a4e12"/><dir name="Font"><dir name="CidFont"><file name="TrueType.php" hash="1290b18c2ed5643477c1e88b0c76987e"/></dir><file name="CidFont.php" hash="382f00c4a207bea2ffd82a5d77da6304"/><file name="Extracted.php" hash="bd8bedaf4a31c4ae1eddf944644ecce5"/><file name="FontDescriptor.php" hash="9fcedd31b44153c7ad83cae939397e42"/><dir name="Simple"><dir name="Parsed"><file name="TrueType.php" hash="e060a25bc471d15d43a51d580679326d"/></dir><file name="Parsed.php" hash="becce62602415adde90984b7590993ba"/><dir name="Standard"><file name="Courier.php" hash="1a8795c6738e56ecc9b223ed823c0e0a"/><file name="CourierBold.php" hash="271652240d7b89827820060a185aef0d"/><file name="CourierBoldOblique.php" hash="f8e6fa84ffdc7ffcb8069c67e813f09b"/><file name="CourierOblique.php" hash="7b4080d45eff2b8fd5d66db97512a8bd"/><file name="Helvetica.php" hash="fdf4947a20fbf3f694f4fe940cec5df2"/><file name="HelveticaBold.php" hash="1340145daef0b6ed9e4d15ede06a0530"/><file name="HelveticaBoldOblique.php" hash="ae26d6990824525b0cb3c99e87674000"/><file name="HelveticaOblique.php" hash="a05d94e11e3e1db842ac7f1795074373"/><file name="Symbol.php" hash="9443a7d26e4c2a752cf3f4ff883ffa05"/><file name="TimesBold.php" hash="b2619f7edcc8abab8ff28a4009123f84"/><file name="TimesBoldItalic.php" hash="433fcd37d348fa4458cf437ea2cdabad"/><file name="TimesItalic.php" hash="76ec1fbba59e77bb848f8696337aadf0"/><file name="TimesRoman.php" hash="953b76c5e03a7858bd8361872e412ded"/><file name="ZapfDingbats.php" hash="548d057f0040392a4828264f24e243cd"/></dir><file name="Standard.php" hash="f332565c96e87d79436790a096f46aef"/></dir><file name="Simple.php" hash="334a3b36ea5235902d79cdb31cd05d73"/><file name="Type0.php" hash="6c0a83ed854fdbb16bf525fcd219a4ca"/></dir><file name="Font.php" hash="6046881c1057ef05d0a420998a05c1a4"/><file name="GraphicsState.php" hash="b51172933cdb59ea271e7a9ae323fe29"/><dir name="Image"><file name="Jpeg.php" hash="0a1a368f9642c0b98d8ff24f0aae7c3e"/><file name="Png.php" hash="f77b42c714316c69714df0a2a94cfb7c"/><file name="Tiff.php" hash="06e9fd0b542ecc53649d868fbb59372b"/></dir><file name="Image.php" hash="dbec25fbc65e673b12f311785249ae4f"/><file name="ImageFactory.php" hash="45222c4b5170b11e9b1fc9f16700f1a2"/><file name="Unified.php" hash="710f5f418d4939a609144eab68a8b797"/></dir><file name="Resource.php" hash="b71cd04a74a88e040f06ea7663ea5e65"/><file name="StringParser.php" hash="5376c86288c13e706f2c76478ae474f5"/><file name="Style.php" hash="8aceb18b61204e8157a46c41bbcdd7e9"/><file name="Target.php" hash="1a2badb1e3ca52a2368a77b0646efef7"/><dir name="Trailer"><file name="Generator.php" hash="2c12f38db376c57935d09f8527fa786d"/><file name="Keeper.php" hash="df14918b0e392a71bd41817f0abfaf55"/></dir><file name="Trailer.php" hash="8069878c1e9320d2b8533cf1e144f4f5"/><file name="UpdateInfoContainer.php" hash="39f4700c55860bb9ec1b3f122258930f"/></dir><file name="Pdf.php" hash="7f96ca856c0dde6e6074711e0db2487b"/><dir name="ProgressBar"><dir name="Adapter"><file name="Console.php" hash="09f7268da0ecd77f2d174f4a8a3de869"/><file name="Exception.php" hash="6a2ed89846b42f86a235044d05555198"/><file name="JsPull.php" hash="582d2e3d4fe457d4c961701b014886d1"/><file name="JsPush.php" hash="229b568b05cf46950fbb3707ca150c01"/></dir><file name="Adapter.php" hash="8297cf770c0ee628158397e3b089c621"/><file name="Exception.php" hash="6fd9c59515c836a7e044c07b146c1e6d"/></dir><file name="ProgressBar.php" hash="581036cf36019829ad17b626f15344f8"/><dir name="Queue"><dir name="Adapter"><file name="Activemq.php" hash="b419df4c2da5f1188e2f9fc07fa17d6b"/><file name="AdapterAbstract.php" hash="77fdf9a85df53d3a3b2a2f5d22e80626"/><file name="AdapterInterface.php" hash="0dcaaa3d94f0c384a3c37e45c7529b3e"/><file name="Array.php" hash="b3227f915782241e3ebdce389d3f0a18"/><dir name="Db"><file name="Message.php" hash="017e049117119a01fd2acf00fac7c5c4"/><file name="Queue.php" hash="0036c67014f3b5787878ecb638088423"/><file name="mysql.sql" hash="487d5a36b9172382351a7cc39d20d221"/><file name="postgresql.sql" hash="42dfaf91f8a425170c9b4b2c9318c875"/><file name="queue_sqlite.sql" hash="b0e5a2e43dfc9a230a5ec397c351eaf1"/><file name="sqlsrv.sql" hash="646346084e937e9239d911485bc0296c"/></dir><file name="Db.php" hash="876370736f86a93dedc206bdaea8ac05"/><file name="Memcacheq.php" hash="f0a6604c99debe72daf655a2f97ddc03"/><file name="Null.php" hash="abbd08fab4a38429460cd70b6170c492"/><file name="PlatformJobQueue.php" hash="0e9187b14fcb15711fc18e6bf0dd1383"/></dir><file name="Exception.php" hash="279bbedb61b1778812827fb636c62bd2"/><dir name="Message"><file name="Iterator.php" hash="11ea9382769f547d17a66ac1a54d655b"/><file name="PlatformJob.php" hash="2988e7c33a68ff837ffd7dcbd835de3c"/></dir><file name="Message.php" hash="fb9762a45a532513ff209e2b4820f871"/><dir name="Stomp"><dir name="Client"><file name="Connection.php" hash="aff6c9c41035654ec0d4a4887b4dd218"/><file name="ConnectionInterface.php" hash="e4adc375b6e177fafbd45e47b93ad1b1"/></dir><file name="Client.php" hash="1d64509385a30e21abb7df5e31aa11ae"/><file name="Frame.php" hash="d909edb1b42697e4f557de5a68368932"/><file name="FrameInterface.php" hash="16c13ddfcf2b1bcc50b85c61dc546646"/></dir></dir><file name="Queue.php" hash="1c9e3ec5bc7508a98b7de1f77ee61ba2"/><dir name="Reflection"><file name="Class.php" hash="ba4973471396d116ba92824b47d313a8"/><dir name="Docblock"><dir name="Tag"><file name="Param.php" hash="2a51f3907ad2ee281175d3cdb28a2e6b"/><file name="Return.php" hash="b0200cc0b804828031ab3a8582dbdcad"/></dir><file name="Tag.php" hash="0eebe17d3442b754d9422f8c9721231f"/></dir><file name="Docblock.php" hash="d0856efe818bee5c5d39645662312ba6"/><file name="Exception.php" hash="c43315831b3596fc86aba74529571aad"/><file name="Extension.php" hash="f4dd6dbfb0d48aabdbf359fa6bfaee9b"/><file name="File.php" hash="47206736078efdd5eefc6527408bd922"/><file name="Function.php" hash="1713773cab56cf753f7f90a1108953c8"/><file name="Method.php" hash="25ecb48f4e4f7029ea6fd759fba663f9"/><file name="Parameter.php" hash="7a34d5982a0dec35c6323160114dcb62"/><file name="Property.php" hash="7ca9b4aca176f18bf89b711b5f0929d3"/></dir><file name="Registry.php" hash="3b697b3b783d2821e69137c4dc3851b2"/><dir name="Rest"><dir name="Client"><file name="Exception.php" hash="2e86578bbe604d335a622957c1b0ae26"/><dir name="Result"><file name="Exception.php" hash="49193abd246224f975676b9bdd41349a"/></dir><file name="Result.php" hash="ffc3f1ee709136ab403949d4274098e1"/></dir><file name="Client.php" hash="b76ff6282552bcd098403cebc7b08ed6"/><file name="Controller.php" hash="86e1b0b6bc3ad11653dfe9e17c7d075f"/><file name="Exception.php" hash="c62bd750b3b4cd33407d99869c600d14"/><file name="Route.php" hash="20875e10d835e380c294d2edfb56b08f"/><dir name="Server"><file name="Exception.php" hash="235457f9f3a4f7720ac2013b51ad4ee9"/></dir><file name="Server.php" hash="ceb61231f7fc67faa657837a9fb2c9a3"/></dir><dir name="Search"><file name="Exception.php" hash="915c3138aac999bdce9426a8acd40556"/><dir name="Lucene"><dir name="Analysis"><dir name="Analyzer"><dir name="Common"><dir name="Text"><file name="CaseInsensitive.php" hash="307dc051465ca81322c5e85e8ec022cc"/></dir><file name="Text.php" hash="758df150a1df6eba4b64004148a672a4"/><dir name="TextNum"><file name="CaseInsensitive.php" hash="e5940381671ed3f7c321b3fda9862881"/></dir><file name="TextNum.php" hash="36acd4b130e2f8b78e2de06ac9b4f942"/><dir name="Utf8"><file name="CaseInsensitive.php" hash="44697c595e22b385d0a7616e7af30ac6"/></dir><file name="Utf8.php" hash="1b7f394340ca0d04c8e6a19fe22d4d23"/><dir name="Utf8Num"><file name="CaseInsensitive.php" hash="9325aa4566ece4546b23c82d1aedb57d"/></dir><file name="Utf8Num.php" hash="76dfe3f7ab2e55f1e8190054dd788790"/></dir><file name="Common.php" hash="04cd47fabbd6c404aff39664da13df9a"/></dir><file name="Analyzer.php" hash="85a3a397e4d2c53d185523e25e7ae53a"/><file name="Token.php" hash="b7c5544e368acd06d81d7539983ed85b"/><dir name="TokenFilter"><file name="LowerCase.php" hash="d3be32b9f01fa4343a427721fc3b82b3"/><file name="LowerCaseUtf8.php" hash="9293ea00a25a3e7f129723c9f74b3b9a"/><file name="ShortWords.php" hash="1e296157ac5b8dc2f80a441811707202"/><file name="StopWords.php" hash="c935b1d071ab560816f3a591e3a662e9"/></dir><file name="TokenFilter.php" hash="7e7caefe49ee420c8b5c1561e84f012e"/></dir><dir name="Document"><file name="Docx.php" hash="e6730cac4ab560138c45c9db700d28f0"/><file name="Exception.php" hash="d1f92a2cc3ea06517d5626e96429a5af"/><file name="Html.php" hash="64e7ae4d564af7e71f44c01e48c8e03a"/><file name="OpenXml.php" hash="b21a3c28a95e7a0c9980db28bbc65842"/><file name="Pptx.php" hash="5a2b150c6c2a98b80e1e7765cec8297e"/><file name="Xlsx.php" hash="cae7aa77e2e49c47ecf8a89f169c629f"/></dir><file name="Document.php" hash="81e9c33cd2320e8344181ac5bf78819c"/><file name="Exception.php" hash="2d392bf05fe81a16cd8a3b10618bc6bd"/><file name="FSM.php" hash="5009e011f0b10421ef6e9c6b2c509753"/><file name="FSMAction.php" hash="54cc85832b139caef30d62a66a8008c5"/><file name="Field.php" hash="62d99dc9804e4f352bb55f69a61e5764"/><dir name="Index"><file name="DictionaryLoader.php" hash="dd18c7bb937d629cd0960ba4e8156307"/><file name="DocsFilter.php" hash="a464c3ab082438689658bd370ea21887"/><file name="FieldInfo.php" hash="49cdf39b3445b209adc9370a9970d834"/><file name="SegmentInfo.php" hash="3e9803053f230d7309cce21a643c9e76"/><file name="SegmentMerger.php" hash="335a52ca7e40a79dd6cb95f72cbaa140"/><dir name="SegmentWriter"><file name="DocumentWriter.php" hash="5061bbd3c4b375f3304813ff93a6401b"/><file name="StreamWriter.php" hash="0f6d8ea058813929a7448a4958a3c7c7"/></dir><file name="SegmentWriter.php" hash="13a8736ed2991f513e57f68e61926a76"/><file name="Term.php" hash="490ae3da5ccd138e9b060792766646bb"/><file name="TermInfo.php" hash="4930aa466ba2eb3b65dae3c02aa03221"/><file name="TermsPriorityQueue.php" hash="32663e0ebb7d0279bbcea377903c12df"/><dir name="TermsStream"><file name="Interface.php" hash="751e8ab0d56bb26f7b795d9530dd2494"/></dir><file name="Writer.php" hash="b7ef933d12a1b2f5376584b2420d7976"/></dir><dir name="Interface"><file name="MultiSearcher.php" hash="3f40f5b499a8ee03957fb21aada499da"/></dir><file name="Interface.php" hash="a78e2d90755e526ac9db7eb1c4185f3a"/><file name="LockManager.php" hash="5f61443ba5976b5fa021fb36bba30371"/><file name="MultiSearcher.php" hash="2fde43036355b990e0ac0227a00b6c8e"/><file name="PriorityQueue.php" hash="5c915507c33213ddb4b4ac613f1f68c9"/><file name="Proxy.php" hash="11944c7b4d9879615fd4f3a5d768aed3"/><dir name="Search"><file name="BooleanExpressionRecognizer.php" hash="3896532815243d89040fecb2fd65f606"/><dir name="Highlighter"><file name="Default.php" hash="b1dbdc2d70bb032a5d2b9f9e11273ea0"/><file name="Interface.php" hash="7dca815c9e9f444b9a2a9765fe349dd2"/></dir><dir name="Query"><file name="Boolean.php" hash="5be6706e75dd3e9ccdfaa0eb22f93ca4"/><file name="Empty.php" hash="2e16007df371f28191f785ab85d4d103"/><file name="Fuzzy.php" hash="e66032fc9f9cb06422cac6da95f7b8f6"/><file name="Insignificant.php" hash="1f61e2f1ef8ff38101f2a85c87b9529e"/><file name="MultiTerm.php" hash="ec939add6f7d0424029b12106385afd0"/><file name="Phrase.php" hash="424cc7d460f4bac0907d0170b60ba625"/><dir name="Preprocessing"><file name="Fuzzy.php" hash="cae1047630f98baf520483fa68af463a"/><file name="Phrase.php" hash="d8afc95f2e9da2a44d9495cbce775c98"/><file name="Term.php" hash="b099d749d723fbb53d3991e3f61458be"/></dir><file name="Preprocessing.php" hash="83dba0878c9ed171628b7a9ac70d26b3"/><file name="Range.php" hash="d8bda3ad418d24e0db7e59c446be13fc"/><file name="Term.php" hash="54e883c87d7368fa5be1e105723db357"/><file name="Wildcard.php" hash="9c1c8ebeca45a6332ede6fab8d5bee54"/></dir><file name="Query.php" hash="2a9f2ceda3cfacd24f892dd8bccd8d28"/><dir name="QueryEntry"><file name="Phrase.php" hash="407da910b0015ff8d95432cc193d608a"/><file name="Subquery.php" hash="a33d941498f632d859bec94a1cb9c10b"/><file name="Term.php" hash="808b02c1c1aeae4316fee3c9c466facf"/></dir><file name="QueryEntry.php" hash="9620d76904656a0727091f449603c662"/><file name="QueryHit.php" hash="6d1727ed01abc54503badc7176955882"/><file name="QueryLexer.php" hash="57a592ea29129b28d1144063e152c878"/><file name="QueryParser.php" hash="569f6439976128dbc471bd42fa9511d9"/><file name="QueryParserContext.php" hash="45c71a353821fc29101c1ae2f8eba02a"/><file name="QueryParserException.php" hash="358f89eaca92ac3175b26c419b317640"/><file name="QueryToken.php" hash="f85c3ac0ab04b5abff04d034cf127f43"/><dir name="Similarity"><file name="Default.php" hash="43f6f75cb50b7c7f344a5bac85ef172a"/></dir><file name="Similarity.php" hash="194c9c6c1c2815a8491952ece299ef9e"/><dir name="Weight"><file name="Boolean.php" hash="537c06e5f44c3d014d98a88a39c834f3"/><file name="Empty.php" hash="0bfe83149630af587846c7d5df63e72b"/><file name="MultiTerm.php" hash="c95f65634ed9d8c2896f5ba66a833f10"/><file name="Phrase.php" hash="51bc4912b1784bfa58841e4bf14fb177"/><file name="Term.php" hash="2e0f6fc3511928f1e94349d375dec8b8"/></dir><file name="Weight.php" hash="49ece1259ec183d66d2a1ccc8c319299"/></dir><dir name="Storage"><dir name="Directory"><file name="Filesystem.php" hash="7928063a85bf3c53e2afd754c111cc6b"/></dir><file name="Directory.php" hash="25a0d0c262a3c4fa7dbc3f1f11f0a4ab"/><dir name="File"><file name="Filesystem.php" hash="5c2819323a9878475d31eba6992e6abd"/><file name="Memory.php" hash="89bce18491ebcd885736c5c9a790eab6"/></dir><file name="File.php" hash="2b77f8354d79c7dd57330677651f8fc6"/></dir><file name="TermStreamsPriorityQueue.php" hash="a26104e3325d2533afffdfc66dd1ead0"/></dir><file name="Lucene.php" hash="fe6103d1d763df12d670dfe5103defb7"/></dir><dir name="Serializer"><dir name="Adapter"><file name="AdapterAbstract.php" hash="8bd5c797ff2230e804b916545a67694b"/><file name="AdapterInterface.php" hash="cb397638959459eef297b8114ebb0504"/><file name="Amf0.php" hash="734f3143371bffe28f65e144f1d4fde3"/><file name="Amf3.php" hash="05a939a59cad0622a7627572f931e909"/><file name="Igbinary.php" hash="dc0da7256a83c6f0a06582b21b160156"/><file name="Json.php" hash="e62019ed95f69a184f735f1d3d4d32c0"/><file name="PhpCode.php" hash="731fc343849f966c1b532284822060a6"/><file name="PhpSerialize.php" hash="d7bc5453b1c516a6895e62fee2f94ec7"/><file name="PythonPickle.php" hash="8eaa4d904fa3ac33cc3d405f6eeb92bf"/><file name="Wddx.php" hash="4321621736a7d3940a27357608c66c28"/></dir><file name="Exception.php" hash="dd736f6d29e3a1f8d688bdf6b24f8d30"/></dir><file name="Serializer.php" hash="47d6232a605b0fc1b0dfd5bc6738d4a4"/><dir name="Server"><file name="Abstract.php" hash="878b796b9b09bac46361e73e3b76943d"/><file name="Cache.php" hash="8851d8d1c35c11be49192fc875141632"/><file name="Definition.php" hash="c37f863e7395e761f9601a4f918f0fc9"/><file name="Exception.php" hash="1ad53d7cdaadfe1377fe30f61814ce33"/><file name="Interface.php" hash="ef219942e75a7dd72f757ae0fee1fe94"/><dir name="Method"><file name="Callback.php" hash="204c77c05f77dab719f7e8d4d9940990"/><file name="Definition.php" hash="6a7435cbdd3791b656f0f7945e68e724"/><file name="Parameter.php" hash="5bb143b2c5472570019deb5c8df7e13e"/><file name="Prototype.php" hash="e6926328f51c97152380eef1cb9503a1"/></dir><dir name="Reflection"><file name="Class.php" hash="7c3040f1cdaa12303fa3aa8a87bbee33"/><file name="Exception.php" hash="81a1918244112e6992e608c37a128f81"/><dir name="Function"><file name="Abstract.php" hash="baf97034eb2f6541a0b04448cdb0c8ee"/></dir><file name="Function.php" hash="b931e2381290e01a62197a41f7d4a43e"/><file name="Method.php" hash="2589efa5b95e88475509c07460869c1a"/><file name="Node.php" hash="a764c4cdbcfd48911882e73801f55c9f"/><file name="Parameter.php" hash="2cb12fe3fdca85cb9056909277002912"/><file name="Prototype.php" hash="c8f4e9fc01efed6ef3b5a10bab70ddc5"/><file name="ReturnValue.php" hash="bd7392e46dac77ad14597e24fbe9297a"/></dir><file name="Reflection.php" hash="7b01bebd0c5e02694d94946a7ff4cd2a"/></dir><dir name="Service"><file name="Abstract.php" hash="057d0faabba16e34faa0ed6d43ca61af"/><file name="Akismet.php" hash="c63f5c6b7b1be4b2bbedb84a7f026bf7"/><dir name="Amazon"><file name="Abstract.php" hash="16b70230ca4bf9fd43feaedc24416f7c"/><file name="Accessories.php" hash="c0f666b47ccd5ca407ca7ab3e62a28cd"/><dir name="Authentication"><file name="Exception.php" hash="f1ba0e03f16bf019c0246384f6797093"/><file name="S3.php" hash="35c859c9bf7221844df79260142e3e55"/><file name="V1.php" hash="a4f6e5db52a4ae4b8200ac26b1bc413b"/><file name="V2.php" hash="b91365a27a1019d793f3821d50cf0209"/></dir><file name="Authentication.php" hash="5e503da9b9bf0a83fd61326aabaa7bc2"/><file name="CustomerReview.php" hash="970806dbbd0244f317183a7d121dd23b"/><dir name="Ec2"><file name="Abstract.php" hash="add0a48733a5b51010fab03133fcf8a9"/><file name="Availabilityzones.php" hash="0df01ed765ce15c35a783a66d7f8ff44"/><file name="CloudWatch.php" hash="e601ca48308ac50dc3727f992f7e62dd"/><file name="Ebs.php" hash="1f82b128c7b5d35d37b3024b6c42f712"/><file name="Elasticip.php" hash="bfad9fcffa9bcd6ad7d7cff8cec45c64"/><file name="Exception.php" hash="b212f735d14f127feb9a33d220bf2261"/><file name="Image.php" hash="335cf797d7a3a3d49e029ef7ce991bca"/><dir name="Instance"><file name="Reserved.php" hash="6027f89632821d100f27363ffbf293f3"/><file name="Windows.php" hash="f823795a24808167f1b87d91ece5cd1a"/></dir><file name="Instance.php" hash="52e9fb6d557898648a7dd9c71bb9100a"/><file name="Keypair.php" hash="e035010eee1a949d1d2b5b1ddd43e5a6"/><file name="Region.php" hash="7283cb6f54f68c09949e4c0535ed8a3b"/><file name="Response.php" hash="ad34c2acb59516d6075d12294fcf6bd3"/><file name="Securitygroups.php" hash="68c70053d0e4284169a5e2c49cb2ef2e"/></dir><file name="Ec2.php" hash="4a39d1eb801af3fd096582c2428e1371"/><file name="EditorialReview.php" hash="edc54626cf681ff42bdbc3207063e50a"/><file name="Exception.php" hash="25e8e93c6e940a70c57e0d4b6b35271c"/><file name="Image.php" hash="8cb0ff1afc2b9f99b7e4db1c61c27e99"/><file name="Item.php" hash="49164d984e1888291b9a1b0b82df2204"/><file name="ListmaniaList.php" hash="d319a0d6c264c92c22196d6a9a84762e"/><file name="Offer.php" hash="a04c4d2faf859a590fe2e74ef0440429"/><file name="OfferSet.php" hash="cce61ade0766251d602204b65ad5f73e"/><file name="Query.php" hash="a8a6c152fa729f7047f352552bee7367"/><file name="ResultSet.php" hash="b15520c352dfb95481aa26509c84211e"/><dir name="S3"><file name="Exception.php" hash="2fa452933db70802a191be880cec481b"/><file name="Stream.php" hash="62544ad7a8d493023c4a62272a68d4f5"/></dir><file name="S3.php" hash="224a86bfc54f7c6df36b8d5eb3febbd0"/><file name="SimilarProduct.php" hash="abcd839cfcc6c194e0b2ee0461216e12"/><dir name="SimpleDb"><file name="Attribute.php" hash="329401b2dac2ad11141f5077093ce70a"/><file name="Exception.php" hash="72cd6853d02b6c4335292d38f310ea54"/><file name="Page.php" hash="4c6b5dda8a61a932584eaf332ba25ae4"/><file name="Response.php" hash="763d18b153c7296ae4a1acc9dd52fea6"/></dir><file name="SimpleDb.php" hash="26a2419a5c73550f8ef47ac2a7c161ce"/><dir name="Sqs"><file name="Exception.php" hash="4d8c014ecb492938b3234fb250dcc21b"/></dir><file name="Sqs.php" hash="e5a368178455cc62f0c1e6272876e31f"/></dir><file name="Amazon.php" hash="8bf9c8bd3d16372566cc6dda58d26f57"/><file name="Audioscrobbler.php" hash="0931bdaeda5594a4b367fd4901b5444e"/><dir name="Console"><dir name="Command"><dir name="ParameterSource"><file name="Argv.php" hash="6acc204436c9d0de0d1e5d2063dff1d3"/><file name="ConfigFile.php" hash="0ac0fcf2907eed649d9f720d9c98cfb1"/><file name="Env.php" hash="83579d583b977fb4a890933d5795588f"/><file name="ParameterSourceInterface.php" hash="c1161355277be3eefdadb4853d8ee1b2"/><file name="Prompt.php" hash="8a9b67aa3eaa61b7ff33aa0110b129fd"/><file name="StdIn.php" hash="fd5c89a584ce532ae64ce2e607e28e02"/></dir></dir><file name="Command.php" hash="c94204e49bc285a615c281253cb41641"/><file name="Exception.php" hash="e1a199ba28f3255efc3ad5f0c272d247"/></dir><dir name="Delicious"><file name="Exception.php" hash="8b4644f2ad354c3e8c668bf6f4d8757c"/><file name="Post.php" hash="00f3ca873d1da362fe1ed121b1d18c32"/><file name="PostList.php" hash="41dbf9ff7c15a8eaec5153cebc705bb2"/><file name="SimplePost.php" hash="9ae5bac1252734db8bda2c2cbceb901c"/></dir><file name="Delicious.php" hash="2f725816f82a4ba6ebeace7bcaf6e0ff"/><dir name="Ebay"><file name="Abstract.php" hash="2e334688b614c983b6a7ce3592e08899"/><file name="Exception.php" hash="83aa9409ac7d1e2bf9fd83e86c39a6c6"/><dir name="Finding"><file name="Abstract.php" hash="7238678f990b585b50271ceafe5058f3"/><dir name="Aspect"><dir name="Histogram"><file name="Container.php" hash="45aab272db8949fc7ef41c1f5b9a5d65"/><dir name="Value"><file name="Set.php" hash="6a00192243d8ab215f368459e932d145"/></dir><file name="Value.php" hash="ffd36e8de497a77bd42cccb63ce3235b"/></dir><file name="Set.php" hash="c39339e0e65827c882eac9fa8d4d4fff"/></dir><file name="Aspect.php" hash="df96cb57c1c2b88a8244384894f1b9dc"/><dir name="Category"><dir name="Histogram"><file name="Container.php" hash="e99d9fdf2028e7f627fa7692d6e5e5af"/><file name="Set.php" hash="d10aeaf449c591a7884a38a1b5f90399"/></dir><file name="Histogram.php" hash="5fda3e21a2a68bbca36838425d54c454"/></dir><file name="Category.php" hash="aef46c1abec0621af48a4398de94bca0"/><dir name="Error"><dir name="Data"><file name="Set.php" hash="51d6f2c75eb549150dbb4255a747e238"/></dir><file name="Data.php" hash="06579aec01d55e0e27e48b66b32814a5"/><file name="Message.php" hash="f0082bf2e41b9fa997891d55536d6c94"/></dir><file name="Exception.php" hash="0d04308f626b6d80255403034766b93f"/><file name="ListingInfo.php" hash="37689bb7f7f1312e0a8690b1ec55d17f"/><file name="PaginationOutput.php" hash="dbd144ea4155492ca485092140ed7342"/><dir name="Response"><file name="Abstract.php" hash="13c8ef07cd6c8b9e0b54b183099d3c2d"/><file name="Histograms.php" hash="7e67ea07bdf9e34cb277b87cdad8db8c"/><file name="Items.php" hash="87e78262a0463b3689f75ade1a97bf0d"/><file name="Keywords.php" hash="501b1eb2db688abcb8926a924b2467c4"/></dir><dir name="Search"><dir name="Item"><file name="Set.php" hash="72dc95aa03723a96c6ad4e16bb6c1f04"/></dir><file name="Item.php" hash="8cc709c5b81a662e1b42f6fdcfbcd057"/><file name="Result.php" hash="bde45f1eff1c6745093e1fb16a25fa21"/></dir><file name="SellerInfo.php" hash="0a3e7e31682c1b4139860b692e3a7a93"/><file name="SellingStatus.php" hash="40cc9f7feb5534c9b7ffd77cde164d8e"/><dir name="Set"><file name="Abstract.php" hash="d68b570966c8c13d07ecc8e1c093a3f8"/></dir><file name="ShippingInfo.php" hash="ef20bffb5c3917bd631a79f6520aaa47"/><file name="Storefront.php" hash="59e0796869417ef09b2fabf17a0f51a2"/></dir><file name="Finding.php" hash="38297aa7141bd29cb58f499a6f301958"/></dir><file name="Exception.php" hash="065ed88e73a47544f5432781b553b095"/><dir name="Flickr"><file name="Image.php" hash="c18c420085a325a88aa32c6e8940febe"/><file name="Result.php" hash="3dae64d1fed5642f400e5a3ed34001e0"/><file name="ResultSet.php" hash="1141813d476af74ac4482982352df257"/></dir><file name="Flickr.php" hash="80ee3a6a56f644931629923efaa74f58"/><dir name="LiveDocx"><file name="Exception.php" hash="b7c0f8f23822ab34863ae7c8ba65fca0"/><file name="MailMerge.php" hash="9c3df9f5097d2426f98f3e4afd5417b2"/></dir><file name="LiveDocx.php" hash="bb79b5d68e67e91aa7c6678cf9d33fe5"/><dir name="Rackspace"><file name="Abstract.php" hash="38c670e3ba06278b4fed19a7a20ffa09"/><file name="Exception.php" hash="0e02a57f8eb16972b101ec5b2d5ee5c8"/><dir name="Files"><file name="Container.php" hash="59b5965b06c12c8f32f191d6d81578ed"/><file name="ContainerList.php" hash="60cab750d4475f791b0f6ef9487b2b5f"/><file name="Exception.php" hash="ff4c1a6d5b3c15b0134eea798aaebb5a"/><file name="Object.php" hash="fa7d117f207e2a26dfa5db744a098cdf"/><file name="ObjectList.php" hash="d2eaf4ebe570b3ca456844b294cfc6f6"/></dir><file name="Files.php" hash="fba4bd666821a5eec5cf17f5f91dd15a"/><dir name="Servers"><file name="Exception.php" hash="90e7248491ba6728731b35821a6797b3"/><file name="Image.php" hash="6977cee9fc642f32c2a3dd9b99739ab6"/><file name="ImageList.php" hash="0bc789d18d41f62ae1db82159487edc0"/><file name="Server.php" hash="73f6c2a5e062bf36b3b89ed8d1041eaf"/><file name="ServerList.php" hash="f76bf22857872982ce35e7afa2ea49f1"/><file name="SharedIpGroup.php" hash="75bc0d1b089228114a5bdbbc764f6799"/><file name="SharedIpGroupList.php" hash="97feec662c70d87bf02c0dd689d59962"/></dir><file name="Servers.php" hash="d7c9cd6f524ef033e9c4836623171ad4"/></dir><dir name="ReCaptcha"><file name="Exception.php" hash="e49c53a3c431f49911028b571a76bc06"/><dir name="MailHide"><file name="Exception.php" hash="fc56e06dc9697c40498f1015c0e76c08"/></dir><file name="MailHide.php" hash="ff143c31b0aaac1c852ae438ccc57a4a"/><file name="Response.php" hash="10d73062279da9040e445fe8d1820c36"/></dir><file name="ReCaptcha.php" hash="518a917f321d64422010babcdc82921a"/><dir name="ShortUrl"><file name="AbstractShortener.php" hash="7e0fa90e0324b377677bd8847412ffa5"/><file name="BitLy.php" hash="3e07fa8e265d44e7225af2f11ac75607"/><file name="Exception.php" hash="fa58bd8ee297581ecafe8e15d9c41858"/><file name="IsGd.php" hash="5d18b0c134f1da253893391c720144e7"/><file name="JdemCz.php" hash="6892d0e3e81cc3aeca234d4fb5164ac5"/><file name="MetamarkNet.php" hash="747c5d10917401f1d0d11ba38b1af8e2"/><file name="Shortener.php" hash="64e2ceca93f66c375605e62d6431a628"/><file name="TinyUrlCom.php" hash="1b7f09510d1b029c117e6c59c5419714"/></dir><dir name="SlideShare"><file name="Exception.php" hash="67b547c02b4b9c9440f5c11e570171f1"/><file name="SlideShow.php" hash="9d01060ec6c7a7583a21c824a3e74e21"/></dir><file name="SlideShare.php" hash="1cdc74e57a3be59df8d702bc3d9f7362"/><dir name="SqlAzure"><file name="Exception.php" hash="24d9e2d3dfca7d6ce54137652027152c"/><dir name="Management"><file name="Client.php" hash="e46b9564db9ae2344357919b4760ac4f"/><file name="Exception.php" hash="731e875bfd4df360b37ca082877bc1c6"/><file name="FirewallRuleInstance.php" hash="f564f5454ee9cb2b1ffa97499124d0e7"/><file name="ServerInstance.php" hash="7f3198f120d54ca4b70b5f58399cf0ab"/><file name="ServiceEntityAbstract.php" hash="72ca3fc5ef5341bf549685beb08dad5f"/></dir></dir><dir name="StrikeIron"><file name="Base.php" hash="0b1451704136ab44598ac7204bde94a1"/><file name="Decorator.php" hash="68741c986d506462846a6aa007f94cef"/><file name="Exception.php" hash="e61ee74d3ae19b3e61c1894264d6530a"/><file name="SalesUseTaxBasic.php" hash="43823d20d58aaf73be598f5282e7f841"/><file name="USAddressVerification.php" hash="f5dd585a282a046ebfb95125c29ed866"/><file name="ZipCodeInfo.php" hash="76beb6125d1035ffd7e67101cbd9df44"/></dir><file name="StrikeIron.php" hash="7eca35cee7479ac035ec83f456ddb2ec"/><dir name="Twitter"><file name="Exception.php" hash="d5a3fb65437ac5663d5262b19c226483"/><file name="Response.php" hash="f78d457745cd7df85d83b33e9b43a01f"/></dir><file name="Twitter.php" hash="8b3dc7c575b35c1351a9a00afd1b57c5"/><dir name="WindowsAzure"><dir name="CommandLine"><file name="Certificate.php" hash="82f6c9535209f9d9800b1ec5227ea5a8"/><file name="Deployment.php" hash="d77fb324a62e1d5bbec2ce07dbcd6051"/><file name="GetAsynchronousOperation.php" hash="da2b5c820d693a4fdcdc5f53378a317c"/><file name="Package.php" hash="4ed8d218b529fa358b9bad365caeda1c"/><dir name="PackageScaffolder"><file name="PackageScaffolderAbstract.php" hash="077b5928c2f1ff061f447754e17051c9"/></dir><dir name="Scaffolders"><dir name="DefaultScaffolder"><file name="build.bat" hash="651c7fb8b72233f40f4f25ca8905573b"/><file name="index.php" hash="894c44229a940ea713205338f8e490f7"/><dir name="resources"><dir name="PhpOnAzure.Web"><file name="Web.config" hash="65f639e413e4ff122d92623a1c14b2ae"/><dir name="bin"><file name="add-environment-variables.cmd" hash="b0e00d591398ec40968189bc4e35c139"/><file name="add-environment-variables.ps1" hash="19a5afae543fd10d118ad21136fc4bec"/><file name="install-php.cmd" hash="8248bad7c6981ab8f8ad34cbb6e224c3"/></dir><file name="diagnostics.wadcfg" hash="5188e0200f5446cae89c1be78db568c2"/><dir name="resources"><dir name="WebPICmdLine"><file name="Microsoft.Web.Deployment.dll" hash="ce4bedba97839fb3b3991c9e76d9a5f8"/><file name="Microsoft.Web.PlatformInstaller.UI.dll" hash="c692c64ac1ff35a256b05b3d0389d77a"/><file name="Microsoft.Web.PlatformInstaller.dll" hash="b3c7917c493dc73aab9ad4f3b32d3722"/><file name="WebpiCmdLine.exe" hash="23ee0847ce84831042e2094f8bb946a7"/><file name="license.rtf" hash="e19c7c8161a0d2cf8cd2bfa815edd707"/></dir></dir></dir><file name="ServiceConfiguration.cscfg" hash="aef39d43590593be9d2fe5fe4a3b5c80"/><file name="ServiceDefinition.csdef" hash="cc148db5e38df6777513c343f0552408"/></dir></dir><file name="DefaultScaffolder.phar" hash="7213da0e7d624e8c2a4ba1f3b5ff05eb"/></dir><file name="Service.php" hash="ff88b79b64947f883986e77838d8cb24"/><file name="Storage.php" hash="8944ded3eb414aa4826b6f53040049d9"/></dir><dir name="Credentials"><file name="CredentialsAbstract.php" hash="d4f022ee969ebb28059bb4fe1dc15bbd"/><file name="Exception.php" hash="46253077f849f4d86ff19bcd5c4ffbb2"/><file name="SharedAccessSignature.php" hash="b812dfc04bcc4349faa4b684e3c17ffe"/><file name="SharedKey.php" hash="d09970fb25d6649fc3626d016e57a71a"/><file name="SharedKeyLite.php" hash="a7af3a465e3b62edddd79fcfb8b5bfd0"/></dir><dir name="Diagnostics"><file name="ConfigurationDataSources.php" hash="164e443f79bf6b018796cbe4ace8552e"/><file name="ConfigurationDiagnosticInfrastructureLogs.php" hash="5ed3b44951c19fe3899d77e57777ccca"/><file name="ConfigurationDirectories.php" hash="ac9628ef7d6d5291b4a9755ffa83c4bc"/><file name="ConfigurationInstance.php" hash="2ffcb3db9f9ecfe5764d497f08175c1c"/><file name="ConfigurationLogs.php" hash="79cb3324521884a79c422318e9df0996"/><file name="ConfigurationObjectBaseAbstract.php" hash="574ad31edf5de775857d4d9818e09515"/><file name="ConfigurationPerformanceCounters.php" hash="f518fc30a51d61ee73f44fd54304d115"/><file name="ConfigurationWindowsEventLog.php" hash="7b071634e38e532d5faf245310846396"/><file name="DirectoryConfigurationSubscription.php" hash="5c72f815ecb4a4b619a43b05e0767d3e"/><file name="Exception.php" hash="ecc6ffb64bcd2b7e219b9e57ae8261c4"/><file name="LogLevel.php" hash="b63f1b837619bd6475f30b5c2862354b"/><file name="Manager.php" hash="0d92a4ee3426b0a3fa98efabad20850e"/><file name="PerformanceCounterSubscription.php" hash="f3793033b70429e761b5715d26a9b052"/></dir><file name="Exception.php" hash="ae2961639357d61fd0edbb1f8b19e600"/><dir name="Log"><file name="Exception.php" hash="f293efa4c7d400034fdd32b61e398d75"/><dir name="Formatter"><file name="WindowsAzure.php" hash="d2803e471ad8f151337b9b06adf840e2"/></dir><dir name="Writer"><file name="WindowsAzure.php" hash="898cc3aab9ed4a1143ad98af4c82828f"/></dir></dir><dir name="Management"><file name="AffinityGroupInstance.php" hash="999fccb597ded5e9bb1a3a49d0461238"/><file name="CertificateInstance.php" hash="e38186727c337efeb26e1edb3395c3aa"/><file name="Client.php" hash="7ea9a8aeec1b66c29127ce846788caeb"/><file name="DeploymentInstance.php" hash="da71eb3b750c5accba7df6a02a936572"/><file name="Exception.php" hash="e38e9729e738a5c98b7a444377dc390f"/><file name="HostedServiceInstance.php" hash="52a7a4f5e90fcddbba2da67f6ec1a714"/><file name="LocationInstance.php" hash="d7fc5f02f835fbea9bd39e25a2953415"/><file name="OperatingSystemFamilyInstance.php" hash="5463dc6555a2894cf77c15dd015b2bbe"/><file name="OperatingSystemInstance.php" hash="8d8fc32400bbb73a3765f06ccaefc05f"/><file name="OperationStatusInstance.php" hash="acb817c0203ca17237b430c7d086b7b3"/><file name="ServiceEntityAbstract.php" hash="6013b8d4f6378d945e29013d54dc634f"/><file name="StorageServiceInstance.php" hash="6d89ea4e90ac780fce17efba7e38976a"/><file name="SubscriptionOperationInstance.php" hash="9fb50cd722cc80be2d660e78cd42d3de"/></dir><dir name="RetryPolicy"><file name="Exception.php" hash="b83b70d8c828de010cfa12f027a2da23"/><file name="NoRetry.php" hash="faa7ed56468ce39f77162aa1888f8480"/><file name="RetryN.php" hash="340d6ccaa8d41eba0f3cd943dbff201b"/><file name="RetryPolicyAbstract.php" hash="57b861c1f66f83295ce1ae8284b6870c"/></dir><file name="SessionHandler.php" hash="49abc2db2f8cd60249889013eeb6c28f"/><dir name="Storage"><file name="Batch.php" hash="54321d9853919241064631b7fd5e404a"/><file name="BatchStorageAbstract.php" hash="1911d06beacc5afdee2e0214fadb48f7"/><dir name="Blob"><file name="Stream.php" hash="fca729afd6bced397324a092598c4348"/></dir><file name="Blob.php" hash="ba54d4c7b42bfb8536df0ace27d68ac5"/><file name="BlobContainer.php" hash="3762000f605bc3b601d33508d11ba9cb"/><file name="BlobInstance.php" hash="3acc55cc558e3003164dde92463f0f74"/><file name="DynamicTableEntity.php" hash="c0f1e5b79b12857c233299a4445bb168"/><file name="LeaseInstance.php" hash="3d0fc9b5d6808aec75d9aa5bfb537e3d"/><file name="PageRegionInstance.php" hash="ad3d6fda6950c0f1fa6516507ca9662b"/><file name="Queue.php" hash="e0f744f5a2c30c4368babc77282987d1"/><file name="QueueInstance.php" hash="fc1d2fe33c92b9709174fdb78b014839"/><file name="QueueMessage.php" hash="1743f7a02f0d443c7a2f85d87dc43e0f"/><file name="SignedIdentifier.php" hash="cd0fa8a05e3acd402a1e337b1ca7eee0"/><file name="StorageEntityAbstract.php" hash="f3ef81a6dbd64aea38bc60b1f0c7bb8b"/><file name="Table.php" hash="3264067c6ef982f7bb216234451f5781"/><file name="TableEntity.php" hash="c9be1c41776a2ae5892d8f8d14b74fd6"/><file name="TableEntityQuery.php" hash="13880ce0f4c805205dcd10a5283c0539"/><file name="TableInstance.php" hash="54f43c27f93bee83a2c9ba42831d9c27"/></dir><file name="Storage.php" hash="cbac5a9bb9efb6e93a3d9871c8699035"/></dir><dir name="Yahoo"><file name="Image.php" hash="aa6abfa0f447d43f4828dc44c0fdf86f"/><file name="ImageResult.php" hash="7a64eac529ce21090e8b58997fc22041"/><file name="ImageResultSet.php" hash="7ad19487bce9a09855cf7d79707af347"/><file name="InlinkDataResult.php" hash="28305ce865dfb4011a285015a40a6a83"/><file name="InlinkDataResultSet.php" hash="fb09080f12f5348b37fdd5d62fc946fc"/><file name="LocalResult.php" hash="306431d361c2097b3b00cdbaba1bb372"/><file name="LocalResultSet.php" hash="68a4cb69982884c1bd7d6a7df86be90b"/><file name="NewsResult.php" hash="ea496bdeee3021d391df58a3be8636af"/><file name="NewsResultSet.php" hash="f80bcd0b1ac7632f3fb3020a7ff83255"/><file name="PageDataResult.php" hash="c8ea663819efe5ec5d374463f04a8f39"/><file name="PageDataResultSet.php" hash="69c99f8806a98868cb77e9db268eb8d8"/><file name="Result.php" hash="221286f5fbe491b570df8cec1fb7c91c"/><file name="ResultSet.php" hash="4477af82dcaac7fcd93ce9c29c68bdd5"/><file name="VideoResult.php" hash="6ba0d1ebb1c288b11b17ff6a9e434a4d"/><file name="VideoResultSet.php" hash="1a434e1b8bcf9b32e755a32e97e52838"/><file name="WebResult.php" hash="eacd11e6aace9570c6064c8fc1b47750"/><file name="WebResultSet.php" hash="bf5f6f43eb71f0469c961b0f5a6e4094"/></dir><file name="Yahoo.php" hash="27616706be89313b7b5be256be21e095"/></dir><dir name="Session"><file name="Abstract.php" hash="b43880e48ff9ee3040eca09d1458f7d5"/><file name="Exception.php" hash="ce01f1ceaa96bef8c71759f7e6c1e578"/><file name="Namespace.php" hash="b3e6effe8f53d5f9f407a4b5507df31c"/><dir name="SaveHandler"><file name="DbTable.php" hash="5b08339aa3e7f044b5602e725e6c65c0"/><file name="Exception.php" hash="06db90dee9421e4a8e09b946de252d41"/><file name="Interface.php" hash="617704bf38e31d51b79c636480447b91"/></dir><dir name="Validator"><file name="Abstract.php" hash="7bc8436592d308a702f37d64a8afbe72"/><file name="Exception.php" hash="c00d9dfbc04a9250f2359a5f31e726b8"/><file name="HttpUserAgent.php" hash="6a2a83e6baf37967b06cf993170ed03e"/><file name="Interface.php" hash="6e54358cefb41ccb7e591eaba391f74e"/></dir></dir><file name="Session.php" hash="da8c2bc8217bb09a7e86c573fa7a6553"/><dir name="Soap"><dir name="AutoDiscover"><file name="Exception.php" hash="3c71353889e5488f16cd0747a1337882"/></dir><file name="AutoDiscover.php" hash="abdfc4afb277a6e0c23216cb1d894dd1"/><dir name="Client"><file name="Common.php" hash="4c196fc850f65702741c044d12507769"/><file name="DotNet.php" hash="61bacfc1a99fabb15c58d5499c064c72"/><file name="Exception.php" hash="fe48793a358a7201ad7faee3a077a7db"/><file name="Local.php" hash="843caaab790dc3a322e570cae31dfda7"/></dir><file name="Client.php" hash="bb395c77d4e6ca127f48e15953c72f90"/><dir name="Server"><file name="Exception.php" hash="b5366c6128550c6904b5f0d83d9a4495"/><file name="Proxy.php" hash="4e3e39bf6b40e758bb8154900c0be4ae"/></dir><file name="Server.php" hash="2d3adb7e3b01a55889f4a9ccd1226758"/><dir name="Wsdl"><file name="Exception.php" hash="c30308763d2f85ccde3e48c399d977fa"/><dir name="Strategy"><file name="Abstract.php" hash="f09e005c0c35a51dbc906815f298a515"/><file name="AnyType.php" hash="7e0f81e8c1bde45bd858ae5c16b4cd11"/><file name="ArrayOfTypeComplex.php" hash="3b9998427588b55e16496ee51a1d7d5d"/><file name="ArrayOfTypeSequence.php" hash="8ea1226e6138e1d162b647b39daed36d"/><file name="Composite.php" hash="7ea40da650826369c79e7a17ff93da40"/><file name="DefaultComplexType.php" hash="9fefac807dbb4c843feec714a05ac521"/><file name="Interface.php" hash="d4f3ed1447d163ae1eedcfc886662719"/></dir></dir><file name="Wsdl.php" hash="8e4ad5d4d160d770740012ec920e30de"/></dir><dir name="Stdlib"><file name="CallbackHandler.php" hash="f33bb03784021305a529525bf125df09"/><dir name="Exception"><file name="InvalidCallbackException.php" hash="977bd070fc4de8c0bce940a2d0a0c530"/></dir><file name="Exception.php" hash="826ef583632fe8b71ce0916ce4c01030"/><file name="PriorityQueue.php" hash="886161c12418c95bda548c5e484db351"/><file name="SplPriorityQueue.php" hash="4ce44425f16b61d5cfa2b37a36c430b9"/></dir><dir name="Tag"><dir name="Cloud"><dir name="Decorator"><file name="Cloud.php" hash="c03f8a8a9acad9b124508cb5ec762ef6"/><file name="Exception.php" hash="da2286643dd90128c9bafdb55d4874d9"/><file name="HtmlCloud.php" hash="ac29df72f5738876b6c5c3220200aea5"/><file name="HtmlTag.php" hash="1c66e72d27e394b7a67e083a6a7e7635"/><file name="Tag.php" hash="38969d4df8dd12f7c75d5886a4309e2d"/></dir><file name="Exception.php" hash="f1f89e1176804f89966ffa1b6057aadc"/></dir><file name="Cloud.php" hash="b563d184a10c5780ac839964d05f5b70"/><file name="Exception.php" hash="bb95c48a0889e48b9621fc24ece1855d"/><file name="Item.php" hash="4d8899476ff7c0edc26227377437184a"/><file name="ItemList.php" hash="a37b92d4346128d6928c3ed75abe85e3"/><file name="Taggable.php" hash="754d26825a791b7b493479ab96de35ac"/></dir><dir name="Test"><file name="DbAdapter.php" hash="9f14c0c71238db11ce231ec608fa0748"/><file name="DbStatement.php" hash="ae071a2e217641e4431dbaffab4b475c"/><dir name="PHPUnit"><dir name="Constraint"><file name="DomQuery.php" hash="4a372f65097fddc842326acfb0873110"/><file name="DomQuery34.php" hash="4cfc2fccf97dcad8979afdeb5051d99d"/><file name="DomQuery37.php" hash="4918ef15cdbf82e30ee35bce62246f6a"/><file name="DomQuery41.php" hash="0e55e6f6ec4df95712cf6ae2592eaa4d"/><file name="Exception.php" hash="08a569be3229aa317e045e0bb5712aee"/><file name="Redirect.php" hash="bd29ebef3a5193019124cbe48e3b57a4"/><file name="Redirect34.php" hash="7fbaaf229a5e72fd9328b6b3355979e0"/><file name="Redirect37.php" hash="25ae9936724abf4f6c655e79a4b017a7"/><file name="Redirect41.php" hash="b15f5d011531a5f341691400758b7b94"/><file name="ResponseHeader.php" hash="d0c824d1d0825eaff50fbff17ad9fe68"/><file name="ResponseHeader34.php" hash="970159fe86220f6d79ae839787445e76"/><file name="ResponseHeader37.php" hash="b45fcfbc270c1dc1be8af6f967d74055"/><file name="ResponseHeader41.php" hash="d898287c0e3c5c5a29c8dfc23258c357"/></dir><file name="ControllerTestCase.php" hash="a1587e2519d6a108213338a8df626983"/><file name="DatabaseTestCase.php" hash="e660d4e0b896a1349b5b3a7b908abed9"/><dir name="Db"><file name="Connection.php" hash="a376a28b4f32640b77896ed71aa94103"/><dir name="DataSet"><file name="DbRowset.php" hash="619ddf7996bdbae5efe2667bf43f97fd"/><file name="DbTable.php" hash="c2f9df7d0a3cf0d37631d8f06c818bc8"/><file name="DbTableDataSet.php" hash="d4399f69a07e07e1cdf51ee779ed4d25"/><file name="QueryDataSet.php" hash="9923dfa4b4f6ec969e05af835f0c9578"/><file name="QueryTable.php" hash="49db01b854018eed9f97f9e87dd8ef99"/></dir><file name="Exception.php" hash="b4db1bec052e5f4326e4f69f8265b1f6"/><dir name="Metadata"><file name="Generic.php" hash="0d50fe34d4d444504a433c495a10f4c7"/></dir><dir name="Operation"><file name="DeleteAll.php" hash="ad2d32c7274f19ffd7ff00f6a9629831"/><file name="Insert.php" hash="76990ebfd7da444a380ef153fd4ec2c7"/><file name="Truncate.php" hash="aeb7cea4a23f9a4978838834184b827c"/></dir><file name="SimpleTester.php" hash="303a002e44573654515318426f06454c"/></dir></dir></dir><dir name="Text"><file name="Exception.php" hash="63dc12adf35209b68cb541fad9d13339"/><dir name="Figlet"><file name="Exception.php" hash="ce4743f212bc9dd406e7c5abd1499a8c"/><file name="zend-framework.flf" hash="e421545f78033d8a6a4324e54ccf0454"/></dir><file name="Figlet.php" hash="342b1851f3fddf6de881bfdcd6dbdc25"/><file name="MultiByte.php" hash="7beb126807547c59a29ff72918ce4cb6"/><dir name="Table"><file name="Column.php" hash="cb652d404e394051bb9463ef0f5e5fac"/><dir name="Decorator"><file name="Ascii.php" hash="642655dbd861110617fe242a5f5b2e49"/><file name="Interface.php" hash="b246cf5bf0cc2ccb3fd612987dda1ac6"/><file name="Unicode.php" hash="78c514875a100d295a884d52cbff6679"/></dir><file name="Exception.php" hash="a9ad309358591313a0b39a9dc6637ead"/><file name="Row.php" hash="2e1210709f13f36070015bf1e7c4bae8"/></dir><file name="Table.php" hash="fa040e017955cd19728968adc4d3263a"/></dir><dir name="TimeSync"><file name="Exception.php" hash="c5c88b4fa22c7aa853c99e80293d6b56"/><file name="Ntp.php" hash="670a72b056bc3ea5c6ca09fd51e5c0d1"/><file name="Protocol.php" hash="81ebccdcfad278c458e8f801743e8035"/><file name="Sntp.php" hash="f491dc0e0e4ad0a6909cc9518c443855"/></dir><file name="TimeSync.php" hash="e68ddd486d397ad8b8072df003f0dbe9"/><dir name="Tool"><dir name="Framework"><dir name="Action"><file name="Base.php" hash="ca10276b0b663e3946f30a7e85e2437a"/><file name="Exception.php" hash="033fe3dfcbe687a8fc14217124485646"/><file name="Interface.php" hash="4971f7cd01f81557e06c52442d1e10ec"/><file name="Repository.php" hash="763980637bc854efdabe4702cf90429a"/></dir><dir name="Client"><file name="Abstract.php" hash="c6aa9afeb508a90fac77fdd01490c917"/><file name="Config.php" hash="88d068ae943aaa028252208d2ffa9737"/><dir name="Console"><file name="ArgumentParser.php" hash="a7aca2e438a4ea02beea9efe4fc322e6"/><file name="HelpSystem.php" hash="c49dfb3e52bc4dbd0fb981d2d2db7ea0"/><file name="Manifest.php" hash="8ecaf5471c98b4adecf441fd0b239fd1"/><dir name="ResponseDecorator"><file name="AlignCenter.php" hash="aea5fb29315c501c879f1414ab30bdf1"/><file name="Blockize.php" hash="f6510cb7f02bdd000eff5b3cfc7c3f94"/><file name="Colorizer.php" hash="b4370450e0af8f8bc5b70bca3a3140e4"/><file name="Indention.php" hash="9d05c40f3bcf99606a4433c4f2f550c8"/></dir></dir><file name="Console.php" hash="70d696d68e6f889e25661568ae0cafef"/><file name="Exception.php" hash="9fc08df23e990977b31c58157458797f"/><dir name="Interactive"><file name="InputHandler.php" hash="d4a71d517cbdfca13bc442f915eadfa3"/><file name="InputInterface.php" hash="b76636ebb7563e128e1653de60a05e47"/><file name="InputRequest.php" hash="01746459e3c0d5114ba84376641ce516"/><file name="InputResponse.php" hash="fe6fb87211d75ac5d43a0afcd12b3438"/><file name="OutputInterface.php" hash="e6473dcec31887ba9fc189cf5ac4b5cb"/></dir><file name="Manifest.php" hash="a04f5f7452adbe2a7b9f572753c282e1"/><file name="Request.php" hash="337a50f6b8ca0346335666825a138400"/><dir name="Response"><dir name="ContentDecorator"><file name="Interface.php" hash="f5f2e4d82017c916a98e600c0ecf10fa"/><file name="Separator.php" hash="0bdedce341d3dc2456856bedb4e6fbfd"/></dir></dir><file name="Response.php" hash="047455ac32ab5c1f0913bd8be80408e2"/><dir name="Storage"><file name="AdapterInterface.php" hash="cbe1be24e10113b8355be82c17257d74"/><file name="Directory.php" hash="7f818fcabc4dd64292ec750d69a2cab2"/></dir><file name="Storage.php" hash="e1e34565e6f12ef7a6914bea4f21b495"/></dir><file name="Exception.php" hash="e8ab7ccbf5e2a5516a35ca4e887b1f5e"/><dir name="Loader"><file name="Abstract.php" hash="ac9b19649683e89c14f162643680d6d2"/><file name="BasicLoader.php" hash="eb441f57c872d051c8bf4ff334516776"/><dir name="IncludePathLoader"><file name="RecursiveFilterIterator.php" hash="e809fc3ffb30c42bd65defb0b841d5ea"/></dir><file name="IncludePathLoader.php" hash="ba1fdc0c41d1ac3ac9b86f7b295d62fe"/><file name="Interface.php" hash="5a982ccd517b7fa2c5d1e7a181f9a66d"/></dir><dir name="Manifest"><file name="ActionManifestable.php" hash="6b75a1363ec0989198f0577519f2a8d8"/><file name="ActionMetadata.php" hash="55c5c7fd4609c3a2c188c68f2b59996b"/><file name="Exception.php" hash="e4adb9a694c21dd46682009e1a25ba80"/><file name="Indexable.php" hash="f2fdb04e846a873a00178d44dfb7c134"/><file name="Interface.php" hash="65fb779fcdd624b743e1c70370ce1a2f"/><file name="Metadata.php" hash="79d13b52ad9aa5bffe103b61a404296e"/><file name="MetadataManifestable.php" hash="2974762fdea9eec82a74a6d3446f676a"/><file name="ProviderManifestable.php" hash="3d59e772c55a5a791844910d9acbb131"/><file name="ProviderMetadata.php" hash="b1fa45e3f1309e25c3e71e43e1a48263"/><file name="Repository.php" hash="b055ec6bcaa48d3536f376c7d196052b"/></dir><dir name="Metadata"><file name="Attributable.php" hash="3a1ae646ad3127bcd9d7f0b590b49d75"/><file name="Basic.php" hash="f8e243b4883d1f53ef6dd440c0d8b618"/><file name="Dynamic.php" hash="2ae310d375a9f1e29f0322c03350b718"/><file name="Interface.php" hash="dd418e0cfd979aa8caac73abbe8d65d7"/><file name="Tool.php" hash="d4cf6475ece71a871144a646c4653b88"/></dir><dir name="Provider"><file name="Abstract.php" hash="54efa5905a09985cfc5261116cdc808f"/><file name="DocblockManifestable.php" hash="0bb7be516c01ef1df2db65cac6782604"/><file name="Exception.php" hash="8340027bd3f883ce3bc60e5a4a779e1c"/><file name="Initializable.php" hash="21203810d42fc2c661b5a74a4db22afd"/><file name="Interactable.php" hash="1645bf6768d35a154b409e9fc8d23629"/><file name="Interface.php" hash="5acbcaa43439912bfc3f9be9aae48561"/><file name="Pretendable.php" hash="7320be8f080b47a7a3c7768ed5b82655"/><file name="Repository.php" hash="06ac616d5eca5d9769ad7d1d1a7ca9bc"/><file name="Signature.php" hash="5be099c081171cd11a6c5e6a80011f2c"/></dir><dir name="Registry"><file name="EnabledInterface.php" hash="87fe89d72c54ad50ec51bb2d683d2992"/><file name="Exception.php" hash="eccc229c4505a1ed3e85902496e1935e"/><file name="Interface.php" hash="85731cc24ee6598ac544956ba02a4847"/></dir><file name="Registry.php" hash="430ca6afc053d09a02faafa778f05ddc"/><dir name="System"><dir name="Action"><file name="Create.php" hash="ece59a9bf0b39f4c7731dd2c3c6a3687"/><file name="Delete.php" hash="93a02ef0a268f9a46140122e6b658831"/></dir><file name="Manifest.php" hash="2dc6db96a2eaec2f041f73eb9784426e"/><dir name="Provider"><file name="Config.php" hash="0f0ac44a62caaea96bdd741dc8d10fe1"/><file name="Manifest.php" hash="9834badd5250276130dd8f035fa3aa69"/><file name="Phpinfo.php" hash="a18c9de3ae3099a941d257fd8bb83286"/><file name="Version.php" hash="235916637c0ec94a08f86894dd211da4"/></dir></dir></dir><dir name="Project"><dir name="Context"><dir name="Content"><dir name="Engine"><file name="CodeGenerator.php" hash="28294bea1645211c3a55b04b03eb97e5"/><file name="Phtml.php" hash="b635fe45ef2a8b9de27be338ff80e0c8"/></dir><file name="Engine.php" hash="3edec5f50d35068768bd1ddb7cfcb242"/></dir><file name="Exception.php" hash="903019115f2291dac64e2d8316b069d0"/><dir name="Filesystem"><file name="Abstract.php" hash="7de036baa7d7a11fde54ba3d0d9e199c"/><file name="Directory.php" hash="346bbbf87ee7515d0b1ea6d468a23bbb"/><file name="File.php" hash="82a28fef9d3d33f3de763e2f4415ef66"/></dir><file name="Interface.php" hash="ec12cc9de36ab46a2afb96f61f3af90e"/><file name="Repository.php" hash="652c4bea315e3239fd99f22103c51140"/><dir name="System"><file name="Interface.php" hash="9011f3458a2b39fdf8867e639414a7bc"/><file name="NotOverwritable.php" hash="de0a563d5079199bf642b6811b7e5bac"/><file name="ProjectDirectory.php" hash="f5d33f4805cc35574112532f2f262579"/><file name="ProjectProfileFile.php" hash="48ff62386762440129ae4fb7337deb2f"/><file name="ProjectProvidersDirectory.php" hash="b5a9d7bba0ccd8554ca26f0149128acc"/><file name="TopLevelRestrictable.php" hash="2309be1ddaf737de9b7adafa6cb8632a"/></dir><dir name="Zf"><file name="AbstractClassFile.php" hash="22a8a9cc341edc796112df20983a43bc"/><file name="ActionMethod.php" hash="2f16d745e3a323f9ff416e2217358f54"/><file name="ApisDirectory.php" hash="0b39c81c051cc37f5492df965835eba1"/><file name="ApplicationConfigFile.php" hash="677abcc2fc67896b511af1f1181a8f81"/><file name="ApplicationDirectory.php" hash="42a08abbb3ecc267cd883a87f817981b"/><file name="BootstrapFile.php" hash="b76b4cf58705698399d06e8d4c9f6d67"/><file name="CacheDirectory.php" hash="5bb06a72dcd025a283c76c03a1ce9599"/><file name="ConfigFile.php" hash="2462d7d79f673c397d3a2f7284ccde66"/><file name="ConfigsDirectory.php" hash="b1cccd4669781cc33b9171a186236219"/><file name="ControllerFile.php" hash="090e5fe4d3b57933b9e7aed8eeef7cc5"/><file name="ControllersDirectory.php" hash="8543ca965e6d7a4cf78177ef0dcfc4eb"/><file name="DataDirectory.php" hash="5f8d27eca9e789c24dc039ea0f62748e"/><file name="DbTableDirectory.php" hash="92eda9ff83054cc8818bee744ed6e463"/><file name="DbTableFile.php" hash="b936fc7a4dd1e4726f0bb49f01ad931a"/><file name="DocsDirectory.php" hash="f58949c95502bd2ff8c31c59009c92b5"/><file name="FormFile.php" hash="b35ea0268fe07098b794eb24082ef53b"/><file name="FormsDirectory.php" hash="ffe9f7939c29068e7a1932dbc374bb7b"/><file name="HtaccessFile.php" hash="8e933afd24df22e6742aa972f8fc470d"/><file name="LayoutScriptFile.php" hash="8bd850a37a308efa3f4c83927fa5d8f5"/><file name="LayoutScriptsDirectory.php" hash="036f5cc0c38ead9183f7dd3f712848e6"/><file name="LayoutsDirectory.php" hash="c86cd320a91a46d439e4b419bd8ee428"/><file name="LibraryDirectory.php" hash="29a3c5283210c444e65284206b3da79c"/><file name="LocalesDirectory.php" hash="029c2897885aa476bd4103c48894ca87"/><file name="LogsDirectory.php" hash="3ee80aca0572bb9c5f6a44c6c021fcdc"/><file name="ModelFile.php" hash="958ed1603c25bd34ceb3f09ceeb6746f"/><file name="ModelsDirectory.php" hash="82dde848d95e686be57804162c11dc63"/><file name="ModuleDirectory.php" hash="7e219e82a6349ed878042cc17ee1faf5"/><file name="ModulesDirectory.php" hash="00182e9148959046c0a7d2d6e261e0b1"/><file name="ProjectProviderFile.php" hash="f3deaf3adf5c501237f22dc653430f91"/><file name="PublicDirectory.php" hash="e93bb7ed0ef00a864c097993ae1a2a94"/><file name="PublicImagesDirectory.php" hash="d769f00ec21961d66b41fffc8035277e"/><file name="PublicIndexFile.php" hash="4d3cf05ca9d35e24242dbf61d8189579"/><file name="PublicScriptsDirectory.php" hash="ff61ddca598a5ce42907b78140187614"/><file name="PublicStylesheetsDirectory.php" hash="8262d74f0f35523a912d95dd261fbc18"/><file name="SearchIndexesDirectory.php" hash="5ddf8701c47bcc6baf68cfdcc0ff7467"/><file name="ServicesDirectory.php" hash="825c4204f9f44f2280de370b0b156733"/><file name="SessionsDirectory.php" hash="af2fd72fa2bcf4d003c0a6368953cdb7"/><file name="TemporaryDirectory.php" hash="46790ecd95da8518c80dd8715fe7f8ad"/><file name="TestApplicationActionMethod.php" hash="4bbc3a869e69c2093bfa02068b6e057b"/><file name="TestApplicationBootstrapFile.php" hash="6f335bc4e4e047c948e77e8b0708f45e"/><file name="TestApplicationControllerDirectory.php" hash="1976699a04927fa3f5a1686934cdd08e"/><file name="TestApplicationControllerFile.php" hash="8f2956d50a3ba47f0b8c1fa96b361025"/><file name="TestApplicationDirectory.php" hash="09f0536bc206b5305862a21b65301016"/><file name="TestApplicationModuleDirectory.php" hash="da78a9b90b270578a9d36f8d62575a2f"/><file name="TestApplicationModulesDirectory.php" hash="4b54130f6c22e995308da7138d85330b"/><file name="TestLibraryBootstrapFile.php" hash="d78b732c8602c082ad1688c9bc6bf68d"/><file name="TestLibraryDirectory.php" hash="3626bc62a7c1c330369eb0001c4a9b16"/><file name="TestLibraryFile.php" hash="b45dc141518eab43f5c89e64b29aebfb"/><file name="TestLibraryNamespaceDirectory.php" hash="2e70388b581499815e6e2ba2c1cc0c81"/><file name="TestPHPUnitBootstrapFile.php" hash="40d55d88d6c84cd153adb2539ee323a9"/><file name="TestPHPUnitConfigFile.php" hash="1f136f46d817445285994244274f9276"/><file name="TestsDirectory.php" hash="0dec72680dea22074c8d370953effac0"/><file name="UploadsDirectory.php" hash="5d72a25ffd1ee7899fa182ddd7c9e028"/><file name="ViewControllerScriptsDirectory.php" hash="0ce107dd0b77183717845592b5be2550"/><file name="ViewFiltersDirectory.php" hash="59d3134c2b27c136adaa07177a72b28c"/><file name="ViewHelpersDirectory.php" hash="305d6bcc8066a02a658d82a69b73828f"/><file name="ViewScriptFile.php" hash="95b593cd475edcfd2a6ecea8f2668ffe"/><file name="ViewScriptsDirectory.php" hash="9aeac85b2f35bd6a666a4da29b465d45"/><file name="ViewsDirectory.php" hash="f36732d4b125b54a661356327d6850cf"/><file name="ZfStandardLibraryDirectory.php" hash="eea898b019c52dafd72f7de1aaa92d50"/></dir></dir><file name="Exception.php" hash="125c1606112c9ce2cfc8b697fb989d5f"/><dir name="Profile"><file name="Exception.php" hash="907a68043581559d3bf42ccc2c4b1322"/><dir name="FileParser"><file name="Interface.php" hash="325d41a29468a70dfe7476e1fcc8d20f"/><file name="Xml.php" hash="59f053468c48c4d9b881bc1b859ec28c"/></dir><dir name="Iterator"><file name="ContextFilter.php" hash="ff51879dcc3452e49ad8bf2d9e2c4910"/><file name="EnabledResourceFilter.php" hash="8d0d4add1f853aa9cfd89aaf138e2de3"/></dir><dir name="Resource"><file name="Container.php" hash="ab368c4da0867a25770b6f7970a782f4"/><file name="SearchConstraints.php" hash="9e4a7578e2879e6c9da8cfeb1fbfa9ba"/></dir><file name="Resource.php" hash="2a5467d1f6ff134cd8e35a2cb92eaedc"/></dir><file name="Profile.php" hash="db1e9708dc20fe27c3b39b9e6f57f1f5"/><dir name="Provider"><file name="Abstract.php" hash="8c55b9fe14b8d37beac8a5d1356c2cdd"/><file name="Action.php" hash="72581e6e7e4acd0a19f8ba9bbc0e73aa"/><file name="Application.php" hash="64fa6f041e1f5727a88bb9cbc7636f22"/><file name="Controller.php" hash="677b3b817a7fdb644cd150be124e9a96"/><file name="DbAdapter.php" hash="b831929398b67e053a395a548227695f"/><file name="DbTable.php" hash="6d922b240f64a010df894b03a44e0132"/><file name="Exception.php" hash="00d67294ec03f48a1e43fede57faee26"/><file name="Form.php" hash="95362baaf1eb17e9698573f6d7fbcb53"/><file name="Layout.php" hash="40528bb34ab9942db935b59b831ab909"/><file name="Manifest.php" hash="9d3a781e8c917a5cdb9e7dd10641cd35"/><file name="Model.php" hash="f561e3f60741f857d2a0a8d8d8509823"/><file name="Module.php" hash="f3cb636991bdb7fa9d69285ff5370a75"/><file name="Profile.php" hash="2bf881a5c9cf4e1032cb8de9d9297b16"/><file name="Project.php" hash="a7b3b98eeb5b8a38d7b003adde3a3c16"/><file name="ProjectProvider.php" hash="63455c931c8fa909d4a413ae91c99cdd"/><file name="Test.php" hash="ef752345daf66c4d3bfcdf94feea8602"/><file name="View.php" hash="1a8b7de4308dea33a847f1c590238d80"/></dir></dir></dir><dir name="Translate"><dir name="Adapter"><file name="Array.php" hash="539a98b29aa0bbcec264db5e29d810ff"/><file name="Csv.php" hash="698388dd2ac2843c3664586596e248f0"/><file name="Gettext.php" hash="321e228017b8049e94ea89f4e41f35b7"/><file name="Ini.php" hash="c03616b55e55e0c62363c4ee5e6b106f"/><file name="Qt.php" hash="19fd28ff1f5135d08c73c5faca961f96"/><file name="Tbx.php" hash="688c8d48dd29565f46d6f49d160e2f4a"/><file name="Tmx.php" hash="829f33d7444e30e4dc5053890fa22ccf"/><file name="Xliff.php" hash="0af804c51c85eea4b76941587aa673cb"/><file name="XmlTm.php" hash="39a37d7374fe3f0e3bf63a1e1f9ccb44"/></dir><file name="Adapter.php" hash="61940eb09da1bed1e6b8984370ad4088"/><file name="Exception.php" hash="469fbd261b8e8e1b91a8221fad6a79cb"/><file name="Plural.php" hash="4afe3e908bd63c3320fc7c899cd7b139"/></dir><file name="Translate.php" hash="0a7fda94b43cc10499fae10d9ec5d2e2"/><dir name="Uri"><file name="Exception.php" hash="0d12fb53167123e15aacbdddd8b11797"/><file name="Http.php" hash="55fae6ba863159381838ccc7bf8c651a"/></dir><file name="Uri.php" hash="f20bdab5c9c0694f64dd5b69f090e083"/><dir name="Validate"><file name="Abstract.php" hash="3382bfb0c407a0d3b490685a4f85678e"/><file name="Alnum.php" hash="2fe48d28207f9917e69f5edf99a392e1"/><file name="Alpha.php" hash="abeae56166032b791ae499883857d17d"/><dir name="Barcode"><file name="AdapterAbstract.php" hash="7bf5990b4b1dc34fe1fd7bcddd8f0348"/><file name="AdapterInterface.php" hash="c1b8934e5706e958f6e889e7c04a6931"/><file name="Code25.php" hash="f707195d53cd032ba5a9fbde32e75176"/><file name="Code25interleaved.php" hash="0c2ca046d04c43c4204e6cbb9d6dff7b"/><file name="Code39.php" hash="adff9a47dbf44dca5784dc8cdcc3ddc7"/><file name="Code39ext.php" hash="2e69f0103fbda86142024fc7466958be"/><file name="Code93.php" hash="2377845f1bee4dab114519c8f5dd4c5f"/><file name="Code93ext.php" hash="795aad78199cbc0668c70e12defcf9ec"/><file name="Ean12.php" hash="233d2f57fb2b36f1f2c7b3a36b0ead3b"/><file name="Ean13.php" hash="349560c5d4af7178e257a38c3a24735e"/><file name="Ean14.php" hash="30ab956febdabc3c13a7812f6e703bd1"/><file name="Ean18.php" hash="899007801fc5a8f97b577d711e2d692e"/><file name="Ean2.php" hash="0d73987f006070e0d15a573277a812e0"/><file name="Ean5.php" hash="806813312608a4ade42bbfab5d233711"/><file name="Ean8.php" hash="d0f3b4b0305e5dd0a7ba077fbb4978cd"/><file name="Gtin12.php" hash="da6df50e6751f4872604687602cc9695"/><file name="Gtin13.php" hash="dbd9c8a33ed3669917d10dee00a44a13"/><file name="Gtin14.php" hash="ae9c9fccedb5e71c87950c17bc5a3411"/><file name="Identcode.php" hash="9fed06deab51a31d97a66801fc68921e"/><file name="Intelligentmail.php" hash="9f4a16c7b78b3b1e5d9429569ea2aa11"/><file name="Issn.php" hash="e8de22a236a14b191225614ca730d343"/><file name="Itf14.php" hash="958a09981361b0cc8c83c0ae98831008"/><file name="Leitcode.php" hash="581e77d7ff774564ac3961077e40b27f"/><file name="Planet.php" hash="cda7f2f6910606728d4f6b375b17bbff"/><file name="Postnet.php" hash="9182081361daecfe6f0371fc4cabcd9e"/><file name="Royalmail.php" hash="e5bfd9d4ffd4935ca4b988f651270e4d"/><file name="Sscc.php" hash="eabc46811aff1a4a7f4468bd73a3f1e8"/><file name="Upca.php" hash="bb4f503adce344b6d3eb584843d7378a"/><file name="Upce.php" hash="368d3a61898baad1f968d2292a2692af"/></dir><file name="Barcode.php" hash="b3531dde74c28ed55c868d75615a9d3b"/><file name="Between.php" hash="5ccda5b2ac3d35bcc7faa8d8800108df"/><file name="Callback.php" hash="4e6874a0cb4bba53ef8edb9cde9eed18"/><file name="Ccnum.php" hash="1871fdfe01ac8f50e1b76f103297d7fb"/><file name="CreditCard.php" hash="2b68a89fbd9747e2a7308bc08aab9a12"/><file name="Date.php" hash="ac196efe9a75f1f5052881f0ad0fb7fc"/><dir name="Db"><file name="Abstract.php" hash="f32f786acb59d6936c87698c0ac868ad"/><file name="NoRecordExists.php" hash="de3eab3a488154fd14c3aeaad18c58b7"/><file name="RecordExists.php" hash="6203f6b21b338f28420fffd67f007dcf"/></dir><file name="Digits.php" hash="6536e4f93eea9d40663dc5b8308455c3"/><file name="EmailAddress.php" hash="f2fb48bbe83e3fb4288ee0f4825f485b"/><file name="Exception.php" hash="f05330fae73fa8a6fa5eb13b239492ae"/><dir name="File"><file name="Count.php" hash="fd4240625ed05056050c46051750d42a"/><file name="Crc32.php" hash="37be3ed367b5b7d13170fdc56c083488"/><file name="ExcludeExtension.php" hash="cffccfd1fcdae2be7676722ba8af7d9e"/><file name="ExcludeMimeType.php" hash="071a625f92fac84b76467a0eba3c467f"/><file name="Exists.php" hash="f5ab404939714ebf24c992bb3e4db124"/><file name="Extension.php" hash="21bf334b8b2ee214e82709c7bc1bf489"/><file name="FilesSize.php" hash="ab8dd66b1a133b1851d51927eabea61e"/><file name="Hash.php" hash="fd3f0e2888d1266d78da22e7d6647690"/><file name="ImageSize.php" hash="d277f5533a2aa61b2d5132babaf63c43"/><file name="IsCompressed.php" hash="1a0257de13523c8227a809b5673eb217"/><file name="IsImage.php" hash="7cd64b53b6e4a635e71b69e8ed5af7c4"/><file name="Md5.php" hash="4af983e349f6c2bc3a3fb6bc05d51e32"/><file name="MimeType.php" hash="c996e072363c49d15feba2a7ed35684c"/><file name="NotExists.php" hash="66d36bf5981467b276a1d97ae22ba5a9"/><file name="Sha1.php" hash="bf177eb68980e20cdf4a0db90bc32a08"/><file name="Size.php" hash="e6fe4f698bbe20ca0ccabe817462e0e7"/><file name="Upload.php" hash="a4099691c48b3427cdb144e3333b9145"/><file name="WordCount.php" hash="a2c3afef06b310c0b6a61867dfe25ab2"/></dir><file name="Float.php" hash="7d81882373a3c805ea6d890fd23d534d"/><file name="GreaterThan.php" hash="c8abc03e583058774db68388b71654ae"/><file name="Hex.php" hash="b491553d31f5894f2bd1303d685223f5"/><dir name="Hostname"><file name="Biz.php" hash="7696fce32b01be696c7a3f168ebd56de"/><file name="Cn.php" hash="fb00d241ff6f27a84d1c63758be2a14a"/><file name="Com.php" hash="5deccb0b547e92073687530b13870ce2"/><file name="Jp.php" hash="d22c9a1a27cfc135357a79c4608cbbd6"/></dir><file name="Hostname.php" hash="084ca6f450f36d3c76248663351f27dd"/><file name="Iban.php" hash="93312cb157edcb0735182b06a20d22dd"/><file name="Identical.php" hash="35b72f8c75851bb0dddfe4ac2126cef0"/><file name="InArray.php" hash="c75ec63d4745f66be627d1973bd76396"/><file name="Int.php" hash="222edd304fa91776951350e2659597fb"/><file name="Interface.php" hash="dbdfc01be0180334732bf0331fb19468"/><file name="Ip.php" hash="7abc354eed666e6b93c14c9187d2d0a3"/><file name="Isbn.php" hash="aedbe250623c9a9ef228d1863104b839"/><dir name="Ldap"><file name="Dn.php" hash="2716b9bc0c82519ab2fdbb52a0094eaf"/></dir><file name="LessThan.php" hash="e9fd4f35f101acb8fa94df0812ece205"/><file name="NotEmpty.php" hash="84a8e76bc9fd6fce9ce3d93f9e37b36f"/><file name="PostCode.php" hash="4513fb89c9215f1c987354ea552c0925"/><file name="Regex.php" hash="cd9c961f1bc2241a1beb61b8adc6325c"/><dir name="Sitemap"><file name="Changefreq.php" hash="02c174efb2eb92c1f99083d8d8a8201b"/><file name="Lastmod.php" hash="ecb2907a0827ca4f9a902b1842104f0c"/><file name="Loc.php" hash="43a32b211470fd207e614e122b373d5f"/><file name="Priority.php" hash="c4062b2af691dd790e88a80aa5f5400b"/></dir><file name="StringLength.php" hash="b57a08cb0418165feed0c8f3069830dc"/></dir><file name="Validate.php" hash="fdb819323b45ba50c37cefe43410afd6"/><file name="Version.php" hash="4050aa162960c6f935a49ffe910f81bd"/><dir name="View"><file name="Abstract.php" hash="1319cd055a57d8627ff0ed820f17daa9"/><file name="Exception.php" hash="7a4c976601978de749639c8b0914a03f"/><dir name="Helper"><file name="Abstract.php" hash="e1018e0e93049ac253c920888dc1133e"/><file name="Action.php" hash="786799b58e0fc8729abfde4de463e4df"/><file name="BaseUrl.php" hash="183857156a40c84f03eaea0ff24606bf"/><file name="Currency.php" hash="2ffa077bbe17cbda6974509421cd0582"/><file name="Cycle.php" hash="33bb85798e40541bc8e75cde27cf3499"/><file name="DeclareVars.php" hash="3cbcbf5083117f5f1dad9bac8df3b474"/><file name="Doctype.php" hash="b7e492a249f52859e00c287a8973edb9"/><file name="Fieldset.php" hash="4874b3f6f0658d8f9eae3bf750bf9793"/><file name="Form.php" hash="17d5d7e238c33e8e8cb0efbe043c01e0"/><file name="FormButton.php" hash="c62cf4a51db83501c7c7f1e2fad7cabe"/><file name="FormCheckbox.php" hash="3fefb8a82a8183e4cda683231bad496a"/><file name="FormElement.php" hash="9dc8f7fdd07eb031bc7cee049faa49e2"/><file name="FormErrors.php" hash="eb7e95a90d8a438d4b1043fd32a5f3ab"/><file name="FormFile.php" hash="cf7ec88f4ffd6c732a7df42737069d07"/><file name="FormHidden.php" hash="396bbe9d13da93ee84befb08a5c86f55"/><file name="FormImage.php" hash="3c9adc229035b5972678f634f690cd75"/><file name="FormLabel.php" hash="af00a20fba6e72eb035a605e72a814a7"/><file name="FormMultiCheckbox.php" hash="4033cf623ff32c24f0eaac26e96272d9"/><file name="FormNote.php" hash="94c3fe7ae9857d5d1c0f7e67bd817ee2"/><file name="FormPassword.php" hash="e743953bac753960ee4918c34372ede6"/><file name="FormRadio.php" hash="7df9c01b4e3bac15aca3394bd6bb20ae"/><file name="FormReset.php" hash="7463249d29ef3c895e6d73548c0d2250"/><file name="FormSelect.php" hash="b9076b91b3dd8880a74b9a1ff0f6fb2e"/><file name="FormSubmit.php" hash="abb3c753621b09e8251e88dd7d9cfb1b"/><file name="FormText.php" hash="c059e5863263faaa09d4e7fe99ef4fa1"/><file name="FormTextarea.php" hash="b5a12bd7577c3794b4f7536e1721254c"/><file name="Gravatar.php" hash="8b4c4ce3552c48ec148b81ebb4f843d7"/><file name="HeadLink.php" hash="c25bb4abcf60925394a915df38b006a5"/><file name="HeadMeta.php" hash="42d8fed1309297d58411bb7d487ebe28"/><file name="HeadScript.php" hash="c835c0d98daf0f2b89f2f486d22587a5"/><file name="HeadStyle.php" hash="2770400f4d12c2bf7b27c053aa1a6453"/><file name="HeadTitle.php" hash="329e23739809b5a55dc8d28c447dc91c"/><file name="HtmlElement.php" hash="e5e6b362d6001c20bbb805e31beb36e1"/><file name="HtmlFlash.php" hash="dff36a0bf66c600be3004bdd34cc8b08"/><file name="HtmlList.php" hash="f21ac692428d4c457dc2f3d2db5e7304"/><file name="HtmlObject.php" hash="dda5c4a84c32c4cdd73112a33c322c87"/><file name="HtmlPage.php" hash="d49d3e056e0aab1a8179bd2b3f1917e2"/><file name="HtmlQuicktime.php" hash="4455adb547e6d3a1d3fb52d6746df770"/><file name="InlineScript.php" hash="aabae2682812b3ee88a5bfafaa3d00dd"/><file name="Interface.php" hash="52fa974c83ce1fff7c9d56a994b1fbbc"/><file name="Json.php" hash="78621362d2c630ad5b8b7f7ef2cf2124"/><file name="Layout.php" hash="9e98d798baba317de41bc0cdf75cdf60"/><dir name="Navigation"><file name="Breadcrumbs.php" hash="6482ca2aa2565f318b49ce0458072ae4"/><file name="Helper.php" hash="673a27dfb10aa4442dfa2951e0ef0c4a"/><file name="HelperAbstract.php" hash="6bae63e5c54e21b87ebaf8d2622ac1b9"/><file name="Links.php" hash="b2b7b2403670be61982c1a73851ed2eb"/><file name="Menu.php" hash="8f5c5c42c0b10ac7a68c69b4503ecaa2"/><file name="Sitemap.php" hash="960d3bd171fbe2ca66ba073afd33140a"/></dir><file name="Navigation.php" hash="98f3a4adbd4c69df20c127f90e09156c"/><file name="PaginationControl.php" hash="b18eee7e9c52256b27384a982a75f0eb"/><dir name="Partial"><file name="Exception.php" hash="047c658de482d2ae0eb5d21ac0cd0a55"/></dir><file name="Partial.php" hash="abe72103b776eeee4a96ccbca003cabe"/><file name="PartialLoop.php" hash="637e144d4c2d369a35848d681b4b6464"/><dir name="Placeholder"><dir name="Container"><file name="Abstract.php" hash="8d885989d99888fc2798a85f07c9f17a"/><file name="Exception.php" hash="326371b5ef3489904fee8e387e7feb46"/><file name="Standalone.php" hash="637e4d2b742d9902ae6de414c0475237"/></dir><file name="Container.php" hash="16d8237399260e817a542e68a4828d4c"/><dir name="Registry"><file name="Exception.php" hash="b9a3969a1431cf44f4cd03764dd92e32"/></dir><file name="Registry.php" hash="ee6d81b2c630c83baac77a0d619ba7d1"/></dir><file name="Placeholder.php" hash="2fced270eb2e3474b4bd538cd73f517a"/><file name="RenderToPlaceholder.php" hash="5ad5803d78bad07455af8f5d3c876977"/><file name="ServerUrl.php" hash="c6a222f4e795320f6f07c6bb8f80d7f3"/><file name="Translate.php" hash="d341ce0f8809b691728672fe506736e6"/><file name="Url.php" hash="71f6c3948d28f8190bfc27b3586d3f93"/><file name="UserAgent.php" hash="dbee4e1b78fad667479a85e8e2d0cbd1"/></dir><file name="Interface.php" hash="eec709b1a8ebb0256a9f752db1a8ad75"/><file name="Stream.php" hash="6f4c3f620f6e2d2f92cd371db18d3a90"/></dir><file name="View.php" hash="604cd51ea9ba98756064b418d6785a5d"/><dir name="Wildfire"><dir name="Channel"><file name="HttpHeaders.php" hash="62dffc43581615ca6cb052efcb2a43f9"/><file name="Interface.php" hash="0bed6c7ae3ee56a17f5c5187eef3ce10"/></dir><file name="Exception.php" hash="a225536440492a4ef3d37702aea1cb40"/><dir name="Plugin"><dir name="FirePhp"><file name="Message.php" hash="f481d929bbb00bf2bac8dfb008ae37d8"/><file name="TableMessage.php" hash="074faf9136be2ea86add5cdf2b459dd8"/></dir><file name="FirePhp.php" hash="e23b81012ace71de3018a37deb708885"/><file name="Interface.php" hash="c3cb69d35db9a385f7caa140b9634dab"/></dir><dir name="Protocol"><file name="JsonStream.php" hash="38a7d96f9d4ec70f68492f1bcf4022f2"/></dir></dir><dir name="Xml"><file name="Exception.php" hash="2dfb5785f12ed3858b16ab075570d577"/><file name="Security.php" hash="b7b7a240b24574b06f73a59dd8a4e6f0"/></dir><dir name="XmlRpc"><dir name="Client"><file name="Exception.php" hash="8e96419287c2faeeb4412ed9e832d975"/><file name="FaultException.php" hash="28c34f9ec27f280c44d215ee38bd41c3"/><file name="HttpException.php" hash="8c2eac4d043926123b3691562ad47310"/><file name="IntrospectException.php" hash="39d33b723e4fb1d5ce2af5cfd1f41589"/><file name="ServerIntrospection.php" hash="e52c06c394a8c8ac91b5313e5c575024"/><file name="ServerProxy.php" hash="43f25d1783bc1f11462d21ab5a134976"/></dir><file name="Client.php" hash="ea8c5a084405ca13e4f43340e37fe866"/><file name="Exception.php" hash="a04feed37237658eb7c174518a4d9383"/><file name="Fault.php" hash="18685e9a87f2f7750fa968d86ab89625"/><dir name="Generator"><file name="DomDocument.php" hash="5fc0be6304c7a00e58ac39f033d0dd22"/><file name="GeneratorAbstract.php" hash="493eda4b0b32cb59a133c06d63fbef90"/><file name="XmlWriter.php" hash="45013d6c2e24f7ee77439df64a958172"/></dir><dir name="Request"><file name="Http.php" hash="70fcc3ae21a466a9295f42ebae0c2a93"/><file name="Stdin.php" hash="23583af65a719e197a70fcd4c5500ac0"/></dir><file name="Request.php" hash="6945ae9bdf8d76308651611848870e09"/><dir name="Response"><file name="Http.php" hash="50e6859ca7391fd453d7137697f57dc5"/></dir><file name="Response.php" hash="cc7fe267b740ab5c556b7b2d19b6d600"/><dir name="Server"><file name="Cache.php" hash="1cd78db98fe5499e4a64379e97689f77"/><file name="Exception.php" hash="6294a6b1a7d4da4b7a15e7ee489eb119"/><file name="Fault.php" hash="69b89d7568a910f82109b6f3cb0410de"/><file name="System.php" hash="d7b0d17c91367f44eb993da66672dbac"/></dir><file name="Server.php" hash="1087be94c4995db9c38a5335323e922e"/><dir name="Value"><file name="Array.php" hash="b7011fc480c395bfcbc67d68ead94cd7"/><file name="Base64.php" hash="91ea9215e1d57716c0cd79bb1906134e"/><file name="BigInteger.php" hash="10222f3f5cd5eeaaa9813d8ed9f2494c"/><file name="Boolean.php" hash="770874cea876566818fb9135f31e69c5"/><file name="Collection.php" hash="0708fe32732db76ebe9d7e89396b89e0"/><file name="DateTime.php" hash="1a9f56c65375240ee0385ed912731b84"/><file name="Double.php" hash="ee71a5a9eeb026f1eb75387b8158706e"/><file name="Exception.php" hash="b7adf50526128e43c344331e7250b935"/><file name="Integer.php" hash="66c8d75e059a4cf328ff108d15db5c5e"/><file name="Nil.php" hash="ad51cdbcfb5eff5e06d7fc2c6d4661e9"/><file name="Scalar.php" hash="e61890f60aff885a3bed37b093f36e6d"/><file name="String.php" hash="a9d992c1910d76c4ed5330e704a1d438"/><file name="Struct.php" hash="028b64a94eeca406537505ecd52788d1"/></dir><file name="Value.php" hash="7d09b0ce98deeb7a07c01ad1bc94aa0f"/></dir><file name="replace_recursive.php" hash="e886103ea1f75208cc11780718aa3094"/></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Lib_ZF_Locale</name><channel>community</channel><min>1.12.10.15</min><max>1.12.10.15</max></package></required></dependencies>
-</package>
diff --git a/var/package/Lib_ZF-1.12.10.16.xml b/var/package/Lib_ZF-1.12.10.16.xml
new file mode 100644
index 0000000..2f30980
--- /dev/null
+++ b/var/package/Lib_ZF-1.12.10.16.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_ZF</name>
+    <version>1.12.10.16</version>
+    <stability>stable</stability>
+    <license uri="http://framework.zend.com/license/new-bsd">New BSD</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Zend Framework</summary>
+    <description>Zend Framework</description>
+    <notes>1.12.10.16</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:01</time>
+    <contents><target name="magelib"><dir name="Zend"><dir name="Acl"><dir name="Assert"><file name="Interface.php" hash="753f4c058211502ad047851c4550a121"/></dir><file name="Exception.php" hash="833945ed22a5631224398ec5d1a51736"/><dir name="Resource"><file name="Interface.php" hash="ec27f75c67a2ddb21ede3e8f5cf2188c"/></dir><file name="Resource.php" hash="1eac5e2cda19d6f595ce678ee9b27065"/><dir name="Role"><file name="Interface.php" hash="e61127c46f87a10799582eb5d58673ca"/><dir name="Registry"><file name="Exception.php" hash="1ab8aea40c56fb9754ea4d76cf022893"/></dir><file name="Registry.php" hash="b13b4d4f96691f26328aba33d2a725f6"/></dir><file name="Role.php" hash="4ffca60ba53123c02874b9f412a1d5a0"/></dir><file name="Acl.php" hash="9362ea321157987e2d667ce6ba6640c4"/><dir name="Amf"><dir name="Adobe"><file name="Auth.php" hash="5f1b8fa4bc0646bfc7e1a0248af99e4d"/><file name="DbInspector.php" hash="c945730a861cc8dfb79affc681d935cd"/><file name="Introspector.php" hash="1faa52d4a734963e2114f0244b4eb0fc"/></dir><dir name="Auth"><file name="Abstract.php" hash="eb1eebcde25e987e8cfd64b097a64438"/></dir><file name="Constants.php" hash="27f591080a8aa87a7603079496b03f31"/><file name="Exception.php" hash="c37e40e651b342f39763d2651a86e907"/><dir name="Parse"><dir name="Amf0"><file name="Deserializer.php" hash="91d9e217cf20c9012993d945e3f7e744"/><file name="Serializer.php" hash="fc6f4e7a3adcee15df87e6f5e918891d"/></dir><dir name="Amf3"><file name="Deserializer.php" hash="63f1c82ab2bf8029208347a5d6188cf9"/><file name="Serializer.php" hash="94893d06b63c1c7b89958790051a96b8"/></dir><file name="Deserializer.php" hash="6bf0ed466d51a8ed7d47842ae56b0c2e"/><file name="InputStream.php" hash="8825ad088d82c7b0e1eec7f1fc2a977f"/><file name="OutputStream.php" hash="f6954a735a7abc530b3d08c3a66a1610"/><dir name="Resource"><file name="MysqlResult.php" hash="f93006c3cf636f4426559266c7254301"/><file name="MysqliResult.php" hash="3ff39905a315dc50438612cdfd044003"/><file name="Stream.php" hash="9fac77c33d3b8a5932618b7140eb480e"/></dir><file name="Serializer.php" hash="89f6dade3493238bcebd57f7aec7c441"/><file name="TypeLoader.php" hash="2eb3de6c0c76a88c84e52d053db1b3c3"/></dir><dir name="Request"><file name="Http.php" hash="3ceb2e9419c58b42b8a91dfa518bdbe6"/></dir><file name="Request.php" hash="210fafeb570fabde64f45367aa2b818f"/><dir name="Response"><file name="Http.php" hash="9165da2b40ea937760d21e82d14fccfd"/></dir><file name="Response.php" hash="df120c6bdcd3624007e264387c3ea49d"/><dir name="Server"><file name="Exception.php" hash="b49d17bc0487b1f94e263edc3cd63b80"/></dir><file name="Server.php" hash="a382bc11323a9e000c8b903609842a60"/><dir name="Util"><file name="BinaryStream.php" hash="2be5bd9b9c7daf56a578bb98c79c4393"/></dir><dir name="Value"><file name="ByteArray.php" hash="3501ce99e15b597c7159a47a166585b3"/><file name="MessageBody.php" hash="8b61f8ee1c39105e5c19ee0c3df1eedf"/><file name="MessageHeader.php" hash="3719e3197128d0db242a664278740de3"/><dir name="Messaging"><file name="AbstractMessage.php" hash="3091614466f82c843414c7f780e2713f"/><file name="AcknowledgeMessage.php" hash="0102f33c15054d697d29ab872d587e75"/><file name="ArrayCollection.php" hash="5070cc263f4b56b4aa6a62110c563ae7"/><file name="AsyncMessage.php" hash="ad0d187dc1179ce2cad255fe5fbd00a6"/><file name="CommandMessage.php" hash="46b117af57383509740a975f1d35a801"/><file name="ErrorMessage.php" hash="cd980b1cc29739aa685d714e3645f5bd"/><file name="RemotingMessage.php" hash="acaa5c29b712d4d24168bb384d512bd8"/></dir><file name="TraitsInfo.php" hash="91da9ed050e8e44979a229eadf433bf4"/></dir></dir><dir name="Application"><dir name="Bootstrap"><file name="Bootstrap.php" hash="a54f574a13568e3b0d79f9792b58a77b"/><file name="BootstrapAbstract.php" hash="85403088f5775085724427f2db4e3f41"/><file name="Bootstrapper.php" hash="f6ffc93f65f911d74273c97480019ebc"/><file name="Exception.php" hash="592efcd13a2430fb8a8051c77af2bdbf"/><file name="ResourceBootstrapper.php" hash="b5697b89f0bee36d64f1323ae0e6fad7"/></dir><file name="Exception.php" hash="33b45075f371aa758ab73043d9bb345b"/><dir name="Module"><file name="Autoloader.php" hash="561bbbddfd1d5d66e9950b1c5435e822"/><file name="Bootstrap.php" hash="a982af99ca3f8583e7e06754c932bee6"/></dir><dir name="Resource"><file name="Cachemanager.php" hash="aed3b8889084e6b3b46b9e1ad2482309"/><file name="Db.php" hash="a5bc7745dd9416c3cee07ca45701672d"/><file name="Dojo.php" hash="ed17a22f02f2b4b52219cb1a8f5f283f"/><file name="Exception.php" hash="e7cc6162f923bea3163ab3c72a9144c2"/><file name="Frontcontroller.php" hash="4096de73ec4a62565475ade369fa2f10"/><file name="Layout.php" hash="cc29553ce7af25e5497433b38cb33d96"/><file name="Locale.php" hash="d9ddba5ce3e52cf74e06bcaa28e9f701"/><file name="Log.php" hash="6425ed565c8ffa8d6a2061b4bed90c77"/><file name="Mail.php" hash="43d891a5921b267f2298392f5de16f2e"/><file name="Modules.php" hash="de2fead30f02effe859de66503972e1a"/><file name="Multidb.php" hash="f958bb43354951af50a592a27c1de9c0"/><file name="Navigation.php" hash="fa7ac38efd17722bb2fd0181131af18d"/><file name="Resource.php" hash="fea870fdc0a7fe568ff6f7d1d10ab523"/><file name="ResourceAbstract.php" hash="5808f3f8a2c6a349aa21e4de678fef40"/><file name="Router.php" hash="54f15d496ef84d800897d8571523e5b5"/><file name="Session.php" hash="714544fe025fa8e5db47686b58fd410b"/><file name="Translate.php" hash="9b75da2a9e3f571a90f30f14bbe72582"/><file name="Useragent.php" hash="17a0a2deba744c0fd4091fb48958b782"/><file name="View.php" hash="18803d667bd908ccfc04edc3e39d209b"/></dir></dir><file name="Application.php" hash="a0c9ea8a48289b2bd9bafd2dfe76765c"/><dir name="Auth"><dir name="Adapter"><file name="DbTable.php" hash="c8b79405b8855b67ffd8d6f82e6a4045"/><file name="Digest.php" hash="bbc1edafb9a244774ca986a2790e5661"/><file name="Exception.php" hash="194d445ab6929d8c5a6faefe604c64a0"/><dir name="Http"><dir name="Resolver"><file name="Exception.php" hash="cf95d8463e66b8dcc7eb679aaa0127cb"/><file name="File.php" hash="56c75079c07a8f3081841dff74f4f8b5"/><file name="Interface.php" hash="136ff303d6f17f676641db12415a679e"/></dir></dir><file name="Http.php" hash="0cfb159e07de35d89ab6754c9e409b1e"/><file name="Interface.php" hash="9baba8292deab88415d58155627009ea"/><file name="Ldap.php" hash="5bec476c61237745110b07a6981f0ba7"/><file name="OpenId.php" hash="9b87324993b0882e8add83140b24799b"/></dir><file name="Exception.php" hash="0cbee6397372cb825d4d2330f1e01cbf"/><file name="Result.php" hash="011bad9ebfb3e12cde52dc199c1b9b0c"/><dir name="Storage"><file name="Exception.php" hash="7c0657994ccacd29c396728dd3e40ead"/><file name="Interface.php" hash="336438156ed6a7db4183fbb365ec24e0"/><file name="NonPersistent.php" hash="88366aa8fd16a4c565e7a6cf467c9d45"/><file name="Session.php" hash="128255a8d51a1d9fa137e137f17b773f"/></dir></dir><file name="Auth.php" hash="6ec79877089d5629bf32dc9cfca8a5ed"/><dir name="Barcode"><file name="Exception.php" hash="5cf74c43e0bb3bda36dab4cdcf435a7c"/><dir name="Object"><file name="Code128.php" hash="989d2bf6723d392c704a9d793a0870c6"/><file name="Code25.php" hash="945a62bd63cefd4bc548aca2175a798e"/><file name="Code25interleaved.php" hash="163795899dd207d6777ed489b3652783"/><file name="Code39.php" hash="6a9d919307643317d2670d0b5a0cfc75"/><file name="Ean13.php" hash="d073b0b3b0d548aa553128e61a8f739e"/><file name="Ean2.php" hash="244bfc6ef32a4d56629c045c929138f1"/><file name="Ean5.php" hash="198f60f22d8bb1d165bff02c5820a20b"/><file name="Ean8.php" hash="8cea912422779ab67e11d8a169063216"/><file name="Error.php" hash="20edaea0778ac6253009722af4bc1ba8"/><file name="Exception.php" hash="4222bc4babead0b78ff6cd53aa72e359"/><file name="Identcode.php" hash="8a1ac5c7c3b04d3e62aa8265c4e1c2f7"/><file name="Itf14.php" hash="9384e00165c9961a203d1f135a3eaa5d"/><file name="Leitcode.php" hash="3c805e7d37dfb51e8de1f35d16ed5da5"/><file name="ObjectAbstract.php" hash="017bd4e5560bfddab60971b889d9f0a0"/><file name="Planet.php" hash="e1c10362fbc9baa5aabede9041060d79"/><file name="Postnet.php" hash="5f6845e59e609f8991fa580bbdc5eefc"/><file name="Royalmail.php" hash="8cc2c93b813ed89f4b0f6cd60df29f77"/><file name="Upca.php" hash="1485da9e266c49e993a00f9d287b4019"/><file name="Upce.php" hash="7cbde278294ce55ff3cb0857f5c014c5"/></dir><dir name="Renderer"><file name="Exception.php" hash="8579d580dcc35ccd16c82590ff39c1b9"/><file name="Image.php" hash="dba737459af451c5c51bad867b77a0a6"/><file name="Pdf.php" hash="1e2d590fe769d9ebf74d901a34635aa7"/><file name="RendererAbstract.php" hash="359cbfacb66cc0fb5ae362845b3fbf58"/><file name="Svg.php" hash="93544d770411772a4dc2c995cced685e"/></dir></dir><file name="Barcode.php" hash="0586994cdf9871ebabd7aa8079566258"/><dir name="Cache"><dir name="Backend"><file name="Apc.php" hash="0770aacd96ff057d06978bcc7a22035e"/><file name="BlackHole.php" hash="f51e1f122876be7d7ba667e39c540901"/><file name="ExtendedInterface.php" hash="fb6c1f28d7049d8ebb5b367586a386b4"/><file name="File.php" hash="292986e780e4b420968b5dfa15267a01"/><file name="Interface.php" hash="9e9a235e4aa33de40ff9fbc97efa468d"/><file name="Libmemcached.php" hash="2f9d3d284be576c031ff2195afaabc20"/><file name="Memcached.php" hash="cbee447e2af7453a2a37ddee2206f971"/><file name="Sqlite.php" hash="8c2ffff28dbe7e5c27a2bfb6fa1a4759"/><file name="Static.php" hash="8b4e8ac2f3e416316d447266e1a6f8dd"/><file name="Test.php" hash="6bcaf9deb1e13215d9fada844fa0bb25"/><file name="TwoLevels.php" hash="1d48225fde0e61fc38401841b28740da"/><file name="WinCache.php" hash="57da7293a57294e3cc2878d872230aea"/><file name="Xcache.php" hash="364f350bb7e58a221a9dda26dfd940d3"/><file name="ZendPlatform.php" hash="dd2264172835c8ac2b1cd0eba670d1ee"/><dir name="ZendServer"><file name="Disk.php" hash="092b29cf8ea2e0391e156ca38a9c8dbd"/><file name="ShMem.php" hash="94d219bd689df1b0ce1f5fe48c0fda7e"/></dir><file name="ZendServer.php" hash="6397a63f6ceba054b9c4c774451109a6"/></dir><file name="Backend.php" hash="046904b4b5c7661bbdcb6c3ec7969af3"/><file name="Core.php" hash="26e9ed27936fe7c894f36a1241b6aa35"/><file name="Exception.php" hash="64896658ade26dbd6b15851aee788379"/><dir name="Frontend"><file name="Capture.php" hash="5e7254e902e587587a9f7c1749787690"/><file name="Class.php" hash="e0fba9da74e040fc5fcbfeede03147d2"/><file name="File.php" hash="291450665f2b240c3a1d0b8f81d9e505"/><file name="Function.php" hash="80926f9d0d94953c8534f381b3e9e92b"/><file name="Output.php" hash="b3902a3f0ddf1b4608b84f6172a317e6"/><file name="Page.php" hash="d447d1e18b8c9ccfe95f5cbd4f8ad0aa"/></dir><file name="Manager.php" hash="bba8e1dfc892616eccc5f033d3849aec"/></dir><file name="Cache.php" hash="dd6b3426e3682f832f5e73a5a5e7bbe4"/><dir name="Captcha"><file name="Adapter.php" hash="c80da3e14f86386865a1a11f386509f0"/><file name="Base.php" hash="f3f587f183c8dbb0f71b588a99f56728"/><file name="Dumb.php" hash="42cf7479a157ab4f6d92f4ea2edd402f"/><file name="Exception.php" hash="a1ea444d80d4629ae987f5120d7b6ab4"/><file name="Figlet.php" hash="9434c31c17fa4558d823f72863bda27e"/><file name="Image.php" hash="8f1bb1448407f673d986cc387846bf3f"/><file name="ReCaptcha.php" hash="7213da2f0082b6a209bf5659d5279036"/><file name="Word.php" hash="2b20aa38f1132306e259f4032ad1de6e"/></dir><dir name="Cloud"><file name="AbstractFactory.php" hash="0360f699d631c5eb6f1f5e117a2a6524"/><dir name="DocumentService"><dir name="Adapter"><file name="AbstractAdapter.php" hash="3679fe7eef0b73516d98565b35e90366"/><dir name="SimpleDb"><file name="Query.php" hash="163f21a702cb5aa76d58682d29559bd2"/></dir><file name="SimpleDb.php" hash="78628ea1029ec6f267c83c302611b6e8"/><dir name="WindowsAzure"><file name="Query.php" hash="657934a415bd7d731906ebb3fa42187d"/></dir><file name="WindowsAzure.php" hash="9a48103bc6327e24a98f27307641c397"/></dir><file name="Adapter.php" hash="22799d67b8935e871e9fcb5403617a9d"/><file name="Document.php" hash="e76315e7e307aa99dae6d634b51c2ece"/><file name="DocumentSet.php" hash="53cabe8e2d6454beab6b476953fb9a58"/><file name="Exception.php" hash="e69eb63ef3ac0476422e553c0f9d0b7c"/><file name="Factory.php" hash="d11189e3ba364466584a8461e9bea29b"/><file name="Query.php" hash="dcf377f4d08e1adc178dcef42a7e21d4"/><file name="QueryAdapter.php" hash="b683d5360841a57b8b58f0ac937b4991"/></dir><file name="Exception.php" hash="baa1da441578d83ef668c947bc26993a"/><dir name="Infrastructure"><dir name="Adapter"><file name="AbstractAdapter.php" hash="1a0c85424e055522ed27fd848641adb9"/><file name="Ec2.php" hash="f702d42320cb2a843124faeff6308673"/><file name="Rackspace.php" hash="12ca011eaa260a98e5f0b021497d6d9f"/></dir><file name="Adapter.php" hash="8fd0db5ff41dd87d2730981cf6a651e6"/><file name="Exception.php" hash="dd74945bd044a9b569715d8b8f33d6c6"/><file name="Factory.php" hash="e35fedab839a9897bd494b4525c70d74"/><file name="Image.php" hash="d0b5a851095a8a6d00cc758e66de65d0"/><file name="ImageList.php" hash="330f4330efa43095c73963860719d8dc"/><file name="Instance.php" hash="aa600d04524311d6da4bfac324aae00f"/><file name="InstanceList.php" hash="9f5c27c450518e4090aa5200261e0804"/></dir><file name="OperationNotAvailableException.php" hash="cb15f6dfb2c6caf15bf3d3c7192a2859"/><dir name="QueueService"><dir name="Adapter"><file name="AbstractAdapter.php" hash="6aafd9d7c44e76e68dd7b8ea83aea6fe"/><file name="Sqs.php" hash="03b431d971a7679aa43dba8d235fd9bb"/><file name="WindowsAzure.php" hash="b4762cebc1460850e73552d5a617ea6d"/><file name="ZendQueue.php" hash="d8aaa2f4ec3302693fcaee2833339bac"/></dir><file name="Adapter.php" hash="c950feca6fdab3f115ba62146e9c4061"/><file name="Exception.php" hash="0406a9d40baf106b1e7c7a52c58622ce"/><file name="Factory.php" hash="1489be14015fdbc7364317e2e6fdb4dc"/><file name="Message.php" hash="48907828e50d23674d1500834ac33d96"/><file name="MessageSet.php" hash="f4371e5f68036dbea532b7899c59679c"/></dir><dir name="StorageService"><dir name="Adapter"><file name="FileSystem.php" hash="c2066ccb70e97bfccf1dc6eca5beabed"/><file name="Rackspace.php" hash="d5b49d598b7a2ca875599df0c07d17e2"/><file name="S3.php" hash="36d663a296803282ec6ffbb4d1f6ecf7"/><file name="WindowsAzure.php" hash="1c266330be81f9034e491cdc5c0becee"/></dir><file name="Adapter.php" hash="4bf256cad4b27a0b4ccd0ea0d2e5df44"/><file name="Exception.php" hash="b1938d4a1d75a132c7896c9d1d49c316"/><file name="Factory.php" hash="e60551fd66495592c25f2143683c0eae"/></dir></dir><dir name="CodeGenerator"><file name="Abstract.php" hash="8bb5c3fb76b0953dad77b8aefd240552"/><file name="Exception.php" hash="2f35c31886c1506cbce95bd48ceb8302"/><dir name="Php"><file name="Abstract.php" hash="7ffc414197119b98d09c089d38b745cf"/><file name="Body.php" hash="4354cf77549e88c8ef742f74df428824"/><file name="Class.php" hash="e96e076b5e9a7a41b9dff5d65d65cbf8"/><dir name="Docblock"><dir name="Tag"><file name="License.php" hash="fa6989bdda9dcc8eed58dfcd5cd11d3e"/><file name="Param.php" hash="c5402463f594b0ada366547e2140c087"/><file name="Return.php" hash="d36a1b1dbd2383043b9703449212218e"/></dir><file name="Tag.php" hash="94c4d5bf7254f1122a9140578562cf4a"/></dir><file name="Docblock.php" hash="3630eee3a36264ed70bb414b1b6659d2"/><file name="Exception.php" hash="4d0d644d274ba0d93c86edabe96a937a"/><file name="File.php" hash="16190c6965142355870ea2d86065c2f3"/><dir name="Member"><file name="Abstract.php" hash="a07d1b1c01755725fd9c670b83e14c6e"/><file name="Container.php" hash="52c0f2936e0dd96e3efaca239e97a537"/></dir><file name="Method.php" hash="facb978030d8ed1148d3fd9b27647a5c"/><dir name="Parameter"><file name="DefaultValue.php" hash="402dc7efb5a973be4b3695d97df9d5e6"/></dir><file name="Parameter.php" hash="f963e92d375973d82c64e9aeeb99aa68"/><dir name="Property"><file name="DefaultValue.php" hash="23583ff2c6b01162f217d3f18e17f5bb"/></dir><file name="Property.php" hash="5d85c620c090d866edd2cc4af3bb0737"/></dir></dir><dir name="Config"><file name="Exception.php" hash="825b93db4d92fc10ff2334d0701ac39a"/><file name="Ini.php" hash="bc377745cc51608820d81f08bb5e622c"/><file name="Json.php" hash="191c7eb21cbb2042491e5548a59087a4"/><dir name="Writer"><file name="Array.php" hash="fa6b3a9d9f68cc5973db7309b93454eb"/><file name="FileAbstract.php" hash="14f344ccee37bac7224aa203e5be6bf5"/><file name="Ini.php" hash="c658c697e401b7fab66edac3e5ab5edf"/><file name="Json.php" hash="675cff174476aab6e44540ce20b9ef6f"/><file name="Xml.php" hash="0ff4954d3f6be816d2911cc236d588de"/><file name="Yaml.php" hash="0a6d7e361af7f4f5cff8a9eb81264318"/></dir><file name="Writer.php" hash="7bca990f32b4a7bf64b6d7bcd6a8b144"/><file name="Xml.php" hash="24d64c4d3269a55f1577d40717069b3f"/><file name="Yaml.php" hash="d559550b7de8c77f03a6d8c5ab1af715"/></dir><file name="Config.php" hash="0ec674c135a25bb65bf7f2f536496373"/><dir name="Console"><dir name="Getopt"><file name="Exception.php" hash="ba4d96e50ff729964f51d3ff320a695b"/></dir><file name="Getopt.php" hash="a8165d6a04ff959844c118bd1517d4af"/></dir><dir name="Controller"><dir name="Action"><file name="Exception.php" hash="5c5bfb99e09c49bfd42afc92cca046a3"/><dir name="Helper"><file name="Abstract.php" hash="2db15ec4775320a42a86fc96ded791f6"/><file name="ActionStack.php" hash="72d618b0c01345a39b86362d00b519e5"/><file name="AjaxContext.php" hash="d25cd19237deee404b1d78c3babc51e6"/><dir name="AutoComplete"><file name="Abstract.php" hash="8265a4c01db3fc5ef8359855b5bc7de7"/></dir><file name="AutoCompleteDojo.php" hash="bc727565a422d34c4ee642604bca989f"/><file name="AutoCompleteScriptaculous.php" hash="423035f705a0ead78f0b508915f9f11d"/><file name="Cache.php" hash="5e1ee2f20930ce3ce6c9ff95c7986fd5"/><file name="ContextSwitch.php" hash="bbde32302aea3a45df7525ee558ba61b"/><file name="FlashMessenger.php" hash="6f60de563b5b400d75b630f359ce09be"/><file name="Json.php" hash="46f702a70e0d5e4ecff66439b34502aa"/><file name="Redirector.php" hash="246b26f4b71cdab25a5992577986b119"/><file name="Url.php" hash="16c5a98afe9f6f14bee59bbb0ee58583"/><file name="ViewRenderer.php" hash="6eac5b3e0152d2c000145c6a4076456a"/></dir><dir name="HelperBroker"><file name="PriorityStack.php" hash="9919f1af00251ac5d7a362dba0a280c8"/></dir><file name="HelperBroker.php" hash="aa9cf211934ac5b4fc9e4220ad26d7ca"/><file name="Interface.php" hash="0cb0ece63ce5a245010b9c79927149fe"/></dir><file name="Action.php" hash="1eff5915284945de72327a06cb10c10a"/><dir name="Dispatcher"><file name="Abstract.php" hash="3a481b8b2beb61d223f1c90757339a6d"/><file name="Exception.php" hash="21e0c2b4a1f642448f391e0601bf8327"/><file name="Interface.php" hash="323c3bfe932dca40b3f0f18ebaa39bf4"/><file name="Standard.php" hash="ccbde33f1d7616c2c35ee556039b12a0"/></dir><file name="Exception.php" hash="75ef40958ca34b2ce0007a6a9bd11b62"/><file name="Front.php" hash="a0cd827d65e2d2cc1d51d96009d61032"/><dir name="Plugin"><file name="Abstract.php" hash="4f9c2a5fcb32f0f02d01559c2900e2ff"/><file name="ActionStack.php" hash="dc0f223ebf96304711e62b0ff066cbe6"/><file name="Broker.php" hash="4558d24e01418e1a7a4a45f8a0419b05"/><file name="ErrorHandler.php" hash="1b86cb0d967cb3a80091271532e5f29f"/><file name="PutHandler.php" hash="5b65c0f667538e81cd5152060b1fc50e"/></dir><dir name="Request"><file name="Abstract.php" hash="479150985f9f5b1ad60da1c627ba5422"/><file name="Apache404.php" hash="6e4073adcf927bc08c36267350259110"/><file name="Exception.php" hash="401a6bfe6ee4f2eef739d5622d457235"/><file name="Http.php" hash="4866762dc4e2d7f2f70ebcf3ec3f3174"/><file name="HttpTestCase.php" hash="fee8b0ea3da866bae3125716977e609a"/><file name="Simple.php" hash="4debb461f0bf9c865b3ef7e9a2f9eec1"/></dir><dir name="Response"><file name="Abstract.php" hash="41812ba5c1950b91ca6db21c36a65022"/><file name="Cli.php" hash="1be9de58bd3af4e70797422c5936b9f0"/><file name="Exception.php" hash="daf74bb0fb6ffed9c50a414b78947388"/><file name="Http.php" hash="1b97675e6f09aca759dd04cadc2ada31"/><file name="HttpTestCase.php" hash="b8e25dbcd9245fce7f9e985aedb53ab2"/></dir><dir name="Router"><file name="Abstract.php" hash="7c3976721fbba2c462793f6152a7952a"/><file name="Exception.php" hash="10f91dd02d28dfb9c5de84d778f5e451"/><file name="Interface.php" hash="3f0e4586ac18e02e172ff65e1228a197"/><file name="Rewrite.php" hash="333634b9f184476914d985f68d06b12a"/><dir name="Route"><file name="Abstract.php" hash="c0437b622e03a117783fc6d8c2a581da"/><file name="Chain.php" hash="eb747ff18f4f5549888a7964b8f16f2e"/><file name="Hostname.php" hash="b54e6b9f68ffa63f9c493f82606ab2ac"/><file name="Interface.php" hash="80dd1da3a1fe916fcf173891716985cc"/><file name="Module.php" hash="dca7ac356221ebd066c5b17a72557551"/><file name="Regex.php" hash="4bcd3642f6ee8d66b9ec9cf591cfa121"/><file name="Static.php" hash="2bc26cb37610470e8fbb0e9302e76175"/></dir><file name="Route.php" hash="9be953ae63b6074535656826c99f88dd"/></dir></dir><dir name="Crypt"><dir name="DiffieHellman"><file name="Exception.php" hash="27066062da23c7b0b5c8ea405d63424f"/></dir><file name="DiffieHellman.php" hash="b146591071090ba7dc2d120c8d7cfcb1"/><file name="Exception.php" hash="98d264f8b46a12e8e1fa644b37488636"/><dir name="Hmac"><file name="Exception.php" hash="3b8bf2fed9087ce573c7d9e461211d01"/></dir><file name="Hmac.php" hash="7beea2bae905ad98fc8212a5a2ba906c"/><dir name="Math"><dir name="BigInteger"><file name="Bcmath.php" hash="7ad0514366aa1cfbbacf9a841d17209d"/><file name="Exception.php" hash="c7047b1ec96c2c5bf9d2ec8fd516c232"/><file name="Gmp.php" hash="1e136ad9748ff4e120be567de7195084"/><file name="Interface.php" hash="a1a15aadc0d1232e19e3660778e25a4e"/></dir><file name="BigInteger.php" hash="5941fbc6fa7558f254212a5c704de46f"/><file name="Exception.php" hash="0a2a9e2cdf2619549bb1891d31565cb4"/></dir><file name="Math.php" hash="0e54c36e33bb980ba251c42719e72e48"/><dir name="Rsa"><file name="Exception.php" hash="9af79ec754f6202584671b395e9898cb"/><dir name="Key"><file name="Private.php" hash="6b8486eba224159d7c05dea23039ec8e"/><file name="Public.php" hash="8cd4ac9225b58e1a2990659f4a97a45d"/></dir><file name="Key.php" hash="a0c0daf511c3a74d1e754faeaace0f83"/></dir><file name="Rsa.php" hash="e46289dffb56184f7c15faa3b24a0a68"/></dir><file name="Crypt.php" hash="ae1d981cb224263c8625604621d0ffc9"/><dir name="Currency"><file name="CurrencyInterface.php" hash="c52c23140b8d66185e2792cb10c65b40"/><file name="Exception.php" hash="f04c4fcb9b9b4117ab0c91e688904a06"/></dir><file name="Currency.php" hash="e380eca83740d28bb55435c3489204cf"/><dir name="Date"><file name="Cities.php" hash="4698b47f264db687c97ea7fa5ccd717e"/><file name="DateObject.php" hash="05ef22746ef2b1925cce51d42a5670b9"/><file name="Exception.php" hash="b91a2d166cf91afa1325a07747bafe57"/></dir><file name="Date.php" hash="6d17472f661d6b599477f215dda67f82"/><dir name="Db"><dir name="Adapter"><file name="Abstract.php" hash="7d5a1b64e9f292c018fec8fca159311b"/><dir name="Db2"><file name="Exception.php" hash="b64143620db1d7e5cd7b90312aeaf7bf"/></dir><file name="Db2.php" hash="d27757593a5be92da47326b25af8b4a4"/><file name="Exception.php" hash="461a43822f24e3e79bf8a844541235a3"/><dir name="Mysqli"><file name="Exception.php" hash="71ae5837eee0e261ba7639dff878845c"/></dir><file name="Mysqli.php" hash="c997a7381205b413a03efba602f2debd"/><dir name="Oracle"><file name="Exception.php" hash="8a08377363d09d1711c31ed0e2b4f220"/></dir><file name="Oracle.php" hash="2c539f9ac5ce7e656f3432c9aa00daae"/><dir name="Pdo"><file name="Abstract.php" hash="1f71eaf0415b750ee0573a80374e61cb"/><dir name="Ibm"><file name="Db2.php" hash="b947c61e9abf1f277adb40dc1aaf6319"/><file name="Ids.php" hash="a2d4fcf42c7b9435515399862224d74c"/></dir><file name="Ibm.php" hash="1042d1f01417241dc09679e1edb3a248"/><file name="Mssql.php" hash="139b7b3957b4e2b347d220b9dc8e959d"/><file name="Mysql.php" hash="0ca1bc627085e101ce51e02328b16347"/><file name="Oci.php" hash="819a1b3d31d7f65ba3f9de49ceecdf30"/><file name="Pgsql.php" hash="1b7fde0593b3799e4afa1f74b63499d7"/><file name="Sqlite.php" hash="efb68039f3e1b9e34a81c3dc9d0e8f20"/></dir><dir name="Sqlsrv"><file name="Exception.php" hash="097530f562d1993a992d6f62aadea809"/></dir><file name="Sqlsrv.php" hash="0fb64191a2d9e688410094c736d5eda6"/></dir><file name="Exception.php" hash="aebb5d861915d6a2494c58fc343f2752"/><file name="Expr.php" hash="2dca05427df6b34d6da9fb872517f684"/><dir name="Profiler"><file name="Exception.php" hash="42d03d9fd63aada757d6dabacdb73cb0"/><file name="Firebug.php" hash="1f5b0198a97091bba6ec8a8f74f3cf1a"/><file name="Query.php" hash="fe0bfc38389c14cecc76d528e33bfe83"/></dir><file name="Profiler.php" hash="e7327368b94ae8e094c602e41f617609"/><dir name="Select"><file name="Exception.php" hash="f8b241a9791bc28c77ca8c14cf80ba84"/></dir><file name="Select.php" hash="0fb5975684da5ea68ed45e4437d759d6"/><dir name="Statement"><dir name="Db2"><file name="Exception.php" hash="05225962b3d3107841d87d0d6c4ca9de"/></dir><file name="Db2.php" hash="36c397903c5e07ebe5b82b5e76030c7a"/><file name="Exception.php" hash="d41110267373d38bb4af77e1785329ae"/><file name="Interface.php" hash="222f50673200f578767b1e0c43d5a6bd"/><dir name="Mysqli"><file name="Exception.php" hash="1932b0ae9232ab79ccacadd46a45f022"/></dir><file name="Mysqli.php" hash="64e3e41642115ec95cce487da79fe737"/><dir name="Oracle"><file name="Exception.php" hash="59588ef7feadf4b0a726d1e1410f10bd"/></dir><file name="Oracle.php" hash="3fd727a08bbb347495dd6a2fb044defb"/><dir name="Pdo"><file name="Ibm.php" hash="aadb46dbcc67223ab9e240c35301cb0d"/><file name="Oci.php" hash="75a7032f82e8e29f52a8994a847e9533"/></dir><file name="Pdo.php" hash="91da6eddeaa94a88bcea2c3c912480bb"/><dir name="Sqlsrv"><file name="Exception.php" hash="925701544428f06183ecbb6718047839"/></dir><file name="Sqlsrv.php" hash="4d49d2edc91902768b1685768ac0421c"/></dir><file name="Statement.php" hash="48578c5307d13998d3b9dc73486bb666"/><dir name="Table"><file name="Abstract.php" hash="d1f0eb94b3a83abab809a132edec8d70"/><file name="Definition.php" hash="056d17187e24f48f42059889802ade8d"/><file name="Exception.php" hash="4ad0192e2759ce865081bfd65fba1537"/><dir name="Row"><file name="Abstract.php" hash="79e1dca4c87a158d36b171b11ec721a5"/><file name="Exception.php" hash="3182c2febc7a67988a02a2f4e3262c7c"/></dir><file name="Row.php" hash="adb2429446ad01b98bf74a1c79802009"/><dir name="Rowset"><file name="Abstract.php" hash="6474578f17e077f0d176de3d41bd43fa"/><file name="Exception.php" hash="c5e373d4e4d06e728572b3ca8c5d7d40"/></dir><file name="Rowset.php" hash="0534466fa3f58d60e28761013df1035d"/><dir name="Select"><file name="Exception.php" hash="c87230b6b7401370de518e6ad7218203"/></dir><file name="Select.php" hash="4a86cf29c8e383613e79caa5ef51ca36"/></dir><file name="Table.php" hash="bddf2a8c1ee791ef8a75fd81362a95b9"/></dir><file name="Db.php" hash="944811d3042ae76f201ce5ccee064693"/><file name="Debug.php" hash="e91277596844e74a3189f72b260d743f"/><dir name="Dojo"><file name="BuildLayer.php" hash="59fd3f007b9ddfe836308735a4fad349"/><file name="Data.php" hash="584f49393cc79deedcd43f36ff7cf68e"/><file name="Exception.php" hash="ce849ec1ac41925ce396495a4c0b5e5f"/><dir name="Form"><dir name="Decorator"><file name="AccordionContainer.php" hash="5ccfa22f987078a553c8334a1751a78e"/><file name="AccordionPane.php" hash="bfb6959fc54968e6e631a7b812f795cc"/><file name="BorderContainer.php" hash="3630699c89e4d611d463952ab7b616af"/><file name="ContentPane.php" hash="f5e7d589fc667a74c537f1c4a1d2f1ee"/><file name="DijitContainer.php" hash="6e30cb3a91ee447e6d9ae587a5b08fdc"/><file name="DijitElement.php" hash="63a591c8ae6f23a5fac3c4c4799849b6"/><file name="DijitForm.php" hash="3107c8e3a51efd7cd960a4d140fd2552"/><file name="SplitContainer.php" hash="32118776073ace34a7a6e6b775f7a41d"/><file name="StackContainer.php" hash="511f80fb7e777c7420df3a33e5d36df3"/><file name="TabContainer.php" hash="bfba332a70e20ac8e4bc1f9a7b488ffe"/></dir><file name="DisplayGroup.php" hash="4fc35365159beb7532119735b43ac5ae"/><dir name="Element"><file name="Button.php" hash="3ed66e9ab5b21731a355a35cc0bdadc5"/><file name="CheckBox.php" hash="cdf55f6261658dc12c508397228c86d5"/><file name="ComboBox.php" hash="ad263405d78671cb38f39a42f4153306"/><file name="CurrencyTextBox.php" hash="8a0101a9a7fdc7504fe882222df91d8b"/><file name="DateTextBox.php" hash="b1a766b9190c2c124d34d59d8c742f04"/><file name="Dijit.php" hash="8389aeca66aecb8a39d9341f81ded916"/><file name="DijitMulti.php" hash="bd0fe55261b57bcd2c92ea196eceaf08"/><file name="Editor.php" hash="bb3636533a931bc1f9a5782ac4c66565"/><file name="FilteringSelect.php" hash="d330a4330b410089733f8c1eeb1839e2"/><file name="HorizontalSlider.php" hash="b23bd0da212335080121f31e318f743d"/><file name="NumberSpinner.php" hash="9ae185b60accc9edb7baed24b93ca540"/><file name="NumberTextBox.php" hash="cc340c040ab7c8eaa02bf401a9a91bc3"/><file name="PasswordTextBox.php" hash="48b304d5bbfb2417adf1724362e032b6"/><file name="RadioButton.php" hash="80e8b86eaf8258626084f54272a7a576"/><file name="SimpleTextarea.php" hash="69791b92fb7d656676266fe53592b6b0"/><file name="Slider.php" hash="21f9f99bb495bcf2997a022f6a43c276"/><file name="SubmitButton.php" hash="52c7e25fd90d33b9501150746b046e14"/><file name="TextBox.php" hash="874413d9bf8c39f9a7a73d7175842cf5"/><file name="Textarea.php" hash="1fab8c9619163b0fd1cdeaf4bf4113c7"/><file name="TimeTextBox.php" hash="6ab9be9f6555bdc14ba9a02fb18c3157"/><file name="ValidationTextBox.php" hash="dd456a154f47bc74e05834800490ad53"/><file name="VerticalSlider.php" hash="c99c979911b12b2907b9ce727d595f42"/></dir><file name="SubForm.php" hash="46b28da42e2447cdf7f23ce8635a6243"/></dir><file name="Form.php" hash="5dc7b152deef6e0fedf0c0caa73f7c68"/><dir name="View"><file name="Exception.php" hash="fed5a27397fd8fb08841c1db38364df7"/><dir name="Helper"><file name="AccordionContainer.php" hash="3b2eaa765a22ea9a2d3d2e507da446b8"/><file name="AccordionPane.php" hash="94b8d5edb317926ca8aee3539c33ce8a"/><file name="BorderContainer.php" hash="f8b3939b919a3f961c8da6196b2166be"/><file name="Button.php" hash="e1e816f2362a2f973acceadb1414de98"/><file name="CheckBox.php" hash="43f1a6ad27883f62cda4bc1b560c9f89"/><file name="ComboBox.php" hash="d2811e390eb44a4f3e953c241949db0e"/><file name="ContentPane.php" hash="041084c11934376f3f759154a1835abf"/><file name="CurrencyTextBox.php" hash="56f2046e985a0d1cd81ba0d045f91a7a"/><file name="CustomDijit.php" hash="34bfe4e1501f8dc1227adcc9b7e2b20b"/><file name="DateTextBox.php" hash="81bdffce0b2acb693a7c2cbd3941f156"/><file name="Dijit.php" hash="7a1eb3742998cbbabac1b2338a590566"/><file name="DijitContainer.php" hash="3091a920fbfb48215a59f73be1988eaa"/><dir name="Dojo"><file name="Container.php" hash="e40d8395af2e395a2e81d593e8f4602c"/></dir><file name="Dojo.php" hash="6303c9d4ede5b67cc828ead89c4016a6"/><file name="Editor.php" hash="f251624a2b798b53eea465d9938ac276"/><file name="FilteringSelect.php" hash="60bbdd84239febff9241199104b4cf1a"/><file name="Form.php" hash="105f502558eb241c81c39be0e5d85a72"/><file name="HorizontalSlider.php" hash="7b3c19156aee3db41dbaee18abe2ded7"/><file name="NumberSpinner.php" hash="cf27c892acfeb8ba60027bba29d8715a"/><file name="NumberTextBox.php" hash="9674fa01666c5622896d4513da69ce8d"/><file name="PasswordTextBox.php" hash="0ba727cff497c3b580bffaf04eecc75b"/><file name="RadioButton.php" hash="ddd9733fd29a47cf20f224115895d2cb"/><file name="SimpleTextarea.php" hash="8162db2b947a8b380099ee4266bd2edb"/><file name="Slider.php" hash="b09cd129a4885cb799978b234e8ef496"/><file name="SplitContainer.php" hash="8fa96d45ff63d2b0f24250856afea806"/><file name="StackContainer.php" hash="f3f24abf9640124f26274b9663eccd5d"/><file name="SubmitButton.php" hash="9083d4797eb4be0a879951a88be9a6f3"/><file name="TabContainer.php" hash="8b6865aa0b8015b220896d3487ec0966"/><file name="TextBox.php" hash="75b65da85221b840ff6f3bd4d38890e2"/><file name="Textarea.php" hash="58421d644f61edc039bdaf8b2d13af7d"/><file name="TimeTextBox.php" hash="7865f42c62fd06ead74987324d2310d0"/><file name="ValidationTextBox.php" hash="59bc7469004e22811c038791462d67a7"/><file name="VerticalSlider.php" hash="9c113d757c1b99048d09ba8949452034"/></dir></dir></dir><file name="Dojo.php" hash="3d5a5b6120bb16fbde6a24fc082bb2e7"/><dir name="Dom"><file name="Exception.php" hash="764e44b0e7b8346387c4b677e725d6bf"/><dir name="Query"><file name="Css2Xpath.php" hash="84d8020779e37ed005fa2ca53052731c"/><file name="Result.php" hash="2c8f3fdb6f945804d2a2b5881b5c0567"/></dir><file name="Query.php" hash="ac0c71f2c7a030485756a780c2ca5904"/></dir><dir name="EventManager"><file name="Event.php" hash="73a22bba4a1536ad0bedb311992ed841"/><file name="EventCollection.php" hash="6846535fe1c08a148593082878839b2b"/><file name="EventDescription.php" hash="6cb5b7a743c322cc486c09de9e2466c1"/><file name="EventManager.php" hash="775973335393a6aab98b63fd7e580f6f"/><file name="EventManagerAware.php" hash="616ae31ca46f1f0206e28851f408e777"/><dir name="Exception"><file name="InvalidArgumentException.php" hash="4651b42388b3cc0f6a8c77b8c92a988f"/></dir><file name="Exception.php" hash="a7a76fcb8615694bebfd1b7a6c63cc2e"/><dir name="Filter"><file name="FilterIterator.php" hash="479bdbab563e57ade8718744d6a9eaed"/></dir><file name="Filter.php" hash="a6705be98a15d9abb250329a18bc5f44"/><file name="FilterChain.php" hash="0bbe4e22e4bd7731c91b0d8849e24dd4"/><file name="GlobalEventManager.php" hash="2448f17e7235ad32e0986dccaaf6f21f"/><file name="ListenerAggregate.php" hash="e0bf702bb54b9ba2d54828a2d66d2954"/><file name="ResponseCollection.php" hash="14500f355513b35b17a7dd7e947f5301"/><file name="SharedEventCollection.php" hash="0504cdf3c7168fa6e6a1d164705617c7"/><file name="SharedEventCollectionAware.php" hash="c53dea67b8742191c78911a87cf4c1c5"/><file name="SharedEventManager.php" hash="973daf2597a36f485ec43ae91f53fbef"/><file name="StaticEventManager.php" hash="47bc3c834d44e64eab6ea0b0c0a83eba"/></dir><file name="Exception.php" hash="fdca55eece8acc76af7ec98eca620311"/><dir name="Feed"><file name="Abstract.php" hash="66b85329fd8524fc66b93c16397cc49d"/><file name="Atom.php" hash="24d80774c71e1932b8be5054793d4fd6"/><dir name="Builder"><file name="Entry.php" hash="4871eb1a5d2084552d48b346fb9424ae"/><file name="Exception.php" hash="f8d2074819dd7157b4de4428579958c9"/><dir name="Header"><file name="Itunes.php" hash="da87e20a7e6b587316644377c8cc3c55"/></dir><file name="Header.php" hash="7e1b1053ef90762e3b6d9933cab4964b"/><file name="Interface.php" hash="407dbfd89e522c6e033214974954ad9c"/></dir><file name="Builder.php" hash="9453c5958f2cc22bd37a1e8e8de22ff7"/><file name="Element.php" hash="04f6a067ec047936af106f5a3ee9f0ee"/><dir name="Entry"><file name="Abstract.php" hash="44340d16439984b02edd6f26d7a1885e"/><file name="Atom.php" hash="a2642776469712e0e2dfcc0912e98aa3"/><file name="Rss.php" hash="93e478df77e9c9c43c55334ce2165a8d"/></dir><file name="Exception.php" hash="3ce015184369dd3392923dba02ccb4ab"/><dir name="Pubsubhubbub"><file name="CallbackAbstract.php" hash="5fc3da695c59069c88f54206485038c9"/><file name="CallbackInterface.php" hash="3b8478bc6bac3d9309c0fe7ba6f89dd0"/><file name="Exception.php" hash="028e2d741379246df90e62b96393ffe9"/><file name="HttpResponse.php" hash="6a929e3ac877b89fd0b8664b9894f953"/><dir name="Model"><file name="ModelAbstract.php" hash="ce0a0b0b03f77348b066a947e4d4a087"/><file name="Subscription.php" hash="99c0b396f4e21b0fe2bc3c068220958e"/><file name="SubscriptionInterface.php" hash="63f95bde2e9254d0e3c31b905fea78bc"/></dir><file name="Publisher.php" hash="44d781a089ad5ac1ee949b74badad6ca"/><dir name="Subscriber"><file name="Callback.php" hash="c50e22f4bec18ed4365b7a7fd472db69"/></dir><file name="Subscriber.php" hash="3a06e76251527da315017fd545595ee2"/></dir><file name="Pubsubhubbub.php" hash="9187f4accebd9b1b23010e141485f2c8"/><dir name="Reader"><dir name="Collection"><file name="Author.php" hash="bd0aee1688a6905cfa60ad3df2876d42"/><file name="Category.php" hash="0ac74f5a4ea9492998e7f76e6e959283"/><file name="CollectionAbstract.php" hash="a0d023979ca9ca7c2fdf93e0acb36745"/></dir><file name="Collection.php" hash="6a92b8355578f92468d24f03c33f6e7b"/><dir name="Entry"><file name="Atom.php" hash="c4f9ba356c97d5ad4ad6a5a210fa5d31"/><file name="Rss.php" hash="01b9d9b750ec9c730bc3fa624629deeb"/></dir><file name="EntryAbstract.php" hash="b9e05d05ad657e24bca3947764bf4aba"/><file name="EntryInterface.php" hash="3e33c60c08158ac0398bb9f05ec2090b"/><dir name="Extension"><dir name="Atom"><file name="Entry.php" hash="6baacc2e3ddc23ad3cfa9e190fd54157"/><file name="Feed.php" hash="16e84c49d96b759d10b1fe86982cca2f"/></dir><dir name="Content"><file name="Entry.php" hash="4a01e7b785bc08518739d03825f8c7af"/></dir><dir name="CreativeCommons"><file name="Entry.php" hash="4c7cc6a5ddcb6971e2a7d30c701151b7"/><file name="Feed.php" hash="40b8c9f5146271c2fe7433f7daff07ac"/></dir><dir name="DublinCore"><file name="Entry.php" hash="3ff54fc3fe5df35c8ba4075ed42dabeb"/><file name="Feed.php" hash="56f06a3e2739c70c66da54e7608c9496"/></dir><file name="EntryAbstract.php" hash="fb62ce68f7a440fac11ec666e9e4bc22"/><file name="FeedAbstract.php" hash="c1283a62809662e762cd0a7875b0b913"/><dir name="Podcast"><file name="Entry.php" hash="738c47a9b19c44bedbce6a6e901ee173"/><file name="Feed.php" hash="23c593352bc891c6bbce22e98da18f6e"/></dir><dir name="Slash"><file name="Entry.php" hash="29d24797987342ea6a580a48af0accb5"/></dir><dir name="Syndication"><file name="Feed.php" hash="67ec064681ba8a77b4f6d44a35d4d8f7"/></dir><dir name="Thread"><file name="Entry.php" hash="202da1cb171c55d435b125cfb264d874"/></dir><dir name="WellFormedWeb"><file name="Entry.php" hash="88c3ee8f88632712522d206426a2927c"/></dir></dir><dir name="Feed"><dir name="Atom"><file name="Source.php" hash="71d4bceda67dd3a4acbc45bbee33853a"/></dir><file name="Atom.php" hash="042c93075ae2e933e5241750c101d3de"/><file name="Rss.php" hash="e354bd24fbf48a5bab9d518e3912bd93"/></dir><file name="FeedAbstract.php" hash="e577cfdd039f4025877f12d2d08dcce6"/><file name="FeedInterface.php" hash="7eaed63ef055848aa1b299bc98d8cc11"/><file name="FeedSet.php" hash="5ba5f156ac7607b73929dac85826c659"/></dir><file name="Reader.php" hash="d9bc6e5b898eb8be4fa72e313e89bccb"/><file name="Rss.php" hash="e14ca674ad56d9ce18df5d9728c770bc"/><dir name="Writer"><file name="Deleted.php" hash="35aad5db793b86ca638a81d052c6ae14"/><file name="Entry.php" hash="87c1a1d4b637d4918f5fabe8b56c1a9a"/><dir name="Exception"><file name="InvalidMethodException.php" hash="02419d36ca4d923b7ae46f8cf5e9808b"/></dir><dir name="Extension"><dir name="Atom"><dir name="Renderer"><file name="Feed.php" hash="e1c642e0775de8ace9639daff1a932aa"/></dir></dir><dir name="Content"><dir name="Renderer"><file name="Entry.php" hash="f86cd399902d04ab6652aa952c81916f"/></dir></dir><dir name="DublinCore"><dir name="Renderer"><file name="Entry.php" hash="6f79082f7b75e1d7b73930169ff6d5e0"/><file name="Feed.php" hash="8b6825b40579ce795e0018eac48a0fa6"/></dir></dir><dir name="ITunes"><file name="Entry.php" hash="e23d802f1cc74b432a3c5362be650c55"/><file name="Feed.php" hash="ffa388bb1b1c868a92978ee85f3c8d50"/><dir name="Renderer"><file name="Entry.php" hash="184f5e6f780c987cb55374c6b899dee2"/><file name="Feed.php" hash="c5df3307f99f2349024d3a31612d67a5"/></dir></dir><file name="RendererAbstract.php" hash="427c8bd29a3f0aec64f2034405b8fa89"/><file name="RendererInterface.php" hash="2cbb9d13b450a08098921fe99f5084bf"/><dir name="Slash"><dir name="Renderer"><file name="Entry.php" hash="95b4d946971ccd12e852d36125e241ad"/></dir></dir><dir name="Threading"><dir name="Renderer"><file name="Entry.php" hash="81fa4f73e25ce35482f8ea2d01ceac48"/></dir></dir><dir name="WellFormedWeb"><dir name="Renderer"><file name="Entry.php" hash="45c4795ca01add23d35af6ca1961a27b"/></dir></dir></dir><dir name="Feed"><file name="FeedAbstract.php" hash="65fa012f95547e0e63deb8715038c9c0"/></dir><file name="Feed.php" hash="699463ea19aa24d3cf48d9ddf37d63d4"/><dir name="Renderer"><dir name="Entry"><dir name="Atom"><file name="Deleted.php" hash="65126201b8fb20b29f945956c3c7aa14"/></dir><file name="Atom.php" hash="fd98f2be04963b4a660c49cd0bb9db5e"/><file name="Rss.php" hash="f0e70e6a183416e6c04a1aa58d91b128"/></dir><dir name="Feed"><dir name="Atom"><file name="AtomAbstract.php" hash="2762eb27cc4182026d7cb5d4a2d8e7d0"/><file name="Source.php" hash="b4432fc84152c9922c2a0318043431e2"/></dir><file name="Atom.php" hash="a4e0a7056233cc18c1abcbcf45895b3a"/><file name="Rss.php" hash="b01a32487ec79c8e29848e56d12f4fef"/></dir><file name="RendererAbstract.php" hash="e818b72ef7cccb7e411218194c4a90c2"/><file name="RendererInterface.php" hash="b9d0002ea9fd72117b6438231ca2db9e"/></dir><file name="Source.php" hash="3cce4bf24782f65948e0078eee3af8b8"/></dir><file name="Writer.php" hash="31915fe86b889b38f29cd365dfa2eef8"/></dir><file name="Feed.php" hash="90930372cd8489f1be5480df69e492a3"/><dir name="File"><file name="ClassFileLocator.php" hash="a763041253fb82e55d99e50078f9e791"/><file name="PhpClassFile.php" hash="95812fdfe2ea77215eaf98220970d2bc"/><dir name="Transfer"><dir name="Adapter"><file name="Abstract.php" hash="9f8caf0965ee20c3e394cc9abd39dc64"/><file name="Http.php" hash="98db3d564539a149becd025db2996089"/></dir><file name="Exception.php" hash="825fcee61f10cdfe37140f8053177a3f"/></dir><file name="Transfer.php" hash="3b238f59905a999aa851bd4e7b641d64"/></dir><dir name="Filter"><file name="Alnum.php" hash="4ca46f20de00a3ae2c141f1ceff56bad"/><file name="Alpha.php" hash="5b07ed4ed80ac52058355dc25eab7f17"/><file name="BaseName.php" hash="625ce144adaded5d1a792f2cdff08ddb"/><file name="Boolean.php" hash="8a4ccc8b5fe35cc6371f2a876c1687c4"/><file name="Callback.php" hash="877df95b6818f3919ff98ef2b792beab"/><dir name="Compress"><file name="Bz2.php" hash="85a13672065e12d52a4a53c7d57b5956"/><file name="CompressAbstract.php" hash="e31d6c9f72772def373f5f947ebb4857"/><file name="CompressInterface.php" hash="fea3425ce29a7262ac9aa37ca15e7ccd"/><file name="Gz.php" hash="e1a5c9d4301ba780b0fc2a2ab69b9cef"/><file name="Lzf.php" hash="238dbeb23d34fab2ce1fd53c5728c981"/><file name="Rar.php" hash="ee424491867ca2fce1556bdcf01e0a7f"/><file name="Tar.php" hash="e9fc01174f800ebf4e87294361714fe8"/><file name="Zip.php" hash="1adcddd63511b526c388dbbfb2693ca5"/></dir><file name="Compress.php" hash="17af88fb4588855a0fa2ad0c747e567c"/><file name="Decompress.php" hash="9900b029a91c9c1620903061b15d8b5d"/><file name="Decrypt.php" hash="ea36fb417859a47bc8090908f91c79b0"/><file name="Digits.php" hash="988e652d047ccb2b3f51368702b39932"/><file name="Dir.php" hash="ded6da050ac44e21c8729c4fd74559f0"/><dir name="Encrypt"><file name="Interface.php" hash="02481da5488767e23939a73b434d6728"/><file name="Mcrypt.php" hash="2320868b4e3235e934023f6339edb9ee"/><file name="Openssl.php" hash="37f02c9e5fd864557aca070ca8525e36"/></dir><file name="Encrypt.php" hash="41b1fa4536947b9ce5e4dcadb3bf80b7"/><file name="Exception.php" hash="ee7fa3aa3daed6b376e4fe3ff0533a65"/><dir name="File"><file name="Decrypt.php" hash="f82c770a201d0016ed0054874f39c90f"/><file name="Encrypt.php" hash="63c6232b0c216381bee8c18df751ab59"/><file name="LowerCase.php" hash="664f911dfcba8fb26ad86605eda4ad93"/><file name="Rename.php" hash="d854b8b98abd89db4d4b0eca30a2b496"/><file name="UpperCase.php" hash="9aad43cc07b024188734fe231ec7a80e"/></dir><file name="HtmlEntities.php" hash="6ce1c0425b0b5f48c21649c15ffe1d26"/><file name="Inflector.php" hash="b6b671c8956fe8c359af7739c56867a8"/><file name="Input.php" hash="fc8cc25c2f9da1b1da7b2839eb914c99"/><file name="Int.php" hash="41724f5b9f96f08b6b01281891bc3eab"/><file name="Interface.php" hash="0f810dcab23fc1f455c960af3f317a04"/><file name="LocalizedToNormalized.php" hash="6b98acca5dc278027620e0d5361a316e"/><file name="NormalizedToLocalized.php" hash="27f9795714f46c3d4a143330e77219ce"/><file name="Null.php" hash="fe5c2ff3f08d7ef9ffc140ad251dd6da"/><file name="PregReplace.php" hash="7b0c18825dcc9016d0cc2a0fea8fee53"/><file name="RealPath.php" hash="133f0776eaa042a0712e2d8e7db3ed7c"/><file name="StringToLower.php" hash="9a7352bfa73b4ac825bc2af9fef3c286"/><file name="StringToUpper.php" hash="ec2165f772585dcf346b589bbf9bc716"/><file name="StringTrim.php" hash="ca76b8743fd9ec88290ef11a24d48a03"/><file name="StripNewlines.php" hash="fe69c99129f9bd2b69ea16c0bbfc61c1"/><file name="StripTags.php" hash="78d7393075f2327644e873d4e9196082"/><dir name="Word"><file name="CamelCaseToDash.php" hash="3793e4ef36c6778b9e5df032dfc15b67"/><file name="CamelCaseToSeparator.php" hash="cd445e16f5d3ef145c4b0f35a10b1dcd"/><file name="CamelCaseToUnderscore.php" hash="932bcf0ead2bda7d9ba9544458fe2de8"/><file name="DashToCamelCase.php" hash="705245ae67e4a9eede0bb3c0bf0e6ac4"/><file name="DashToSeparator.php" hash="6edcb2382b8fc7acc8448679d6fb46b4"/><file name="DashToUnderscore.php" hash="1075b2edc67d246d7f300c336a00a745"/><dir name="Separator"><file name="Abstract.php" hash="7c13a127a26229fc8d5e0678e8efcb5f"/></dir><file name="SeparatorToCamelCase.php" hash="87f3c3a2ab24e2146db100710050d873"/><file name="SeparatorToDash.php" hash="d13f2d966ffd8cfb05114fbb9f3906b1"/><file name="SeparatorToSeparator.php" hash="3f70eae82b1616c098cd9aec7be41f9c"/><file name="UnderscoreToCamelCase.php" hash="5f19c37337b901edd5fe5080a8353116"/><file name="UnderscoreToDash.php" hash="2f25783e6e165b827fc113f046f30f44"/><file name="UnderscoreToSeparator.php" hash="b0e92b24b679b3dcbee459cd752a2478"/></dir></dir><file name="Filter.php" hash="383fca34ab08e0a803adb2c7766fad95"/><dir name="Form"><dir name="Decorator"><file name="Abstract.php" hash="8522e625655a35646b477ad4ff99dfe5"/><file name="Callback.php" hash="190782b871a222c75dfc8444b863da11"/><dir name="Captcha"><file name="ReCaptcha.php" hash="39b4156e05bfd86a8bc607c94f437e32"/><file name="Word.php" hash="880894024cfbed08b5f1078076512a25"/></dir><file name="Captcha.php" hash="1d07f76a5ba267e35b801bbfa6437b1f"/><file name="Description.php" hash="4c386b676076f9d5839eea503b633567"/><file name="DtDdWrapper.php" hash="124076232159f0fa26fc9fe67685830f"/><file name="Errors.php" hash="e10d634460b6dae52065a83cd5c3b3a2"/><file name="Exception.php" hash="7540f704e53237cd3a6715d1e480c3b9"/><file name="Fieldset.php" hash="6bd5c5b9ff8e9e489e5a7c560aff175a"/><file name="File.php" hash="c06f2200db61e4ebffa266d99260c726"/><file name="Form.php" hash="c0117ea6a352a32b780baae652d717b9"/><file name="FormElements.php" hash="8cb9c8f03fb877b45696b534c1b39b14"/><file name="FormErrors.php" hash="723036887204776c398e63c715b762fa"/><file name="HtmlTag.php" hash="2b90f769619b1e6624e14922dc2c32ec"/><file name="Image.php" hash="2a1a7dd1624ee71cfc13b7c96b4796e9"/><file name="Interface.php" hash="60d51f6f15d396b5a16519ba5eeec204"/><file name="Label.php" hash="277f64b41efc25890d78eba58db9b780"/><dir name="Marker"><dir name="File"><file name="Interface.php" hash="30667e6ff2ccced89c3b62cf0e13f931"/></dir></dir><file name="PrepareElements.php" hash="0ff6fb16d6c5a748c9c3d3e48037755d"/><file name="Tooltip.php" hash="bb7394628ade765908544c69c6790844"/><file name="ViewHelper.php" hash="c5cc8db2e0cec01b77be69fa2e1b9299"/><file name="ViewScript.php" hash="23ef6fc6fdac5fd8c9105738c5cd3ccf"/></dir><file name="DisplayGroup.php" hash="ee080ba86203eeb41ac17d38877651f5"/><dir name="Element"><file name="Button.php" hash="730df0b76e3957882f877197447d5f1d"/><file name="Captcha.php" hash="0752ad99fb0f43536c91367c70a494df"/><file name="Checkbox.php" hash="e39255d645c7c1b2ac042cc64c2e7cc9"/><file name="Exception.php" hash="c1a78bc6fbcad9d8544ef102ee578bd7"/><file name="File.php" hash="8a78cdb33c6d598fee1f22fe008e7479"/><file name="Hash.php" hash="98a63f7085dc662488f510b8341a450a"/><file name="Hidden.php" hash="4f1b7d49e10c937cbe9bc1f481a24e9e"/><file name="Image.php" hash="050990ff646853c7def62d5912a3a57e"/><file name="Multi.php" hash="546108cee3f938abc94159392b279638"/><file name="MultiCheckbox.php" hash="8da3e1c8f63673889aa82c8a477bc19e"/><file name="Multiselect.php" hash="70685894797a172bfbfeed0b3ca0c8c9"/><file name="Note.php" hash="db0386ab8c66da2df8c912e37b11110f"/><file name="Password.php" hash="4cee94cd5c56812e101f9cae256d79cf"/><file name="Radio.php" hash="088e0a26f8b959fd252edc7080cbe3c6"/><file name="Reset.php" hash="782f1aa0cbe1a792a0d05a51d58d8beb"/><file name="Select.php" hash="ee8919ec27665b02cc44cc0083609878"/><file name="Submit.php" hash="0a97601d86f82bd50d3ea6777937254c"/><file name="Text.php" hash="781ee2e638e37fc613ad760bbd2d30bb"/><file name="Textarea.php" hash="85a7119e8e0fa3377b0576b16aa05c51"/><file name="Xhtml.php" hash="4c20761fbbb7ca24ea9b49ac3cd41e58"/></dir><file name="Element.php" hash="f03fcc6dcd7b3e0da5a36046d36d727f"/><file name="Exception.php" hash="d33a48b9d1ec7e213210383b1f7bca68"/><file name="SubForm.php" hash="ba968be3402ccdf8b4185f4d53234120"/></dir><file name="Form.php" hash="4001592cf753a1170ba2cf1c178c17ce"/><dir name="Gdata"><dir name="Analytics"><file name="AccountEntry.php" hash="e12468f4c63d78e8edecbc473933aa4a"/><file name="AccountFeed.php" hash="a2f9b14dbdc470693a82907f57c4d258"/><file name="AccountQuery.php" hash="8f5b153ae38c2c0598dcdd0f4ca851a4"/><file name="DataEntry.php" hash="e45ec9042ba8356cdf29505e1e9e2d0b"/><file name="DataFeed.php" hash="5db9ffeb61cefb3659e9be8400ed20e8"/><file name="DataQuery.php" hash="f42425d8f43dada50bb8f128d8f975f6"/><dir name="Extension"><file name="Dimension.php" hash="38282ab7af5abb515f4aa658f820fc34"/><file name="Goal.php" hash="2c46c1d7db9b5f507a47e4bb121e2b4c"/><file name="Metric.php" hash="8560747659930f23b28cc94bd837440b"/><file name="Property.php" hash="d1ba271f052e44a1152eed24533824b0"/><file name="TableId.php" hash="60e5a4486c861d393b6f3183c2485267"/></dir></dir><file name="Analytics.php" hash="a97cd7d0faa0f65351e65f55c28fcc60"/><dir name="App"><file name="AuthException.php" hash="6f8d23065cd17d239b2cec093015ad8e"/><file name="BadMethodCallException.php" hash="86fe8ce683680f512145d94a22ab21d5"/><file name="Base.php" hash="109e590e151826d3347d1f2f58dcab56"/><file name="BaseMediaSource.php" hash="d1ec6648e8c89711225d42a07e4738d7"/><file name="CaptchaRequiredException.php" hash="7a3e3893b6f8a9c282d920acb9928e21"/><file name="Entry.php" hash="06786f3fe9e30b60c79888be9c70c067"/><file name="Exception.php" hash="82c41ada4e9863867adb2795fe7b1ca0"/><dir name="Extension"><file name="Author.php" hash="2df6f04ec34d35d1d79bbd189a9c53a8"/><file name="Category.php" hash="273bbd08b463d8394b8528294f2f43ef"/><file name="Content.php" hash="ba2ae463fc480db7c017c495c47f8380"/><file name="Contributor.php" hash="b06a5ee82e874422c7053e9bc4efa7a7"/><file name="Control.php" hash="2215659703162befaa49e7a18ad7abe1"/><file name="Draft.php" hash="45da888e1837d3002d099e483cc4e117"/><file name="Edited.php" hash="94503a1886214c959eb189dc1331a1e3"/><file name="Element.php" hash="1ff84c0f8b8e3e9be1edf28774125044"/><file name="Email.php" hash="f3733ecc80e481cd3e35b93df18a216d"/><file name="Generator.php" hash="aef1362208e44f2be51e4094089b4795"/><file name="Icon.php" hash="36d027f0cf96a2deb42b6c1aab0468ef"/><file name="Id.php" hash="9609dfb9218d0b8263086504e6b0d63c"/><file name="Link.php" hash="de21b9578b8592c5b3e3fcfb84419671"/><file name="Logo.php" hash="23c88a04e6897da7a7606733d5880094"/><file name="Name.php" hash="bcefb468fb70012b66b7322b1b9c618f"/><file name="Person.php" hash="5190427185a73d6cd253d4ad37d3130e"/><file name="Published.php" hash="f5b6d374545f8fea7382644413c786ee"/><file name="Rights.php" hash="add154a43b16eea075f70fef1dc0c614"/><file name="Source.php" hash="9b5c51a557d100b8d32f04c2e631d51e"/><file name="Subtitle.php" hash="87ccbc9582dabb57b4e5254c3cdb5419"/><file name="Summary.php" hash="308fcbd2860bac275a68bbaa455d75e5"/><file name="Text.php" hash="bcb0f1d994917499bb98c2045839cf78"/><file name="Title.php" hash="37736e9d970dbfb6508fe95c8b1d4c4a"/><file name="Updated.php" hash="3a00f1cac5e73b47fe960a4568d753a2"/><file name="Uri.php" hash="c8a0fd8b1e0ef4620dcb4f8d3bdf2f02"/></dir><file name="Extension.php" hash="e8d500cede8625e9a513241cb9340b8b"/><file name="Feed.php" hash="2a9b8a370e645cac248df5cec9752bf4"/><file name="FeedEntryParent.php" hash="03a2448db19430ce9d63af5a794c49ee"/><file name="FeedSourceParent.php" hash="ad513f8bba194a7c597d62332e1b748d"/><file name="HttpException.php" hash="e235854ac6db814217beb8e0f4432bda"/><file name="IOException.php" hash="4fe86dbdc8efd68b4f4e91eb720476fe"/><file name="InvalidArgumentException.php" hash="bb79aa3b093b89f2d1740e3de29c591b"/><file name="LoggingHttpClientAdapterSocket.php" hash="6c6fcbec1d914d2f0f1b4c9f9f9d6ded"/><file name="MediaEntry.php" hash="665829aa3a0b00efad9d39516ac20296"/><file name="MediaFileSource.php" hash="33e29faf6b09ad55399f8c4605de560b"/><file name="MediaSource.php" hash="956d976c017eb2969ec6980ba6a10227"/><file name="Util.php" hash="a978ace39e376ebb7a77168bb980e500"/><file name="VersionException.php" hash="46a96dcdf49d163f2b558f6af76770f8"/></dir><file name="App.php" hash="0611ada3705cf91a416144719aa34f4d"/><file name="AuthSub.php" hash="7d6c8fa90f00569465838f7485e6f8c9"/><dir name="Books"><file name="CollectionEntry.php" hash="e9400464091b197c1406c31904c89f46"/><file name="CollectionFeed.php" hash="50eb4262a08af25008fc23dc8ce38261"/><dir name="Extension"><file name="AnnotationLink.php" hash="229515a8187537875bec1df18a216e70"/><file name="BooksCategory.php" hash="94043b4e41582b92bd585a2f6ca55401"/><file name="BooksLink.php" hash="d4d4d737a079e5a06f9ec239156acc3b"/><file name="Embeddability.php" hash="02ea13af1b4c9e4bdf019cf85bd2e1e3"/><file name="InfoLink.php" hash="e901bc048235143eca51ac93750e148f"/><file name="PreviewLink.php" hash="96cc9f7155d4a8420b59dfab337df144"/><file name="Review.php" hash="8263c22752814fc5b8ed79f5b8fb0c64"/><file name="ThumbnailLink.php" hash="d39c8c46fdcd113b6e78b0a291e3fb7e"/><file name="Viewability.php" hash="00ab00c410d09d756c1f4eac2617dd85"/></dir><file name="VolumeEntry.php" hash="c792cd0a1600d1f82b359e4488ca96d6"/><file name="VolumeFeed.php" hash="df63b570832f03352f8fd9caf5dd0ad9"/><file name="VolumeQuery.php" hash="7c4eafbfe2dffe63d19da553d7116784"/></dir><file name="Books.php" hash="2b24e8b1f35eeb6c045c82aaea8ff279"/><dir name="Calendar"><file name="EventEntry.php" hash="3a8929e9b816b58b948bb27c5f5b7b11"/><file name="EventFeed.php" hash="cb77e63f75b7b00e3ad977160bf1df3b"/><file name="EventQuery.php" hash="c87b0d6fb40e7b41509bbf0c72c35563"/><dir name="Extension"><file name="AccessLevel.php" hash="0c08117546cfc5687e831e7c1c911386"/><file name="Color.php" hash="173b3b7765f71816d9474b4d662fa78b"/><file name="Hidden.php" hash="e013d7fa1de0281467fd342b68d82e47"/><file name="Link.php" hash="9024ffbc848c26dc7142791d334ed4c6"/><file name="QuickAdd.php" hash="b27ef7921a5f849c6d3670e80205a826"/><file name="Selected.php" hash="af19756358007c35c1e97b25d3c40f98"/><file name="SendEventNotifications.php" hash="ad25cf943facb4ca07b5eea08b29d6c0"/><file name="Timezone.php" hash="f42b5243c11888a5ba4075b0e9663d64"/><file name="WebContent.php" hash="b7097ddc1f180e4a85097a414b96bba9"/></dir><file name="ListEntry.php" hash="0579d1450de838b1b893f9720a7dacc1"/><file name="ListFeed.php" hash="e21a404f7d250f78fdac64f729d2b377"/></dir><file name="Calendar.php" hash="507e33fa6d185c57b0c2c351c0fbc060"/><file name="ClientLogin.php" hash="d5025122f58267716ea25d7546da7d62"/><dir name="Docs"><file name="DocumentListEntry.php" hash="08219506950f07c0cb16e1196dc4e09c"/><file name="DocumentListFeed.php" hash="dd7d591781ad9cf3293f73bc94e64e78"/><file name="Query.php" hash="e6c962a8f8cfe02d3ca0701b932dd5c9"/></dir><file name="Docs.php" hash="f29d7a621a95734e8b83a4afa5a6fe42"/><dir name="DublinCore"><dir name="Extension"><file name="Creator.php" hash="c56d34f65d24a0ad25e60a4e913fd54a"/><file name="Date.php" hash="54b46f21e08d7ca7d230c6b7e83e7210"/><file name="Description.php" hash="6f4bb927deae9cb5b501b37e4cbdeca7"/><file name="Format.php" hash="a2eb4fd88c1197f1b122adfcca64e4c5"/><file name="Identifier.php" hash="7900202e14b61bf0323069f736521521"/><file name="Language.php" hash="b47e4dafd3fcebd4d11b4ac0806cea70"/><file name="Publisher.php" hash="1660d7ee8e0fa26d24376ed8414849e3"/><file name="Rights.php" hash="1cddf53544c56ad8a29f012f1501501e"/><file name="Subject.php" hash="a287af1b176e22b3f7001e4a8d69129f"/><file name="Title.php" hash="77bbd2f9afb01b6337b03b12c19cd0ba"/></dir></dir><file name="DublinCore.php" hash="6fa896e35490d67182eb013b08ef6d75"/><file name="Entry.php" hash="b2f85f13672d64d288bbcf9824058488"/><dir name="Exif"><file name="Entry.php" hash="cba9027e69ca0d3431f5fa8e84519d22"/><dir name="Extension"><file name="Distance.php" hash="69d8d71b3c8f02fd85e22e72453f5e7c"/><file name="Exposure.php" hash="5b4f1e1c91ada58e661412e391c9167c"/><file name="FStop.php" hash="78c90acf5134d6a8cd7debc8dfff3942"/><file name="Flash.php" hash="bc1c363115d8ee05fc043ae829ca9398"/><file name="FocalLength.php" hash="ba8dba20995e7ad0dc5fbe056a13a431"/><file name="ImageUniqueId.php" hash="3007c391ed138e7db78cca05ad964cb5"/><file name="Iso.php" hash="9b7340beb6cd2f991d0b590da9929207"/><file name="Make.php" hash="b96528e1c95904dcf7a32b6d2b855c4a"/><file name="Model.php" hash="de354ebd3ac53b26c7ba7d07b7eaf74e"/><file name="Tags.php" hash="0b6dca99d61d601cd89ddfe6d9af5990"/><file name="Time.php" hash="880ab5825cab35d85036460d54b18148"/></dir><file name="Feed.php" hash="d102e026496f926fa8dbf0024e75ea22"/></dir><file name="Exif.php" hash="31c98117fa58af3fbc8a9504aed7f05d"/><dir name="Extension"><file name="AttendeeStatus.php" hash="dac3c0490bccbf09f924948ad44232cd"/><file name="AttendeeType.php" hash="3b42bd943b0536d5bde7e735fd8615d4"/><file name="Comments.php" hash="9afbcf4a4ce1d7dd52706e0e8928a8ee"/><file name="EntryLink.php" hash="5a280e630417eb616c257813c3ead727"/><file name="EventStatus.php" hash="61f988f2bfafa564543cabe4e7f86f29"/><file name="ExtendedProperty.php" hash="2d80f08e6e2e79da98134e959b58fbbd"/><file name="FeedLink.php" hash="679a6f5c9ebed486b6b41bac1522fba3"/><file name="OpenSearchItemsPerPage.php" hash="8430c39b6ce1bfb8deb8d2ff4070edf6"/><file name="OpenSearchStartIndex.php" hash="118645c4f8d38b135ebdd9792ba30234"/><file name="OpenSearchTotalResults.php" hash="8e7bbe094d00d023b1ac76184bbc871c"/><file name="OriginalEvent.php" hash="799806cbff3654b92028550a96d3f418"/><file name="Rating.php" hash="96f79437551070a76a0ffc8cf0ce3f93"/><file name="Recurrence.php" hash="da2e478f7368e9fae3e91aa4975769b9"/><file name="RecurrenceException.php" hash="1565fac963250d130a9a18d0e87a9462"/><file name="Reminder.php" hash="84525523e8827d09cda261f02f4c4214"/><file name="Transparency.php" hash="2c99f3896ceaa90632f565d3910eba43"/><file name="Visibility.php" hash="df49298225481498f3a082cc88092ed6"/><file name="When.php" hash="4a02d7db9ade6210d5d01fd401938732"/><file name="Where.php" hash="5d1d9557f1a8a24be5c6076464f35cda"/><file name="Who.php" hash="8d3c827558b62b6fbbdb1786bc6dc8f0"/></dir><file name="Extension.php" hash="3dbf28598313aea3fbcb6ae0a9218373"/><file name="Feed.php" hash="8ae61588a220ed9e612bd0d306ed7be9"/><dir name="Gapps"><file name="EmailListEntry.php" hash="beeaa4d8624538255fd4fa414bf2aa2b"/><file name="EmailListFeed.php" hash="dae8f9390c01ce354aacf7a03b56faa3"/><file name="EmailListQuery.php" hash="38e4255133125d1c3cd461769ff2bbf6"/><file name="EmailListRecipientEntry.php" hash="5042400a2ccf63b598d11098c08a02a8"/><file name="EmailListRecipientFeed.php" hash="e67f7530086c3c3de9bf49ce731ba816"/><file name="EmailListRecipientQuery.php" hash="6b48a9d58feb39241c63a1c448259894"/><file name="Error.php" hash="2739432a885e3aa64112124acf85666a"/><dir name="Extension"><file name="EmailList.php" hash="d83a001f6b79d69a55a534c352df4518"/><file name="Login.php" hash="068572b0a7d975d816564d334aa6cf07"/><file name="Name.php" hash="b895fe7b562ab015bc391c82be75d63e"/><file name="Nickname.php" hash="12ce7eb02489b501861272c13acec59d"/><file name="Property.php" hash="4517466631d6a91e771e3eba6c4d028e"/><file name="Quota.php" hash="18a9c44fdf6146c74b51d123c00bd7d4"/></dir><file name="GroupEntry.php" hash="5c36b2030c5394629693de197c909286"/><file name="GroupFeed.php" hash="13b68ebe7768fabe2f408b5a317bb088"/><file name="GroupQuery.php" hash="fc3f172f6fda1a3b50c6c8c2f3beebd6"/><file name="MemberEntry.php" hash="987fddd8e68938e62d4fb4c80a0b7586"/><file name="MemberFeed.php" hash="aaec820fc096293a6e6f4e5dc9a213a7"/><file name="MemberQuery.php" hash="1fe4b7f18ca161de836a9bf2b18cf123"/><file name="NicknameEntry.php" hash="f0fbcba505a6cac9d64328acf86c168a"/><file name="NicknameFeed.php" hash="80df6633ccad4aea2f1b0ff1fc56fedc"/><file name="NicknameQuery.php" hash="b3fc90f01854679f692ca2d34f1ef867"/><file name="OwnerEntry.php" hash="a66d48e8d46fddf2a9e3ea0330bcea45"/><file name="OwnerFeed.php" hash="98123454cb3cc6dc134d9ad827d297b2"/><file name="OwnerQuery.php" hash="5c829232390b828f06565012b2af3ce6"/><file name="Query.php" hash="a893bb0bebd43c558fac8f7b58477577"/><file name="ServiceException.php" hash="e62bc29c1a67ab44455ebc10fb033887"/><file name="UserEntry.php" hash="327e60ce8bad4fad8aa9d785902a0488"/><file name="UserFeed.php" hash="12a6e44ebb6b809f1ab17884c957d034"/><file name="UserQuery.php" hash="36d9b6e3c53812f1a0b3ba58b8348d1f"/></dir><file name="Gapps.php" hash="006b69cd2b4bb52efbc481cba3ded85d"/><dir name="Gbase"><file name="Entry.php" hash="d1c0594bd7f509ee8b71a0d4c6e93cef"/><dir name="Extension"><file name="BaseAttribute.php" hash="9860f259d07b1d7c48953ac145e91173"/></dir><file name="Feed.php" hash="a3a9a55b4dafc0c71da475d0b8ab4ed3"/><file name="ItemEntry.php" hash="4ad3d155cdb9fce8010cb9ff27d3ff54"/><file name="ItemFeed.php" hash="44ffbf3810fe7d602fa50a219f4d0c6b"/><file name="ItemQuery.php" hash="d85aa16b033dfc7478cbfa9cd38cbd69"/><file name="Query.php" hash="feaa71301ffc82297a5c768b267ff5b2"/><file name="SnippetEntry.php" hash="023249497ffc22f6fbad8645c50dc78d"/><file name="SnippetFeed.php" hash="5197182ca6edcf33fa8452f809597510"/><file name="SnippetQuery.php" hash="17365d8dc24d1da93b8b730c6fe6d864"/></dir><file name="Gbase.php" hash="78c17b83a499c8c31d31762990d83d3b"/><dir name="Geo"><file name="Entry.php" hash="bf5d39448208c58aba61ec64d6a79ad8"/><dir name="Extension"><file name="GeoRssWhere.php" hash="914e0e1155c117f5908f07dadc6ee889"/><file name="GmlPoint.php" hash="a5bf5b02bdec49c06e1aa44763bba1a8"/><file name="GmlPos.php" hash="8ef27447e497a39031e475372a8cb08a"/></dir><file name="Feed.php" hash="c2adb51ac77e046f74ac15f7bcfb53d3"/></dir><file name="Geo.php" hash="2a5a5a2dfa2462e061234e4946fbc8f4"/><dir name="Health"><dir name="Extension"><file name="Ccr.php" hash="5f6686a6c63958e949db8bf5deb92f2b"/></dir><file name="ProfileEntry.php" hash="a2c0dd3747b54680f62089aa25ca26c0"/><file name="ProfileFeed.php" hash="1a41a46d2871e28239c45f23f0b50868"/><file name="ProfileListEntry.php" hash="ee7b66b18af7f3d7406c10c82dbe903a"/><file name="ProfileListFeed.php" hash="1d15e991cf6dc94a83b52ec64aed7a2a"/><file name="Query.php" hash="6dd89b579a5aa4d35de32e74c0df5502"/></dir><file name="Health.php" hash="6b0a156697fe84a09efbde31eea3f497"/><file name="HttpAdapterStreamingProxy.php" hash="6b2964e32bf7c0e110b8ab25445ed53f"/><file name="HttpAdapterStreamingSocket.php" hash="b5b74e5c1cb8206da4b163666a81fed4"/><file name="HttpClient.php" hash="9cee0a291d6c4b11f7358628923f925f"/><dir name="Kind"><file name="EventEntry.php" hash="1f1204191536089911a984770ce0cb47"/></dir><dir name="Media"><file name="Entry.php" hash="9cc1bd304119ff7d428225d3107c3a34"/><dir name="Extension"><file name="MediaCategory.php" hash="8f9345afe735f43c0936d2741556db13"/><file name="MediaContent.php" hash="947b1ca390fa6021690d0a67f81c0c28"/><file name="MediaCopyright.php" hash="947dadff8c8d2708ccb7af6aaa5d928e"/><file name="MediaCredit.php" hash="6d2b9d4be6e3c896fc9c9f9a9581ce9d"/><file name="MediaDescription.php" hash="eeaf98530facd9f42d2e3c46661db3f3"/><file name="MediaGroup.php" hash="9e6dcb6e453393b23d7efb8dde3fb4b0"/><file name="MediaHash.php" hash="2f84bf6db86d3302709347222ad1eba4"/><file name="MediaKeywords.php" hash="6a1a4c5eee620173c5c1995a8bc0aa25"/><file name="MediaPlayer.php" hash="c7d51126d6604718daec1674785e90af"/><file name="MediaRating.php" hash="915d64d3fa690969aa6697c945ef7b28"/><file name="MediaRestriction.php" hash="8921f3bd9d80f7a530b826ab009668c4"/><file name="MediaText.php" hash="557defecdbd618e8917ed5fcd6ccddbf"/><file name="MediaThumbnail.php" hash="e5e272a715318c877fae805dc78e3fee"/><file name="MediaTitle.php" hash="4134d9c00494d89ba462ae9500d1e2bc"/></dir><file name="Feed.php" hash="f67c9bb85cbfbf098fb53ae50a026044"/></dir><file name="Media.php" hash="752e78b67dca41a50ffb85dee3b3e483"/><file name="MediaMimeStream.php" hash="de9b3dd42e0f9f62341fa075bb900c6c"/><file name="MimeBodyString.php" hash="ea742b4f32d34ddac64454b990d4ef37"/><file name="MimeFile.php" hash="0afbad3bc750c1cc5d3f93c54c3c5019"/><dir name="Photos"><file name="AlbumEntry.php" hash="1ab5e6bdc070df30938e912d52eada85"/><file name="AlbumFeed.php" hash="07c42ecd6819d25e428b94f31882c1a0"/><file name="AlbumQuery.php" hash="5da3a372fe52f8c076e9d97a35f823e1"/><file name="CommentEntry.php" hash="f7822566e08ea7b3f74c955abf89a41f"/><dir name="Extension"><file name="Access.php" hash="8d4c3dfe21dbb25632e87659070125d1"/><file name="AlbumId.php" hash="45b3059567bf5e49a6f8edf6b8a16937"/><file name="BytesUsed.php" hash="fd2a43339909b5c7402208dccbdf68c0"/><file name="Checksum.php" hash="5ca31e3430e2e9b747d91c94c000de8a"/><file name="Client.php" hash="2a3276f0666bc92c7d7155bcfbc74f42"/><file name="CommentCount.php" hash="48176e51ea9b1c3c0de6edcf24e25d19"/><file name="CommentingEnabled.php" hash="5b460e8f02be0079867d34af9ab54bce"/><file name="Height.php" hash="d913feb4798b7f3c8ba645bc6ecd1d59"/><file name="Id.php" hash="c5c6fcef6647a1523b99463cfb0a6ebe"/><file name="Location.php" hash="b2b10096aeca032d37e138b09f4ce18e"/><file name="MaxPhotosPerAlbum.php" hash="d1b61411c47e1eb91cb0b80be60998a0"/><file name="Name.php" hash="7e6637d23584ef1ebc3834940fc2ad52"/><file name="Nickname.php" hash="c4345329b15d815de6527d0f8e0277e6"/><file name="NumPhotos.php" hash="160edc7a3b4837435a36befe5378e01e"/><file name="NumPhotosRemaining.php" hash="a3b358f036c2fbefdf93830c92a027fd"/><file name="PhotoId.php" hash="ff997a353b24d944f439702d4ece0966"/><file name="Position.php" hash="cf9f8b0c29c98c1680b2675ebf47e6b2"/><file name="QuotaCurrent.php" hash="a57ff86ba83287a1f145f272ca463756"/><file name="QuotaLimit.php" hash="00c6e94954fbe136a09d4b7ca8f7128c"/><file name="Rotation.php" hash="513a2712c12e10fb61dde21976824b7e"/><file name="Size.php" hash="ab29ba1766a003c1b3ad22db180d18cc"/><file name="Thumbnail.php" hash="6a59c5bebc192e34992e8058ccfd11c1"/><file name="Timestamp.php" hash="b52abdc854529af5cb545691692375ec"/><file name="User.php" hash="3a21cef935fd5fb42f97e308b1997583"/><file name="Version.php" hash="9625bc1c6aefcf580c5fbe0d2f045b4e"/><file name="Weight.php" hash="a8bc3ed41e626323f92adf87410af458"/><file name="Width.php" hash="06f910c1bb1e4e747c38c26ed409522b"/></dir><file name="PhotoEntry.php" hash="ada12abf9bb991fa672ca9a05cb979a5"/><file name="PhotoFeed.php" hash="3b29ec6d750456cdd799bcbaa751e89b"/><file name="PhotoQuery.php" hash="93b28eba3750d181f44fe41181e45663"/><file name="TagEntry.php" hash="8c088bb0af6e8a14eced2775aa3a291c"/><file name="UserEntry.php" hash="15e59c396a645fc30f03cb42d2efc351"/><file name="UserFeed.php" hash="e1498967cc3f5d361c96a0bcde82437d"/><file name="UserQuery.php" hash="26f3ef6227851523817358a97544ebd6"/></dir><file name="Photos.php" hash="c46ff72fca949809ff42f17b0079c069"/><file name="Query.php" hash="100dee31d0a572c4d2e990a96f7e9a0e"/><dir name="Spreadsheets"><file name="CellEntry.php" hash="93cc5079095d6daa6c2147b62131a890"/><file name="CellFeed.php" hash="ca07b9478e1b6ecae9147bc2105c8bd7"/><file name="CellQuery.php" hash="bc7fbfd4e84481e19df568357bc22e37"/><file name="DocumentQuery.php" hash="fd2935ddca76445d1bea58c4f6799ebc"/><dir name="Extension"><file name="Cell.php" hash="917abed62f74a5101511f4449c805140"/><file name="ColCount.php" hash="dba4f0796d79fe80ff15d4dc9bebcd24"/><file name="Custom.php" hash="8f805dee81206d515ab43097cecedb1b"/><file name="RowCount.php" hash="be76b9f5b367cb349576283ab9765d34"/></dir><file name="ListEntry.php" hash="7b8c759afeb6cee40fc5ce231dcf6f2e"/><file name="ListFeed.php" hash="688c2cd0aab8cffabce85d835e4fe077"/><file name="ListQuery.php" hash="2bd4f1eb97b6b3c92c8d2f52fcdbbccf"/><file name="SpreadsheetEntry.php" hash="e43a1862baadf19907770d4a61a56626"/><file name="SpreadsheetFeed.php" hash="2cd1cf91c61a54ea236e1aaf73877009"/><file name="WorksheetEntry.php" hash="7091ab92f732197dbf7e45dcc9c87bf3"/><file name="WorksheetFeed.php" hash="3a4c334028cc35e76255507be1efe061"/></dir><file name="Spreadsheets.php" hash="5706fa18d101c716c73b5f1f6869f33b"/><dir name="YouTube"><file name="ActivityEntry.php" hash="19c73663008cbcbb141c35e8717521aa"/><file name="ActivityFeed.php" hash="5e45cff4ae0df9e35683067769a26386"/><file name="CommentEntry.php" hash="8f17768b645f4165b9601e59fab4045a"/><file name="CommentFeed.php" hash="a391a8ea8c0b27904e365eace8b03458"/><file name="ContactEntry.php" hash="440d8c1c0196e59dd80c6c52e30b2459"/><file name="ContactFeed.php" hash="ae3698b6ccf9d339f7a30b4a5789f698"/><dir name="Extension"><file name="AboutMe.php" hash="8011ef3b524bea9fff089882ea4ed0ab"/><file name="Age.php" hash="e2a9893b2e911b3db507465320cbcf63"/><file name="Books.php" hash="89b35f4bc0027463f91824b5cd2e47cb"/><file name="Company.php" hash="549c355f976cc892cebc6811fe2580a1"/><file name="Control.php" hash="578a083eabf62931b62d095600b80003"/><file name="CountHint.php" hash="666969cd9d5d77e06c9a115fae9de6b8"/><file name="Description.php" hash="8a7dbf10f59ccd573eb0c90cc5971cf6"/><file name="Duration.php" hash="24f2181f720fe6db1cb22503ffee459c"/><file name="FirstName.php" hash="d28dd3cd580a2fa7c6bfb829e8711166"/><file name="Gender.php" hash="260b84dc18e9c01eac563404d0fa5f5d"/><file name="Hobbies.php" hash="2dd89e1c8199ef743d771702ecc95c8f"/><file name="Hometown.php" hash="fda3ebb42524b3ab8d54467887da61f5"/><file name="LastName.php" hash="f19b93c1d745cafe6ecf20c7bc8d0c3d"/><file name="Link.php" hash="d93c9801f25b8c8cb13d87ff3b3b460e"/><file name="Location.php" hash="20909b4d155c9fd517081322b835f306"/><file name="MediaContent.php" hash="1b53bccaa9f1de51c19378fc8c442868"/><file name="MediaCredit.php" hash="4571da70916493177e72f0aebeaa78ac"/><file name="MediaGroup.php" hash="36cca7fb741bb294f4dcb4142733d100"/><file name="MediaRating.php" hash="099d0984cdb2c9110ca259311047d0de"/><file name="Movies.php" hash="464957a1f90eb56899ec503c4ede6ef9"/><file name="Music.php" hash="947c3294f34d0f35ab88c7f7a9c4f4b3"/><file name="NoEmbed.php" hash="1e6e4a5995de606554e7145a0df0b6d4"/><file name="Occupation.php" hash="b33c3053639572a312fec678395d7436"/><file name="PlaylistId.php" hash="af87bcfda7115ae9c55bf3c1f2986754"/><file name="PlaylistTitle.php" hash="79b89ae7bdce993a758fd1bf45188252"/><file name="Position.php" hash="d92a78e714b2f7afdfabd8d09f73ff1d"/><file name="Private.php" hash="93bd6eeaf228e882ccceda591813228f"/><file name="QueryString.php" hash="5e5c57c2e219ef2e5ca3184997d87ccd"/><file name="Racy.php" hash="ad019d20c5c40d12da9cfc9df9daeaec"/><file name="Recorded.php" hash="7af195c7f3f045946f13504cc38522a0"/><file name="Relationship.php" hash="b42aac9538b504662222635a29149436"/><file name="ReleaseDate.php" hash="beb4a4d9830ff40a06816a341de8dd15"/><file name="School.php" hash="51a1ff928489cc7cd3aacc7a7aaf08a3"/><file name="State.php" hash="04cd3d54d4050aafc5ce27e719d234e9"/><file name="Statistics.php" hash="73270160b45c7ec91914467ccda850ef"/><file name="Status.php" hash="aadcb325d6f3b51cae180406d4caf9a4"/><file name="Token.php" hash="8686b59bd2a0048283389bc01acf77bb"/><file name="Uploaded.php" hash="9ee6ea6660e515f1440d92b2ef4d97dd"/><file name="Username.php" hash="c3782552a9accafea073e8f0081e43f3"/><file name="VideoId.php" hash="30fdd4c5cd5b212a1e4c17cd28fbb12b"/></dir><file name="InboxEntry.php" hash="24eb593b56341f919f0bc0446b4b71f8"/><file name="InboxFeed.php" hash="69487f9424ad1686f1b00e2b1f73ad29"/><file name="MediaEntry.php" hash="924fd5fcbfec4c44e965812618c08b6e"/><file name="PlaylistListEntry.php" hash="367ad32e10ea7203408d99bcfae836a2"/><file name="PlaylistListFeed.php" hash="6a2db1a031b1f749231326b4bd57d9bd"/><file name="PlaylistVideoEntry.php" hash="5453811dc274201e95b9ca6450180669"/><file name="PlaylistVideoFeed.php" hash="54be8eb4c90f3a5a4b6ce1ce578f7e56"/><file name="SubscriptionEntry.php" hash="f602292610ce553fb7493cda0bc25cb0"/><file name="SubscriptionFeed.php" hash="576b63779940d7e3576a1c505bff284f"/><file name="UserProfileEntry.php" hash="4eafc0f86b477f85405429572ba1ba62"/><file name="VideoEntry.php" hash="1ef39076a4e9cd95f91bf8d69bf4f52c"/><file name="VideoFeed.php" hash="aa4889f83dab3ed5524583b48a7a5a22"/><file name="VideoQuery.php" hash="a2a973590b187f7314e994d824a6a288"/></dir><file name="YouTube.php" hash="a8dc12d5116ec45b159b59dacddbf946"/></dir><file name="Gdata.php" hash="f1583b57defcf04cb1b35c2875a95ea1"/><dir name="Http"><dir name="Client"><dir name="Adapter"><file name="Curl.php" hash="a4300f6a2b52d63e0edd1e81c4fe2dd5"/><file name="Exception.php" hash="edeae8782f6926386f145d8a873d23bb"/><file name="Interface.php" hash="588b60a6607675c8698be8b3fd2d4e22"/><file name="Proxy.php" hash="6892b7d0c9de3a441adb25d4fbbd22ec"/><file name="Socket.php" hash="6078a103596ba3a8b2544563d252d505"/><file name="Stream.php" hash="14a0106f768a6388688690a54a3eef27"/><file name="Test.php" hash="35e3087f1d6baa3b6fa2cda8228febf9"/></dir><file name="Exception.php" hash="a5f986ab6d87cb83bed91a1caf56ac00"/></dir><file name="Client.php" hash="26f6df4ccf15f65b213ebd0f5538978a"/><file name="Cookie.php" hash="a56a600d64c9bae67c66ae784de2fe58"/><file name="CookieJar.php" hash="7d93690c2caf40108c35a66b10e25586"/><file name="Exception.php" hash="b345b84b1e9b8a1ae2478ff04f37fc2f"/><dir name="Header"><dir name="Exception"><file name="InvalidArgumentException.php" hash="02d00d00a945c0595a648ea418fe3673"/><file name="RuntimeException.php" hash="8c166ae41ab4e516abda9289f19e973c"/></dir><file name="HeaderValue.php" hash="c0e08b696c63818f37faa68a0f733d32"/><file name="SetCookie.php" hash="5f5620b08a9a298bd60cab553cc4f213"/></dir><dir name="Response"><file name="Stream.php" hash="8a41b22b489629a6766dfb3cb96e0ed2"/></dir><file name="Response.php" hash="a34c934977d3bbc1da1a2153692a5743"/><dir name="UserAgent"><file name="AbstractDevice.php" hash="e52f1ad149795aad5075c4bc6cf977f3"/><file name="Bot.php" hash="e5679a2e30d3f1ef581d508446c1f482"/><file name="Checker.php" hash="0b6bb9cb341b75ca7bfb749cb2c871bd"/><file name="Console.php" hash="93650b34bd1238887e88c238291853c0"/><file name="Desktop.php" hash="9829ee285a2cdc4388326a07644d042c"/><file name="Device.php" hash="72533d95dea2a7fe6366bd2145b5b938"/><file name="Email.php" hash="f0a3fab08e59378c0189073237611af7"/><file name="Exception.php" hash="beb38f75f587ac56cbb7a843f59a84ae"/><dir name="Features"><dir name="Adapter"><file name="Browscap.php" hash="a88ccf8fa0b5aca789f32a08f83c98e7"/><file name="DeviceAtlas.php" hash="725061814353e65cc2d89e2a67a00673"/><file name="TeraWurfl.php" hash="1f91bc3ded39c5b108d8232d18cd17f4"/></dir><file name="Adapter.php" hash="a4dcf44cd31de8969f3e941f9a14d0a5"/><file name="Exception.php" hash="a8fba4a7bf9a1a58225ab313b5fa4dd3"/></dir><file name="Feed.php" hash="716918e5334ac352997eac35ca5956dc"/><file name="Mobile.php" hash="00d3e607c4ac5e298492bd3d7762c555"/><file name="Offline.php" hash="6c1ce88c65a43a63416928292c5f9f5c"/><file name="Probe.php" hash="b4df007dbdeb6ef7c49f599d728eed49"/><file name="Spam.php" hash="a4402ccfc92bdf4c49ed1a27bb1905eb"/><dir name="Storage"><file name="Exception.php" hash="ab40f3958bb905a85cfa5cf14af640d4"/><file name="NonPersistent.php" hash="9c8d459eb114f70df099bd397a542a1f"/><file name="Session.php" hash="6b94c84a472e0a767d42be7e26aec3c7"/></dir><file name="Storage.php" hash="ec42c71aae122ea711cbf87ef261c4e4"/><file name="Text.php" hash="711458780f3c17ad437f3d56b5109321"/><file name="Validator.php" hash="69d6afb8a82293c61a642c791f5a16db"/></dir><file name="UserAgent.php" hash="460734f564ed89053481a1204db01c79"/></dir><dir name="Json"><file name="Decoder.php" hash="be80f4b8fe57afd69752fc51c349dcc8"/><file name="Encoder.php" hash="0282ee4cb81e78771c8829398f64082f"/><file name="Exception.php" hash="949bff931d3430258aa0d8688d70df18"/><file name="Expr.php" hash="5985e830701d7f8d5daeb230ce56b1a3"/><dir name="Server"><file name="Cache.php" hash="149b4bcdb085ccd0d535903aa463a0a6"/><file name="Error.php" hash="f3bec127c343a8e14a7a9b1339ab28aa"/><file name="Exception.php" hash="1b0ac33c450ec1bee800421995576fa7"/><dir name="Request"><file name="Http.php" hash="832d82cb88edefb954c4d4d730d0a95c"/></dir><file name="Request.php" hash="35999aec48306723cd44da4c5a62fe35"/><dir name="Response"><file name="Http.php" hash="a5f156d547e04bd224295be634e864da"/></dir><file name="Response.php" hash="a3c115766d7a5e6e57cb4a27887cad2a"/><dir name="Smd"><file name="Service.php" hash="9aef500f4cef8c72886b6103820397e5"/></dir><file name="Smd.php" hash="c8dce4255950f809a22ee60febb2bc2c"/></dir><file name="Server.php" hash="90dcadb42953db253627a783aafa0b80"/></dir><file name="Json.php" hash="9c8bd17cde28999638cd2f05fe470cbb"/><dir name="Layout"><dir name="Controller"><dir name="Action"><dir name="Helper"><file name="Layout.php" hash="c049699d9228b85c2823d7bfdba7d8de"/></dir></dir><dir name="Plugin"><file name="Layout.php" hash="2af276e070314489ccdd514b841d86ad"/></dir></dir><file name="Exception.php" hash="a479f33598f2c4e1cb228883ae6f22ac"/></dir><file name="Layout.php" hash="6d7b1d2ad0c1bf5d5d1ea058ca5a24f7"/><dir name="Ldap"><file name="Attribute.php" hash="a334347a968defb0fda698c3c54f46d7"/><dir name="Collection"><dir name="Iterator"><file name="Default.php" hash="8f8a4876cf258d6b1f71582a805df017"/></dir></dir><file name="Collection.php" hash="ac57de545867cf7cd1df3d6c113263ca"/><dir name="Converter"><file name="Exception.php" hash="4e029f2da6d5c7df7644bfd2c434c6d0"/></dir><file name="Converter.php" hash="8e09bff7ca34d3051cee4a873f5b58a1"/><file name="Dn.php" hash="b5653205b12da006a91e498ca7fc7dc4"/><file name="Exception.php" hash="e12baa19246087c376b7d5cbf0ab7eca"/><dir name="Filter"><file name="Abstract.php" hash="efc802cd50bc28c4181e5bbab247e725"/><file name="And.php" hash="662ca1c25383de02b569c76bc62a058f"/><file name="Exception.php" hash="4f8ae5e40c68e60f00550dd5ccd7aa34"/><file name="Logical.php" hash="06aad3c5c574bae76adc46927ae21474"/><file name="Mask.php" hash="904d6707c87b202d9b66e1e3532fbd94"/><file name="Not.php" hash="028697704f21551b33dcb7c160369691"/><file name="Or.php" hash="8dec15db06446ad375c61c7f46912d7c"/><file name="String.php" hash="b1cc0c074d1822be6124f6c48e351a86"/></dir><file name="Filter.php" hash="c50df357d992c35c217ac7803ce314b2"/><dir name="Ldif"><file name="Encoder.php" hash="d1116ef8bfa81ce18fd5cbae52942227"/></dir><dir name="Node"><file name="Abstract.php" hash="e84bbf67046f975a1f5775aa0d49348d"/><file name="ChildrenIterator.php" hash="8b0c6775e5111e80938ccc9cb60aed0c"/><file name="Collection.php" hash="11098b8c84df455895877fad99f30a20"/><dir name="RootDse"><file name="ActiveDirectory.php" hash="c5f5e80b8dd2cb1e31ac3e03fc279024"/><file name="OpenLdap.php" hash="dcd6e7ebc3775e6a5cba8485bd78c8d6"/><file name="eDirectory.php" hash="f946fccdb3015b015d3cff00829a6ea6"/></dir><file name="RootDse.php" hash="c247acc47a79441717304abade296309"/><dir name="Schema"><file name="ActiveDirectory.php" hash="85bc7915ab42dae47c2d4fb8e3dba51c"/><dir name="AttributeType"><file name="ActiveDirectory.php" hash="04a142f499e0848e9ae43a64786328d4"/><file name="Interface.php" hash="ae4ab45b50efa4e032e32912d9c6a776"/><file name="OpenLdap.php" hash="a823f4b81c597a3820e4fe67e5454e70"/></dir><file name="Item.php" hash="fe670cbd69aa5863f9f66efadfcd3dd2"/><dir name="ObjectClass"><file name="ActiveDirectory.php" hash="e678fbe8c0e965cf7db01e829adff67f"/><file name="Interface.php" hash="166b71e4032d84ecfc88365d89b1de11"/><file name="OpenLdap.php" hash="428b8707dc060e1f9e7854005c51d58e"/></dir><file name="OpenLdap.php" hash="2e52c69ae03823a1d0f42e83aff2f316"/></dir><file name="Schema.php" hash="2745fb40a9578d326a48718ee91cc5fa"/></dir><file name="Node.php" hash="648c759b832b68b000e8bf08af0339ce"/></dir><file name="Ldap.php" hash="da470d2a2a451bc59b2ed1ecb118ec5d"/><dir name="Loader"><dir name="Autoloader"><file name="Interface.php" hash="5a8847bbf702beb3c5d03d9b6620291a"/><file name="Resource.php" hash="b9e4409e67051a21f4e2ae855c1bd691"/></dir><file name="Autoloader.php" hash="4882de8624fe2953294bb4a2a2a6f8f6"/><file name="AutoloaderFactory.php" hash="3ec199fa5c2dec860143b37f17b5ce65"/><file name="ClassMapAutoloader.php" hash="2acb3037511952ac7eb2bab70501dcd9"/><dir name="Exception"><file name="InvalidArgumentException.php" hash="4286045d7c3bad36fa3e101f0beadfaa"/></dir><file name="Exception.php" hash="81dbec797bf5464d3dd93886de055be3"/><dir name="PluginLoader"><file name="Exception.php" hash="fba867bd38d0dbb235f86cc6899d834e"/><file name="Interface.php" hash="60638720a3d503c41b6679d1a12c9e59"/></dir><file name="PluginLoader.php" hash="6be3d7edad844778eb79c52494f04eb8"/><file name="SplAutoloader.php" hash="b35315f66536a170485d6a91cc962a4f"/><file name="StandardAutoloader.php" hash="181406bd273d500ef771e5f24b0bd909"/></dir><file name="Loader.php" hash="817eebfff3c19cf057a8bd92f0c9c679"/><dir name="Log"><file name="Exception.php" hash="b163db6d6600897c6d7d9675f5b2082a"/><file name="FactoryInterface.php" hash="950fce8f1016b9149a3afa78cb5d6bdd"/><dir name="Filter"><file name="Abstract.php" hash="588c7a33b8cc18516fb09f45b6e4df27"/><file name="Interface.php" hash="8e207e5fde37a093bc429eca471abdb5"/><file name="Message.php" hash="42c00aa794507e263369816ebd6ecfb9"/><file name="Priority.php" hash="3bc818826edb7d8d47778c71534968ca"/><file name="Suppress.php" hash="6198f609922c91844696ad749f8f988b"/></dir><dir name="Formatter"><file name="Abstract.php" hash="f6b6a3a2f08104b92f02916dfae10819"/><file name="Firebug.php" hash="18bf525dd98a338a0068adc7223004aa"/><file name="Interface.php" hash="f304a62a7dc3774938c9a4c0386e312a"/><file name="Simple.php" hash="e99de8b500f61444ef4ffd6bd44f8b28"/><file name="Xml.php" hash="dc3361c1aeaa94dca0dac28920c7ea8d"/></dir><dir name="Writer"><file name="Abstract.php" hash="79ccb8a60f0146adc3d1019487a99a69"/><file name="Db.php" hash="e9dd86777ca1735ccec177c7e385316e"/><file name="Firebug.php" hash="6227fe3e164c36db1829e4afd5fdddd2"/><file name="Mail.php" hash="3f76aaf2c1bfa288b7f126efd127c306"/><file name="Mock.php" hash="be44a2526cd397f294cb3350334479cc"/><file name="Null.php" hash="7dc63aa32e13ee72975d68873d87d85d"/><file name="Stream.php" hash="5a287635e4c1d74763215959ba19b70a"/><file name="Syslog.php" hash="06022b333a8ca4d896eaea75f92fe543"/><file name="ZendMonitor.php" hash="3e508d727439f6c10212e70617d68b20"/></dir></dir><file name="Log.php" hash="1c6f8b389780f0bb85202471def93ea7"/><dir name="Mail"><file name="Exception.php" hash="8d01b40eca451bee7c9401d2498ae65d"/><dir name="Header"><file name="HeaderName.php" hash="ecd8c8336e3619779a72d1e1f105675c"/><file name="HeaderValue.php" hash="d55840608558bb29022bca0c565ae55e"/></dir><dir name="Message"><file name="File.php" hash="7415d6300a134322e1f9b5723f456375"/><file name="Interface.php" hash="37f65eeadf5f7d8c46e5740810a91f31"/></dir><file name="Message.php" hash="eea17eeae16ed0696aef9794f947791b"/><dir name="Part"><file name="File.php" hash="2973a0c512d8a12ae250f0310e7ab715"/><file name="Interface.php" hash="5a08dd0d4abfeba0e2b6a3bcd0647cb0"/></dir><file name="Part.php" hash="b948eb534e24b93bb22d34d6dc78c494"/><dir name="Protocol"><file name="Abstract.php" hash="75f76eb34f20aef472da005983e4ade4"/><file name="Exception.php" hash="324b88f119661b2fb45e50e03fdbb797"/><file name="Imap.php" hash="4be011d91db7e932867a9ef04b9e3f1c"/><file name="Pop3.php" hash="a3f36e5260b3fdf15ff91afb4edd06c8"/><dir name="Smtp"><dir name="Auth"><file name="Crammd5.php" hash="989efed470312ec3d252f04f48b13f1f"/><file name="Login.php" hash="eeb279a39d84d0c34b5b3c57a0d8e1fb"/><file name="Plain.php" hash="4e4fb49d2c0a4c3cc6326b9362663812"/></dir></dir><file name="Smtp.php" hash="a99437c462526c3ab7c4a16e6dd73dd5"/></dir><dir name="Storage"><file name="Abstract.php" hash="c80a746bb73014c266f2785247770e77"/><file name="Exception.php" hash="8dfb9dc508a506017fa2aba591171706"/><dir name="Folder"><file name="Interface.php" hash="e46d56b2092b8e66b0de59f089f28dbc"/><file name="Maildir.php" hash="2ffec84ff5cebbc06f42a4bf4e8e49a0"/><file name="Mbox.php" hash="a6bc27702d0e9acbc52d83efdbb623c0"/></dir><file name="Folder.php" hash="710f0f79f55eb9c16523b59b3e46026d"/><file name="Imap.php" hash="63b4ec9c47e81d973c0cecb781a0e398"/><file name="Maildir.php" hash="c298cee3127aebf1d902bc6a263cd67f"/><file name="Mbox.php" hash="96e1d239b5d88772aacd245255d35cc5"/><file name="Pop3.php" hash="fe599c6260e22c23dcd3bfd698271b77"/><dir name="Writable"><file name="Interface.php" hash="a5a3487a8b0dcc8c1f957e10b9535c96"/><file name="Maildir.php" hash="f9dc51e0430fed3cb7fb06a6fc46b4c1"/></dir></dir><file name="Storage.php" hash="bf94dde2f63c2ea5933cff36fd0d96d2"/><dir name="Transport"><file name="Abstract.php" hash="b5e088f0f4a65356307e1e6048558c5a"/><file name="Exception.php" hash="2fc585f21c0c0bbfb8d9218788a99d91"/><file name="File.php" hash="976dec70144df18e87d527ff7e516758"/><file name="Sendmail.php" hash="0a64fedcc87ebe0c9c15695805201bef"/><file name="Smtp.php" hash="6f916608a1b6f93dc6d116e8d8f40b94"/></dir></dir><file name="Mail.php" hash="233f0679a2a5101183c73419cc14e184"/><dir name="Markup"><file name="Exception.php" hash="6acb9e012348c31a98e8016f689bd83b"/><dir name="Parser"><file name="Bbcode.php" hash="fe5258254d43407c8ebf45121d5d3443"/><file name="Exception.php" hash="96b47171a5e4994dcb75bfeb964a3261"/><file name="ParserInterface.php" hash="22f4cab8c966e18965cc16bf1ac58a2e"/></dir><dir name="Renderer"><file name="Exception.php" hash="c27375ebcd69a8eb56a5c3e3229ef88c"/><dir name="Html"><file name="Code.php" hash="c919be3dcefb797b425cd65153302f6e"/><file name="HtmlAbstract.php" hash="7dc1ee614c7d125582f34ded495bd5a3"/><file name="Img.php" hash="6a130ace451a6ed0a2d0a1f1ea3bff58"/><file name="List.php" hash="e8474711d02734026d531708832e1310"/><file name="Url.php" hash="6bb6f2015aa632299941bf9997e8110e"/></dir><file name="Html.php" hash="b607c5add3adcb046c58771b79ecdca5"/><file name="RendererAbstract.php" hash="bf2e4d797e26ef28885babcf2d9e2722"/><file name="TokenConverterInterface.php" hash="e5b38c0b3ba387f0df071a35c7fb1f3f"/></dir><file name="Token.php" hash="925b6878c35fd1e0855a73ecf684f25c"/><file name="TokenList.php" hash="590aa72556941d672184f1aca02ef30c"/></dir><file name="Markup.php" hash="70327a385551a40429dbf98def244565"/><dir name="Measure"><file name="Abstract.php" hash="a844b711aca6638ea933630264ab309f"/><file name="Acceleration.php" hash="f6b1c64dd6bacb4f38d91f72cd8db6d9"/><file name="Angle.php" hash="6c7ec7f864050be14c1735017d149b18"/><file name="Area.php" hash="88b0f14de44d235235da841062691dd1"/><file name="Binary.php" hash="5f9e527c1e8d01535d9bfea7105ac76c"/><file name="Capacitance.php" hash="8bff74324cadcd21836b5acc547a544e"/><dir name="Cooking"><file name="Volume.php" hash="334d3bd9a1023acfed66eb41bf307a15"/><file name="Weight.php" hash="d970ef6d6f08a37db72285917d30ccd6"/></dir><file name="Current.php" hash="1747ffe7532a5c7c060343e3271a27f2"/><file name="Density.php" hash="f4cb05733337475f59762b41a29ae3bc"/><file name="Energy.php" hash="2ed086e65b6f7a4ce1280d8ef9d0f1c3"/><file name="Exception.php" hash="d00039899c6aa43c6b250588bbc07e35"/><dir name="Flow"><file name="Mass.php" hash="2d322913557ff2bfc45afc2ab480babd"/><file name="Mole.php" hash="ff0fe19858605f8c65cbc6f1f377aba4"/><file name="Volume.php" hash="66df34980d0aa473755280393b0f0d7c"/></dir><file name="Force.php" hash="9525a6c47d1e4cbaded7b3477d3c4ba7"/><file name="Frequency.php" hash="80bf10cfe7eeebc3d281b7ed11b397ea"/><file name="Illumination.php" hash="98ee18ab173727ba4dc93a3ada6edd33"/><file name="Length.php" hash="7318f5740bfe039f8c6bda66f172251a"/><file name="Lightness.php" hash="ea419ded90ccd0f5c053262458cc80eb"/><file name="Number.php" hash="7a63c36bbf2089aef5e8ee3e7347e24c"/><file name="Power.php" hash="c896cc783192f260057584f2ba881f87"/><file name="Pressure.php" hash="49c451f9eacd6d162ba6bb629e9118e1"/><file name="Speed.php" hash="c601fe3564d6f3d1f8813a0a7013e335"/><file name="Temperature.php" hash="0d5d33464d00562675fd5d801eebe117"/><file name="Time.php" hash="1c8b825d84b6ccffd76906404d92173a"/><file name="Torque.php" hash="1f530a46616ba82d78541493fb321445"/><dir name="Viscosity"><file name="Dynamic.php" hash="5f002bc79a1c1138cacacec371db37ab"/><file name="Kinematic.php" hash="bd10456069dc6d35a3e1713bd4c6dd71"/></dir><file name="Volume.php" hash="0fbf0ca1290f4aa1af5b23982a6914c3"/><file name="Weight.php" hash="a821fffd5941ccd527cc1d0694336b00"/></dir><dir name="Memory"><file name="AccessController.php" hash="a70d4c42eea7b98f61113d798b55259a"/><dir name="Container"><file name="Interface.php" hash="6068d380217bf27b6453cf894edb8695"/><file name="Locked.php" hash="9bc2f25899430f7ad02853e88dfca0a9"/><file name="Movable.php" hash="4c3c042f5e2bcc2531715dde401171cf"/></dir><file name="Container.php" hash="8feed8c3f2b8f5f0e8d688f13c48c2aa"/><file name="Exception.php" hash="3329d69fccf497932b1a2c27e9919c18"/><file name="Manager.php" hash="1a5c0de427d4436a95fb9d2c0953f279"/><file name="Value.php" hash="697a03309f774813690845eac71d4702"/></dir><file name="Memory.php" hash="2e82b15d077661c5c4b8201ea5bab1fc"/><dir name="Mime"><file name="Decode.php" hash="0cd721f3b84a257348cbfcb73919759e"/><file name="Exception.php" hash="994fc2875e99f10a522cb82e4a54b2b7"/><file name="Message.php" hash="4e3dd5e95f8621955641c7e1b4de46c5"/><file name="Part.php" hash="a11ac478688ef12d8cd0ccecff33670c"/></dir><file name="Mime.php" hash="39042a59c2be063d736a04dac55e903f"/><dir name="Mobile"><file name="Exception.php" hash="519a024f65881a7a4237732573710059"/><dir name="Push"><file name="Abstract.php" hash="456f8a825509d342fcfef1439673f54c"/><file name="Apns.php" hash="d8429732ef082dd5db604fea4c8915b5"/><dir name="Exception"><file name="DeviceQuotaExceeded.php" hash="86b9ff4bc83a799a58f7dffea7382284"/><file name="InvalidAuthToken.php" hash="5ad87658c33a7d9cc6f917d0b5920253"/><file name="InvalidPayload.php" hash="25c5f5d11619d662e9274418d98ed4f8"/><file name="InvalidRegistration.php" hash="8658ffa721150d321de50135d2e5a807"/><file name="InvalidToken.php" hash="713a8d260276537743a4d04b4aa81c11"/><file name="InvalidTopic.php" hash="7c829b73a958a1a5b2727d2819061578"/><file name="QuotaExceeded.php" hash="be67af28f9904f0fc42004751daff33a"/><file name="ServerUnavailable.php" hash="ed4b06b1ef3e3c429b90731ae2920412"/></dir><file name="Exception.php" hash="f894173f4a187922ee49522cf8d3353a"/><file name="Gcm.php" hash="920c224bf5d2829b12e860785f1fcb02"/><file name="Interface.php" hash="8ac308916b40869193bfe9f4924c6d8d"/><dir name="Message"><file name="Abstract.php" hash="60010ad2c300cc7aaeef6e09bd1f0eb7"/><file name="Apns.php" hash="3aa335c6ee551991ad704c6ec1965399"/><file name="Exception.php" hash="14efc16a622ee08a4d66f6b966aa8afc"/><file name="Gcm.php" hash="8e5c08acd168e10c7e0b7be393683846"/><file name="Interface.php" hash="aa9b1e963e71262791a2e85f9d5e03d4"/><dir name="Mpns"><file name="Raw.php" hash="cd49049ab99df63e747b3cf21ce49056"/><file name="Tile.php" hash="eeb12c6d00f840c828e8f928ef28e747"/><file name="Toast.php" hash="6b7b461af1ebd47bc8278388762e186d"/></dir><file name="Mpns.php" hash="bfb031f22738438461df23e002feb93c"/></dir><file name="Mpns.php" hash="d027a3baf86b7808b8f5dd097dd748dc"/><dir name="Response"><file name="Gcm.php" hash="02cdfb00622182c505e7c4916fb51397"/></dir><dir name="Test"><file name="ApnsProxy.php" hash="ef5b18b7cac0826d10cca487ab851180"/></dir></dir></dir><dir name="Navigation"><file name="Container.php" hash="ae908f801587df5bbc7a44d94e290365"/><file name="Exception.php" hash="1f907b7d1a68ca8d29b29f8f9694ca3c"/><dir name="Page"><file name="Mvc.php" hash="bb408e6676cc27d470e41f21084d050f"/><file name="Uri.php" hash="45e78f322e869f7570a82cac147f9985"/></dir><file name="Page.php" hash="ecc7fc65c84c45b552ea81d280fc13d2"/></dir><file name="Navigation.php" hash="bee97615ae02af0c039d61863d0b1e00"/><dir name="Oauth"><file name="Client.php" hash="74d6c02debac4961c253da9d8cc2fe5e"/><dir name="Config"><file name="ConfigInterface.php" hash="1cabd35d6a7f0f92529457b4ea62e17a"/></dir><file name="Config.php" hash="a02e7f37acbb42bc34feebc920d49871"/><file name="Consumer.php" hash="3dc938414065746a37763d2b592e1ee5"/><file name="Exception.php" hash="570bf15ce9b8ccf76e4bcd949adeef50"/><dir name="Http"><file name="AccessToken.php" hash="986d7e25f96d5bed67914e08404bbb5f"/><file name="RequestToken.php" hash="f4f86a01a6e424aaa7e8edb99e518f59"/><file name="UserAuthorization.php" hash="758cc6c3df942ac5ac3b103527a99a10"/><file name="Utility.php" hash="9c69fe9d58add25eda7730460eeb4ae1"/></dir><file name="Http.php" hash="cef52b37622bcfb2efd2a9644babc94d"/><dir name="Signature"><file name="Hmac.php" hash="26331323b06095d36ea1b3d8de214c79"/><file name="Plaintext.php" hash="11266c5bf1d868c63fac84ff14c22061"/><file name="Rsa.php" hash="4ea7e936077c094ee6365ee33707c4fb"/><file name="SignatureAbstract.php" hash="09e632d7cfb30720b43cd8e33ca867f7"/></dir><dir name="Token"><file name="Access.php" hash="974b61753e392b577562e7090dec4102"/><file name="AuthorizedRequest.php" hash="2c5a7071f93bfc03e8098a367c1b95ad"/><file name="Request.php" hash="3253abe4f0340e7fa12d6c26c669e1cf"/></dir><file name="Token.php" hash="19cbcf77a287619c7043efc9cf4cc2fb"/></dir><file name="Oauth.php" hash="239174147ad1cac48ff43b86ca768b5d"/><dir name="OpenId"><dir name="Consumer"><dir name="Storage"><file name="File.php" hash="53a1aec62db8e0bf8153d2363b8afdcd"/></dir><file name="Storage.php" hash="96636f4707d5090dd777ca16ff5f9498"/></dir><file name="Consumer.php" hash="d4129677162161a383a8327a8a5f5cb4"/><file name="Exception.php" hash="9ae51477a152a9993db86a2b3e87a792"/><dir name="Extension"><file name="Sreg.php" hash="a46ab3f654e7718b74f256863398070d"/></dir><file name="Extension.php" hash="d0cbcdb2874105fad8d517731ee682dd"/><dir name="Provider"><dir name="Storage"><file name="File.php" hash="78e54dc83e5862422be8c086458815bb"/></dir><file name="Storage.php" hash="a111906ee39dd25c3e8f03edf73a3f0b"/><dir name="User"><file name="Session.php" hash="184de6934deff211975387b3d0eea0c7"/></dir><file name="User.php" hash="1130cc8407f1607fcc19e0e0e7048953"/></dir><file name="Provider.php" hash="e82af61658678702cf9b92879c70494d"/></dir><file name="OpenId.php" hash="3afe8be181b4ee86ebca1531a1bd8b0b"/><dir name="Paginator"><dir name="Adapter"><file name="Array.php" hash="b19b7013fca38d006a2b638b89312764"/><file name="DbSelect.php" hash="3bd5b7dc7a01b4dcb161f396be0b8670"/><file name="DbTableSelect.php" hash="cab2b30b8210b2979b0c6bed4b123fad"/><file name="Interface.php" hash="5762707d8b9db19faf2a773eb78edd76"/><file name="Iterator.php" hash="3a51f92d688197a2967eef55d802f56e"/><file name="Null.php" hash="2e58e92129e83d96b61e5ba5bf679157"/></dir><file name="AdapterAggregate.php" hash="b6ed68617efff6b9dd41ba5d27cde51f"/><file name="Exception.php" hash="bd8961847f8ea166c7e222e2344d586b"/><dir name="ScrollingStyle"><file name="All.php" hash="7a024155b60bcbb024b3ab8418ea1737"/><file name="Elastic.php" hash="a7d8784429dc1e520b3f98d14c5eac09"/><file name="Interface.php" hash="1d6adbef71c9c1966676ede68de7f977"/><file name="Jumping.php" hash="2e2e9f1633d9ec60e0e111a5794aed93"/><file name="Sliding.php" hash="9f768e8bcaf3bd6f12e0e939c00775d4"/></dir><file name="SerializableLimitIterator.php" hash="411f2359e449e170c5dadaa24803a54b"/></dir><file name="Paginator.php" hash="0d3667499c2f0c3a8c9e5907e812b7a5"/><dir name="Pdf"><dir name="Action"><file name="GoTo.php" hash="d1e30bb7d45aedbeaa31b5dc8b40e287"/><file name="GoTo3DView.php" hash="fcd5460403b8433315caeca12418a5cf"/><file name="GoToE.php" hash="599ebb6d2df80852cfca9a9cedb8d6b0"/><file name="GoToR.php" hash="474402a7102d563261bd914a721b36d2"/><file name="Hide.php" hash="8810efbd459a87d1ee9de7cd007d1644"/><file name="ImportData.php" hash="ecd6feef7d654d60b8efc24bf26d4662"/><file name="JavaScript.php" hash="9bdf7f5f8360300bc95e3e293431f425"/><file name="Launch.php" hash="3e3b49828aefff82b9b44b295084e413"/><file name="Movie.php" hash="b65daa361fc8e77f5ffc4ecedb3becff"/><file name="Named.php" hash="7a1ea555152631327d04a9eb263b4a5a"/><file name="Rendition.php" hash="363bd0314e6d20994934dabd3ad63684"/><file name="ResetForm.php" hash="f4637cd51199245ab14aa6021ffe71be"/><file name="SetOCGState.php" hash="301da63cac76237c91818aac076cbddc"/><file name="Sound.php" hash="ee1e489704abce5aa0dee9047bd8b456"/><file name="SubmitForm.php" hash="657a9f4bc9cd87ca3551370d195b7a35"/><file name="Thread.php" hash="ecee0d4d74deafefed77cd0f6798093a"/><file name="Trans.php" hash="d9f99fb44efc3651ca5e2c56fd7e96b6"/><file name="URI.php" hash="7e52db0fd92d4edb87ab4f4e789d45e3"/><file name="Unknown.php" hash="a8602a55e7a0792d6cd0615c9ac23c41"/></dir><file name="Action.php" hash="ec5a813b9a9a0caf8beb63b890c68450"/><dir name="Annotation"><file name="FileAttachment.php" hash="f3864019953d49d9cd83d322f9a54f4d"/><file name="Link.php" hash="bff1663cb2b899d96d2b5e539f516d63"/><file name="Markup.php" hash="ab0f2e3e12ec5c7e75b2daf9851c59d1"/><file name="Text.php" hash="7b507f12f45421db845a74e91a0c78fb"/></dir><file name="Annotation.php" hash="0d098c2160f4b3267e7fd7f367f30290"/><dir name="Canvas"><file name="Abstract.php" hash="364364cb99b19cdf0d622397424e155d"/><file name="Interface.php" hash="1795a31a88af11db1f8eaefae3751d65"/></dir><file name="Canvas.php" hash="00dcbc00ee5b0678292c40c62709bb37"/><dir name="Cmap"><dir name="ByteEncoding"><file name="Static.php" hash="bca21500f7be22a1c6349cce6b489afa"/></dir><file name="ByteEncoding.php" hash="84d9e9e1afe70befb0b7c193516a7ad6"/><file name="SegmentToDelta.php" hash="34570bbef3c618d344e056a65a86310e"/><file name="TrimmedTable.php" hash="1a8eaed30b4393a4ad1972ccfa586275"/></dir><file name="Cmap.php" hash="9d7432c932a1f5260c8752cd0eb09cb9"/><dir name="Color"><file name="Cmyk.php" hash="9024fe208254093dfedb355f1a56bfa3"/><file name="GrayScale.php" hash="ac29a955a5422d31e3c6342c9ba5df7f"/><file name="Html.php" hash="98c75da7b5c1e27d72029a612973c33b"/><file name="Rgb.php" hash="db12cfc9dfbb80831d4b1e5436ff8323"/></dir><file name="Color.php" hash="104cf49d07c358cc85220fc3122e800e"/><dir name="Destination"><file name="Explicit.php" hash="13bd68687766542d36847199a9dd478a"/><file name="Fit.php" hash="1aa3f00fde3170cae69b69bd17786c3b"/><file name="FitBoundingBox.php" hash="b59f2ed44504d9f3df4a8e05450c0f07"/><file name="FitBoundingBoxHorizontally.php" hash="1271088bf2557a2eb8c18f388e1853ee"/><file name="FitBoundingBoxVertically.php" hash="16948b893fe63488b34891f82d409d52"/><file name="FitHorizontally.php" hash="88e880e0528a4f7060d233e687e90667"/><file name="FitRectangle.php" hash="408a9be40986151fff98af1efabe8a28"/><file name="FitVertically.php" hash="136c71dd521fb51103f98a76734fb8c1"/><file name="Named.php" hash="a65c919e6fa48d4453a9581ebb908adb"/><file name="Unknown.php" hash="1a2e8b67ee995941dc43b43070a3971f"/><file name="Zoom.php" hash="c9325d991fc179afcca30c3636e72e1b"/></dir><file name="Destination.php" hash="b7605192c93386f3fd25520d180343dc"/><dir name="Element"><file name="Array.php" hash="b644069461389d8cffe6d3bd1cc49835"/><file name="Boolean.php" hash="d4a4de598d871b0ae391dd72ee4cbd2a"/><file name="Dictionary.php" hash="fa2156732ab46185f1412c3e22c54c92"/><file name="Name.php" hash="be8084d6e0fec7b6941bfcb2cbc93535"/><file name="Null.php" hash="a982c3b2f79e698e80cccc4cd794219a"/><file name="Numeric.php" hash="020e5a151377a7f95b0ab846f4cf5829"/><dir name="Object"><file name="Stream.php" hash="9a4d7197a43ba30df5e1871cf85a05f2"/></dir><file name="Object.php" hash="f0b69fb983587a2f68a1f40e3e417663"/><dir name="Reference"><file name="Context.php" hash="e15ad61d18c94f11179594e9a58cb6d3"/><file name="Table.php" hash="6a90fd67ff295547877255bf8bfbe2a1"/></dir><file name="Reference.php" hash="0725ddc6094e61656354a949986d4def"/><file name="Stream.php" hash="166a0bef11c118de4591b7436a9e999f"/><dir name="String"><file name="Binary.php" hash="f6a6e7ce998124ba104470dcb4734dec"/></dir><file name="String.php" hash="e776be7acc388a17af23bec80954de82"/></dir><file name="Element.php" hash="3595c5f91616d00f51af614feafda5f5"/><dir name="ElementFactory"><file name="Interface.php" hash="d1a6e36aaeee2b4a4a7f8b6111facbec"/><file name="Proxy.php" hash="a07e4d22cba4810f367ca6b7240fbc83"/></dir><file name="ElementFactory.php" hash="024f30704c4c693597c11f4b032dfedc"/><file name="Exception.php" hash="7b3b6c5890b43cd2fb05b68f6282f521"/><dir name="FileParser"><dir name="Font"><dir name="OpenType"><file name="TrueType.php" hash="b493bcd28a5c4006be3f5c0a1081b28c"/></dir><file name="OpenType.php" hash="a5d6ab27fa54d414b01532d4830ef090"/></dir><file name="Font.php" hash="56634e0dcb7ade369b564643c5a5d171"/><dir name="Image"><file name="Png.php" hash="15d071e3ce65f9eb9936ca4149910fb7"/></dir><file name="Image.php" hash="29748c74077a30e3b3d108c316ee1910"/></dir><file name="FileParser.php" hash="4d54f7155401a9fb7df70998a2da9a50"/><dir name="FileParserDataSource"><file name="File.php" hash="1e9148d68ab81b33f2d88c403d9495a5"/><file name="String.php" hash="e4cd122d052ef39e6da5c38ec452d161"/></dir><file name="FileParserDataSource.php" hash="eb883b69beb455a62c8931a878151085"/><dir name="Filter"><file name="Ascii85.php" hash="b65b7f97285f88f9f11265191cf20849"/><file name="AsciiHex.php" hash="ed846de8708cd7026f551d78de57782d"/><dir name="Compression"><file name="Flate.php" hash="faf5cfc2e9c94444e43d7e6944247988"/><file name="Lzw.php" hash="9c28f750f6600ce94877b78ad7c71324"/></dir><file name="Compression.php" hash="73050021440ac2c7b18bd20513157c3f"/><file name="Interface.php" hash="e90f59d18816fbaacd86b59b392686d4"/><file name="RunLength.php" hash="e80a6edbe6fa87c4702d09d65db1a2ea"/></dir><file name="Font.php" hash="51087d7787fad796537357c3ac69dc73"/><file name="Image.php" hash="7877b76dd9e150104b83037266258658"/><file name="NameTree.php" hash="da4cc3e1566938790d1c613174aa23eb"/><dir name="Outline"><file name="Created.php" hash="9d373dc681d5b2805d30b5685ef862c2"/><file name="Loaded.php" hash="d6d0bcbbbc7125de10670b4e6562b59d"/></dir><file name="Outline.php" hash="f26766891dc3d3bce49b037adcfef12e"/><file name="Page.php" hash="13f4483dfd5d93e7e94d273c662b46ac"/><file name="Parser.php" hash="ba36ebc92a1b6e525ed8c0408e251bef"/><file name="RecursivelyIteratableObjectsContainer.php" hash="715f93a595f54a38111141fd5968213d"/><dir name="Resource"><file name="ContentStream.php" hash="a1749fec0cba8e9cb72efb1304de2346"/><file name="Extractor.php" hash="bb8efb4919fa8775f711f61d183a4e12"/><dir name="Font"><dir name="CidFont"><file name="TrueType.php" hash="1290b18c2ed5643477c1e88b0c76987e"/></dir><file name="CidFont.php" hash="382f00c4a207bea2ffd82a5d77da6304"/><file name="Extracted.php" hash="bd8bedaf4a31c4ae1eddf944644ecce5"/><file name="FontDescriptor.php" hash="9fcedd31b44153c7ad83cae939397e42"/><dir name="Simple"><dir name="Parsed"><file name="TrueType.php" hash="e060a25bc471d15d43a51d580679326d"/></dir><file name="Parsed.php" hash="becce62602415adde90984b7590993ba"/><dir name="Standard"><file name="Courier.php" hash="1a8795c6738e56ecc9b223ed823c0e0a"/><file name="CourierBold.php" hash="271652240d7b89827820060a185aef0d"/><file name="CourierBoldOblique.php" hash="f8e6fa84ffdc7ffcb8069c67e813f09b"/><file name="CourierOblique.php" hash="7b4080d45eff2b8fd5d66db97512a8bd"/><file name="Helvetica.php" hash="fdf4947a20fbf3f694f4fe940cec5df2"/><file name="HelveticaBold.php" hash="1340145daef0b6ed9e4d15ede06a0530"/><file name="HelveticaBoldOblique.php" hash="ae26d6990824525b0cb3c99e87674000"/><file name="HelveticaOblique.php" hash="a05d94e11e3e1db842ac7f1795074373"/><file name="Symbol.php" hash="9443a7d26e4c2a752cf3f4ff883ffa05"/><file name="TimesBold.php" hash="b2619f7edcc8abab8ff28a4009123f84"/><file name="TimesBoldItalic.php" hash="433fcd37d348fa4458cf437ea2cdabad"/><file name="TimesItalic.php" hash="76ec1fbba59e77bb848f8696337aadf0"/><file name="TimesRoman.php" hash="953b76c5e03a7858bd8361872e412ded"/><file name="ZapfDingbats.php" hash="548d057f0040392a4828264f24e243cd"/></dir><file name="Standard.php" hash="f332565c96e87d79436790a096f46aef"/></dir><file name="Simple.php" hash="334a3b36ea5235902d79cdb31cd05d73"/><file name="Type0.php" hash="6c0a83ed854fdbb16bf525fcd219a4ca"/></dir><file name="Font.php" hash="6046881c1057ef05d0a420998a05c1a4"/><file name="GraphicsState.php" hash="b51172933cdb59ea271e7a9ae323fe29"/><dir name="Image"><file name="Jpeg.php" hash="0a1a368f9642c0b98d8ff24f0aae7c3e"/><file name="Png.php" hash="f77b42c714316c69714df0a2a94cfb7c"/><file name="Tiff.php" hash="06e9fd0b542ecc53649d868fbb59372b"/></dir><file name="Image.php" hash="dbec25fbc65e673b12f311785249ae4f"/><file name="ImageFactory.php" hash="45222c4b5170b11e9b1fc9f16700f1a2"/><file name="Unified.php" hash="710f5f418d4939a609144eab68a8b797"/></dir><file name="Resource.php" hash="b71cd04a74a88e040f06ea7663ea5e65"/><file name="StringParser.php" hash="5376c86288c13e706f2c76478ae474f5"/><file name="Style.php" hash="8aceb18b61204e8157a46c41bbcdd7e9"/><file name="Target.php" hash="1a2badb1e3ca52a2368a77b0646efef7"/><dir name="Trailer"><file name="Generator.php" hash="2c12f38db376c57935d09f8527fa786d"/><file name="Keeper.php" hash="df14918b0e392a71bd41817f0abfaf55"/></dir><file name="Trailer.php" hash="8069878c1e9320d2b8533cf1e144f4f5"/><file name="UpdateInfoContainer.php" hash="39f4700c55860bb9ec1b3f122258930f"/></dir><file name="Pdf.php" hash="7f96ca856c0dde6e6074711e0db2487b"/><dir name="ProgressBar"><dir name="Adapter"><file name="Console.php" hash="09f7268da0ecd77f2d174f4a8a3de869"/><file name="Exception.php" hash="6a2ed89846b42f86a235044d05555198"/><file name="JsPull.php" hash="582d2e3d4fe457d4c961701b014886d1"/><file name="JsPush.php" hash="229b568b05cf46950fbb3707ca150c01"/></dir><file name="Adapter.php" hash="8297cf770c0ee628158397e3b089c621"/><file name="Exception.php" hash="6fd9c59515c836a7e044c07b146c1e6d"/></dir><file name="ProgressBar.php" hash="581036cf36019829ad17b626f15344f8"/><dir name="Queue"><dir name="Adapter"><file name="Activemq.php" hash="b419df4c2da5f1188e2f9fc07fa17d6b"/><file name="AdapterAbstract.php" hash="77fdf9a85df53d3a3b2a2f5d22e80626"/><file name="AdapterInterface.php" hash="0dcaaa3d94f0c384a3c37e45c7529b3e"/><file name="Array.php" hash="b3227f915782241e3ebdce389d3f0a18"/><dir name="Db"><file name="Message.php" hash="017e049117119a01fd2acf00fac7c5c4"/><file name="Queue.php" hash="0036c67014f3b5787878ecb638088423"/><file name="mysql.sql" hash="487d5a36b9172382351a7cc39d20d221"/><file name="postgresql.sql" hash="42dfaf91f8a425170c9b4b2c9318c875"/><file name="queue_sqlite.sql" hash="b0e5a2e43dfc9a230a5ec397c351eaf1"/><file name="sqlsrv.sql" hash="646346084e937e9239d911485bc0296c"/></dir><file name="Db.php" hash="876370736f86a93dedc206bdaea8ac05"/><file name="Memcacheq.php" hash="f0a6604c99debe72daf655a2f97ddc03"/><file name="Null.php" hash="abbd08fab4a38429460cd70b6170c492"/><file name="PlatformJobQueue.php" hash="0e9187b14fcb15711fc18e6bf0dd1383"/></dir><file name="Exception.php" hash="279bbedb61b1778812827fb636c62bd2"/><dir name="Message"><file name="Iterator.php" hash="11ea9382769f547d17a66ac1a54d655b"/><file name="PlatformJob.php" hash="2988e7c33a68ff837ffd7dcbd835de3c"/></dir><file name="Message.php" hash="fb9762a45a532513ff209e2b4820f871"/><dir name="Stomp"><dir name="Client"><file name="Connection.php" hash="aff6c9c41035654ec0d4a4887b4dd218"/><file name="ConnectionInterface.php" hash="e4adc375b6e177fafbd45e47b93ad1b1"/></dir><file name="Client.php" hash="1d64509385a30e21abb7df5e31aa11ae"/><file name="Frame.php" hash="d909edb1b42697e4f557de5a68368932"/><file name="FrameInterface.php" hash="16c13ddfcf2b1bcc50b85c61dc546646"/></dir></dir><file name="Queue.php" hash="1c9e3ec5bc7508a98b7de1f77ee61ba2"/><dir name="Reflection"><file name="Class.php" hash="ba4973471396d116ba92824b47d313a8"/><dir name="Docblock"><dir name="Tag"><file name="Param.php" hash="2a51f3907ad2ee281175d3cdb28a2e6b"/><file name="Return.php" hash="b0200cc0b804828031ab3a8582dbdcad"/></dir><file name="Tag.php" hash="0eebe17d3442b754d9422f8c9721231f"/></dir><file name="Docblock.php" hash="d0856efe818bee5c5d39645662312ba6"/><file name="Exception.php" hash="c43315831b3596fc86aba74529571aad"/><file name="Extension.php" hash="f4dd6dbfb0d48aabdbf359fa6bfaee9b"/><file name="File.php" hash="47206736078efdd5eefc6527408bd922"/><file name="Function.php" hash="1713773cab56cf753f7f90a1108953c8"/><file name="Method.php" hash="25ecb48f4e4f7029ea6fd759fba663f9"/><file name="Parameter.php" hash="7a34d5982a0dec35c6323160114dcb62"/><file name="Property.php" hash="7ca9b4aca176f18bf89b711b5f0929d3"/></dir><file name="Registry.php" hash="3b697b3b783d2821e69137c4dc3851b2"/><dir name="Rest"><dir name="Client"><file name="Exception.php" hash="2e86578bbe604d335a622957c1b0ae26"/><dir name="Result"><file name="Exception.php" hash="49193abd246224f975676b9bdd41349a"/></dir><file name="Result.php" hash="ffc3f1ee709136ab403949d4274098e1"/></dir><file name="Client.php" hash="b76ff6282552bcd098403cebc7b08ed6"/><file name="Controller.php" hash="86e1b0b6bc3ad11653dfe9e17c7d075f"/><file name="Exception.php" hash="c62bd750b3b4cd33407d99869c600d14"/><file name="Route.php" hash="20875e10d835e380c294d2edfb56b08f"/><dir name="Server"><file name="Exception.php" hash="235457f9f3a4f7720ac2013b51ad4ee9"/></dir><file name="Server.php" hash="ceb61231f7fc67faa657837a9fb2c9a3"/></dir><dir name="Search"><file name="Exception.php" hash="915c3138aac999bdce9426a8acd40556"/><dir name="Lucene"><dir name="Analysis"><dir name="Analyzer"><dir name="Common"><dir name="Text"><file name="CaseInsensitive.php" hash="307dc051465ca81322c5e85e8ec022cc"/></dir><file name="Text.php" hash="758df150a1df6eba4b64004148a672a4"/><dir name="TextNum"><file name="CaseInsensitive.php" hash="e5940381671ed3f7c321b3fda9862881"/></dir><file name="TextNum.php" hash="36acd4b130e2f8b78e2de06ac9b4f942"/><dir name="Utf8"><file name="CaseInsensitive.php" hash="44697c595e22b385d0a7616e7af30ac6"/></dir><file name="Utf8.php" hash="1b7f394340ca0d04c8e6a19fe22d4d23"/><dir name="Utf8Num"><file name="CaseInsensitive.php" hash="9325aa4566ece4546b23c82d1aedb57d"/></dir><file name="Utf8Num.php" hash="76dfe3f7ab2e55f1e8190054dd788790"/></dir><file name="Common.php" hash="04cd47fabbd6c404aff39664da13df9a"/></dir><file name="Analyzer.php" hash="85a3a397e4d2c53d185523e25e7ae53a"/><file name="Token.php" hash="b7c5544e368acd06d81d7539983ed85b"/><dir name="TokenFilter"><file name="LowerCase.php" hash="d3be32b9f01fa4343a427721fc3b82b3"/><file name="LowerCaseUtf8.php" hash="9293ea00a25a3e7f129723c9f74b3b9a"/><file name="ShortWords.php" hash="1e296157ac5b8dc2f80a441811707202"/><file name="StopWords.php" hash="c935b1d071ab560816f3a591e3a662e9"/></dir><file name="TokenFilter.php" hash="7e7caefe49ee420c8b5c1561e84f012e"/></dir><dir name="Document"><file name="Docx.php" hash="e6730cac4ab560138c45c9db700d28f0"/><file name="Exception.php" hash="d1f92a2cc3ea06517d5626e96429a5af"/><file name="Html.php" hash="64e7ae4d564af7e71f44c01e48c8e03a"/><file name="OpenXml.php" hash="b21a3c28a95e7a0c9980db28bbc65842"/><file name="Pptx.php" hash="5a2b150c6c2a98b80e1e7765cec8297e"/><file name="Xlsx.php" hash="cae7aa77e2e49c47ecf8a89f169c629f"/></dir><file name="Document.php" hash="81e9c33cd2320e8344181ac5bf78819c"/><file name="Exception.php" hash="2d392bf05fe81a16cd8a3b10618bc6bd"/><file name="FSM.php" hash="5009e011f0b10421ef6e9c6b2c509753"/><file name="FSMAction.php" hash="54cc85832b139caef30d62a66a8008c5"/><file name="Field.php" hash="62d99dc9804e4f352bb55f69a61e5764"/><dir name="Index"><file name="DictionaryLoader.php" hash="dd18c7bb937d629cd0960ba4e8156307"/><file name="DocsFilter.php" hash="a464c3ab082438689658bd370ea21887"/><file name="FieldInfo.php" hash="49cdf39b3445b209adc9370a9970d834"/><file name="SegmentInfo.php" hash="3e9803053f230d7309cce21a643c9e76"/><file name="SegmentMerger.php" hash="335a52ca7e40a79dd6cb95f72cbaa140"/><dir name="SegmentWriter"><file name="DocumentWriter.php" hash="5061bbd3c4b375f3304813ff93a6401b"/><file name="StreamWriter.php" hash="0f6d8ea058813929a7448a4958a3c7c7"/></dir><file name="SegmentWriter.php" hash="13a8736ed2991f513e57f68e61926a76"/><file name="Term.php" hash="490ae3da5ccd138e9b060792766646bb"/><file name="TermInfo.php" hash="4930aa466ba2eb3b65dae3c02aa03221"/><file name="TermsPriorityQueue.php" hash="32663e0ebb7d0279bbcea377903c12df"/><dir name="TermsStream"><file name="Interface.php" hash="751e8ab0d56bb26f7b795d9530dd2494"/></dir><file name="Writer.php" hash="b7ef933d12a1b2f5376584b2420d7976"/></dir><dir name="Interface"><file name="MultiSearcher.php" hash="3f40f5b499a8ee03957fb21aada499da"/></dir><file name="Interface.php" hash="a78e2d90755e526ac9db7eb1c4185f3a"/><file name="LockManager.php" hash="5f61443ba5976b5fa021fb36bba30371"/><file name="MultiSearcher.php" hash="2fde43036355b990e0ac0227a00b6c8e"/><file name="PriorityQueue.php" hash="5c915507c33213ddb4b4ac613f1f68c9"/><file name="Proxy.php" hash="11944c7b4d9879615fd4f3a5d768aed3"/><dir name="Search"><file name="BooleanExpressionRecognizer.php" hash="3896532815243d89040fecb2fd65f606"/><dir name="Highlighter"><file name="Default.php" hash="b1dbdc2d70bb032a5d2b9f9e11273ea0"/><file name="Interface.php" hash="7dca815c9e9f444b9a2a9765fe349dd2"/></dir><dir name="Query"><file name="Boolean.php" hash="5be6706e75dd3e9ccdfaa0eb22f93ca4"/><file name="Empty.php" hash="2e16007df371f28191f785ab85d4d103"/><file name="Fuzzy.php" hash="e66032fc9f9cb06422cac6da95f7b8f6"/><file name="Insignificant.php" hash="1f61e2f1ef8ff38101f2a85c87b9529e"/><file name="MultiTerm.php" hash="ec939add6f7d0424029b12106385afd0"/><file name="Phrase.php" hash="424cc7d460f4bac0907d0170b60ba625"/><dir name="Preprocessing"><file name="Fuzzy.php" hash="cae1047630f98baf520483fa68af463a"/><file name="Phrase.php" hash="d8afc95f2e9da2a44d9495cbce775c98"/><file name="Term.php" hash="b099d749d723fbb53d3991e3f61458be"/></dir><file name="Preprocessing.php" hash="83dba0878c9ed171628b7a9ac70d26b3"/><file name="Range.php" hash="d8bda3ad418d24e0db7e59c446be13fc"/><file name="Term.php" hash="54e883c87d7368fa5be1e105723db357"/><file name="Wildcard.php" hash="9c1c8ebeca45a6332ede6fab8d5bee54"/></dir><file name="Query.php" hash="2a9f2ceda3cfacd24f892dd8bccd8d28"/><dir name="QueryEntry"><file name="Phrase.php" hash="407da910b0015ff8d95432cc193d608a"/><file name="Subquery.php" hash="a33d941498f632d859bec94a1cb9c10b"/><file name="Term.php" hash="808b02c1c1aeae4316fee3c9c466facf"/></dir><file name="QueryEntry.php" hash="9620d76904656a0727091f449603c662"/><file name="QueryHit.php" hash="6d1727ed01abc54503badc7176955882"/><file name="QueryLexer.php" hash="57a592ea29129b28d1144063e152c878"/><file name="QueryParser.php" hash="569f6439976128dbc471bd42fa9511d9"/><file name="QueryParserContext.php" hash="45c71a353821fc29101c1ae2f8eba02a"/><file name="QueryParserException.php" hash="358f89eaca92ac3175b26c419b317640"/><file name="QueryToken.php" hash="f85c3ac0ab04b5abff04d034cf127f43"/><dir name="Similarity"><file name="Default.php" hash="43f6f75cb50b7c7f344a5bac85ef172a"/></dir><file name="Similarity.php" hash="194c9c6c1c2815a8491952ece299ef9e"/><dir name="Weight"><file name="Boolean.php" hash="537c06e5f44c3d014d98a88a39c834f3"/><file name="Empty.php" hash="0bfe83149630af587846c7d5df63e72b"/><file name="MultiTerm.php" hash="c95f65634ed9d8c2896f5ba66a833f10"/><file name="Phrase.php" hash="51bc4912b1784bfa58841e4bf14fb177"/><file name="Term.php" hash="2e0f6fc3511928f1e94349d375dec8b8"/></dir><file name="Weight.php" hash="49ece1259ec183d66d2a1ccc8c319299"/></dir><dir name="Storage"><dir name="Directory"><file name="Filesystem.php" hash="7928063a85bf3c53e2afd754c111cc6b"/></dir><file name="Directory.php" hash="25a0d0c262a3c4fa7dbc3f1f11f0a4ab"/><dir name="File"><file name="Filesystem.php" hash="5c2819323a9878475d31eba6992e6abd"/><file name="Memory.php" hash="89bce18491ebcd885736c5c9a790eab6"/></dir><file name="File.php" hash="2b77f8354d79c7dd57330677651f8fc6"/></dir><file name="TermStreamsPriorityQueue.php" hash="a26104e3325d2533afffdfc66dd1ead0"/></dir><file name="Lucene.php" hash="fe6103d1d763df12d670dfe5103defb7"/></dir><dir name="Serializer"><dir name="Adapter"><file name="AdapterAbstract.php" hash="8bd5c797ff2230e804b916545a67694b"/><file name="AdapterInterface.php" hash="cb397638959459eef297b8114ebb0504"/><file name="Amf0.php" hash="734f3143371bffe28f65e144f1d4fde3"/><file name="Amf3.php" hash="05a939a59cad0622a7627572f931e909"/><file name="Igbinary.php" hash="dc0da7256a83c6f0a06582b21b160156"/><file name="Json.php" hash="e62019ed95f69a184f735f1d3d4d32c0"/><file name="PhpCode.php" hash="731fc343849f966c1b532284822060a6"/><file name="PhpSerialize.php" hash="d7bc5453b1c516a6895e62fee2f94ec7"/><file name="PythonPickle.php" hash="8eaa4d904fa3ac33cc3d405f6eeb92bf"/><file name="Wddx.php" hash="4321621736a7d3940a27357608c66c28"/></dir><file name="Exception.php" hash="dd736f6d29e3a1f8d688bdf6b24f8d30"/></dir><file name="Serializer.php" hash="47d6232a605b0fc1b0dfd5bc6738d4a4"/><dir name="Server"><file name="Abstract.php" hash="878b796b9b09bac46361e73e3b76943d"/><file name="Cache.php" hash="8851d8d1c35c11be49192fc875141632"/><file name="Definition.php" hash="c37f863e7395e761f9601a4f918f0fc9"/><file name="Exception.php" hash="1ad53d7cdaadfe1377fe30f61814ce33"/><file name="Interface.php" hash="ef219942e75a7dd72f757ae0fee1fe94"/><dir name="Method"><file name="Callback.php" hash="204c77c05f77dab719f7e8d4d9940990"/><file name="Definition.php" hash="6a7435cbdd3791b656f0f7945e68e724"/><file name="Parameter.php" hash="5bb143b2c5472570019deb5c8df7e13e"/><file name="Prototype.php" hash="e6926328f51c97152380eef1cb9503a1"/></dir><dir name="Reflection"><file name="Class.php" hash="7c3040f1cdaa12303fa3aa8a87bbee33"/><file name="Exception.php" hash="81a1918244112e6992e608c37a128f81"/><dir name="Function"><file name="Abstract.php" hash="baf97034eb2f6541a0b04448cdb0c8ee"/></dir><file name="Function.php" hash="b931e2381290e01a62197a41f7d4a43e"/><file name="Method.php" hash="2589efa5b95e88475509c07460869c1a"/><file name="Node.php" hash="a764c4cdbcfd48911882e73801f55c9f"/><file name="Parameter.php" hash="2cb12fe3fdca85cb9056909277002912"/><file name="Prototype.php" hash="c8f4e9fc01efed6ef3b5a10bab70ddc5"/><file name="ReturnValue.php" hash="bd7392e46dac77ad14597e24fbe9297a"/></dir><file name="Reflection.php" hash="7b01bebd0c5e02694d94946a7ff4cd2a"/></dir><dir name="Service"><file name="Abstract.php" hash="057d0faabba16e34faa0ed6d43ca61af"/><file name="Akismet.php" hash="c63f5c6b7b1be4b2bbedb84a7f026bf7"/><dir name="Amazon"><file name="Abstract.php" hash="16b70230ca4bf9fd43feaedc24416f7c"/><file name="Accessories.php" hash="c0f666b47ccd5ca407ca7ab3e62a28cd"/><dir name="Authentication"><file name="Exception.php" hash="f1ba0e03f16bf019c0246384f6797093"/><file name="S3.php" hash="35c859c9bf7221844df79260142e3e55"/><file name="V1.php" hash="a4f6e5db52a4ae4b8200ac26b1bc413b"/><file name="V2.php" hash="b91365a27a1019d793f3821d50cf0209"/></dir><file name="Authentication.php" hash="5e503da9b9bf0a83fd61326aabaa7bc2"/><file name="CustomerReview.php" hash="970806dbbd0244f317183a7d121dd23b"/><dir name="Ec2"><file name="Abstract.php" hash="add0a48733a5b51010fab03133fcf8a9"/><file name="Availabilityzones.php" hash="0df01ed765ce15c35a783a66d7f8ff44"/><file name="CloudWatch.php" hash="e601ca48308ac50dc3727f992f7e62dd"/><file name="Ebs.php" hash="1f82b128c7b5d35d37b3024b6c42f712"/><file name="Elasticip.php" hash="bfad9fcffa9bcd6ad7d7cff8cec45c64"/><file name="Exception.php" hash="b212f735d14f127feb9a33d220bf2261"/><file name="Image.php" hash="335cf797d7a3a3d49e029ef7ce991bca"/><dir name="Instance"><file name="Reserved.php" hash="6027f89632821d100f27363ffbf293f3"/><file name="Windows.php" hash="f823795a24808167f1b87d91ece5cd1a"/></dir><file name="Instance.php" hash="52e9fb6d557898648a7dd9c71bb9100a"/><file name="Keypair.php" hash="e035010eee1a949d1d2b5b1ddd43e5a6"/><file name="Region.php" hash="7283cb6f54f68c09949e4c0535ed8a3b"/><file name="Response.php" hash="ad34c2acb59516d6075d12294fcf6bd3"/><file name="Securitygroups.php" hash="68c70053d0e4284169a5e2c49cb2ef2e"/></dir><file name="Ec2.php" hash="4a39d1eb801af3fd096582c2428e1371"/><file name="EditorialReview.php" hash="edc54626cf681ff42bdbc3207063e50a"/><file name="Exception.php" hash="25e8e93c6e940a70c57e0d4b6b35271c"/><file name="Image.php" hash="8cb0ff1afc2b9f99b7e4db1c61c27e99"/><file name="Item.php" hash="49164d984e1888291b9a1b0b82df2204"/><file name="ListmaniaList.php" hash="d319a0d6c264c92c22196d6a9a84762e"/><file name="Offer.php" hash="a04c4d2faf859a590fe2e74ef0440429"/><file name="OfferSet.php" hash="cce61ade0766251d602204b65ad5f73e"/><file name="Query.php" hash="a8a6c152fa729f7047f352552bee7367"/><file name="ResultSet.php" hash="b15520c352dfb95481aa26509c84211e"/><dir name="S3"><file name="Exception.php" hash="2fa452933db70802a191be880cec481b"/><file name="Stream.php" hash="62544ad7a8d493023c4a62272a68d4f5"/></dir><file name="S3.php" hash="224a86bfc54f7c6df36b8d5eb3febbd0"/><file name="SimilarProduct.php" hash="abcd839cfcc6c194e0b2ee0461216e12"/><dir name="SimpleDb"><file name="Attribute.php" hash="329401b2dac2ad11141f5077093ce70a"/><file name="Exception.php" hash="72cd6853d02b6c4335292d38f310ea54"/><file name="Page.php" hash="4c6b5dda8a61a932584eaf332ba25ae4"/><file name="Response.php" hash="763d18b153c7296ae4a1acc9dd52fea6"/></dir><file name="SimpleDb.php" hash="26a2419a5c73550f8ef47ac2a7c161ce"/><dir name="Sqs"><file name="Exception.php" hash="4d8c014ecb492938b3234fb250dcc21b"/></dir><file name="Sqs.php" hash="e5a368178455cc62f0c1e6272876e31f"/></dir><file name="Amazon.php" hash="8bf9c8bd3d16372566cc6dda58d26f57"/><file name="Audioscrobbler.php" hash="0931bdaeda5594a4b367fd4901b5444e"/><dir name="Console"><dir name="Command"><dir name="ParameterSource"><file name="Argv.php" hash="6acc204436c9d0de0d1e5d2063dff1d3"/><file name="ConfigFile.php" hash="0ac0fcf2907eed649d9f720d9c98cfb1"/><file name="Env.php" hash="83579d583b977fb4a890933d5795588f"/><file name="ParameterSourceInterface.php" hash="c1161355277be3eefdadb4853d8ee1b2"/><file name="Prompt.php" hash="8a9b67aa3eaa61b7ff33aa0110b129fd"/><file name="StdIn.php" hash="fd5c89a584ce532ae64ce2e607e28e02"/></dir></dir><file name="Command.php" hash="c94204e49bc285a615c281253cb41641"/><file name="Exception.php" hash="e1a199ba28f3255efc3ad5f0c272d247"/></dir><dir name="Delicious"><file name="Exception.php" hash="8b4644f2ad354c3e8c668bf6f4d8757c"/><file name="Post.php" hash="00f3ca873d1da362fe1ed121b1d18c32"/><file name="PostList.php" hash="41dbf9ff7c15a8eaec5153cebc705bb2"/><file name="SimplePost.php" hash="9ae5bac1252734db8bda2c2cbceb901c"/></dir><file name="Delicious.php" hash="2f725816f82a4ba6ebeace7bcaf6e0ff"/><dir name="Ebay"><file name="Abstract.php" hash="2e334688b614c983b6a7ce3592e08899"/><file name="Exception.php" hash="83aa9409ac7d1e2bf9fd83e86c39a6c6"/><dir name="Finding"><file name="Abstract.php" hash="7238678f990b585b50271ceafe5058f3"/><dir name="Aspect"><dir name="Histogram"><file name="Container.php" hash="45aab272db8949fc7ef41c1f5b9a5d65"/><dir name="Value"><file name="Set.php" hash="6a00192243d8ab215f368459e932d145"/></dir><file name="Value.php" hash="ffd36e8de497a77bd42cccb63ce3235b"/></dir><file name="Set.php" hash="c39339e0e65827c882eac9fa8d4d4fff"/></dir><file name="Aspect.php" hash="df96cb57c1c2b88a8244384894f1b9dc"/><dir name="Category"><dir name="Histogram"><file name="Container.php" hash="e99d9fdf2028e7f627fa7692d6e5e5af"/><file name="Set.php" hash="d10aeaf449c591a7884a38a1b5f90399"/></dir><file name="Histogram.php" hash="5fda3e21a2a68bbca36838425d54c454"/></dir><file name="Category.php" hash="aef46c1abec0621af48a4398de94bca0"/><dir name="Error"><dir name="Data"><file name="Set.php" hash="51d6f2c75eb549150dbb4255a747e238"/></dir><file name="Data.php" hash="06579aec01d55e0e27e48b66b32814a5"/><file name="Message.php" hash="f0082bf2e41b9fa997891d55536d6c94"/></dir><file name="Exception.php" hash="0d04308f626b6d80255403034766b93f"/><file name="ListingInfo.php" hash="37689bb7f7f1312e0a8690b1ec55d17f"/><file name="PaginationOutput.php" hash="dbd144ea4155492ca485092140ed7342"/><dir name="Response"><file name="Abstract.php" hash="13c8ef07cd6c8b9e0b54b183099d3c2d"/><file name="Histograms.php" hash="7e67ea07bdf9e34cb277b87cdad8db8c"/><file name="Items.php" hash="87e78262a0463b3689f75ade1a97bf0d"/><file name="Keywords.php" hash="501b1eb2db688abcb8926a924b2467c4"/></dir><dir name="Search"><dir name="Item"><file name="Set.php" hash="72dc95aa03723a96c6ad4e16bb6c1f04"/></dir><file name="Item.php" hash="8cc709c5b81a662e1b42f6fdcfbcd057"/><file name="Result.php" hash="bde45f1eff1c6745093e1fb16a25fa21"/></dir><file name="SellerInfo.php" hash="0a3e7e31682c1b4139860b692e3a7a93"/><file name="SellingStatus.php" hash="40cc9f7feb5534c9b7ffd77cde164d8e"/><dir name="Set"><file name="Abstract.php" hash="d68b570966c8c13d07ecc8e1c093a3f8"/></dir><file name="ShippingInfo.php" hash="ef20bffb5c3917bd631a79f6520aaa47"/><file name="Storefront.php" hash="59e0796869417ef09b2fabf17a0f51a2"/></dir><file name="Finding.php" hash="38297aa7141bd29cb58f499a6f301958"/></dir><file name="Exception.php" hash="065ed88e73a47544f5432781b553b095"/><dir name="Flickr"><file name="Image.php" hash="c18c420085a325a88aa32c6e8940febe"/><file name="Result.php" hash="3dae64d1fed5642f400e5a3ed34001e0"/><file name="ResultSet.php" hash="1141813d476af74ac4482982352df257"/></dir><file name="Flickr.php" hash="80ee3a6a56f644931629923efaa74f58"/><dir name="LiveDocx"><file name="Exception.php" hash="b7c0f8f23822ab34863ae7c8ba65fca0"/><file name="MailMerge.php" hash="9c3df9f5097d2426f98f3e4afd5417b2"/></dir><file name="LiveDocx.php" hash="bb79b5d68e67e91aa7c6678cf9d33fe5"/><dir name="Rackspace"><file name="Abstract.php" hash="38c670e3ba06278b4fed19a7a20ffa09"/><file name="Exception.php" hash="0e02a57f8eb16972b101ec5b2d5ee5c8"/><dir name="Files"><file name="Container.php" hash="59b5965b06c12c8f32f191d6d81578ed"/><file name="ContainerList.php" hash="60cab750d4475f791b0f6ef9487b2b5f"/><file name="Exception.php" hash="ff4c1a6d5b3c15b0134eea798aaebb5a"/><file name="Object.php" hash="fa7d117f207e2a26dfa5db744a098cdf"/><file name="ObjectList.php" hash="d2eaf4ebe570b3ca456844b294cfc6f6"/></dir><file name="Files.php" hash="fba4bd666821a5eec5cf17f5f91dd15a"/><dir name="Servers"><file name="Exception.php" hash="90e7248491ba6728731b35821a6797b3"/><file name="Image.php" hash="6977cee9fc642f32c2a3dd9b99739ab6"/><file name="ImageList.php" hash="0bc789d18d41f62ae1db82159487edc0"/><file name="Server.php" hash="73f6c2a5e062bf36b3b89ed8d1041eaf"/><file name="ServerList.php" hash="f76bf22857872982ce35e7afa2ea49f1"/><file name="SharedIpGroup.php" hash="75bc0d1b089228114a5bdbbc764f6799"/><file name="SharedIpGroupList.php" hash="97feec662c70d87bf02c0dd689d59962"/></dir><file name="Servers.php" hash="d7c9cd6f524ef033e9c4836623171ad4"/></dir><dir name="ReCaptcha"><file name="Exception.php" hash="e49c53a3c431f49911028b571a76bc06"/><dir name="MailHide"><file name="Exception.php" hash="fc56e06dc9697c40498f1015c0e76c08"/></dir><file name="MailHide.php" hash="ff143c31b0aaac1c852ae438ccc57a4a"/><file name="Response.php" hash="10d73062279da9040e445fe8d1820c36"/></dir><file name="ReCaptcha.php" hash="518a917f321d64422010babcdc82921a"/><dir name="ShortUrl"><file name="AbstractShortener.php" hash="7e0fa90e0324b377677bd8847412ffa5"/><file name="BitLy.php" hash="3e07fa8e265d44e7225af2f11ac75607"/><file name="Exception.php" hash="fa58bd8ee297581ecafe8e15d9c41858"/><file name="IsGd.php" hash="5d18b0c134f1da253893391c720144e7"/><file name="JdemCz.php" hash="6892d0e3e81cc3aeca234d4fb5164ac5"/><file name="MetamarkNet.php" hash="747c5d10917401f1d0d11ba38b1af8e2"/><file name="Shortener.php" hash="64e2ceca93f66c375605e62d6431a628"/><file name="TinyUrlCom.php" hash="1b7f09510d1b029c117e6c59c5419714"/></dir><dir name="SlideShare"><file name="Exception.php" hash="67b547c02b4b9c9440f5c11e570171f1"/><file name="SlideShow.php" hash="9d01060ec6c7a7583a21c824a3e74e21"/></dir><file name="SlideShare.php" hash="1cdc74e57a3be59df8d702bc3d9f7362"/><dir name="SqlAzure"><file name="Exception.php" hash="24d9e2d3dfca7d6ce54137652027152c"/><dir name="Management"><file name="Client.php" hash="e46b9564db9ae2344357919b4760ac4f"/><file name="Exception.php" hash="731e875bfd4df360b37ca082877bc1c6"/><file name="FirewallRuleInstance.php" hash="f564f5454ee9cb2b1ffa97499124d0e7"/><file name="ServerInstance.php" hash="7f3198f120d54ca4b70b5f58399cf0ab"/><file name="ServiceEntityAbstract.php" hash="72ca3fc5ef5341bf549685beb08dad5f"/></dir></dir><dir name="StrikeIron"><file name="Base.php" hash="0b1451704136ab44598ac7204bde94a1"/><file name="Decorator.php" hash="68741c986d506462846a6aa007f94cef"/><file name="Exception.php" hash="e61ee74d3ae19b3e61c1894264d6530a"/><file name="SalesUseTaxBasic.php" hash="43823d20d58aaf73be598f5282e7f841"/><file name="USAddressVerification.php" hash="f5dd585a282a046ebfb95125c29ed866"/><file name="ZipCodeInfo.php" hash="76beb6125d1035ffd7e67101cbd9df44"/></dir><file name="StrikeIron.php" hash="7eca35cee7479ac035ec83f456ddb2ec"/><dir name="Twitter"><file name="Exception.php" hash="d5a3fb65437ac5663d5262b19c226483"/><file name="Response.php" hash="f78d457745cd7df85d83b33e9b43a01f"/></dir><file name="Twitter.php" hash="8b3dc7c575b35c1351a9a00afd1b57c5"/><dir name="WindowsAzure"><dir name="CommandLine"><file name="Certificate.php" hash="82f6c9535209f9d9800b1ec5227ea5a8"/><file name="Deployment.php" hash="d77fb324a62e1d5bbec2ce07dbcd6051"/><file name="GetAsynchronousOperation.php" hash="da2b5c820d693a4fdcdc5f53378a317c"/><file name="Package.php" hash="4ed8d218b529fa358b9bad365caeda1c"/><dir name="PackageScaffolder"><file name="PackageScaffolderAbstract.php" hash="077b5928c2f1ff061f447754e17051c9"/></dir><dir name="Scaffolders"><dir name="DefaultScaffolder"><file name="build.bat" hash="651c7fb8b72233f40f4f25ca8905573b"/><file name="index.php" hash="894c44229a940ea713205338f8e490f7"/><dir name="resources"><dir name="PhpOnAzure.Web"><file name="Web.config" hash="65f639e413e4ff122d92623a1c14b2ae"/><dir name="bin"><file name="add-environment-variables.cmd" hash="b0e00d591398ec40968189bc4e35c139"/><file name="add-environment-variables.ps1" hash="19a5afae543fd10d118ad21136fc4bec"/><file name="install-php.cmd" hash="8248bad7c6981ab8f8ad34cbb6e224c3"/></dir><file name="diagnostics.wadcfg" hash="5188e0200f5446cae89c1be78db568c2"/><dir name="resources"><dir name="WebPICmdLine"><file name="Microsoft.Web.Deployment.dll" hash="ce4bedba97839fb3b3991c9e76d9a5f8"/><file name="Microsoft.Web.PlatformInstaller.UI.dll" hash="c692c64ac1ff35a256b05b3d0389d77a"/><file name="Microsoft.Web.PlatformInstaller.dll" hash="b3c7917c493dc73aab9ad4f3b32d3722"/><file name="WebpiCmdLine.exe" hash="23ee0847ce84831042e2094f8bb946a7"/><file name="license.rtf" hash="e19c7c8161a0d2cf8cd2bfa815edd707"/></dir></dir></dir><file name="ServiceConfiguration.cscfg" hash="aef39d43590593be9d2fe5fe4a3b5c80"/><file name="ServiceDefinition.csdef" hash="cc148db5e38df6777513c343f0552408"/></dir></dir><file name="DefaultScaffolder.phar" hash="7213da0e7d624e8c2a4ba1f3b5ff05eb"/></dir><file name="Service.php" hash="ff88b79b64947f883986e77838d8cb24"/><file name="Storage.php" hash="8944ded3eb414aa4826b6f53040049d9"/></dir><dir name="Credentials"><file name="CredentialsAbstract.php" hash="d4f022ee969ebb28059bb4fe1dc15bbd"/><file name="Exception.php" hash="46253077f849f4d86ff19bcd5c4ffbb2"/><file name="SharedAccessSignature.php" hash="b812dfc04bcc4349faa4b684e3c17ffe"/><file name="SharedKey.php" hash="d09970fb25d6649fc3626d016e57a71a"/><file name="SharedKeyLite.php" hash="a7af3a465e3b62edddd79fcfb8b5bfd0"/></dir><dir name="Diagnostics"><file name="ConfigurationDataSources.php" hash="164e443f79bf6b018796cbe4ace8552e"/><file name="ConfigurationDiagnosticInfrastructureLogs.php" hash="5ed3b44951c19fe3899d77e57777ccca"/><file name="ConfigurationDirectories.php" hash="ac9628ef7d6d5291b4a9755ffa83c4bc"/><file name="ConfigurationInstance.php" hash="2ffcb3db9f9ecfe5764d497f08175c1c"/><file name="ConfigurationLogs.php" hash="79cb3324521884a79c422318e9df0996"/><file name="ConfigurationObjectBaseAbstract.php" hash="574ad31edf5de775857d4d9818e09515"/><file name="ConfigurationPerformanceCounters.php" hash="f518fc30a51d61ee73f44fd54304d115"/><file name="ConfigurationWindowsEventLog.php" hash="7b071634e38e532d5faf245310846396"/><file name="DirectoryConfigurationSubscription.php" hash="5c72f815ecb4a4b619a43b05e0767d3e"/><file name="Exception.php" hash="ecc6ffb64bcd2b7e219b9e57ae8261c4"/><file name="LogLevel.php" hash="b63f1b837619bd6475f30b5c2862354b"/><file name="Manager.php" hash="0d92a4ee3426b0a3fa98efabad20850e"/><file name="PerformanceCounterSubscription.php" hash="f3793033b70429e761b5715d26a9b052"/></dir><file name="Exception.php" hash="ae2961639357d61fd0edbb1f8b19e600"/><dir name="Log"><file name="Exception.php" hash="f293efa4c7d400034fdd32b61e398d75"/><dir name="Formatter"><file name="WindowsAzure.php" hash="d2803e471ad8f151337b9b06adf840e2"/></dir><dir name="Writer"><file name="WindowsAzure.php" hash="898cc3aab9ed4a1143ad98af4c82828f"/></dir></dir><dir name="Management"><file name="AffinityGroupInstance.php" hash="999fccb597ded5e9bb1a3a49d0461238"/><file name="CertificateInstance.php" hash="e38186727c337efeb26e1edb3395c3aa"/><file name="Client.php" hash="7ea9a8aeec1b66c29127ce846788caeb"/><file name="DeploymentInstance.php" hash="da71eb3b750c5accba7df6a02a936572"/><file name="Exception.php" hash="e38e9729e738a5c98b7a444377dc390f"/><file name="HostedServiceInstance.php" hash="52a7a4f5e90fcddbba2da67f6ec1a714"/><file name="LocationInstance.php" hash="d7fc5f02f835fbea9bd39e25a2953415"/><file name="OperatingSystemFamilyInstance.php" hash="5463dc6555a2894cf77c15dd015b2bbe"/><file name="OperatingSystemInstance.php" hash="8d8fc32400bbb73a3765f06ccaefc05f"/><file name="OperationStatusInstance.php" hash="acb817c0203ca17237b430c7d086b7b3"/><file name="ServiceEntityAbstract.php" hash="6013b8d4f6378d945e29013d54dc634f"/><file name="StorageServiceInstance.php" hash="6d89ea4e90ac780fce17efba7e38976a"/><file name="SubscriptionOperationInstance.php" hash="9fb50cd722cc80be2d660e78cd42d3de"/></dir><dir name="RetryPolicy"><file name="Exception.php" hash="b83b70d8c828de010cfa12f027a2da23"/><file name="NoRetry.php" hash="faa7ed56468ce39f77162aa1888f8480"/><file name="RetryN.php" hash="340d6ccaa8d41eba0f3cd943dbff201b"/><file name="RetryPolicyAbstract.php" hash="57b861c1f66f83295ce1ae8284b6870c"/></dir><file name="SessionHandler.php" hash="49abc2db2f8cd60249889013eeb6c28f"/><dir name="Storage"><file name="Batch.php" hash="54321d9853919241064631b7fd5e404a"/><file name="BatchStorageAbstract.php" hash="1911d06beacc5afdee2e0214fadb48f7"/><dir name="Blob"><file name="Stream.php" hash="fca729afd6bced397324a092598c4348"/></dir><file name="Blob.php" hash="ba54d4c7b42bfb8536df0ace27d68ac5"/><file name="BlobContainer.php" hash="3762000f605bc3b601d33508d11ba9cb"/><file name="BlobInstance.php" hash="3acc55cc558e3003164dde92463f0f74"/><file name="DynamicTableEntity.php" hash="c0f1e5b79b12857c233299a4445bb168"/><file name="LeaseInstance.php" hash="3d0fc9b5d6808aec75d9aa5bfb537e3d"/><file name="PageRegionInstance.php" hash="ad3d6fda6950c0f1fa6516507ca9662b"/><file name="Queue.php" hash="e0f744f5a2c30c4368babc77282987d1"/><file name="QueueInstance.php" hash="fc1d2fe33c92b9709174fdb78b014839"/><file name="QueueMessage.php" hash="1743f7a02f0d443c7a2f85d87dc43e0f"/><file name="SignedIdentifier.php" hash="cd0fa8a05e3acd402a1e337b1ca7eee0"/><file name="StorageEntityAbstract.php" hash="f3ef81a6dbd64aea38bc60b1f0c7bb8b"/><file name="Table.php" hash="3264067c6ef982f7bb216234451f5781"/><file name="TableEntity.php" hash="c9be1c41776a2ae5892d8f8d14b74fd6"/><file name="TableEntityQuery.php" hash="13880ce0f4c805205dcd10a5283c0539"/><file name="TableInstance.php" hash="54f43c27f93bee83a2c9ba42831d9c27"/></dir><file name="Storage.php" hash="cbac5a9bb9efb6e93a3d9871c8699035"/></dir><dir name="Yahoo"><file name="Image.php" hash="aa6abfa0f447d43f4828dc44c0fdf86f"/><file name="ImageResult.php" hash="7a64eac529ce21090e8b58997fc22041"/><file name="ImageResultSet.php" hash="7ad19487bce9a09855cf7d79707af347"/><file name="InlinkDataResult.php" hash="28305ce865dfb4011a285015a40a6a83"/><file name="InlinkDataResultSet.php" hash="fb09080f12f5348b37fdd5d62fc946fc"/><file name="LocalResult.php" hash="306431d361c2097b3b00cdbaba1bb372"/><file name="LocalResultSet.php" hash="68a4cb69982884c1bd7d6a7df86be90b"/><file name="NewsResult.php" hash="ea496bdeee3021d391df58a3be8636af"/><file name="NewsResultSet.php" hash="f80bcd0b1ac7632f3fb3020a7ff83255"/><file name="PageDataResult.php" hash="c8ea663819efe5ec5d374463f04a8f39"/><file name="PageDataResultSet.php" hash="69c99f8806a98868cb77e9db268eb8d8"/><file name="Result.php" hash="221286f5fbe491b570df8cec1fb7c91c"/><file name="ResultSet.php" hash="4477af82dcaac7fcd93ce9c29c68bdd5"/><file name="VideoResult.php" hash="6ba0d1ebb1c288b11b17ff6a9e434a4d"/><file name="VideoResultSet.php" hash="1a434e1b8bcf9b32e755a32e97e52838"/><file name="WebResult.php" hash="eacd11e6aace9570c6064c8fc1b47750"/><file name="WebResultSet.php" hash="bf5f6f43eb71f0469c961b0f5a6e4094"/></dir><file name="Yahoo.php" hash="27616706be89313b7b5be256be21e095"/></dir><dir name="Session"><file name="Abstract.php" hash="b43880e48ff9ee3040eca09d1458f7d5"/><file name="Exception.php" hash="ce01f1ceaa96bef8c71759f7e6c1e578"/><file name="Namespace.php" hash="b3e6effe8f53d5f9f407a4b5507df31c"/><dir name="SaveHandler"><file name="DbTable.php" hash="5b08339aa3e7f044b5602e725e6c65c0"/><file name="Exception.php" hash="06db90dee9421e4a8e09b946de252d41"/><file name="Interface.php" hash="617704bf38e31d51b79c636480447b91"/></dir><dir name="Validator"><file name="Abstract.php" hash="7bc8436592d308a702f37d64a8afbe72"/><file name="Exception.php" hash="c00d9dfbc04a9250f2359a5f31e726b8"/><file name="HttpUserAgent.php" hash="6a2a83e6baf37967b06cf993170ed03e"/><file name="Interface.php" hash="6e54358cefb41ccb7e591eaba391f74e"/></dir></dir><file name="Session.php" hash="da8c2bc8217bb09a7e86c573fa7a6553"/><dir name="Soap"><dir name="AutoDiscover"><file name="Exception.php" hash="3c71353889e5488f16cd0747a1337882"/></dir><file name="AutoDiscover.php" hash="abdfc4afb277a6e0c23216cb1d894dd1"/><dir name="Client"><file name="Common.php" hash="4c196fc850f65702741c044d12507769"/><file name="DotNet.php" hash="61bacfc1a99fabb15c58d5499c064c72"/><file name="Exception.php" hash="fe48793a358a7201ad7faee3a077a7db"/><file name="Local.php" hash="843caaab790dc3a322e570cae31dfda7"/></dir><file name="Client.php" hash="bb395c77d4e6ca127f48e15953c72f90"/><dir name="Server"><file name="Exception.php" hash="b5366c6128550c6904b5f0d83d9a4495"/><file name="Proxy.php" hash="4e3e39bf6b40e758bb8154900c0be4ae"/></dir><file name="Server.php" hash="2d3adb7e3b01a55889f4a9ccd1226758"/><dir name="Wsdl"><file name="Exception.php" hash="c30308763d2f85ccde3e48c399d977fa"/><dir name="Strategy"><file name="Abstract.php" hash="f09e005c0c35a51dbc906815f298a515"/><file name="AnyType.php" hash="7e0f81e8c1bde45bd858ae5c16b4cd11"/><file name="ArrayOfTypeComplex.php" hash="3b9998427588b55e16496ee51a1d7d5d"/><file name="ArrayOfTypeSequence.php" hash="8ea1226e6138e1d162b647b39daed36d"/><file name="Composite.php" hash="7ea40da650826369c79e7a17ff93da40"/><file name="DefaultComplexType.php" hash="9fefac807dbb4c843feec714a05ac521"/><file name="Interface.php" hash="d4f3ed1447d163ae1eedcfc886662719"/></dir></dir><file name="Wsdl.php" hash="8e4ad5d4d160d770740012ec920e30de"/></dir><dir name="Stdlib"><file name="CallbackHandler.php" hash="f33bb03784021305a529525bf125df09"/><dir name="Exception"><file name="InvalidCallbackException.php" hash="977bd070fc4de8c0bce940a2d0a0c530"/></dir><file name="Exception.php" hash="826ef583632fe8b71ce0916ce4c01030"/><file name="PriorityQueue.php" hash="886161c12418c95bda548c5e484db351"/><file name="SplPriorityQueue.php" hash="4ce44425f16b61d5cfa2b37a36c430b9"/></dir><dir name="Tag"><dir name="Cloud"><dir name="Decorator"><file name="Cloud.php" hash="c03f8a8a9acad9b124508cb5ec762ef6"/><file name="Exception.php" hash="da2286643dd90128c9bafdb55d4874d9"/><file name="HtmlCloud.php" hash="ac29df72f5738876b6c5c3220200aea5"/><file name="HtmlTag.php" hash="1c66e72d27e394b7a67e083a6a7e7635"/><file name="Tag.php" hash="38969d4df8dd12f7c75d5886a4309e2d"/></dir><file name="Exception.php" hash="f1f89e1176804f89966ffa1b6057aadc"/></dir><file name="Cloud.php" hash="b563d184a10c5780ac839964d05f5b70"/><file name="Exception.php" hash="bb95c48a0889e48b9621fc24ece1855d"/><file name="Item.php" hash="4d8899476ff7c0edc26227377437184a"/><file name="ItemList.php" hash="a37b92d4346128d6928c3ed75abe85e3"/><file name="Taggable.php" hash="754d26825a791b7b493479ab96de35ac"/></dir><dir name="Test"><file name="DbAdapter.php" hash="9f14c0c71238db11ce231ec608fa0748"/><file name="DbStatement.php" hash="ae071a2e217641e4431dbaffab4b475c"/><dir name="PHPUnit"><dir name="Constraint"><file name="DomQuery.php" hash="4a372f65097fddc842326acfb0873110"/><file name="DomQuery34.php" hash="4cfc2fccf97dcad8979afdeb5051d99d"/><file name="DomQuery37.php" hash="4918ef15cdbf82e30ee35bce62246f6a"/><file name="DomQuery41.php" hash="0e55e6f6ec4df95712cf6ae2592eaa4d"/><file name="Exception.php" hash="08a569be3229aa317e045e0bb5712aee"/><file name="Redirect.php" hash="bd29ebef3a5193019124cbe48e3b57a4"/><file name="Redirect34.php" hash="7fbaaf229a5e72fd9328b6b3355979e0"/><file name="Redirect37.php" hash="25ae9936724abf4f6c655e79a4b017a7"/><file name="Redirect41.php" hash="b15f5d011531a5f341691400758b7b94"/><file name="ResponseHeader.php" hash="d0c824d1d0825eaff50fbff17ad9fe68"/><file name="ResponseHeader34.php" hash="970159fe86220f6d79ae839787445e76"/><file name="ResponseHeader37.php" hash="b45fcfbc270c1dc1be8af6f967d74055"/><file name="ResponseHeader41.php" hash="d898287c0e3c5c5a29c8dfc23258c357"/></dir><file name="ControllerTestCase.php" hash="a1587e2519d6a108213338a8df626983"/><file name="DatabaseTestCase.php" hash="e660d4e0b896a1349b5b3a7b908abed9"/><dir name="Db"><file name="Connection.php" hash="a376a28b4f32640b77896ed71aa94103"/><dir name="DataSet"><file name="DbRowset.php" hash="619ddf7996bdbae5efe2667bf43f97fd"/><file name="DbTable.php" hash="c2f9df7d0a3cf0d37631d8f06c818bc8"/><file name="DbTableDataSet.php" hash="d4399f69a07e07e1cdf51ee779ed4d25"/><file name="QueryDataSet.php" hash="9923dfa4b4f6ec969e05af835f0c9578"/><file name="QueryTable.php" hash="49db01b854018eed9f97f9e87dd8ef99"/></dir><file name="Exception.php" hash="b4db1bec052e5f4326e4f69f8265b1f6"/><dir name="Metadata"><file name="Generic.php" hash="0d50fe34d4d444504a433c495a10f4c7"/></dir><dir name="Operation"><file name="DeleteAll.php" hash="ad2d32c7274f19ffd7ff00f6a9629831"/><file name="Insert.php" hash="76990ebfd7da444a380ef153fd4ec2c7"/><file name="Truncate.php" hash="aeb7cea4a23f9a4978838834184b827c"/></dir><file name="SimpleTester.php" hash="303a002e44573654515318426f06454c"/></dir></dir></dir><dir name="Text"><file name="Exception.php" hash="63dc12adf35209b68cb541fad9d13339"/><dir name="Figlet"><file name="Exception.php" hash="ce4743f212bc9dd406e7c5abd1499a8c"/><file name="zend-framework.flf" hash="e421545f78033d8a6a4324e54ccf0454"/></dir><file name="Figlet.php" hash="342b1851f3fddf6de881bfdcd6dbdc25"/><file name="MultiByte.php" hash="7beb126807547c59a29ff72918ce4cb6"/><dir name="Table"><file name="Column.php" hash="cb652d404e394051bb9463ef0f5e5fac"/><dir name="Decorator"><file name="Ascii.php" hash="642655dbd861110617fe242a5f5b2e49"/><file name="Interface.php" hash="b246cf5bf0cc2ccb3fd612987dda1ac6"/><file name="Unicode.php" hash="78c514875a100d295a884d52cbff6679"/></dir><file name="Exception.php" hash="a9ad309358591313a0b39a9dc6637ead"/><file name="Row.php" hash="2e1210709f13f36070015bf1e7c4bae8"/></dir><file name="Table.php" hash="fa040e017955cd19728968adc4d3263a"/></dir><dir name="TimeSync"><file name="Exception.php" hash="c5c88b4fa22c7aa853c99e80293d6b56"/><file name="Ntp.php" hash="670a72b056bc3ea5c6ca09fd51e5c0d1"/><file name="Protocol.php" hash="81ebccdcfad278c458e8f801743e8035"/><file name="Sntp.php" hash="f491dc0e0e4ad0a6909cc9518c443855"/></dir><file name="TimeSync.php" hash="e68ddd486d397ad8b8072df003f0dbe9"/><dir name="Tool"><dir name="Framework"><dir name="Action"><file name="Base.php" hash="ca10276b0b663e3946f30a7e85e2437a"/><file name="Exception.php" hash="033fe3dfcbe687a8fc14217124485646"/><file name="Interface.php" hash="4971f7cd01f81557e06c52442d1e10ec"/><file name="Repository.php" hash="763980637bc854efdabe4702cf90429a"/></dir><dir name="Client"><file name="Abstract.php" hash="c6aa9afeb508a90fac77fdd01490c917"/><file name="Config.php" hash="88d068ae943aaa028252208d2ffa9737"/><dir name="Console"><file name="ArgumentParser.php" hash="a7aca2e438a4ea02beea9efe4fc322e6"/><file name="HelpSystem.php" hash="c49dfb3e52bc4dbd0fb981d2d2db7ea0"/><file name="Manifest.php" hash="8ecaf5471c98b4adecf441fd0b239fd1"/><dir name="ResponseDecorator"><file name="AlignCenter.php" hash="aea5fb29315c501c879f1414ab30bdf1"/><file name="Blockize.php" hash="f6510cb7f02bdd000eff5b3cfc7c3f94"/><file name="Colorizer.php" hash="b4370450e0af8f8bc5b70bca3a3140e4"/><file name="Indention.php" hash="9d05c40f3bcf99606a4433c4f2f550c8"/></dir></dir><file name="Console.php" hash="70d696d68e6f889e25661568ae0cafef"/><file name="Exception.php" hash="9fc08df23e990977b31c58157458797f"/><dir name="Interactive"><file name="InputHandler.php" hash="d4a71d517cbdfca13bc442f915eadfa3"/><file name="InputInterface.php" hash="b76636ebb7563e128e1653de60a05e47"/><file name="InputRequest.php" hash="01746459e3c0d5114ba84376641ce516"/><file name="InputResponse.php" hash="fe6fb87211d75ac5d43a0afcd12b3438"/><file name="OutputInterface.php" hash="e6473dcec31887ba9fc189cf5ac4b5cb"/></dir><file name="Manifest.php" hash="a04f5f7452adbe2a7b9f572753c282e1"/><file name="Request.php" hash="337a50f6b8ca0346335666825a138400"/><dir name="Response"><dir name="ContentDecorator"><file name="Interface.php" hash="f5f2e4d82017c916a98e600c0ecf10fa"/><file name="Separator.php" hash="0bdedce341d3dc2456856bedb4e6fbfd"/></dir></dir><file name="Response.php" hash="047455ac32ab5c1f0913bd8be80408e2"/><dir name="Storage"><file name="AdapterInterface.php" hash="cbe1be24e10113b8355be82c17257d74"/><file name="Directory.php" hash="7f818fcabc4dd64292ec750d69a2cab2"/></dir><file name="Storage.php" hash="e1e34565e6f12ef7a6914bea4f21b495"/></dir><file name="Exception.php" hash="e8ab7ccbf5e2a5516a35ca4e887b1f5e"/><dir name="Loader"><file name="Abstract.php" hash="ac9b19649683e89c14f162643680d6d2"/><file name="BasicLoader.php" hash="eb441f57c872d051c8bf4ff334516776"/><dir name="IncludePathLoader"><file name="RecursiveFilterIterator.php" hash="e809fc3ffb30c42bd65defb0b841d5ea"/></dir><file name="IncludePathLoader.php" hash="ba1fdc0c41d1ac3ac9b86f7b295d62fe"/><file name="Interface.php" hash="5a982ccd517b7fa2c5d1e7a181f9a66d"/></dir><dir name="Manifest"><file name="ActionManifestable.php" hash="6b75a1363ec0989198f0577519f2a8d8"/><file name="ActionMetadata.php" hash="55c5c7fd4609c3a2c188c68f2b59996b"/><file name="Exception.php" hash="e4adb9a694c21dd46682009e1a25ba80"/><file name="Indexable.php" hash="f2fdb04e846a873a00178d44dfb7c134"/><file name="Interface.php" hash="65fb779fcdd624b743e1c70370ce1a2f"/><file name="Metadata.php" hash="79d13b52ad9aa5bffe103b61a404296e"/><file name="MetadataManifestable.php" hash="2974762fdea9eec82a74a6d3446f676a"/><file name="ProviderManifestable.php" hash="3d59e772c55a5a791844910d9acbb131"/><file name="ProviderMetadata.php" hash="b1fa45e3f1309e25c3e71e43e1a48263"/><file name="Repository.php" hash="b055ec6bcaa48d3536f376c7d196052b"/></dir><dir name="Metadata"><file name="Attributable.php" hash="3a1ae646ad3127bcd9d7f0b590b49d75"/><file name="Basic.php" hash="f8e243b4883d1f53ef6dd440c0d8b618"/><file name="Dynamic.php" hash="2ae310d375a9f1e29f0322c03350b718"/><file name="Interface.php" hash="dd418e0cfd979aa8caac73abbe8d65d7"/><file name="Tool.php" hash="d4cf6475ece71a871144a646c4653b88"/></dir><dir name="Provider"><file name="Abstract.php" hash="54efa5905a09985cfc5261116cdc808f"/><file name="DocblockManifestable.php" hash="0bb7be516c01ef1df2db65cac6782604"/><file name="Exception.php" hash="8340027bd3f883ce3bc60e5a4a779e1c"/><file name="Initializable.php" hash="21203810d42fc2c661b5a74a4db22afd"/><file name="Interactable.php" hash="1645bf6768d35a154b409e9fc8d23629"/><file name="Interface.php" hash="5acbcaa43439912bfc3f9be9aae48561"/><file name="Pretendable.php" hash="7320be8f080b47a7a3c7768ed5b82655"/><file name="Repository.php" hash="06ac616d5eca5d9769ad7d1d1a7ca9bc"/><file name="Signature.php" hash="5be099c081171cd11a6c5e6a80011f2c"/></dir><dir name="Registry"><file name="EnabledInterface.php" hash="87fe89d72c54ad50ec51bb2d683d2992"/><file name="Exception.php" hash="eccc229c4505a1ed3e85902496e1935e"/><file name="Interface.php" hash="85731cc24ee6598ac544956ba02a4847"/></dir><file name="Registry.php" hash="430ca6afc053d09a02faafa778f05ddc"/><dir name="System"><dir name="Action"><file name="Create.php" hash="ece59a9bf0b39f4c7731dd2c3c6a3687"/><file name="Delete.php" hash="93a02ef0a268f9a46140122e6b658831"/></dir><file name="Manifest.php" hash="2dc6db96a2eaec2f041f73eb9784426e"/><dir name="Provider"><file name="Config.php" hash="0f0ac44a62caaea96bdd741dc8d10fe1"/><file name="Manifest.php" hash="9834badd5250276130dd8f035fa3aa69"/><file name="Phpinfo.php" hash="a18c9de3ae3099a941d257fd8bb83286"/><file name="Version.php" hash="235916637c0ec94a08f86894dd211da4"/></dir></dir></dir><dir name="Project"><dir name="Context"><dir name="Content"><dir name="Engine"><file name="CodeGenerator.php" hash="28294bea1645211c3a55b04b03eb97e5"/><file name="Phtml.php" hash="b635fe45ef2a8b9de27be338ff80e0c8"/></dir><file name="Engine.php" hash="3edec5f50d35068768bd1ddb7cfcb242"/></dir><file name="Exception.php" hash="903019115f2291dac64e2d8316b069d0"/><dir name="Filesystem"><file name="Abstract.php" hash="7de036baa7d7a11fde54ba3d0d9e199c"/><file name="Directory.php" hash="346bbbf87ee7515d0b1ea6d468a23bbb"/><file name="File.php" hash="82a28fef9d3d33f3de763e2f4415ef66"/></dir><file name="Interface.php" hash="ec12cc9de36ab46a2afb96f61f3af90e"/><file name="Repository.php" hash="652c4bea315e3239fd99f22103c51140"/><dir name="System"><file name="Interface.php" hash="9011f3458a2b39fdf8867e639414a7bc"/><file name="NotOverwritable.php" hash="de0a563d5079199bf642b6811b7e5bac"/><file name="ProjectDirectory.php" hash="f5d33f4805cc35574112532f2f262579"/><file name="ProjectProfileFile.php" hash="48ff62386762440129ae4fb7337deb2f"/><file name="ProjectProvidersDirectory.php" hash="b5a9d7bba0ccd8554ca26f0149128acc"/><file name="TopLevelRestrictable.php" hash="2309be1ddaf737de9b7adafa6cb8632a"/></dir><dir name="Zf"><file name="AbstractClassFile.php" hash="22a8a9cc341edc796112df20983a43bc"/><file name="ActionMethod.php" hash="2f16d745e3a323f9ff416e2217358f54"/><file name="ApisDirectory.php" hash="0b39c81c051cc37f5492df965835eba1"/><file name="ApplicationConfigFile.php" hash="677abcc2fc67896b511af1f1181a8f81"/><file name="ApplicationDirectory.php" hash="42a08abbb3ecc267cd883a87f817981b"/><file name="BootstrapFile.php" hash="b76b4cf58705698399d06e8d4c9f6d67"/><file name="CacheDirectory.php" hash="5bb06a72dcd025a283c76c03a1ce9599"/><file name="ConfigFile.php" hash="2462d7d79f673c397d3a2f7284ccde66"/><file name="ConfigsDirectory.php" hash="b1cccd4669781cc33b9171a186236219"/><file name="ControllerFile.php" hash="090e5fe4d3b57933b9e7aed8eeef7cc5"/><file name="ControllersDirectory.php" hash="8543ca965e6d7a4cf78177ef0dcfc4eb"/><file name="DataDirectory.php" hash="5f8d27eca9e789c24dc039ea0f62748e"/><file name="DbTableDirectory.php" hash="92eda9ff83054cc8818bee744ed6e463"/><file name="DbTableFile.php" hash="b936fc7a4dd1e4726f0bb49f01ad931a"/><file name="DocsDirectory.php" hash="f58949c95502bd2ff8c31c59009c92b5"/><file name="FormFile.php" hash="b35ea0268fe07098b794eb24082ef53b"/><file name="FormsDirectory.php" hash="ffe9f7939c29068e7a1932dbc374bb7b"/><file name="HtaccessFile.php" hash="8e933afd24df22e6742aa972f8fc470d"/><file name="LayoutScriptFile.php" hash="8bd850a37a308efa3f4c83927fa5d8f5"/><file name="LayoutScriptsDirectory.php" hash="036f5cc0c38ead9183f7dd3f712848e6"/><file name="LayoutsDirectory.php" hash="c86cd320a91a46d439e4b419bd8ee428"/><file name="LibraryDirectory.php" hash="29a3c5283210c444e65284206b3da79c"/><file name="LocalesDirectory.php" hash="029c2897885aa476bd4103c48894ca87"/><file name="LogsDirectory.php" hash="3ee80aca0572bb9c5f6a44c6c021fcdc"/><file name="ModelFile.php" hash="958ed1603c25bd34ceb3f09ceeb6746f"/><file name="ModelsDirectory.php" hash="82dde848d95e686be57804162c11dc63"/><file name="ModuleDirectory.php" hash="7e219e82a6349ed878042cc17ee1faf5"/><file name="ModulesDirectory.php" hash="00182e9148959046c0a7d2d6e261e0b1"/><file name="ProjectProviderFile.php" hash="f3deaf3adf5c501237f22dc653430f91"/><file name="PublicDirectory.php" hash="e93bb7ed0ef00a864c097993ae1a2a94"/><file name="PublicImagesDirectory.php" hash="d769f00ec21961d66b41fffc8035277e"/><file name="PublicIndexFile.php" hash="4d3cf05ca9d35e24242dbf61d8189579"/><file name="PublicScriptsDirectory.php" hash="ff61ddca598a5ce42907b78140187614"/><file name="PublicStylesheetsDirectory.php" hash="8262d74f0f35523a912d95dd261fbc18"/><file name="SearchIndexesDirectory.php" hash="5ddf8701c47bcc6baf68cfdcc0ff7467"/><file name="ServicesDirectory.php" hash="825c4204f9f44f2280de370b0b156733"/><file name="SessionsDirectory.php" hash="af2fd72fa2bcf4d003c0a6368953cdb7"/><file name="TemporaryDirectory.php" hash="46790ecd95da8518c80dd8715fe7f8ad"/><file name="TestApplicationActionMethod.php" hash="4bbc3a869e69c2093bfa02068b6e057b"/><file name="TestApplicationBootstrapFile.php" hash="6f335bc4e4e047c948e77e8b0708f45e"/><file name="TestApplicationControllerDirectory.php" hash="1976699a04927fa3f5a1686934cdd08e"/><file name="TestApplicationControllerFile.php" hash="8f2956d50a3ba47f0b8c1fa96b361025"/><file name="TestApplicationDirectory.php" hash="09f0536bc206b5305862a21b65301016"/><file name="TestApplicationModuleDirectory.php" hash="da78a9b90b270578a9d36f8d62575a2f"/><file name="TestApplicationModulesDirectory.php" hash="4b54130f6c22e995308da7138d85330b"/><file name="TestLibraryBootstrapFile.php" hash="d78b732c8602c082ad1688c9bc6bf68d"/><file name="TestLibraryDirectory.php" hash="3626bc62a7c1c330369eb0001c4a9b16"/><file name="TestLibraryFile.php" hash="b45dc141518eab43f5c89e64b29aebfb"/><file name="TestLibraryNamespaceDirectory.php" hash="2e70388b581499815e6e2ba2c1cc0c81"/><file name="TestPHPUnitBootstrapFile.php" hash="40d55d88d6c84cd153adb2539ee323a9"/><file name="TestPHPUnitConfigFile.php" hash="1f136f46d817445285994244274f9276"/><file name="TestsDirectory.php" hash="0dec72680dea22074c8d370953effac0"/><file name="UploadsDirectory.php" hash="5d72a25ffd1ee7899fa182ddd7c9e028"/><file name="ViewControllerScriptsDirectory.php" hash="0ce107dd0b77183717845592b5be2550"/><file name="ViewFiltersDirectory.php" hash="59d3134c2b27c136adaa07177a72b28c"/><file name="ViewHelpersDirectory.php" hash="305d6bcc8066a02a658d82a69b73828f"/><file name="ViewScriptFile.php" hash="95b593cd475edcfd2a6ecea8f2668ffe"/><file name="ViewScriptsDirectory.php" hash="9aeac85b2f35bd6a666a4da29b465d45"/><file name="ViewsDirectory.php" hash="f36732d4b125b54a661356327d6850cf"/><file name="ZfStandardLibraryDirectory.php" hash="eea898b019c52dafd72f7de1aaa92d50"/></dir></dir><file name="Exception.php" hash="125c1606112c9ce2cfc8b697fb989d5f"/><dir name="Profile"><file name="Exception.php" hash="907a68043581559d3bf42ccc2c4b1322"/><dir name="FileParser"><file name="Interface.php" hash="325d41a29468a70dfe7476e1fcc8d20f"/><file name="Xml.php" hash="59f053468c48c4d9b881bc1b859ec28c"/></dir><dir name="Iterator"><file name="ContextFilter.php" hash="ff51879dcc3452e49ad8bf2d9e2c4910"/><file name="EnabledResourceFilter.php" hash="8d0d4add1f853aa9cfd89aaf138e2de3"/></dir><dir name="Resource"><file name="Container.php" hash="ab368c4da0867a25770b6f7970a782f4"/><file name="SearchConstraints.php" hash="9e4a7578e2879e6c9da8cfeb1fbfa9ba"/></dir><file name="Resource.php" hash="2a5467d1f6ff134cd8e35a2cb92eaedc"/></dir><file name="Profile.php" hash="db1e9708dc20fe27c3b39b9e6f57f1f5"/><dir name="Provider"><file name="Abstract.php" hash="8c55b9fe14b8d37beac8a5d1356c2cdd"/><file name="Action.php" hash="72581e6e7e4acd0a19f8ba9bbc0e73aa"/><file name="Application.php" hash="64fa6f041e1f5727a88bb9cbc7636f22"/><file name="Controller.php" hash="677b3b817a7fdb644cd150be124e9a96"/><file name="DbAdapter.php" hash="b831929398b67e053a395a548227695f"/><file name="DbTable.php" hash="6d922b240f64a010df894b03a44e0132"/><file name="Exception.php" hash="00d67294ec03f48a1e43fede57faee26"/><file name="Form.php" hash="95362baaf1eb17e9698573f6d7fbcb53"/><file name="Layout.php" hash="40528bb34ab9942db935b59b831ab909"/><file name="Manifest.php" hash="9d3a781e8c917a5cdb9e7dd10641cd35"/><file name="Model.php" hash="f561e3f60741f857d2a0a8d8d8509823"/><file name="Module.php" hash="f3cb636991bdb7fa9d69285ff5370a75"/><file name="Profile.php" hash="2bf881a5c9cf4e1032cb8de9d9297b16"/><file name="Project.php" hash="a7b3b98eeb5b8a38d7b003adde3a3c16"/><file name="ProjectProvider.php" hash="63455c931c8fa909d4a413ae91c99cdd"/><file name="Test.php" hash="ef752345daf66c4d3bfcdf94feea8602"/><file name="View.php" hash="1a8b7de4308dea33a847f1c590238d80"/></dir></dir></dir><dir name="Translate"><dir name="Adapter"><file name="Array.php" hash="539a98b29aa0bbcec264db5e29d810ff"/><file name="Csv.php" hash="698388dd2ac2843c3664586596e248f0"/><file name="Gettext.php" hash="321e228017b8049e94ea89f4e41f35b7"/><file name="Ini.php" hash="c03616b55e55e0c62363c4ee5e6b106f"/><file name="Qt.php" hash="19fd28ff1f5135d08c73c5faca961f96"/><file name="Tbx.php" hash="688c8d48dd29565f46d6f49d160e2f4a"/><file name="Tmx.php" hash="829f33d7444e30e4dc5053890fa22ccf"/><file name="Xliff.php" hash="0af804c51c85eea4b76941587aa673cb"/><file name="XmlTm.php" hash="39a37d7374fe3f0e3bf63a1e1f9ccb44"/></dir><file name="Adapter.php" hash="61940eb09da1bed1e6b8984370ad4088"/><file name="Exception.php" hash="469fbd261b8e8e1b91a8221fad6a79cb"/><file name="Plural.php" hash="4afe3e908bd63c3320fc7c899cd7b139"/></dir><file name="Translate.php" hash="0a7fda94b43cc10499fae10d9ec5d2e2"/><dir name="Uri"><file name="Exception.php" hash="0d12fb53167123e15aacbdddd8b11797"/><file name="Http.php" hash="55fae6ba863159381838ccc7bf8c651a"/></dir><file name="Uri.php" hash="f20bdab5c9c0694f64dd5b69f090e083"/><dir name="Validate"><file name="Abstract.php" hash="3382bfb0c407a0d3b490685a4f85678e"/><file name="Alnum.php" hash="2fe48d28207f9917e69f5edf99a392e1"/><file name="Alpha.php" hash="abeae56166032b791ae499883857d17d"/><dir name="Barcode"><file name="AdapterAbstract.php" hash="7bf5990b4b1dc34fe1fd7bcddd8f0348"/><file name="AdapterInterface.php" hash="c1b8934e5706e958f6e889e7c04a6931"/><file name="Code25.php" hash="f707195d53cd032ba5a9fbde32e75176"/><file name="Code25interleaved.php" hash="0c2ca046d04c43c4204e6cbb9d6dff7b"/><file name="Code39.php" hash="adff9a47dbf44dca5784dc8cdcc3ddc7"/><file name="Code39ext.php" hash="2e69f0103fbda86142024fc7466958be"/><file name="Code93.php" hash="2377845f1bee4dab114519c8f5dd4c5f"/><file name="Code93ext.php" hash="795aad78199cbc0668c70e12defcf9ec"/><file name="Ean12.php" hash="233d2f57fb2b36f1f2c7b3a36b0ead3b"/><file name="Ean13.php" hash="349560c5d4af7178e257a38c3a24735e"/><file name="Ean14.php" hash="30ab956febdabc3c13a7812f6e703bd1"/><file name="Ean18.php" hash="899007801fc5a8f97b577d711e2d692e"/><file name="Ean2.php" hash="0d73987f006070e0d15a573277a812e0"/><file name="Ean5.php" hash="806813312608a4ade42bbfab5d233711"/><file name="Ean8.php" hash="d0f3b4b0305e5dd0a7ba077fbb4978cd"/><file name="Gtin12.php" hash="da6df50e6751f4872604687602cc9695"/><file name="Gtin13.php" hash="dbd9c8a33ed3669917d10dee00a44a13"/><file name="Gtin14.php" hash="ae9c9fccedb5e71c87950c17bc5a3411"/><file name="Identcode.php" hash="9fed06deab51a31d97a66801fc68921e"/><file name="Intelligentmail.php" hash="9f4a16c7b78b3b1e5d9429569ea2aa11"/><file name="Issn.php" hash="e8de22a236a14b191225614ca730d343"/><file name="Itf14.php" hash="958a09981361b0cc8c83c0ae98831008"/><file name="Leitcode.php" hash="581e77d7ff774564ac3961077e40b27f"/><file name="Planet.php" hash="cda7f2f6910606728d4f6b375b17bbff"/><file name="Postnet.php" hash="9182081361daecfe6f0371fc4cabcd9e"/><file name="Royalmail.php" hash="e5bfd9d4ffd4935ca4b988f651270e4d"/><file name="Sscc.php" hash="eabc46811aff1a4a7f4468bd73a3f1e8"/><file name="Upca.php" hash="bb4f503adce344b6d3eb584843d7378a"/><file name="Upce.php" hash="368d3a61898baad1f968d2292a2692af"/></dir><file name="Barcode.php" hash="b3531dde74c28ed55c868d75615a9d3b"/><file name="Between.php" hash="5ccda5b2ac3d35bcc7faa8d8800108df"/><file name="Callback.php" hash="4e6874a0cb4bba53ef8edb9cde9eed18"/><file name="Ccnum.php" hash="1871fdfe01ac8f50e1b76f103297d7fb"/><file name="CreditCard.php" hash="2b68a89fbd9747e2a7308bc08aab9a12"/><file name="Date.php" hash="ac196efe9a75f1f5052881f0ad0fb7fc"/><dir name="Db"><file name="Abstract.php" hash="f32f786acb59d6936c87698c0ac868ad"/><file name="NoRecordExists.php" hash="de3eab3a488154fd14c3aeaad18c58b7"/><file name="RecordExists.php" hash="6203f6b21b338f28420fffd67f007dcf"/></dir><file name="Digits.php" hash="6536e4f93eea9d40663dc5b8308455c3"/><file name="EmailAddress.php" hash="f2fb48bbe83e3fb4288ee0f4825f485b"/><file name="Exception.php" hash="f05330fae73fa8a6fa5eb13b239492ae"/><dir name="File"><file name="Count.php" hash="fd4240625ed05056050c46051750d42a"/><file name="Crc32.php" hash="37be3ed367b5b7d13170fdc56c083488"/><file name="ExcludeExtension.php" hash="cffccfd1fcdae2be7676722ba8af7d9e"/><file name="ExcludeMimeType.php" hash="071a625f92fac84b76467a0eba3c467f"/><file name="Exists.php" hash="f5ab404939714ebf24c992bb3e4db124"/><file name="Extension.php" hash="21bf334b8b2ee214e82709c7bc1bf489"/><file name="FilesSize.php" hash="ab8dd66b1a133b1851d51927eabea61e"/><file name="Hash.php" hash="fd3f0e2888d1266d78da22e7d6647690"/><file name="ImageSize.php" hash="d277f5533a2aa61b2d5132babaf63c43"/><file name="IsCompressed.php" hash="1a0257de13523c8227a809b5673eb217"/><file name="IsImage.php" hash="7cd64b53b6e4a635e71b69e8ed5af7c4"/><file name="Md5.php" hash="4af983e349f6c2bc3a3fb6bc05d51e32"/><file name="MimeType.php" hash="c996e072363c49d15feba2a7ed35684c"/><file name="NotExists.php" hash="66d36bf5981467b276a1d97ae22ba5a9"/><file name="Sha1.php" hash="bf177eb68980e20cdf4a0db90bc32a08"/><file name="Size.php" hash="e6fe4f698bbe20ca0ccabe817462e0e7"/><file name="Upload.php" hash="a4099691c48b3427cdb144e3333b9145"/><file name="WordCount.php" hash="a2c3afef06b310c0b6a61867dfe25ab2"/></dir><file name="Float.php" hash="7d81882373a3c805ea6d890fd23d534d"/><file name="GreaterThan.php" hash="c8abc03e583058774db68388b71654ae"/><file name="Hex.php" hash="b491553d31f5894f2bd1303d685223f5"/><dir name="Hostname"><file name="Biz.php" hash="7696fce32b01be696c7a3f168ebd56de"/><file name="Cn.php" hash="fb00d241ff6f27a84d1c63758be2a14a"/><file name="Com.php" hash="5deccb0b547e92073687530b13870ce2"/><file name="Jp.php" hash="d22c9a1a27cfc135357a79c4608cbbd6"/></dir><file name="Hostname.php" hash="084ca6f450f36d3c76248663351f27dd"/><file name="Iban.php" hash="93312cb157edcb0735182b06a20d22dd"/><file name="Identical.php" hash="35b72f8c75851bb0dddfe4ac2126cef0"/><file name="InArray.php" hash="c75ec63d4745f66be627d1973bd76396"/><file name="Int.php" hash="222edd304fa91776951350e2659597fb"/><file name="Interface.php" hash="dbdfc01be0180334732bf0331fb19468"/><file name="Ip.php" hash="7abc354eed666e6b93c14c9187d2d0a3"/><file name="Isbn.php" hash="aedbe250623c9a9ef228d1863104b839"/><dir name="Ldap"><file name="Dn.php" hash="2716b9bc0c82519ab2fdbb52a0094eaf"/></dir><file name="LessThan.php" hash="e9fd4f35f101acb8fa94df0812ece205"/><file name="NotEmpty.php" hash="84a8e76bc9fd6fce9ce3d93f9e37b36f"/><file name="PostCode.php" hash="4513fb89c9215f1c987354ea552c0925"/><file name="Regex.php" hash="cd9c961f1bc2241a1beb61b8adc6325c"/><dir name="Sitemap"><file name="Changefreq.php" hash="02c174efb2eb92c1f99083d8d8a8201b"/><file name="Lastmod.php" hash="ecb2907a0827ca4f9a902b1842104f0c"/><file name="Loc.php" hash="43a32b211470fd207e614e122b373d5f"/><file name="Priority.php" hash="c4062b2af691dd790e88a80aa5f5400b"/></dir><file name="StringLength.php" hash="b57a08cb0418165feed0c8f3069830dc"/></dir><file name="Validate.php" hash="fdb819323b45ba50c37cefe43410afd6"/><file name="Version.php" hash="4050aa162960c6f935a49ffe910f81bd"/><dir name="View"><file name="Abstract.php" hash="1319cd055a57d8627ff0ed820f17daa9"/><file name="Exception.php" hash="7a4c976601978de749639c8b0914a03f"/><dir name="Helper"><file name="Abstract.php" hash="e1018e0e93049ac253c920888dc1133e"/><file name="Action.php" hash="786799b58e0fc8729abfde4de463e4df"/><file name="BaseUrl.php" hash="183857156a40c84f03eaea0ff24606bf"/><file name="Currency.php" hash="2ffa077bbe17cbda6974509421cd0582"/><file name="Cycle.php" hash="33bb85798e40541bc8e75cde27cf3499"/><file name="DeclareVars.php" hash="3cbcbf5083117f5f1dad9bac8df3b474"/><file name="Doctype.php" hash="b7e492a249f52859e00c287a8973edb9"/><file name="Fieldset.php" hash="4874b3f6f0658d8f9eae3bf750bf9793"/><file name="Form.php" hash="17d5d7e238c33e8e8cb0efbe043c01e0"/><file name="FormButton.php" hash="c62cf4a51db83501c7c7f1e2fad7cabe"/><file name="FormCheckbox.php" hash="3fefb8a82a8183e4cda683231bad496a"/><file name="FormElement.php" hash="9dc8f7fdd07eb031bc7cee049faa49e2"/><file name="FormErrors.php" hash="eb7e95a90d8a438d4b1043fd32a5f3ab"/><file name="FormFile.php" hash="cf7ec88f4ffd6c732a7df42737069d07"/><file name="FormHidden.php" hash="396bbe9d13da93ee84befb08a5c86f55"/><file name="FormImage.php" hash="3c9adc229035b5972678f634f690cd75"/><file name="FormLabel.php" hash="af00a20fba6e72eb035a605e72a814a7"/><file name="FormMultiCheckbox.php" hash="4033cf623ff32c24f0eaac26e96272d9"/><file name="FormNote.php" hash="94c3fe7ae9857d5d1c0f7e67bd817ee2"/><file name="FormPassword.php" hash="e743953bac753960ee4918c34372ede6"/><file name="FormRadio.php" hash="7df9c01b4e3bac15aca3394bd6bb20ae"/><file name="FormReset.php" hash="7463249d29ef3c895e6d73548c0d2250"/><file name="FormSelect.php" hash="b9076b91b3dd8880a74b9a1ff0f6fb2e"/><file name="FormSubmit.php" hash="abb3c753621b09e8251e88dd7d9cfb1b"/><file name="FormText.php" hash="c059e5863263faaa09d4e7fe99ef4fa1"/><file name="FormTextarea.php" hash="b5a12bd7577c3794b4f7536e1721254c"/><file name="Gravatar.php" hash="8b4c4ce3552c48ec148b81ebb4f843d7"/><file name="HeadLink.php" hash="c25bb4abcf60925394a915df38b006a5"/><file name="HeadMeta.php" hash="42d8fed1309297d58411bb7d487ebe28"/><file name="HeadScript.php" hash="c835c0d98daf0f2b89f2f486d22587a5"/><file name="HeadStyle.php" hash="2770400f4d12c2bf7b27c053aa1a6453"/><file name="HeadTitle.php" hash="329e23739809b5a55dc8d28c447dc91c"/><file name="HtmlElement.php" hash="e5e6b362d6001c20bbb805e31beb36e1"/><file name="HtmlFlash.php" hash="dff36a0bf66c600be3004bdd34cc8b08"/><file name="HtmlList.php" hash="f21ac692428d4c457dc2f3d2db5e7304"/><file name="HtmlObject.php" hash="dda5c4a84c32c4cdd73112a33c322c87"/><file name="HtmlPage.php" hash="d49d3e056e0aab1a8179bd2b3f1917e2"/><file name="HtmlQuicktime.php" hash="4455adb547e6d3a1d3fb52d6746df770"/><file name="InlineScript.php" hash="aabae2682812b3ee88a5bfafaa3d00dd"/><file name="Interface.php" hash="52fa974c83ce1fff7c9d56a994b1fbbc"/><file name="Json.php" hash="78621362d2c630ad5b8b7f7ef2cf2124"/><file name="Layout.php" hash="9e98d798baba317de41bc0cdf75cdf60"/><dir name="Navigation"><file name="Breadcrumbs.php" hash="6482ca2aa2565f318b49ce0458072ae4"/><file name="Helper.php" hash="673a27dfb10aa4442dfa2951e0ef0c4a"/><file name="HelperAbstract.php" hash="6bae63e5c54e21b87ebaf8d2622ac1b9"/><file name="Links.php" hash="b2b7b2403670be61982c1a73851ed2eb"/><file name="Menu.php" hash="8f5c5c42c0b10ac7a68c69b4503ecaa2"/><file name="Sitemap.php" hash="960d3bd171fbe2ca66ba073afd33140a"/></dir><file name="Navigation.php" hash="98f3a4adbd4c69df20c127f90e09156c"/><file name="PaginationControl.php" hash="b18eee7e9c52256b27384a982a75f0eb"/><dir name="Partial"><file name="Exception.php" hash="047c658de482d2ae0eb5d21ac0cd0a55"/></dir><file name="Partial.php" hash="abe72103b776eeee4a96ccbca003cabe"/><file name="PartialLoop.php" hash="637e144d4c2d369a35848d681b4b6464"/><dir name="Placeholder"><dir name="Container"><file name="Abstract.php" hash="8d885989d99888fc2798a85f07c9f17a"/><file name="Exception.php" hash="326371b5ef3489904fee8e387e7feb46"/><file name="Standalone.php" hash="637e4d2b742d9902ae6de414c0475237"/></dir><file name="Container.php" hash="16d8237399260e817a542e68a4828d4c"/><dir name="Registry"><file name="Exception.php" hash="b9a3969a1431cf44f4cd03764dd92e32"/></dir><file name="Registry.php" hash="ee6d81b2c630c83baac77a0d619ba7d1"/></dir><file name="Placeholder.php" hash="2fced270eb2e3474b4bd538cd73f517a"/><file name="RenderToPlaceholder.php" hash="5ad5803d78bad07455af8f5d3c876977"/><file name="ServerUrl.php" hash="c6a222f4e795320f6f07c6bb8f80d7f3"/><file name="Translate.php" hash="d341ce0f8809b691728672fe506736e6"/><file name="Url.php" hash="71f6c3948d28f8190bfc27b3586d3f93"/><file name="UserAgent.php" hash="dbee4e1b78fad667479a85e8e2d0cbd1"/></dir><file name="Interface.php" hash="eec709b1a8ebb0256a9f752db1a8ad75"/><file name="Stream.php" hash="6f4c3f620f6e2d2f92cd371db18d3a90"/></dir><file name="View.php" hash="604cd51ea9ba98756064b418d6785a5d"/><dir name="Wildfire"><dir name="Channel"><file name="HttpHeaders.php" hash="62dffc43581615ca6cb052efcb2a43f9"/><file name="Interface.php" hash="0bed6c7ae3ee56a17f5c5187eef3ce10"/></dir><file name="Exception.php" hash="a225536440492a4ef3d37702aea1cb40"/><dir name="Plugin"><dir name="FirePhp"><file name="Message.php" hash="f481d929bbb00bf2bac8dfb008ae37d8"/><file name="TableMessage.php" hash="074faf9136be2ea86add5cdf2b459dd8"/></dir><file name="FirePhp.php" hash="e23b81012ace71de3018a37deb708885"/><file name="Interface.php" hash="c3cb69d35db9a385f7caa140b9634dab"/></dir><dir name="Protocol"><file name="JsonStream.php" hash="38a7d96f9d4ec70f68492f1bcf4022f2"/></dir></dir><dir name="Xml"><file name="Exception.php" hash="2dfb5785f12ed3858b16ab075570d577"/><file name="Security.php" hash="b7b7a240b24574b06f73a59dd8a4e6f0"/></dir><dir name="XmlRpc"><dir name="Client"><file name="Exception.php" hash="8e96419287c2faeeb4412ed9e832d975"/><file name="FaultException.php" hash="28c34f9ec27f280c44d215ee38bd41c3"/><file name="HttpException.php" hash="8c2eac4d043926123b3691562ad47310"/><file name="IntrospectException.php" hash="39d33b723e4fb1d5ce2af5cfd1f41589"/><file name="ServerIntrospection.php" hash="e52c06c394a8c8ac91b5313e5c575024"/><file name="ServerProxy.php" hash="43f25d1783bc1f11462d21ab5a134976"/></dir><file name="Client.php" hash="ea8c5a084405ca13e4f43340e37fe866"/><file name="Exception.php" hash="a04feed37237658eb7c174518a4d9383"/><file name="Fault.php" hash="18685e9a87f2f7750fa968d86ab89625"/><dir name="Generator"><file name="DomDocument.php" hash="5fc0be6304c7a00e58ac39f033d0dd22"/><file name="GeneratorAbstract.php" hash="493eda4b0b32cb59a133c06d63fbef90"/><file name="XmlWriter.php" hash="45013d6c2e24f7ee77439df64a958172"/></dir><dir name="Request"><file name="Http.php" hash="70fcc3ae21a466a9295f42ebae0c2a93"/><file name="Stdin.php" hash="23583af65a719e197a70fcd4c5500ac0"/></dir><file name="Request.php" hash="6945ae9bdf8d76308651611848870e09"/><dir name="Response"><file name="Http.php" hash="50e6859ca7391fd453d7137697f57dc5"/></dir><file name="Response.php" hash="cc7fe267b740ab5c556b7b2d19b6d600"/><dir name="Server"><file name="Cache.php" hash="1cd78db98fe5499e4a64379e97689f77"/><file name="Exception.php" hash="6294a6b1a7d4da4b7a15e7ee489eb119"/><file name="Fault.php" hash="69b89d7568a910f82109b6f3cb0410de"/><file name="System.php" hash="d7b0d17c91367f44eb993da66672dbac"/></dir><file name="Server.php" hash="1087be94c4995db9c38a5335323e922e"/><dir name="Value"><file name="Array.php" hash="b7011fc480c395bfcbc67d68ead94cd7"/><file name="Base64.php" hash="91ea9215e1d57716c0cd79bb1906134e"/><file name="BigInteger.php" hash="10222f3f5cd5eeaaa9813d8ed9f2494c"/><file name="Boolean.php" hash="770874cea876566818fb9135f31e69c5"/><file name="Collection.php" hash="0708fe32732db76ebe9d7e89396b89e0"/><file name="DateTime.php" hash="1a9f56c65375240ee0385ed912731b84"/><file name="Double.php" hash="ee71a5a9eeb026f1eb75387b8158706e"/><file name="Exception.php" hash="b7adf50526128e43c344331e7250b935"/><file name="Integer.php" hash="66c8d75e059a4cf328ff108d15db5c5e"/><file name="Nil.php" hash="ad51cdbcfb5eff5e06d7fc2c6d4661e9"/><file name="Scalar.php" hash="e61890f60aff885a3bed37b093f36e6d"/><file name="String.php" hash="a9d992c1910d76c4ed5330e704a1d438"/><file name="Struct.php" hash="028b64a94eeca406537505ecd52788d1"/></dir><file name="Value.php" hash="7d09b0ce98deeb7a07c01ad1bc94aa0f"/></dir><file name="replace_recursive.php" hash="e886103ea1f75208cc11780718aa3094"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Lib_ZF_Locale</name><channel>community</channel><min>1.12.10.16</min><max>1.12.10.16</max></package></required></dependencies>
+</package>
diff --git a/var/package/Lib_ZF_Locale-1.12.10.15.xml b/var/package/Lib_ZF_Locale-1.12.10.15.xml
deleted file mode 100644
index b797eb1..0000000
--- a/var/package/Lib_ZF_Locale-1.12.10.15.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Lib_ZF_Locale</name>
-    <version>1.12.10.15</version>
-    <stability>stable</stability>
-    <license uri="http://framework.zend.com/license/new-bsd">New BSD</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Zend Framework Locale</summary>
-    <description>Zend Framework Locale
-splitted from ZF to avoid memory overruns during installation and upgrades</description>
-    <notes>1.12.10.15</notes>
-    <authors><author><name>Magento Enterprise Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:20</time>
-    <contents><target name="magelib"><dir name="Zend"><dir name="Locale"><dir name="Data"><file name="Translation.php" hash="3c4e6ddf022e279cdbc77a860c6cb657"/><file name="aa.xml" hash="6ba5c871d22f64a769c70a1af71a04c3"/><file name="aa_DJ.xml" hash="369c4c2c9eca85c0b60d762a6bc98aa8"/><file name="aa_ER.xml" hash="64dd3e36ee4831d967e49ca2e3acaaff"/><file name="aa_ET.xml" hash="c05abb8269fff734e511dc4d0a11c1a9"/><file name="af.xml" hash="67b34f34749792149e0358fbc902c167"/><file name="af_NA.xml" hash="4034171f9b1450a37ed070aa3d90c5ba"/><file name="af_ZA.xml" hash="6c3da14996bf1b58cd8017df3313b8ea"/><file name="agq.xml" hash="5fd93a5c707e73e4aa5c519c6d64afd4"/><file name="agq_CM.xml" hash="06499c36298cb9eeb23e6dc0dbe20322"/><file name="ak.xml" hash="69320ac48004c58405d12d800a2d81ff"/><file name="ak_GH.xml" hash="5c5c86078d71e30c0399a762e5cf7f0d"/><file name="am.xml" hash="95b934943f754f649861fcc29f378976"/><file name="am_ET.xml" hash="584cb88741cf24321e0c047dcef574e9"/><file name="ar.xml" hash="8ec3de78c7d4ff42daa956025eeebc20"/><file name="ar_001.xml" hash="bc30b0854e32d00739413feb7a5414ec"/><file name="ar_AE.xml" hash="f70fd224cd066586d1b8cf5309774b21"/><file name="ar_BH.xml" hash="0c953018f40ce82e9de064a4cb95a488"/><file name="ar_DJ.xml" hash="66fa3cc4267b7fd0d96a2669a0401d8d"/><file name="ar_DZ.xml" hash="c070ac57992c1611059859954354e256"/><file name="ar_EG.xml" hash="7a422d856e2ec72b9c1494316b89aa02"/><file name="ar_EH.xml" hash="a21177328a2e94087fbae06f1c7471b4"/><file name="ar_ER.xml" hash="0a7472b1683fc78bd1a3a5cafb8b84c6"/><file name="ar_IL.xml" hash="1bca56bc324229351c0089b67d490cb6"/><file name="ar_IQ.xml" hash="0da352ff695a5a3e8e5dd155cd7c4ddc"/><file name="ar_JO.xml" hash="4c7b8b4b5eb54adc1f9c3f6e4dc4dea4"/><file name="ar_KM.xml" hash="e919d368ba30dfdeaa95f70532b4e255"/><file name="ar_KW.xml" hash="9b6ca92c240ea68d66acbb49f91992f0"/><file name="ar_LB.xml" hash="18b007c4b842620480c8bb88aae29b77"/><file name="ar_LY.xml" hash="4da8f8faf728c8a65aae9c4a66008b34"/><file name="ar_MA.xml" hash="f1b35950f3e3e3f4237a5a39c7da2be8"/><file name="ar_MR.xml" hash="f2ffa3c86e1b19b17b09f9099273e9d4"/><file name="ar_OM.xml" hash="ed0e25061367e82694d8cb7c0eaee387"/><file name="ar_PS.xml" hash="e7ee58c19554a466dab9fdb752d24a6f"/><file name="ar_QA.xml" hash="7b180beb5da6eac09e84b58a240d6991"/><file name="ar_SA.xml" hash="d016c7a9ff9de9e45c9136109f8f493c"/><file name="ar_SD.xml" hash="9dfcaa9bb696f5cedc059a4109c8b3ab"/><file name="ar_SO.xml" hash="84afb054141b7c24b7b448b5602359e0"/><file name="ar_SS.xml" hash="6c3734aea87be71cffb4556464be4fd4"/><file name="ar_SY.xml" hash="5a198ba2fef0281de890f996fbf644ef"/><file name="ar_TD.xml" hash="948d829d89a161430f83912af024f141"/><file name="ar_TN.xml" hash="7faf65c744cf5e52bfdb59542bbe7899"/><file name="ar_YE.xml" hash="8c10abba56d6a234a55c654078016a9b"/><file name="as.xml" hash="8fc5e45c11ceac7f52c78ff5166159d6"/><file name="as_IN.xml" hash="694909593f1415ef0e4fda6d5e58be0b"/><file name="asa.xml" hash="67790459fbf5470067fda4eab8703753"/><file name="asa_TZ.xml" hash="a7ff94e5a530dc21c43ab7174ae813d2"/><file name="ast.xml" hash="64deedf1c37b39d07b45a5080fc94190"/><file name="ast_ES.xml" hash="77b6d2a7c40dfcdd70fcd5a48dbc937b"/><file name="az.xml" hash="e5c36c36cb81eca6d5cfa86ef058d989"/><file name="az_Cyrl.xml" hash="4489b815e2f3f628619ccbbe09afe72f"/><file name="az_Cyrl_AZ.xml" hash="827b611f5206f27d79f2c07525340bfa"/><file name="az_Latn.xml" hash="7a9c14a8afa4e30e677b6d588788a515"/><file name="az_Latn_AZ.xml" hash="ef3f0e6fe96210ee2e21ed77c73716a8"/><file name="bas.xml" hash="b5e926cff825d6a19ecdd30aa6ed7309"/><file name="bas_CM.xml" hash="b96cd37b4240f82a00400bceef16106e"/><file name="be.xml" hash="b9e6bfe9f98012d6e2e3adbb8d7f4a33"/><file name="be_BY.xml" hash="f7decbc88e0b84a81c61c33b752f7f35"/><file name="bem.xml" hash="b32d7fab640633d84596c781c5729972"/><file name="bem_ZM.xml" hash="a41416d42e206b3499ed1327002ce5da"/><file name="bez.xml" hash="700611e0dce26a8fc22647aa5708dc74"/><file name="bez_TZ.xml" hash="c767af253038caf4cbfede8a067453f5"/><file name="bg.xml" hash="51b19b644a9796463b91bb8ec236adca"/><file name="bg_BG.xml" hash="05e86d4ebf3b91764d3a0d2551e16bf1"/><file name="bm.xml" hash="09d5b79929820ae15c0c6d5ea4afb6dd"/><file name="bm_ML.xml" hash="4d5e1b37325ed9e57f8c590fe1d3a762"/><file name="bn.xml" hash="199a113c26a1608720ca7e3c660d23e8"/><file name="bn_BD.xml" hash="794e3d0d4fcb61f260ac7bf8673378d5"/><file name="bn_IN.xml" hash="0848d84be54a2646adc33af1c9e4b968"/><file name="bo.xml" hash="febea3f15347297281d6ecfcc5771b73"/><file name="bo_CN.xml" hash="30fd400db11b971da287cea6be2ef3c1"/><file name="bo_IN.xml" hash="d68dac66b5b843ce88da031b16b3afe1"/><file name="br.xml" hash="e870097efcb0cd34bb6e4d1f2dc5b278"/><file name="br_FR.xml" hash="11652862f633f7aec19a1c0433c4b204"/><file name="brx.xml" hash="8047b46746f02a39674f0beefc07e194"/><file name="brx_IN.xml" hash="99404538d96a071935efe231780663dc"/><file name="bs.xml" hash="940b48d89bdb239461bd8b3427469342"/><file name="bs_Cyrl.xml" hash="8580494f42dcf27b664a012d4658982b"/><file name="bs_Cyrl_BA.xml" hash="3f8c9a61ac978bd30d6d64bf86dffec8"/><file name="bs_Latn.xml" hash="0c8b503dcc0f9853d3af20768e662aea"/><file name="bs_Latn_BA.xml" hash="9496b4ae275da058251832af52888167"/><file name="byn.xml" hash="5b73a1af7b8ba27dc8262d81934c3f14"/><file name="byn_ER.xml" hash="4da388f09780d86134689dc5f10a3862"/><file name="ca.xml" hash="581f561afd2a2296430eebbd9cd7cf1f"/><file name="ca_AD.xml" hash="f3f80fa4f38bb72a397d94e6e12175d6"/><file name="ca_ES.xml" hash="24c8e24495f99d3921a5a4e77f8bfb81"/><file name="ca_ES_VALENCIA.xml" hash="e9703c4cedea0d7756a06a653c1c8442"/><file name="ca_FR.xml" hash="84537f1e57ba4476c1f923d12f4f7b42"/><file name="ca_IT.xml" hash="e842526f0ecfcef2904d206b2a810041"/><file name="cgg.xml" hash="054e8d83970f37440d169e964c743447"/><file name="cgg_UG.xml" hash="c6f0a77828c43211f72e10e83f9f666d"/><file name="characters.xml" hash="578bec00fbe6d6416ba89e6fa7986357"/><file name="chr.xml" hash="d5c69b967b2ca2744b8a46d9c95260e8"/><file name="chr_US.xml" hash="53b9e050bf58ab63900197dc8fb43d9c"/><file name="coverageLevels.xml" hash="90d4dc96d148cbd970ac8ff49c209bea"/><file name="cs.xml" hash="23e2ba0f38fbb0021ecd6aaa24db77a1"/><file name="cs_CZ.xml" hash="baa89fb49d1c50a5e7ef632f75d56fa7"/><file name="cy.xml" hash="0657a743b16b94e59c26b692dd79943b"/><file name="cy_GB.xml" hash="9bfe606c96d3d035ad644efe57bc67f6"/><file name="da.xml" hash="507243848cb4398daf768f735cfb432f"/><file name="da_DK.xml" hash="2347254255ce488182e37214c7d0694f"/><file name="da_GL.xml" hash="84ea22e10d4f6aa9ff8a0c6644fd7dd9"/><file name="dav.xml" hash="47ee87a9cdba6d211639776a608c1e86"/><file name="dav_KE.xml" hash="37e7d66af32b1fe4ac81be34fbee5d2e"/><file name="dayPeriods.xml" hash="56449b799dac8fc8daafbb0f3d3d99ef"/><file name="de.xml" hash="198aa0c550d4c41406bd0df6f7b70a7f"/><file name="de_AT.xml" hash="4b960a6fac173340ac276ce5c9d82532"/><file name="de_BE.xml" hash="dce45b8b94a4c3aab891a2c7bf3ca151"/><file name="de_CH.xml" hash="c4e68ad1a19e6e92daa571edb12cb36a"/><file name="de_DE.xml" hash="fa5913f6081a8a4650cef19d22acca20"/><file name="de_LI.xml" hash="0dfda8f44bc729219bb5de48f7694393"/><file name="de_LU.xml" hash="409b134c2c81689c16df1a79c0a4baa2"/><file name="dje.xml" hash="7da22550436ba325fd7b0dfde195b9a7"/><file name="dje_NE.xml" hash="7e318b89d05df66eea3fe59bf75c7ac7"/><file name="dua.xml" hash="ba4657ecd1b3bc014c5dd1622d107e90"/><file name="dua_CM.xml" hash="5bba1b38dc6495219fcb1a0432cc8df3"/><file name="dyo.xml" hash="612804b11d342d9e3b4bb2d58b5f66a7"/><file name="dyo_SN.xml" hash="dc003c4af3987ec2d7255d3c1f541738"/><file name="dz.xml" hash="244f80bfc2f658780ba016281354fe0b"/><file name="dz_BT.xml" hash="9d287c1c61edf1fa5ef3d765b2c7da86"/><file name="ebu.xml" hash="76696c080f20a7db39abc05dd272f090"/><file name="ebu_KE.xml" hash="7c4abeeb255cf7bf2bc500abb12ce387"/><file name="ee.xml" hash="4518057dd1b1b514e3bd12e5b5e85bf2"/><file name="ee_GH.xml" hash="082d3a0d2203319b9e51004a710e3e6a"/><file name="ee_TG.xml" hash="d99900de319d3584f1a115d4b5eb76f0"/><file name="el.xml" hash="1710cdf160e6cab0c4d47c15bab5be18"/><file name="el_CY.xml" hash="6da5d159d499ba4754a2e7d4553d5059"/><file name="el_GR.xml" hash="477e3b1f10320e95a0c12511cb0c8368"/><file name="en.xml" hash="9256d3ec622d04bd406376827d31012b"/><file name="en_001.xml" hash="768d1b54436a379dd71d0239702810a6"/><file name="en_150.xml" hash="7f9a887b30b86016fe8a29cabb6b8ce0"/><file name="en_AG.xml" hash="4d2c7e568ab71d4b4e49c934b47d5c4a"/><file name="en_AI.xml" hash="70e59d70a946d5026659413cecd2da7f"/><file name="en_AS.xml" hash="2b134e308540cf74f34c2aa665112301"/><file name="en_AU.xml" hash="ed81bf367e4f715e9a5c4271bf49822e"/><file name="en_BB.xml" hash="5dff42e201010656bc3dbac5887d015f"/><file name="en_BE.xml" hash="f91d2ce67b1818708d15c091c4c9d720"/><file name="en_BM.xml" hash="2908ee96a408ec7b9d7fd659615d90ff"/><file name="en_BS.xml" hash="91eab1ca2779d23f13df0347f536ca0f"/><file name="en_BW.xml" hash="e37d57c47fd205e31473eb60bb1c973d"/><file name="en_BZ.xml" hash="59d8c1d1deac2a7b0f73992516c999bd"/><file name="en_CA.xml" hash="7f81353970624138037a527f761e6571"/><file name="en_CC.xml" hash="38e31ba2efac50bc06a5caa4bce5fa02"/><file name="en_CK.xml" hash="4a677485a65e531f1468c1543347c1ce"/><file name="en_CM.xml" hash="5a02b7f5fa1bedd6a05f96196e95b711"/><file name="en_CX.xml" hash="fc592a771a64d862c3739a898ce18dd3"/><file name="en_DG.xml" hash="1ec938ecb46bd092323b4f8ce4ba2cc2"/><file name="en_DM.xml" hash="89bee96e1185ba2dbb3ded508dda16a8"/><file name="en_Dsrt.xml" hash="6fbff7ba19f432150086850bc2e2f804"/><file name="en_Dsrt_US.xml" hash="0850b836f2faef6ec3423c7705160ab7"/><file name="en_ER.xml" hash="a99ce4a7be566be0b20822f418a4a589"/><file name="en_FJ.xml" hash="f5cfe8032f32fde1289d2fce5696a6c7"/><file name="en_FK.xml" hash="632a6ac34df2048f5160f1cbb21684e4"/><file name="en_FM.xml" hash="1e288d9366e0ac40b241b90d550d6424"/><file name="en_GB.xml" hash="5b73aa8057d95008d24c3eb91f265fd1"/><file name="en_GD.xml" hash="7d6d4bfad9463d051c6aba6301581460"/><file name="en_GG.xml" hash="a75e2a293cd4eb9e49d495c13b6e37ae"/><file name="en_GH.xml" hash="97e8cffb72f9e6651f8dee6ca086c0ea"/><file name="en_GI.xml" hash="6441468454ea9cf06468b0e19db106aa"/><file name="en_GM.xml" hash="7497ca9f4f962f57dffc9ad93ab78077"/><file name="en_GU.xml" hash="ae33e0859c963b265fdf32cd026ad26b"/><file name="en_GY.xml" hash="50aed051f78b38a1d1156c36d3ad7f9c"/><file name="en_HK.xml" hash="1aa1133bec835a760695dd994a6ca259"/><file name="en_IE.xml" hash="63130f36882b6a6917606b7c6624aa80"/><file name="en_IM.xml" hash="2e981e6e96db2a140dbef95db013522c"/><file name="en_IN.xml" hash="7433385f2bb2afa211e5c33cd9f921bd"/><file name="en_IO.xml" hash="b63a354d390f7b3eb564394b6ea5ebd1"/><file name="en_JE.xml" hash="a37431bab3c66fbc361a775b62627154"/><file name="en_JM.xml" hash="3c59b2850c79e9a7371e8f7a12dd7d75"/><file name="en_KE.xml" hash="2554dd9bd652f9ea57cd18da1a19df18"/><file name="en_KI.xml" hash="f24474b7d06fc2f0220ee7095e6fbff7"/><file name="en_KN.xml" hash="4d68bb1ef92eefad6f2fcc0e0b0d5076"/><file name="en_KY.xml" hash="b686bd51fe232c2107a08e8d9a5f1577"/><file name="en_LC.xml" hash="2ffab8614818ecca5af1c84ddb96a6bc"/><file name="en_LR.xml" hash="eb8f5ac9ca72306127d86db0085a92c0"/><file name="en_LS.xml" hash="8255d2c42f06b2d7c511353e82edf59e"/><file name="en_MG.xml" hash="5d7a723320b05e8fd7a4a1c8017bb57c"/><file name="en_MH.xml" hash="3c762f2aa253bef5b3cd1ad5940c3cc9"/><file name="en_MO.xml" hash="c20af1a8a15c19b9a52dd56c36b5598c"/><file name="en_MP.xml" hash="d535408f7920814d2d2b7c4ddfbba7e5"/><file name="en_MS.xml" hash="d74c01a6b57a68fc4d149b0f2bd5faf2"/><file name="en_MT.xml" hash="a0779f1ed61a4fa24f2549fc37df1523"/><file name="en_MU.xml" hash="484d1081e00dfe315b01368e63a8e547"/><file name="en_MW.xml" hash="6f5546f3143027e27250f1b471f3722c"/><file name="en_NA.xml" hash="43792f7465fd56dff8129154cd568400"/><file name="en_NF.xml" hash="9ced4a796c1db1693c526340fdda01d0"/><file name="en_NG.xml" hash="ba618207a64de97e9420801e8909f076"/><file name="en_NR.xml" hash="56f2eb49dc7a336e5eb0e2f4503dc3ed"/><file name="en_NU.xml" hash="524a420bdbf2d1bfe4ced79e690fadff"/><file name="en_NZ.xml" hash="3960c92d3ef55d1e55bc7bb7808a1c58"/><file name="en_PG.xml" hash="9fdf21ef2f976e068dfddbdd0bfcbbbf"/><file name="en_PH.xml" hash="6d0b1441355b533aa7231a45f330bb68"/><file name="en_PK.xml" hash="48a4db2301d34ccedf58942f3b41b181"/><file name="en_PN.xml" hash="846a0b8c74785cf3ffb562abbd5d5cd3"/><file name="en_PR.xml" hash="76bec34e4f081c2cc6ea562b9d3c3552"/><file name="en_PW.xml" hash="258fb50d80e798ffe19514bceaab9c85"/><file name="en_RW.xml" hash="aaa4befd7267fe5afd6682a00241eca2"/><file name="en_SB.xml" hash="0c50f8257806c71a8fba4cda42acb2ac"/><file name="en_SC.xml" hash="d8769c5bbd31f66c1a40d82ad4f9959e"/><file name="en_SD.xml" hash="9d3a24c9a0bd4f99653130314a6cca29"/><file name="en_SG.xml" hash="f32241b6135eb9e8733ffc80fab1b110"/><file name="en_SH.xml" hash="c35756da3a6effbfa9af4d488f7292c4"/><file name="en_SL.xml" hash="dd9fc72730ab0e6e58086a662fefa69d"/><file name="en_SS.xml" hash="35c730c6f16af1d572ef33bbea15fde3"/><file name="en_SX.xml" hash="d33e0d2eb46c1dc7004b84f6606dff0e"/><file name="en_SZ.xml" hash="a53c6878dcddbc32d37ab6b77e17da36"/><file name="en_TC.xml" hash="55127dfa22212f6abded3dd606af5a85"/><file name="en_TK.xml" hash="64ecd71d4530f1668e9da48f1039f508"/><file name="en_TO.xml" hash="a5e77bc5a7beecf3ff8f6b3156a87668"/><file name="en_TT.xml" hash="8b168ae6e9c3d9c8fceb0582365264af"/><file name="en_TV.xml" hash="7f98c91cd0dd96a66e4c8684d1d60639"/><file name="en_TZ.xml" hash="0cf0401e55af54ff68da8bab8c901182"/><file name="en_UG.xml" hash="a028dc8e13686a9ebafb83ace5315206"/><file name="en_UM.xml" hash="b883319cb6ecd9b1a6cb1deef89db236"/><file name="en_US.xml" hash="6435b96852569c7e355302c17814f77f"/><file name="en_US_POSIX.xml" hash="535c6ed9fd3be4db0fbf7ba3c79533b6"/><file name="en_VC.xml" hash="e745b417ac7ff1c93f281070740e901e"/><file name="en_VG.xml" hash="66ebc85cc70895db528d868b2318e5d6"/><file name="en_VI.xml" hash="3f30ee6f1c7383f6d906106f09cf5eff"/><file name="en_VU.xml" hash="6eea6dd6ac0cc9d00386059ff12a865c"/><file name="en_WS.xml" hash="bdc0360cf4fb7b517dbee39de8d0cd58"/><file name="en_ZA.xml" hash="031afdaa1011735bbc6555c5e76d7ff6"/><file name="en_ZM.xml" hash="c7bdd89484bff8dcf4daf3f57f6d6bc8"/><file name="en_ZW.xml" hash="b3f51877ba7ce7ead43ef50b499b4444"/><file name="eo.xml" hash="82ba66eacea4e98f8923944eddcc1745"/><file name="eo_001.xml" hash="1801937ded337e21aa03e2592deedb46"/><file name="es.xml" hash="a60ed8506871160a17c4fc3b81e53b0a"/><file name="es_419.xml" hash="c1bef1732b664c23cb1b799181cba5a9"/><file name="es_AR.xml" hash="d404e53f4de755d9c09aa856e916f110"/><file name="es_BO.xml" hash="2876119c46a9c697baba1a65240c051e"/><file name="es_CL.xml" hash="e3910edbae206638b9250ecbf9949905"/><file name="es_CO.xml" hash="53be4c39e4a34867fcbaa8fd05c2c881"/><file name="es_CR.xml" hash="1f0e1d3c965de545b50aab4577b038fe"/><file name="es_CU.xml" hash="2380f966916741dcba3c34c04a5d8009"/><file name="es_DO.xml" hash="9ea0a69084ae8dbdd86459e2806a8bdc"/><file name="es_EA.xml" hash="ec6ce434e2fb8f15ab4daa8cb2bc4dff"/><file name="es_EC.xml" hash="efb247470c0fe88c36a7864184a01a8a"/><file name="es_ES.xml" hash="da94ab8a06feb23c6d567dc75f85531c"/><file name="es_GQ.xml" hash="cac80878e350ca7a728940550bd9393f"/><file name="es_GT.xml" hash="d360a7b0a15a0515a21f1e0d5b4dd21e"/><file name="es_HN.xml" hash="fa13c1e703f00b11d038fe3bfe19c08b"/><file name="es_IC.xml" hash="d5324caf07a8db6ba668a1b749baa6e3"/><file name="es_MX.xml" hash="05df2b2f76636b0097cf9431ff9c84eb"/><file name="es_NI.xml" hash="7d59d82986b3ab47e1b7a2dad383a0aa"/><file name="es_PA.xml" hash="21a4164b1d73365f9b63431247053db4"/><file name="es_PE.xml" hash="8df05dafd2807169296d11f75eb74537"/><file name="es_PH.xml" hash="7240ee508f9500d779bd5109450a057f"/><file name="es_PR.xml" hash="de86ff57cd2f3e3c67111b0163a72b6a"/><file name="es_PY.xml" hash="191bbd042c95ef246cda798581ed9598"/><file name="es_SV.xml" hash="9caba354843c2b055f8f5da17082e245"/><file name="es_US.xml" hash="90b97e0328d50ed134c0b36391a4aa99"/><file name="es_UY.xml" hash="a30737900d956dc397357f6463d532a1"/><file name="es_VE.xml" hash="03449a8b82e4d21e0a59836ceb148536"/><file name="et.xml" hash="d3e8e213866259a27ab9511efe348e0c"/><file name="et_EE.xml" hash="3e92af6dec71aa1ae7a3c62c931534ba"/><file name="eu.xml" hash="7111ceef4472ba0c4e52dfc654a2841a"/><file name="eu_ES.xml" hash="66e48ee02f5d1e5a7076cf9cab709d23"/><file name="ewo.xml" hash="8f5e287d463fbbc8711d46265141be36"/><file name="ewo_CM.xml" hash="47ee8a04b5a0327405d006bd1a99266a"/><file name="fa.xml" hash="1bd0e404ad8d9d3cbc943f04676b03dc"/><file name="fa_AF.xml" hash="3736139f38116f0586eb7aae46f6dcfb"/><file name="fa_IR.xml" hash="98698b67604b8e5589fd75601080cd3d"/><file name="ff.xml" hash="8eec6f2da84d33d3236797c62b96a9d0"/><file name="ff_CM.xml" hash="4bcc2690dc2eb5347be28c55fc008f88"/><file name="ff_GN.xml" hash="a56cbd27d6d838338a535a06db281d34"/><file name="ff_MR.xml" hash="17dd52ffc9809b26db2a067612d92d53"/><file name="ff_SN.xml" hash="9ab32fee7af1d2666669efa4386769d3"/><file name="fi.xml" hash="f1e171910ef4c2137d9a6149cf3c2c55"/><file name="fi_FI.xml" hash="8d9498723893c53c1b6a8ede4d3b796c"/><file name="fil.xml" hash="c44f7b3edadc43b02a927e6cd1e780e8"/><file name="fil_PH.xml" hash="233305bd4c15da54bc9b4847fc753165"/><file name="fo.xml" hash="5715134bd8e1798d5f25d165f8a0bd98"/><file name="fo_FO.xml" hash="99e842dbbd201862703a98e160936c8d"/><file name="fr.xml" hash="125a25633190ef898fe18f2827d2397e"/><file name="fr_BE.xml" hash="1f86df32f3eaddd9b139fbacb7c199f5"/><file name="fr_BF.xml" hash="8eaa50ea5da82e3e8cfea4af20946852"/><file name="fr_BI.xml" hash="eb2d856258ead7da474505881452f613"/><file name="fr_BJ.xml" hash="ef18313c305832ea7049ddf758c9d51d"/><file name="fr_BL.xml" hash="ee7f161cc4c9f844448d9da6fcbb349d"/><file name="fr_CA.xml" hash="64a0b0100ee5e8918ca1d502f06ccb3e"/><file name="fr_CD.xml" hash="d5d62a20e80bfc90badec8a72d8a9d1a"/><file name="fr_CF.xml" hash="d0e96516835a44fcfadd25d0db4e48a1"/><file name="fr_CG.xml" hash="e2852122d57450cd7a388a3545709994"/><file name="fr_CH.xml" hash="2fd3f24252e081fc4c74e9e707c00365"/><file name="fr_CI.xml" hash="e72b4fb87bbb5751e49093c24f4fbd5d"/><file name="fr_CM.xml" hash="e06d4dc5c3604d9cd9cc64376e206daf"/><file name="fr_DJ.xml" hash="7e87bdb7669cbf73ac0bb191d43400a4"/><file name="fr_DZ.xml" hash="64558f39d1553f56217f80ec3ef92536"/><file name="fr_FR.xml" hash="3d82e2934dd28c26c7382de85d95ac11"/><file name="fr_GA.xml" hash="87cc610fd5f6a486c63e5cb105cc2d7f"/><file name="fr_GF.xml" hash="cdecac5dac6e7e10336de1dec5982673"/><file name="fr_GN.xml" hash="0ed99a0d3cec1034899413196dde9c06"/><file name="fr_GP.xml" hash="78ffa2393237a67fd202f96784bcea5a"/><file name="fr_GQ.xml" hash="359c388c94381b4bd09868afb8557b43"/><file name="fr_HT.xml" hash="7ecc803d1e947635fcbf0aa1b201ce60"/><file name="fr_KM.xml" hash="ea71c8291e7c8aeaaad03880b7308a2b"/><file name="fr_LU.xml" hash="2f467a6cc20912bea31f2932c26be870"/><file name="fr_MA.xml" hash="a0fcbe1f955e3d76f9e38eef202ffa07"/><file name="fr_MC.xml" hash="9a6304e508d08737c7969b44d9d57939"/><file name="fr_MF.xml" hash="46968723e86571f7455ee534302d3471"/><file name="fr_MG.xml" hash="ff234d4ba2e66cbb7b798ca787c67026"/><file name="fr_ML.xml" hash="7d1c047089abbf427b3635bc977444b1"/><file name="fr_MQ.xml" hash="f8bb16f92cdb67bc46ceb7aa7048d908"/><file name="fr_MR.xml" hash="d838bbdbd611c35862b89899816befb9"/><file name="fr_MU.xml" hash="ead1fa2ecb9031315ac554ca214d551e"/><file name="fr_NC.xml" hash="3d6500c28264363b27bf842259ff8a17"/><file name="fr_NE.xml" hash="f5bec7e22bd5db13346937f58a1312f2"/><file name="fr_PF.xml" hash="d9c7edabd1f8fd52c5320d874c96c021"/><file name="fr_PM.xml" hash="bae26570b49ab5979729a5f5b66ce087"/><file name="fr_RE.xml" hash="0c9b4ea0bf6c26c33ed0cef26f428af4"/><file name="fr_RW.xml" hash="8725f9ee61c3054199536d6d8eec42ba"/><file name="fr_SC.xml" hash="1eeb10b51d815098e01a3f60d71f793f"/><file name="fr_SN.xml" hash="fa6da2f3ae651bd93705f26587ed135c"/><file name="fr_SY.xml" hash="b6ef0c074642c951a04131a3cadfdfe6"/><file name="fr_TD.xml" hash="ff554940988b4f7bd210a2138575c6c8"/><file name="fr_TG.xml" hash="2256df16de2fd7331fbfbeaeaf0ddba3"/><file name="fr_TN.xml" hash="d9996b3dba7d6ca0aa12c1e6766d2f27"/><file name="fr_VU.xml" hash="4f07ba927564fd6d3507816cf3aafe45"/><file name="fr_WF.xml" hash="a6c659de13b695c7e229681b819ed473"/><file name="fr_YT.xml" hash="821b7a10ac601226696fa7d71d0f8247"/><file name="fur.xml" hash="62a65af07d949f1117573e425bee90fd"/><file name="fur_IT.xml" hash="647415f7e2ebd1d55b260dac3823e3f9"/><file name="fy.xml" hash="14a7805cafcf18dc2f21a7925e9d7182"/><file name="fy_NL.xml" hash="dac6922c58516864d0d18df09753b917"/><file name="ga.xml" hash="7cc3d8d5796c554549ea5ebe5fb9cc35"/><file name="ga_IE.xml" hash="49dfc6b41e17ddc6cd93d17b1aad62f6"/><file name="gd.xml" hash="49f89d47c209b25730d8d731973f29b5"/><file name="gd_GB.xml" hash="721b95588bf8f0ab4004d868128cf286"/><file name="genderList.xml" hash="12c8a32237c76cd85cdb15f8cd140023"/><file name="gl.xml" hash="f7c56b822d2cc164b6691956fc79669e"/><file name="gl_ES.xml" hash="05e04a61e62eab6b94d6cfa3ef96ef25"/><file name="gsw.xml" hash="2b9d820569249f8fe88f6f77320223f2"/><file name="gsw_CH.xml" hash="ec2f1146d4fe5125f42c6281bb2f10b7"/><file name="gsw_LI.xml" hash="a6031e3e7ab4512a905d91484d8f5f00"/><file name="gu.xml" hash="8fe2967cebfbb4a19bfdbff9a8029cab"/><file name="gu_IN.xml" hash="0f93d2cd4139a9fa96df164cdf0357ca"/><file name="guz.xml" hash="65566bd2674a999999affe67ddef45a0"/><file name="guz_KE.xml" hash="7891c10bba2ae36ce29ce34f996ded25"/><file name="gv.xml" hash="bdb5556e04a5f2acb2141197e09020ef"/><file name="gv_IM.xml" hash="cf6d862525015e25038f60fc93175e84"/><file name="ha.xml" hash="310c626b795a231ad736c44ffe0df31f"/><file name="ha_Latn.xml" hash="a470076b9866db162e1415aa32350a44"/><file name="ha_Latn_GH.xml" hash="e213acaf6a53ba1d9c33d2ebda346ab3"/><file name="ha_Latn_NE.xml" hash="7983a567b1473874f3bea1dfb045ab29"/><file name="ha_Latn_NG.xml" hash="d2191f02d90e7b9912fe0e66aed70d24"/><file name="haw.xml" hash="5012e655132a7a5a7ad8397052baf955"/><file name="haw_US.xml" hash="5bb77c6692d33c8488fd008640434b2b"/><file name="he.xml" hash="70cd2438f74f6ea64543ec52bbb06e56"/><file name="he_IL.xml" hash="bdc2d75f46f4dced46dd4fbce6cac4f8"/><file name="hi.xml" hash="20e5122052162ec860cd27db34fc1dcb"/><file name="hi_IN.xml" hash="fbc59458d4ad8d295265e79fec26534a"/><file name="hr.xml" hash="ad2c7a5102cb05cec7ae0478d2f5b552"/><file name="hr_BA.xml" hash="bb36010b5b7cb83bf623d27eddc90678"/><file name="hr_HR.xml" hash="0a5068d64bfd804afa623562e6c556b1"/><file name="hu.xml" hash="35260b5e75ed941097710b0a0483e407"/><file name="hu_HU.xml" hash="b816b69e9814d33ad14907c9c3b6316d"/><file name="hy.xml" hash="4dd0bd1e21762124de07651094889237"/><file name="hy_AM.xml" hash="cc2c8134ca77e5bd55315c5faf80c61c"/><file name="ia.xml" hash="a57208d2e90856e670b25cafa90caaa0"/><file name="ia_FR.xml" hash="dbfd4721237b03875d50cb0770f1a5bb"/><file name="id.xml" hash="ad0dbea4ed9c97b2ef44ea451ff43aa5"/><file name="id_ID.xml" hash="349192acc73b4d40b3ea684999c5cd4a"/><file name="ig.xml" hash="0cd19cfcc514c8c5c0d8b8f085e64a72"/><file name="ig_NG.xml" hash="666845e6dc06958bdd682bf40b9a0251"/><file name="ii.xml" hash="db4ca0fa7cd320163163a97946399d6a"/><file name="ii_CN.xml" hash="a112d1ad1b7fa51a30f6cdb0850168b5"/><file name="is.xml" hash="a4587bd0d57e17d1960dba1a45b5e1b4"/><file name="is_IS.xml" hash="5d2fff72bd6199e1e79cdb3fa126b6a3"/><file name="it.xml" hash="dfa19eadbd4b5819453159c12e5bc32c"/><file name="it_CH.xml" hash="da4122fb147f2652de469a3f7703862b"/><file name="it_IT.xml" hash="0fded926a8f00f5f491f4ba2486b0686"/><file name="it_SM.xml" hash="4706ecb3a92e9e05f6d9f54bacbacf34"/><file name="ja.xml" hash="a4bdd8fef7cac5c8ab8a706781d475b8"/><file name="ja_JP.xml" hash="b87ae521fe2527bc9051ee631bd1001f"/><file name="jgo.xml" hash="9471f4b7fa6323bf54a3b8b74813aeb7"/><file name="jgo_CM.xml" hash="8ded303577f1a672dd255dd1fc1490fc"/><file name="jmc.xml" hash="fb1bd646841f4b8af118996f1ffc4591"/><file name="jmc_TZ.xml" hash="fc0d97c3788543fb5a53695be429dd96"/><file name="ka.xml" hash="6223813b9ac5f055c2c682eb79e6e05e"/><file name="ka_GE.xml" hash="b5df45beb8ba26df37d00154fe2e8deb"/><file name="kab.xml" hash="28e3bfe8412eeac7fda8a154c2dc9375"/><file name="kab_DZ.xml" hash="c398b9636cc7716ab1152528de39599f"/><file name="kam.xml" hash="078f9f3de5e4a2e405f91db0580fee61"/><file name="kam_KE.xml" hash="671d06ee91b5451d3bcef26cf6d0962a"/><file name="kde.xml" hash="db0e85e0f1bd852d8d467e13f8a2dfd3"/><file name="kde_TZ.xml" hash="9f41da9a28fdfd1cf618deba5d9e70ee"/><file name="kea.xml" hash="5504f98e950dd836749ecf3eabbb9d03"/><file name="kea_CV.xml" hash="88602da9c4e3bf124a330f1d0fb84113"/><file name="khq.xml" hash="f0deb2302861cb75bfa96b4b11cb6fa9"/><file name="khq_ML.xml" hash="44d6228f6585a0ddfd53f2b13f7f18c7"/><file name="ki.xml" hash="26a88ce1af8c274b1b5ff3a5c11fb3eb"/><file name="ki_KE.xml" hash="2b5e5cf6cd0d7e38ca3d1d1cb63be4fb"/><file name="kk.xml" hash="a298ecc37ae4d60ce87cb0eaad919d3d"/><file name="kk_Cyrl.xml" hash="07046177e2ec5347df348912409e4283"/><file name="kk_Cyrl_KZ.xml" hash="5bfb35389063a05e63ddec93b4ffad82"/><file name="kkj.xml" hash="3a97c2408dfbbbf2ee181c7c70b2ea8a"/><file name="kkj_CM.xml" hash="095d6748ff7c6f070fae30938ef729c5"/><file name="kl.xml" hash="95ed0d90dae8db61f7b46db63aac0a0f"/><file name="kl_GL.xml" hash="ef6c30e0b4063b1b8fad4e4511e3e33c"/><file name="kln.xml" hash="67441932af9b0b24bc2c2ca2e018d5e8"/><file name="kln_KE.xml" hash="f10af3f43ee9aee1bbf52ca5ff1c5196"/><file name="km.xml" hash="dee5bb763d56521b3c2919a340021c62"/><file name="km_KH.xml" hash="8a31a83be02152f33704d7dc2d2e3e4f"/><file name="kn.xml" hash="0b9d9e33559353f7c074672472ad8f7f"/><file name="kn_IN.xml" hash="e4135fa646d16bb15bf8c24919a4122b"/><file name="ko.xml" hash="9f2d95effdc2374377d41ff61f1f8ace"/><file name="ko_KP.xml" hash="cf696a9af609810d08337fb56f4b2a51"/><file name="ko_KR.xml" hash="0e6404f41f456011631a67da431ec48b"/><file name="kok.xml" hash="deea0756950d5465bf3d529ddf533e4b"/><file name="kok_IN.xml" hash="9ae56f19c07124aa5801d3f2d21dbdfc"/><file name="ks.xml" hash="62e4a1072ac6d8a14df457bb325d97bd"/><file name="ks_Arab.xml" hash="2c7ee60c2f9764e87ce01dace3089799"/><file name="ks_Arab_IN.xml" hash="2fea656a91f684489095e5f13d76c778"/><file name="ksb.xml" hash="d4c84ad5e9ce333697588c7cfc6a8ac1"/><file name="ksb_TZ.xml" hash="ccfb53a163d96d54debdaa15d3499027"/><file name="ksf.xml" hash="a8187b83f4ae0a05f0219f6262c38a70"/><file name="ksf_CM.xml" hash="203147426344f510947dcfe51ee77b83"/><file name="ksh.xml" hash="2617cb6c2b91f15403ce462da0021275"/><file name="ksh_DE.xml" hash="8e085f8da562734068ff0141aa759eaa"/><file name="kw.xml" hash="91ad55b87458489c861988b7fb6280c1"/><file name="kw_GB.xml" hash="7e2024541e7aba767e844c0b9663e155"/><file name="ky.xml" hash="a7545fd81340fd75464e271076dc5279"/><file name="ky_Cyrl.xml" hash="2fe62d616b564a7316ef4a8a72210488"/><file name="ky_Cyrl_KG.xml" hash="757d4898a54dcc119b43698784cc8967"/><file name="lag.xml" hash="a8a25a77df5909db3b73340774221cb5"/><file name="lag_TZ.xml" hash="ebd0c62787658dec41e3e49017e2705a"/><file name="languageInfo.xml" hash="9a33723a317db6855c7dc4a37a9fffd5"/><file name="lg.xml" hash="2cc89f3e98775beee70bdd3e3404d9dc"/><file name="lg_UG.xml" hash="d98767310f065c6a3755cfb5fec6b9a0"/><file name="likelySubtags.xml" hash="6a042c9e337512b06f75e101a49981f5"/><file name="lkt.xml" hash="dba6053b63f4c6e3bf2e21f603c8d78b"/><file name="lkt_US.xml" hash="bd6f8a8cc0acca0ad53b85350f2f5b80"/><file name="ln.xml" hash="0cea3d899d3dad394a5e92db22044bc9"/><file name="ln_AO.xml" hash="9eabbf5b540202c5e5b521cdd06564b4"/><file name="ln_CD.xml" hash="5a6fd6126bf58147cdad6a565bae8af5"/><file name="ln_CF.xml" hash="349ec0ad936ee0fc9c5a00530e259390"/><file name="ln_CG.xml" hash="25c98dbc645d64b7cd800fbf6674fc4b"/><file name="lo.xml" hash="52aa20460fe494c813927fdab64feb08"/><file name="lo_LA.xml" hash="0266874e3970a24dab991fc54e111360"/><file name="lt.xml" hash="6d485e98ca9590acf70ea1838e488ad7"/><file name="lt_LT.xml" hash="738d6dfb27e54f7f9a44875b6dacf0e5"/><file name="lu.xml" hash="5ee43a091cdfb35d5f14067f45b0b05c"/><file name="lu_CD.xml" hash="dbe948b08a594210a3d088e414123d86"/><file name="luo.xml" hash="69779720b4294de854bf82a170ffbec9"/><file name="luo_KE.xml" hash="ad6df8710e3b4976c7bc95b0ec739fa3"/><file name="luy.xml" hash="d0e4e4766a744edc1ab08418bec0ee61"/><file name="luy_KE.xml" hash="28a00f1eb2977ad409b0dfca45a0ca9d"/><file name="lv.xml" hash="3a85d69acd0b15e47f9b2df341be7573"/><file name="lv_LV.xml" hash="6e07fe6de844f63ae1605a6a1a5575a5"/><file name="mas.xml" hash="b1ee3c8d903462d3b217b7056a31df20"/><file name="mas_KE.xml" hash="e494f8d43607f742e3a0cf393ad83bcb"/><file name="mas_TZ.xml" hash="a5785e18c75185c28f284f2e18e7f6e0"/><file name="mer.xml" hash="2023c272b2b6e1169d0d45bb195c7d53"/><file name="mer_KE.xml" hash="52600bcaac77d9e6aa9c9741e67323c5"/><file name="metaZones.xml" hash="64a142f5cc668612c9c6ad2ff0af875f"/><file name="mfe.xml" hash="cec57c842e65ebeaf746db91ac55f5b1"/><file name="mfe_MU.xml" hash="990e405c5cae3b6d7226d0482d0b6848"/><file name="mg.xml" hash="fd8b564029dfa72a913ff627c834082c"/><file name="mg_MG.xml" hash="81a7d92eedd7a4d9cb8c8687badf4aec"/><file name="mgh.xml" hash="6008ffd778c2d670383ab125848d5a68"/><file name="mgh_MZ.xml" hash="ed7a568c678bb3ec003732ba4e7c19a8"/><file name="mgo.xml" hash="3e834a9a979970d5c82d963a56947a11"/><file name="mgo_CM.xml" hash="0cf9ba215d10e1f3db255adcccb3d6b8"/><file name="mk.xml" hash="3ee88bf8c02b4f244b5cd1d3ab617f45"/><file name="mk_MK.xml" hash="aeb740a529d8b51b53242d1f1cf59b2e"/><file name="ml.xml" hash="94d67dd84bc66f80d4a6ffaf27a2c508"/><file name="ml_IN.xml" hash="80849e5c197f5dd2b2ea0317f3517ca1"/><file name="mn.xml" hash="e6a18ab3a3c20fe7ab283cf6a901a549"/><file name="mn_Cyrl.xml" hash="9bdcd159b3be6e0ecf96795d5fc1e91e"/><file name="mn_Cyrl_MN.xml" hash="f11f2f4a083ef35c66ff0a10429b5614"/><file name="mr.xml" hash="f2073dc2a11fd9c7be8ba932e45b830a"/><file name="mr_IN.xml" hash="1623ff448071fe23a70309fa70ac531f"/><file name="ms.xml" hash="9b53207db5cc656f53ac5ea3d90195fd"/><file name="ms_Latn.xml" hash="cda2abbda8d3482f36361e946f37b5a8"/><file name="ms_Latn_BN.xml" hash="5740a4fdad13e0eb211736bf0a2f17ec"/><file name="ms_Latn_MY.xml" hash="c537239c8ae70b442dcbf67911f3fd4d"/><file name="ms_Latn_SG.xml" hash="05424711271e51b0e552063edd05b547"/><file name="mt.xml" hash="961881542802dc1cc9f20f8fcb774f45"/><file name="mt_MT.xml" hash="5282b27d9d6a57d726612a09395e6c22"/><file name="mua.xml" hash="8ebb1a4b5ef4baffddb2894b307f2cbc"/><file name="mua_CM.xml" hash="2df1fe2f39dc3402d5892946ab88f2ef"/><file name="my.xml" hash="64f4ef77afb342a522c3b4779ab19486"/><file name="my_MM.xml" hash="02d8bea58fd9bd5e8dc7796477ef5ce0"/><file name="naq.xml" hash="a29dfa41b2e1630f136a18b12d2c2324"/><file name="naq_NA.xml" hash="0ec1dfc6dc7eed7588f1d1bc41ad56dc"/><file name="nb.xml" hash="46eb58f192d18746c09c8c8582ddd8b1"/><file name="nb_NO.xml" hash="626d2f263762cde6e41328a0bf6768e3"/><file name="nb_SJ.xml" hash="02508dd6f1be1de58fefd7b1159564eb"/><file name="nd.xml" hash="db8baa59e10b31daafd068e55ba882da"/><file name="nd_ZW.xml" hash="ccd1724534080cdf1a784ae0435f7785"/><file name="ne.xml" hash="7cb434ada9a049184fd0a2e021012406"/><file name="ne_IN.xml" hash="84558af586315178078c8e91aa410d9d"/><file name="ne_NP.xml" hash="81a679056920fedc05dad2cda150ef53"/><file name="nl.xml" hash="9f122648b0ae9fbf47dc6364311c9b14"/><file name="nl_AW.xml" hash="d44d954375e2f11a3571f0849dc5b116"/><file name="nl_BE.xml" hash="8e255c2c3d01f7680e6b1931521d15c1"/><file name="nl_BQ.xml" hash="05ea3eec1520c8ef9889b627f3c11624"/><file name="nl_CW.xml" hash="b4b444e991046f1e3e3c44eaa6d825bb"/><file name="nl_NL.xml" hash="4e0467c9db5288462ceb8f78611f6fc5"/><file name="nl_SR.xml" hash="ac0e3ff1c6706ecd9ad0b727583e024e"/><file name="nl_SX.xml" hash="3081384591890c797dfc87c4f4ec40d2"/><file name="nmg.xml" hash="96a40607cf05ce8f8ecbd81edfe54188"/><file name="nmg_CM.xml" hash="e4b39732f25ed7f4fd5f8eeab2296cc0"/><file name="nn.xml" hash="df403882fc0d4fbde259805dbb578133"/><file name="nn_NO.xml" hash="bff2529dd25fc5eff4e45c62e57a6102"/><file name="nnh.xml" hash="604802e1f48c5efb5006478f6096cba2"/><file name="nnh_CM.xml" hash="0797c07c5503386e902db37bb81036a1"/><file name="nr.xml" hash="537dfb7c804216084ff12405a79e6363"/><file name="nr_ZA.xml" hash="deaad06361e3310f47a0ae239b2dde45"/><file name="nso.xml" hash="d8d03686f2a5498288ab934b1d23af35"/><file name="nso_ZA.xml" hash="b8d56986c8588034819ce4112447bb7a"/><file name="numberingSystems.xml" hash="978a66b09ff3a7fe924e5220ac632035"/><file name="nus.xml" hash="aeb47a867f44fc22028eea112a9f20d7"/><file name="nus_SD.xml" hash="5b01ebcdeb5e0925420a1ec5a81078e0"/><file name="nyn.xml" hash="7a00226944592e03fbf05992fc97cb37"/><file name="nyn_UG.xml" hash="f98eb55dcdecb237d0d5f4442e967df1"/><file name="om.xml" hash="d7dd5059b280e4e673d39c6681dedae6"/><file name="om_ET.xml" hash="a2bd53f37a0cbde29c75476d11efd951"/><file name="om_KE.xml" hash="6f499797aaf7cddf5c96510055b1cb6b"/><file name="or.xml" hash="a1f44afb1360bea5213e7769b0d555ab"/><file name="or_IN.xml" hash="b8384a249e94ac1d3aeccffe6456d213"/><file name="ordinals.xml" hash="8105f05e542d711fb1c58eda93ee1970"/><file name="os.xml" hash="d3994c255a9ed31b3b485e2a60100bb6"/><file name="os_GE.xml" hash="b707a294c3bda74ce1fe3de56d5a2065"/><file name="os_RU.xml" hash="ed7de0aca2851389edb27ec27cfbff14"/><file name="pa.xml" hash="eb25b28dccb7fc2b9e8a58529383e7ad"/><file name="pa_Arab.xml" hash="d066d05609c4bb72a91b66960df82d4c"/><file name="pa_Arab_PK.xml" hash="af6c1f47b0c9125afa5f1d8b4465afae"/><file name="pa_Guru.xml" hash="3b5761c3adfe0fd8f769757108a33d74"/><file name="pa_Guru_IN.xml" hash="962eb7156fcccfee1c3b62562bcb4c9e"/><file name="pl.xml" hash="4badef8c402fbce8a919fe0345018145"/><file name="pl_PL.xml" hash="9f5e5245cb2b2a52ef56e3fd69363f31"/><file name="plurals.xml" hash="4223a72c769da4553aeaffc82409128d"/><file name="postalCodeData.xml" hash="ee416690bc7b0b51c62a4f60df3c6e49"/><file name="ps.xml" hash="71320ee03ab67c4d86b2042a2a450044"/><file name="ps_AF.xml" hash="e2b047a904f02a454f193f37856e9f6c"/><file name="pt.xml" hash="6c0d496db88b044f4bccea7b2bcf5bb2"/><file name="pt_AO.xml" hash="502a761ed5e5ca0b44403ff8d0e85e94"/><file name="pt_BR.xml" hash="9ec9d29dec55f67013d4e3ce15799d05"/><file name="pt_CV.xml" hash="3f8377d6db982dc7b9cc6294ee963517"/><file name="pt_GW.xml" hash="bec710dffaed02976223f5671fb48ec5"/><file name="pt_MO.xml" hash="1df59a4a05e1141e225a7da25c58ec4b"/><file name="pt_MZ.xml" hash="b5b28ee99e7f12e1c14e015c3ecf5c4d"/><file name="pt_PT.xml" hash="66b28e650fb563d84b53da41a1f261b4"/><file name="pt_ST.xml" hash="7c96e96d8bf1b811ff3358073e3aeb63"/><file name="pt_TL.xml" hash="9e2647ac1cc2d8f949cd000ffc5dd2fd"/><file name="rm.xml" hash="aa5e41d750b8392990ce00c29f4feb4d"/><file name="rm_CH.xml" hash="3bef003a0204b4d2291ee73c46d8f1ee"/><file name="rn.xml" hash="80a76b1975488f778da8abe7dc0292db"/><file name="rn_BI.xml" hash="c5010d52f27f95cf794396339752dda6"/><file name="ro.xml" hash="fd309802d4e90aa4e51d9f014621e5b6"/><file name="ro_MD.xml" hash="4763fe9a5ac2d57fa9cb7bc5aaa09f7a"/><file name="ro_RO.xml" hash="a7f41f443fcc6daed26d608373a0ebcb"/><file name="rof.xml" hash="4d03559ef40f836156f5e516a9eaa5aa"/><file name="rof_TZ.xml" hash="99f8c6ad97c8acbade2a9f3553b57225"/><file name="root.xml" hash="f74f320723d5a31ba06aa2c79de43bd2"/><file name="ru.xml" hash="3aaf7853667c37781e3d886f364968c1"/><file name="ru_BY.xml" hash="931ca3d10a511ea18c705a22c8baaf1d"/><file name="ru_KG.xml" hash="edee35024102c3ffd1c9acd89f0c9c30"/><file name="ru_KZ.xml" hash="7d4138b25f5c8cbafead8f321fd1954e"/><file name="ru_MD.xml" hash="4d629ff877f4c3a1e214548dc7ecccaf"/><file name="ru_RU.xml" hash="ee8433fc8dbc67a22b31c6be08d13402"/><file name="ru_UA.xml" hash="33fe877250fbd7077b4edf45c50bf300"/><file name="rw.xml" hash="73b90e15bea65ad98ac5cea78e878d91"/><file name="rw_RW.xml" hash="c5cb01f5b236208dc96d3268cf85ffbb"/><file name="rwk.xml" hash="af9317a0322bd40302363d5e6bd4b291"/><file name="rwk_TZ.xml" hash="d0f470b223d25203a611bdb7c395c988"/><file name="sah.xml" hash="f4b2cb698fd582845afb18f984089ee7"/><file name="sah_RU.xml" hash="6ee074c02940d5e9a525a7b8a9c2176e"/><file name="saq.xml" hash="130d69870ed3f95808bced7bed701c3b"/><file name="saq_KE.xml" hash="008b90c332f06e019efc1d8e33f401b3"/><file name="sbp.xml" hash="158d785177f949347356d59dc7883ad8"/><file name="sbp_TZ.xml" hash="0d4f52a378680dcd6230f00cc8ed1f61"/><file name="se.xml" hash="10a3649dbfd8bdff0f8b8fe102b444ed"/><file name="se_FI.xml" hash="ea379a5c51168210274b50711f032355"/><file name="se_NO.xml" hash="0a890443d1477c9d275bb945b0c5b589"/><file name="seh.xml" hash="4361fff00579a2efd8d283a152ccc682"/><file name="seh_MZ.xml" hash="a3f4cc61fa6d995fa5d2cc7b193ee1ad"/><file name="ses.xml" hash="00e9cfea10372a6b62590346a596d054"/><file name="ses_ML.xml" hash="dc0cd9eabaf2c08d66007e6c31a6a477"/><file name="sg.xml" hash="e1bda394071d1796efc18e00467e425c"/><file name="sg_CF.xml" hash="ed51c88dd34a233c82150338436c250c"/><file name="shi.xml" hash="b57def0c24096d11985586f621c09159"/><file name="shi_Latn.xml" hash="61054fc24b89c1842a53be5f5e6016e7"/><file name="shi_Latn_MA.xml" hash="d0f90c1ab8e1b3f7340fc2b77f37ff4f"/><file name="shi_Tfng.xml" hash="4670d2933f9ff2b00c787336498fc149"/><file name="shi_Tfng_MA.xml" hash="271bc282c75731c883ea8fbbd72361b8"/><file name="si.xml" hash="8a27b7c7c9bcdb45049974693c8db484"/><file name="si_LK.xml" hash="b637f75035a4fdfe10f0d3fb39781db1"/><file name="sk.xml" hash="c8b930f68837a7fcaa7e0c34aec1235b"/><file name="sk_SK.xml" hash="7beda18d4fd023382190bc9797d51cfc"/><file name="sl.xml" hash="51bf1ccaecc51b117ea843100b2bc782"/><file name="sl_SI.xml" hash="b71c5b3968b50875758dfdf825c6b21a"/><file name="sn.xml" hash="9aa3b734aa010864b0ff582a67e677e8"/><file name="sn_ZW.xml" hash="24a9dfc3030bf253882c9d661eaef17c"/><file name="so.xml" hash="5b1ade5ca9f6416d2a42aaeefe08803b"/><file name="so_DJ.xml" hash="2850875e1e4d197c81948325e8741024"/><file name="so_ET.xml" hash="6210a645a2c598eed597bab39f36d557"/><file name="so_KE.xml" hash="208c20fcd4d27f3ea7a63a1ccd70b64c"/><file name="so_SO.xml" hash="65f7b820f3de2da5fb6adbbf3fed4244"/><file name="sq.xml" hash="9814afac7a465e293306c2036e97397a"/><file name="sq_AL.xml" hash="6b08a2f02bd463c8854d377761d14ad4"/><file name="sq_MK.xml" hash="7b1a4a47c69c2c11539ecf5f2b306dbf"/><file name="sq_XK.xml" hash="a4be94b459a7ddf3c64782b932c43edd"/><file name="sr.xml" hash="a907b6ed4a9233dce8fb2cafacbb9d07"/><file name="sr_Cyrl.xml" hash="df126a848168eebb92d2cb08b0f47051"/><file name="sr_Cyrl_BA.xml" hash="379078c0a256b4f9ec7111cc9f75a2e4"/><file name="sr_Cyrl_ME.xml" hash="fdc47e86343568ccbf1e619800f26614"/><file name="sr_Cyrl_RS.xml" hash="f269bfd320ba2b38a6a614ca4da321a9"/><file name="sr_Cyrl_XK.xml" hash="8e3b5caa0e9997575201e3f7823a81ac"/><file name="sr_Latn.xml" hash="b26fdb85fcea35960444294ab6f10b21"/><file name="sr_Latn_BA.xml" hash="8abd2f52848f701a485ce865e97b851a"/><file name="sr_Latn_ME.xml" hash="49c92f426cc5a5188399c80878686f83"/><file name="sr_Latn_RS.xml" hash="713a42425709d2a2448ed3ceefed8d07"/><file name="sr_Latn_XK.xml" hash="d9f80fc5757c8be78a8bf06b0090bb1e"/><file name="ss.xml" hash="1c8e4708d8197d98b32e84db842531ac"/><file name="ss_SZ.xml" hash="36bd3ae71800ee1509cb005345b7d0d4"/><file name="ss_ZA.xml" hash="929a6fc019f32616331578d55a36412a"/><file name="ssy.xml" hash="4cd34c993f3f737c52ef02dc0c65180c"/><file name="ssy_ER.xml" hash="6500f7ea9752b2272ff4c93530514345"/><file name="st.xml" hash="13de7725514e5dd58f49e0b01ec7858f"/><file name="st_LS.xml" hash="16fac9f2505893a9ae5df24174ec8e94"/><file name="st_ZA.xml" hash="c769d53933a0816218637180bfe3b1e6"/><file name="supplementalData.xml" hash="7c64143e835c0a2facebe573b95c735d"/><file name="supplementalMetadata.xml" hash="89562abe6d40c4c7245a8c465905e618"/><file name="sv.xml" hash="157cbade1293f5bf503b8ce03cac9260"/><file name="sv_AX.xml" hash="eb9596e23c3e3597f9167c56bc456ba8"/><file name="sv_FI.xml" hash="c7985fcaa170e42535eebb8f2821fd8c"/><file name="sv_SE.xml" hash="a234be39c4fe51d5360e867ef057e9cc"/><file name="sw.xml" hash="baa99fb8dae1057541cd174d8c479f63"/><file name="sw_KE.xml" hash="841c4e403526c85c138ec30908f0e639"/><file name="sw_TZ.xml" hash="d8c70853021414f35fff5160e777afc4"/><file name="sw_UG.xml" hash="2f39a025d909e27a3b4d42ada4494f44"/><file name="swc.xml" hash="b78d391b482ebeaaa8d2589248b99475"/><file name="swc_CD.xml" hash="7ef627a3af8e94ce44e118facc634280"/><file name="ta.xml" hash="f14aabe0b254b16a7656cf0eb924a937"/><file name="ta_IN.xml" hash="a3cf28d4dffdfb99fbd06c56f7407690"/><file name="ta_LK.xml" hash="c4cb7d38b9ab64f09398af90233929b6"/><file name="ta_MY.xml" hash="50b7aa25e1de2ba3060cf7f1542dbb1e"/><file name="ta_SG.xml" hash="467cf5081dce3961ff108329da18461f"/><file name="te.xml" hash="9000f302efec5389067682dcb37713ec"/><file name="te_IN.xml" hash="46c5a0f8ad33a8207687131b1e30dbc3"/><file name="telephoneCodeData.xml" hash="df7976ae3ed9a46df9b7a3d153a08782"/><file name="teo.xml" hash="1a54151c61645deebd146ce8167ebb7b"/><file name="teo_KE.xml" hash="28904dbd23feee396d235bddafb88a5f"/><file name="teo_UG.xml" hash="a3c2615908baa53ef6c06c1bbc46d03f"/><file name="tg.xml" hash="b0a784936ff2b4d986bea0a5abaafc41"/><file name="tg_Cyrl.xml" hash="dad9b0de0bca8885769e3eb3b986ed38"/><file name="tg_Cyrl_TJ.xml" hash="ecd76f8a9c11ea36f23aecbd4ba10f94"/><file name="th.xml" hash="93a93b50d5bc06c3aba030a2bc8f3a2c"/><file name="th_TH.xml" hash="16920f2948dfc0169fa4120b6bef4c6c"/><file name="ti.xml" hash="68ba067a766e83fa56b3f8b64e911709"/><file name="ti_ER.xml" hash="fc1625e77b8ee3b39e5a21a5778c6352"/><file name="ti_ET.xml" hash="eda9e0f13702f4f4d6c56bf8702bc158"/><file name="tig.xml" hash="dcbea52ddac1a8641439c191ef8cad3c"/><file name="tig_ER.xml" hash="9e8951b4b641d755277bba697641eeb4"/><file name="tn.xml" hash="5ecf790feae7a56e7d3dda69a3dcdd29"/><file name="tn_BW.xml" hash="5db54fb06600c505374663377ae3c87d"/><file name="tn_ZA.xml" hash="5ffaceb20f45593cf1526096d44811ae"/><file name="to.xml" hash="6abeea01835e1fa2e62a489842917a71"/><file name="to_TO.xml" hash="e17fa8026e023e8614eb6fe68b223300"/><file name="tr.xml" hash="a73038379e7e0396200158e0cb9b2101"/><file name="tr_CY.xml" hash="c02e5d602dc71097faf6e40c43c00df5"/><file name="tr_TR.xml" hash="98e092d092bd6efdacd4c9181bdf1269"/><file name="ts.xml" hash="d4de7842ad3ed50f09e585aeb8fd2b48"/><file name="ts_ZA.xml" hash="a058d38e5fc52060f992a09c44bd2dd4"/><file name="twq.xml" hash="8cb693f4457b01d524eb4dd3a9202fee"/><file name="twq_NE.xml" hash="f3887ed69d01de60ea150fb49741dd7e"/><file name="tzm.xml" hash="184e66cab1c6bfb1c1ede84b1b9b8d5d"/><file name="tzm_Latn.xml" hash="c48b72028daead39c63e06be5940b06f"/><file name="tzm_Latn_MA.xml" hash="adeed44054a352a8a95fb63a47b1277d"/><file name="ug.xml" hash="0048db54db7e96e66309f27990302912"/><file name="ug_Arab.xml" hash="b0916370f9a3dcbe9f9ef7f4941e83ff"/><file name="ug_Arab_CN.xml" hash="ca617ed54b6b547d9cd4929653765e69"/><file name="uk.xml" hash="82e297c9a0e35a239300e9d781246ca7"/><file name="uk_UA.xml" hash="f1f43742973c3e0684078ad1585c09a8"/><file name="ur.xml" hash="4330b97cdc580fd937fb4b48c30138dc"/><file name="ur_IN.xml" hash="620558a8d2b16341b990f739d96fa656"/><file name="ur_PK.xml" hash="4929ef93fcd09c110306500b7b5df200"/><file name="uz.xml" hash="e885a45d72df08108a5fb5553caf5650"/><file name="uz_Arab.xml" hash="bbccf5949290b9a88bdb05112ef0f1f1"/><file name="uz_Arab_AF.xml" hash="e8b2a9bcdfcddf5fe0923bdb79586e3b"/><file name="uz_Cyrl.xml" hash="f11985a357906a9764a2eeae61d87834"/><file name="uz_Cyrl_UZ.xml" hash="e34ac326ca872838cb51f7d95f2cad57"/><file name="uz_Latn.xml" hash="6d1de019d75988a154546b7a6ec4cecb"/><file name="uz_Latn_UZ.xml" hash="9f0dd4f61e4ad966fd33e26c0af5d722"/><file name="vai.xml" hash="4ccc7bd3230a4395017327e278bea5d7"/><file name="vai_Latn.xml" hash="78b6884327d1a568c1dcb55edcc8e8c7"/><file name="vai_Latn_LR.xml" hash="d60cdef15dbd84e66ebf6532935f2735"/><file name="vai_Vaii.xml" hash="4d3b525d05e85213d169a04051aed2cd"/><file name="vai_Vaii_LR.xml" hash="64e621f56506d7b70656d056ed8e8214"/><file name="ve.xml" hash="0238fc0b60b7f9f80a821455e85a26df"/><file name="ve_ZA.xml" hash="cfd73cf7fc6d3bef016b3dea6c1464c2"/><file name="vi.xml" hash="1ec60312f7c6e419dc883676a3cfb10b"/><file name="vi_VN.xml" hash="cfb0ceae9f2e78e0459f062016230998"/><file name="vo.xml" hash="a696981962fe9a84ccf27cd4f46a07a6"/><file name="vo_001.xml" hash="ca84f69da9df24a4e409104c54a8a3d5"/><file name="vun.xml" hash="2838dac67405ebb6515ed35b983f13c5"/><file name="vun_TZ.xml" hash="5c00fe9a927fa96193d8be8f22c4ee99"/><file name="wae.xml" hash="7a6a03e67b505d33af84383427ff1db9"/><file name="wae_CH.xml" hash="bc6ad0fbf82a5317ade928730b115b91"/><file name="wal.xml" hash="5fa5a9a4263c2c0c75cb61e137ec19b7"/><file name="wal_ET.xml" hash="fe6ba6e078852d9949dc023b20e40462"/><file name="windowsZones.xml" hash="bb1d22fd1c7e1073f31559d4ec4f6ea0"/><file name="xh.xml" hash="c4561fd383180394c1719f7af01252ed"/><file name="xh_ZA.xml" hash="7cc6e52fd5bbde7d7a09835462c9005a"/><file name="xog.xml" hash="d159722255a22bf4b113822364e3aa42"/><file name="xog_UG.xml" hash="c9d9ce8325ccd943d17be076e2348509"/><file name="yav.xml" hash="7cd6b28230ea1b592f4f6dc656d7dac6"/><file name="yav_CM.xml" hash="d99d7f9815108fe4040253b525fb1e65"/><file name="yo.xml" hash="94b71c3a56a7d571cdd2cdcca0e3639d"/><file name="yo_BJ.xml" hash="ad14fab000b1bdba3ad0959b41692125"/><file name="yo_NG.xml" hash="1381c16f38223fcd4e645a66f06d3947"/><file name="zgh.xml" hash="47980624ea61e97a271f180c98a7f012"/><file name="zgh_MA.xml" hash="7e72d86646a8b5045dfbedd721e5d0f1"/><file name="zh.xml" hash="7ce5cf9353eaeee426d5d5eb87670dfb"/><file name="zh_Hans.xml" hash="bdb68fe0878c430dc788e383b389dc2c"/><file name="zh_Hans_CN.xml" hash="24a14d8c675ae0c5b2fd211477240405"/><file name="zh_Hans_HK.xml" hash="7c82d550690d9ea63bc19cc76fbb61de"/><file name="zh_Hans_MO.xml" hash="9e4291c5bb0facb592b3ea3c14147e72"/><file name="zh_Hans_SG.xml" hash="01f85db499b693f4d3032e8683db390d"/><file name="zh_Hant.xml" hash="fb57450622d2383ac2f9d0e9c03872d0"/><file name="zh_Hant_HK.xml" hash="8648266bec5d9594fff57e030ff88e53"/><file name="zh_Hant_MO.xml" hash="3625e00e40fe8377de3a9a03628657ad"/><file name="zh_Hant_TW.xml" hash="66f700074df27309b3c6c71701d3b9b0"/><file name="zu.xml" hash="6542a2fe4304ba6289f66b2a68bbbcc7"/><file name="zu_ZA.xml" hash="db4d81680d06e598e322a26e9255ea69"/></dir><file name="Data.php" hash="8fa12d0abbc5557b89cd824b0e18d3bb"/><file name="Exception.php" hash="48210cc1272d8350acafdb8b26e86081"/><file name="Format.php" hash="eb7d886a80ca361bd0c38ec54b5d8bf2"/><dir name="Math"><file name="Exception.php" hash="37609bd0e120bcb0ed890523ac7cd35e"/><file name="PhpMath.php" hash="aa289ad314dc08e0abf97a3f147b6750"/></dir><file name="Math.php" hash="8f03d1a239fa7f642dd43ef7f7c642ad"/></dir><file name="Locale.php" hash="aad364df1a2dcad576c9ae09d94f46d8"/></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Lib_ZF_Locale-1.12.10.16.xml b/var/package/Lib_ZF_Locale-1.12.10.16.xml
new file mode 100644
index 0000000..65d7f70
--- /dev/null
+++ b/var/package/Lib_ZF_Locale-1.12.10.16.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0"?>
+<package>
+    <name>Lib_ZF_Locale</name>
+    <version>1.12.10.16</version>
+    <stability>stable</stability>
+    <license uri="http://framework.zend.com/license/new-bsd">New BSD</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Zend Framework Locale</summary>
+    <description>Zend Framework Locale
+splitted from ZF to avoid memory overruns during installation and upgrades</description>
+    <notes>1.12.10.16</notes>
+    <authors><author><name>Magento Enterprise Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:05</time>
+    <contents><target name="magelib"><dir name="Zend"><dir name="Locale"><dir name="Data"><file name="Translation.php" hash="3c4e6ddf022e279cdbc77a860c6cb657"/><file name="aa.xml" hash="6ba5c871d22f64a769c70a1af71a04c3"/><file name="aa_DJ.xml" hash="369c4c2c9eca85c0b60d762a6bc98aa8"/><file name="aa_ER.xml" hash="64dd3e36ee4831d967e49ca2e3acaaff"/><file name="aa_ET.xml" hash="c05abb8269fff734e511dc4d0a11c1a9"/><file name="af.xml" hash="67b34f34749792149e0358fbc902c167"/><file name="af_NA.xml" hash="4034171f9b1450a37ed070aa3d90c5ba"/><file name="af_ZA.xml" hash="6c3da14996bf1b58cd8017df3313b8ea"/><file name="agq.xml" hash="5fd93a5c707e73e4aa5c519c6d64afd4"/><file name="agq_CM.xml" hash="06499c36298cb9eeb23e6dc0dbe20322"/><file name="ak.xml" hash="69320ac48004c58405d12d800a2d81ff"/><file name="ak_GH.xml" hash="5c5c86078d71e30c0399a762e5cf7f0d"/><file name="am.xml" hash="95b934943f754f649861fcc29f378976"/><file name="am_ET.xml" hash="584cb88741cf24321e0c047dcef574e9"/><file name="ar.xml" hash="8ec3de78c7d4ff42daa956025eeebc20"/><file name="ar_001.xml" hash="bc30b0854e32d00739413feb7a5414ec"/><file name="ar_AE.xml" hash="f70fd224cd066586d1b8cf5309774b21"/><file name="ar_BH.xml" hash="0c953018f40ce82e9de064a4cb95a488"/><file name="ar_DJ.xml" hash="66fa3cc4267b7fd0d96a2669a0401d8d"/><file name="ar_DZ.xml" hash="c070ac57992c1611059859954354e256"/><file name="ar_EG.xml" hash="7a422d856e2ec72b9c1494316b89aa02"/><file name="ar_EH.xml" hash="a21177328a2e94087fbae06f1c7471b4"/><file name="ar_ER.xml" hash="0a7472b1683fc78bd1a3a5cafb8b84c6"/><file name="ar_IL.xml" hash="1bca56bc324229351c0089b67d490cb6"/><file name="ar_IQ.xml" hash="0da352ff695a5a3e8e5dd155cd7c4ddc"/><file name="ar_JO.xml" hash="4c7b8b4b5eb54adc1f9c3f6e4dc4dea4"/><file name="ar_KM.xml" hash="e919d368ba30dfdeaa95f70532b4e255"/><file name="ar_KW.xml" hash="9b6ca92c240ea68d66acbb49f91992f0"/><file name="ar_LB.xml" hash="18b007c4b842620480c8bb88aae29b77"/><file name="ar_LY.xml" hash="4da8f8faf728c8a65aae9c4a66008b34"/><file name="ar_MA.xml" hash="f1b35950f3e3e3f4237a5a39c7da2be8"/><file name="ar_MR.xml" hash="f2ffa3c86e1b19b17b09f9099273e9d4"/><file name="ar_OM.xml" hash="ed0e25061367e82694d8cb7c0eaee387"/><file name="ar_PS.xml" hash="e7ee58c19554a466dab9fdb752d24a6f"/><file name="ar_QA.xml" hash="7b180beb5da6eac09e84b58a240d6991"/><file name="ar_SA.xml" hash="d016c7a9ff9de9e45c9136109f8f493c"/><file name="ar_SD.xml" hash="9dfcaa9bb696f5cedc059a4109c8b3ab"/><file name="ar_SO.xml" hash="84afb054141b7c24b7b448b5602359e0"/><file name="ar_SS.xml" hash="6c3734aea87be71cffb4556464be4fd4"/><file name="ar_SY.xml" hash="5a198ba2fef0281de890f996fbf644ef"/><file name="ar_TD.xml" hash="948d829d89a161430f83912af024f141"/><file name="ar_TN.xml" hash="7faf65c744cf5e52bfdb59542bbe7899"/><file name="ar_YE.xml" hash="8c10abba56d6a234a55c654078016a9b"/><file name="as.xml" hash="8fc5e45c11ceac7f52c78ff5166159d6"/><file name="as_IN.xml" hash="694909593f1415ef0e4fda6d5e58be0b"/><file name="asa.xml" hash="67790459fbf5470067fda4eab8703753"/><file name="asa_TZ.xml" hash="a7ff94e5a530dc21c43ab7174ae813d2"/><file name="ast.xml" hash="64deedf1c37b39d07b45a5080fc94190"/><file name="ast_ES.xml" hash="77b6d2a7c40dfcdd70fcd5a48dbc937b"/><file name="az.xml" hash="e5c36c36cb81eca6d5cfa86ef058d989"/><file name="az_Cyrl.xml" hash="4489b815e2f3f628619ccbbe09afe72f"/><file name="az_Cyrl_AZ.xml" hash="827b611f5206f27d79f2c07525340bfa"/><file name="az_Latn.xml" hash="7a9c14a8afa4e30e677b6d588788a515"/><file name="az_Latn_AZ.xml" hash="ef3f0e6fe96210ee2e21ed77c73716a8"/><file name="bas.xml" hash="b5e926cff825d6a19ecdd30aa6ed7309"/><file name="bas_CM.xml" hash="b96cd37b4240f82a00400bceef16106e"/><file name="be.xml" hash="b9e6bfe9f98012d6e2e3adbb8d7f4a33"/><file name="be_BY.xml" hash="f7decbc88e0b84a81c61c33b752f7f35"/><file name="bem.xml" hash="b32d7fab640633d84596c781c5729972"/><file name="bem_ZM.xml" hash="a41416d42e206b3499ed1327002ce5da"/><file name="bez.xml" hash="700611e0dce26a8fc22647aa5708dc74"/><file name="bez_TZ.xml" hash="c767af253038caf4cbfede8a067453f5"/><file name="bg.xml" hash="51b19b644a9796463b91bb8ec236adca"/><file name="bg_BG.xml" hash="05e86d4ebf3b91764d3a0d2551e16bf1"/><file name="bm.xml" hash="09d5b79929820ae15c0c6d5ea4afb6dd"/><file name="bm_ML.xml" hash="4d5e1b37325ed9e57f8c590fe1d3a762"/><file name="bn.xml" hash="199a113c26a1608720ca7e3c660d23e8"/><file name="bn_BD.xml" hash="794e3d0d4fcb61f260ac7bf8673378d5"/><file name="bn_IN.xml" hash="0848d84be54a2646adc33af1c9e4b968"/><file name="bo.xml" hash="febea3f15347297281d6ecfcc5771b73"/><file name="bo_CN.xml" hash="30fd400db11b971da287cea6be2ef3c1"/><file name="bo_IN.xml" hash="d68dac66b5b843ce88da031b16b3afe1"/><file name="br.xml" hash="e870097efcb0cd34bb6e4d1f2dc5b278"/><file name="br_FR.xml" hash="11652862f633f7aec19a1c0433c4b204"/><file name="brx.xml" hash="8047b46746f02a39674f0beefc07e194"/><file name="brx_IN.xml" hash="99404538d96a071935efe231780663dc"/><file name="bs.xml" hash="940b48d89bdb239461bd8b3427469342"/><file name="bs_Cyrl.xml" hash="8580494f42dcf27b664a012d4658982b"/><file name="bs_Cyrl_BA.xml" hash="3f8c9a61ac978bd30d6d64bf86dffec8"/><file name="bs_Latn.xml" hash="0c8b503dcc0f9853d3af20768e662aea"/><file name="bs_Latn_BA.xml" hash="9496b4ae275da058251832af52888167"/><file name="byn.xml" hash="5b73a1af7b8ba27dc8262d81934c3f14"/><file name="byn_ER.xml" hash="4da388f09780d86134689dc5f10a3862"/><file name="ca.xml" hash="581f561afd2a2296430eebbd9cd7cf1f"/><file name="ca_AD.xml" hash="f3f80fa4f38bb72a397d94e6e12175d6"/><file name="ca_ES.xml" hash="24c8e24495f99d3921a5a4e77f8bfb81"/><file name="ca_ES_VALENCIA.xml" hash="e9703c4cedea0d7756a06a653c1c8442"/><file name="ca_FR.xml" hash="84537f1e57ba4476c1f923d12f4f7b42"/><file name="ca_IT.xml" hash="e842526f0ecfcef2904d206b2a810041"/><file name="cgg.xml" hash="054e8d83970f37440d169e964c743447"/><file name="cgg_UG.xml" hash="c6f0a77828c43211f72e10e83f9f666d"/><file name="characters.xml" hash="578bec00fbe6d6416ba89e6fa7986357"/><file name="chr.xml" hash="d5c69b967b2ca2744b8a46d9c95260e8"/><file name="chr_US.xml" hash="53b9e050bf58ab63900197dc8fb43d9c"/><file name="coverageLevels.xml" hash="90d4dc96d148cbd970ac8ff49c209bea"/><file name="cs.xml" hash="23e2ba0f38fbb0021ecd6aaa24db77a1"/><file name="cs_CZ.xml" hash="baa89fb49d1c50a5e7ef632f75d56fa7"/><file name="cy.xml" hash="0657a743b16b94e59c26b692dd79943b"/><file name="cy_GB.xml" hash="9bfe606c96d3d035ad644efe57bc67f6"/><file name="da.xml" hash="507243848cb4398daf768f735cfb432f"/><file name="da_DK.xml" hash="2347254255ce488182e37214c7d0694f"/><file name="da_GL.xml" hash="84ea22e10d4f6aa9ff8a0c6644fd7dd9"/><file name="dav.xml" hash="47ee87a9cdba6d211639776a608c1e86"/><file name="dav_KE.xml" hash="37e7d66af32b1fe4ac81be34fbee5d2e"/><file name="dayPeriods.xml" hash="56449b799dac8fc8daafbb0f3d3d99ef"/><file name="de.xml" hash="198aa0c550d4c41406bd0df6f7b70a7f"/><file name="de_AT.xml" hash="4b960a6fac173340ac276ce5c9d82532"/><file name="de_BE.xml" hash="dce45b8b94a4c3aab891a2c7bf3ca151"/><file name="de_CH.xml" hash="c4e68ad1a19e6e92daa571edb12cb36a"/><file name="de_DE.xml" hash="fa5913f6081a8a4650cef19d22acca20"/><file name="de_LI.xml" hash="0dfda8f44bc729219bb5de48f7694393"/><file name="de_LU.xml" hash="409b134c2c81689c16df1a79c0a4baa2"/><file name="dje.xml" hash="7da22550436ba325fd7b0dfde195b9a7"/><file name="dje_NE.xml" hash="7e318b89d05df66eea3fe59bf75c7ac7"/><file name="dua.xml" hash="ba4657ecd1b3bc014c5dd1622d107e90"/><file name="dua_CM.xml" hash="5bba1b38dc6495219fcb1a0432cc8df3"/><file name="dyo.xml" hash="612804b11d342d9e3b4bb2d58b5f66a7"/><file name="dyo_SN.xml" hash="dc003c4af3987ec2d7255d3c1f541738"/><file name="dz.xml" hash="244f80bfc2f658780ba016281354fe0b"/><file name="dz_BT.xml" hash="9d287c1c61edf1fa5ef3d765b2c7da86"/><file name="ebu.xml" hash="76696c080f20a7db39abc05dd272f090"/><file name="ebu_KE.xml" hash="7c4abeeb255cf7bf2bc500abb12ce387"/><file name="ee.xml" hash="4518057dd1b1b514e3bd12e5b5e85bf2"/><file name="ee_GH.xml" hash="082d3a0d2203319b9e51004a710e3e6a"/><file name="ee_TG.xml" hash="d99900de319d3584f1a115d4b5eb76f0"/><file name="el.xml" hash="1710cdf160e6cab0c4d47c15bab5be18"/><file name="el_CY.xml" hash="6da5d159d499ba4754a2e7d4553d5059"/><file name="el_GR.xml" hash="477e3b1f10320e95a0c12511cb0c8368"/><file name="en.xml" hash="9256d3ec622d04bd406376827d31012b"/><file name="en_001.xml" hash="768d1b54436a379dd71d0239702810a6"/><file name="en_150.xml" hash="7f9a887b30b86016fe8a29cabb6b8ce0"/><file name="en_AG.xml" hash="4d2c7e568ab71d4b4e49c934b47d5c4a"/><file name="en_AI.xml" hash="70e59d70a946d5026659413cecd2da7f"/><file name="en_AS.xml" hash="2b134e308540cf74f34c2aa665112301"/><file name="en_AU.xml" hash="ed81bf367e4f715e9a5c4271bf49822e"/><file name="en_BB.xml" hash="5dff42e201010656bc3dbac5887d015f"/><file name="en_BE.xml" hash="f91d2ce67b1818708d15c091c4c9d720"/><file name="en_BM.xml" hash="2908ee96a408ec7b9d7fd659615d90ff"/><file name="en_BS.xml" hash="91eab1ca2779d23f13df0347f536ca0f"/><file name="en_BW.xml" hash="e37d57c47fd205e31473eb60bb1c973d"/><file name="en_BZ.xml" hash="59d8c1d1deac2a7b0f73992516c999bd"/><file name="en_CA.xml" hash="7f81353970624138037a527f761e6571"/><file name="en_CC.xml" hash="38e31ba2efac50bc06a5caa4bce5fa02"/><file name="en_CK.xml" hash="4a677485a65e531f1468c1543347c1ce"/><file name="en_CM.xml" hash="5a02b7f5fa1bedd6a05f96196e95b711"/><file name="en_CX.xml" hash="fc592a771a64d862c3739a898ce18dd3"/><file name="en_DG.xml" hash="1ec938ecb46bd092323b4f8ce4ba2cc2"/><file name="en_DM.xml" hash="89bee96e1185ba2dbb3ded508dda16a8"/><file name="en_Dsrt.xml" hash="6fbff7ba19f432150086850bc2e2f804"/><file name="en_Dsrt_US.xml" hash="0850b836f2faef6ec3423c7705160ab7"/><file name="en_ER.xml" hash="a99ce4a7be566be0b20822f418a4a589"/><file name="en_FJ.xml" hash="f5cfe8032f32fde1289d2fce5696a6c7"/><file name="en_FK.xml" hash="632a6ac34df2048f5160f1cbb21684e4"/><file name="en_FM.xml" hash="1e288d9366e0ac40b241b90d550d6424"/><file name="en_GB.xml" hash="5b73aa8057d95008d24c3eb91f265fd1"/><file name="en_GD.xml" hash="7d6d4bfad9463d051c6aba6301581460"/><file name="en_GG.xml" hash="a75e2a293cd4eb9e49d495c13b6e37ae"/><file name="en_GH.xml" hash="97e8cffb72f9e6651f8dee6ca086c0ea"/><file name="en_GI.xml" hash="6441468454ea9cf06468b0e19db106aa"/><file name="en_GM.xml" hash="7497ca9f4f962f57dffc9ad93ab78077"/><file name="en_GU.xml" hash="ae33e0859c963b265fdf32cd026ad26b"/><file name="en_GY.xml" hash="50aed051f78b38a1d1156c36d3ad7f9c"/><file name="en_HK.xml" hash="1aa1133bec835a760695dd994a6ca259"/><file name="en_IE.xml" hash="63130f36882b6a6917606b7c6624aa80"/><file name="en_IM.xml" hash="2e981e6e96db2a140dbef95db013522c"/><file name="en_IN.xml" hash="7433385f2bb2afa211e5c33cd9f921bd"/><file name="en_IO.xml" hash="b63a354d390f7b3eb564394b6ea5ebd1"/><file name="en_JE.xml" hash="a37431bab3c66fbc361a775b62627154"/><file name="en_JM.xml" hash="3c59b2850c79e9a7371e8f7a12dd7d75"/><file name="en_KE.xml" hash="2554dd9bd652f9ea57cd18da1a19df18"/><file name="en_KI.xml" hash="f24474b7d06fc2f0220ee7095e6fbff7"/><file name="en_KN.xml" hash="4d68bb1ef92eefad6f2fcc0e0b0d5076"/><file name="en_KY.xml" hash="b686bd51fe232c2107a08e8d9a5f1577"/><file name="en_LC.xml" hash="2ffab8614818ecca5af1c84ddb96a6bc"/><file name="en_LR.xml" hash="eb8f5ac9ca72306127d86db0085a92c0"/><file name="en_LS.xml" hash="8255d2c42f06b2d7c511353e82edf59e"/><file name="en_MG.xml" hash="5d7a723320b05e8fd7a4a1c8017bb57c"/><file name="en_MH.xml" hash="3c762f2aa253bef5b3cd1ad5940c3cc9"/><file name="en_MO.xml" hash="c20af1a8a15c19b9a52dd56c36b5598c"/><file name="en_MP.xml" hash="d535408f7920814d2d2b7c4ddfbba7e5"/><file name="en_MS.xml" hash="d74c01a6b57a68fc4d149b0f2bd5faf2"/><file name="en_MT.xml" hash="a0779f1ed61a4fa24f2549fc37df1523"/><file name="en_MU.xml" hash="484d1081e00dfe315b01368e63a8e547"/><file name="en_MW.xml" hash="6f5546f3143027e27250f1b471f3722c"/><file name="en_NA.xml" hash="43792f7465fd56dff8129154cd568400"/><file name="en_NF.xml" hash="9ced4a796c1db1693c526340fdda01d0"/><file name="en_NG.xml" hash="ba618207a64de97e9420801e8909f076"/><file name="en_NR.xml" hash="56f2eb49dc7a336e5eb0e2f4503dc3ed"/><file name="en_NU.xml" hash="524a420bdbf2d1bfe4ced79e690fadff"/><file name="en_NZ.xml" hash="3960c92d3ef55d1e55bc7bb7808a1c58"/><file name="en_PG.xml" hash="9fdf21ef2f976e068dfddbdd0bfcbbbf"/><file name="en_PH.xml" hash="6d0b1441355b533aa7231a45f330bb68"/><file name="en_PK.xml" hash="48a4db2301d34ccedf58942f3b41b181"/><file name="en_PN.xml" hash="846a0b8c74785cf3ffb562abbd5d5cd3"/><file name="en_PR.xml" hash="76bec34e4f081c2cc6ea562b9d3c3552"/><file name="en_PW.xml" hash="258fb50d80e798ffe19514bceaab9c85"/><file name="en_RW.xml" hash="aaa4befd7267fe5afd6682a00241eca2"/><file name="en_SB.xml" hash="0c50f8257806c71a8fba4cda42acb2ac"/><file name="en_SC.xml" hash="d8769c5bbd31f66c1a40d82ad4f9959e"/><file name="en_SD.xml" hash="9d3a24c9a0bd4f99653130314a6cca29"/><file name="en_SG.xml" hash="f32241b6135eb9e8733ffc80fab1b110"/><file name="en_SH.xml" hash="c35756da3a6effbfa9af4d488f7292c4"/><file name="en_SL.xml" hash="dd9fc72730ab0e6e58086a662fefa69d"/><file name="en_SS.xml" hash="35c730c6f16af1d572ef33bbea15fde3"/><file name="en_SX.xml" hash="d33e0d2eb46c1dc7004b84f6606dff0e"/><file name="en_SZ.xml" hash="a53c6878dcddbc32d37ab6b77e17da36"/><file name="en_TC.xml" hash="55127dfa22212f6abded3dd606af5a85"/><file name="en_TK.xml" hash="64ecd71d4530f1668e9da48f1039f508"/><file name="en_TO.xml" hash="a5e77bc5a7beecf3ff8f6b3156a87668"/><file name="en_TT.xml" hash="8b168ae6e9c3d9c8fceb0582365264af"/><file name="en_TV.xml" hash="7f98c91cd0dd96a66e4c8684d1d60639"/><file name="en_TZ.xml" hash="0cf0401e55af54ff68da8bab8c901182"/><file name="en_UG.xml" hash="a028dc8e13686a9ebafb83ace5315206"/><file name="en_UM.xml" hash="b883319cb6ecd9b1a6cb1deef89db236"/><file name="en_US.xml" hash="6435b96852569c7e355302c17814f77f"/><file name="en_US_POSIX.xml" hash="535c6ed9fd3be4db0fbf7ba3c79533b6"/><file name="en_VC.xml" hash="e745b417ac7ff1c93f281070740e901e"/><file name="en_VG.xml" hash="66ebc85cc70895db528d868b2318e5d6"/><file name="en_VI.xml" hash="3f30ee6f1c7383f6d906106f09cf5eff"/><file name="en_VU.xml" hash="6eea6dd6ac0cc9d00386059ff12a865c"/><file name="en_WS.xml" hash="bdc0360cf4fb7b517dbee39de8d0cd58"/><file name="en_ZA.xml" hash="031afdaa1011735bbc6555c5e76d7ff6"/><file name="en_ZM.xml" hash="c7bdd89484bff8dcf4daf3f57f6d6bc8"/><file name="en_ZW.xml" hash="b3f51877ba7ce7ead43ef50b499b4444"/><file name="eo.xml" hash="82ba66eacea4e98f8923944eddcc1745"/><file name="eo_001.xml" hash="1801937ded337e21aa03e2592deedb46"/><file name="es.xml" hash="a60ed8506871160a17c4fc3b81e53b0a"/><file name="es_419.xml" hash="c1bef1732b664c23cb1b799181cba5a9"/><file name="es_AR.xml" hash="d404e53f4de755d9c09aa856e916f110"/><file name="es_BO.xml" hash="2876119c46a9c697baba1a65240c051e"/><file name="es_CL.xml" hash="e3910edbae206638b9250ecbf9949905"/><file name="es_CO.xml" hash="53be4c39e4a34867fcbaa8fd05c2c881"/><file name="es_CR.xml" hash="1f0e1d3c965de545b50aab4577b038fe"/><file name="es_CU.xml" hash="2380f966916741dcba3c34c04a5d8009"/><file name="es_DO.xml" hash="9ea0a69084ae8dbdd86459e2806a8bdc"/><file name="es_EA.xml" hash="ec6ce434e2fb8f15ab4daa8cb2bc4dff"/><file name="es_EC.xml" hash="efb247470c0fe88c36a7864184a01a8a"/><file name="es_ES.xml" hash="da94ab8a06feb23c6d567dc75f85531c"/><file name="es_GQ.xml" hash="cac80878e350ca7a728940550bd9393f"/><file name="es_GT.xml" hash="d360a7b0a15a0515a21f1e0d5b4dd21e"/><file name="es_HN.xml" hash="fa13c1e703f00b11d038fe3bfe19c08b"/><file name="es_IC.xml" hash="d5324caf07a8db6ba668a1b749baa6e3"/><file name="es_MX.xml" hash="05df2b2f76636b0097cf9431ff9c84eb"/><file name="es_NI.xml" hash="7d59d82986b3ab47e1b7a2dad383a0aa"/><file name="es_PA.xml" hash="21a4164b1d73365f9b63431247053db4"/><file name="es_PE.xml" hash="8df05dafd2807169296d11f75eb74537"/><file name="es_PH.xml" hash="7240ee508f9500d779bd5109450a057f"/><file name="es_PR.xml" hash="de86ff57cd2f3e3c67111b0163a72b6a"/><file name="es_PY.xml" hash="191bbd042c95ef246cda798581ed9598"/><file name="es_SV.xml" hash="9caba354843c2b055f8f5da17082e245"/><file name="es_US.xml" hash="90b97e0328d50ed134c0b36391a4aa99"/><file name="es_UY.xml" hash="a30737900d956dc397357f6463d532a1"/><file name="es_VE.xml" hash="03449a8b82e4d21e0a59836ceb148536"/><file name="et.xml" hash="d3e8e213866259a27ab9511efe348e0c"/><file name="et_EE.xml" hash="3e92af6dec71aa1ae7a3c62c931534ba"/><file name="eu.xml" hash="7111ceef4472ba0c4e52dfc654a2841a"/><file name="eu_ES.xml" hash="66e48ee02f5d1e5a7076cf9cab709d23"/><file name="ewo.xml" hash="8f5e287d463fbbc8711d46265141be36"/><file name="ewo_CM.xml" hash="47ee8a04b5a0327405d006bd1a99266a"/><file name="fa.xml" hash="1bd0e404ad8d9d3cbc943f04676b03dc"/><file name="fa_AF.xml" hash="3736139f38116f0586eb7aae46f6dcfb"/><file name="fa_IR.xml" hash="98698b67604b8e5589fd75601080cd3d"/><file name="ff.xml" hash="8eec6f2da84d33d3236797c62b96a9d0"/><file name="ff_CM.xml" hash="4bcc2690dc2eb5347be28c55fc008f88"/><file name="ff_GN.xml" hash="a56cbd27d6d838338a535a06db281d34"/><file name="ff_MR.xml" hash="17dd52ffc9809b26db2a067612d92d53"/><file name="ff_SN.xml" hash="9ab32fee7af1d2666669efa4386769d3"/><file name="fi.xml" hash="f1e171910ef4c2137d9a6149cf3c2c55"/><file name="fi_FI.xml" hash="8d9498723893c53c1b6a8ede4d3b796c"/><file name="fil.xml" hash="c44f7b3edadc43b02a927e6cd1e780e8"/><file name="fil_PH.xml" hash="233305bd4c15da54bc9b4847fc753165"/><file name="fo.xml" hash="5715134bd8e1798d5f25d165f8a0bd98"/><file name="fo_FO.xml" hash="99e842dbbd201862703a98e160936c8d"/><file name="fr.xml" hash="125a25633190ef898fe18f2827d2397e"/><file name="fr_BE.xml" hash="1f86df32f3eaddd9b139fbacb7c199f5"/><file name="fr_BF.xml" hash="8eaa50ea5da82e3e8cfea4af20946852"/><file name="fr_BI.xml" hash="eb2d856258ead7da474505881452f613"/><file name="fr_BJ.xml" hash="ef18313c305832ea7049ddf758c9d51d"/><file name="fr_BL.xml" hash="ee7f161cc4c9f844448d9da6fcbb349d"/><file name="fr_CA.xml" hash="64a0b0100ee5e8918ca1d502f06ccb3e"/><file name="fr_CD.xml" hash="d5d62a20e80bfc90badec8a72d8a9d1a"/><file name="fr_CF.xml" hash="d0e96516835a44fcfadd25d0db4e48a1"/><file name="fr_CG.xml" hash="e2852122d57450cd7a388a3545709994"/><file name="fr_CH.xml" hash="2fd3f24252e081fc4c74e9e707c00365"/><file name="fr_CI.xml" hash="e72b4fb87bbb5751e49093c24f4fbd5d"/><file name="fr_CM.xml" hash="e06d4dc5c3604d9cd9cc64376e206daf"/><file name="fr_DJ.xml" hash="7e87bdb7669cbf73ac0bb191d43400a4"/><file name="fr_DZ.xml" hash="64558f39d1553f56217f80ec3ef92536"/><file name="fr_FR.xml" hash="3d82e2934dd28c26c7382de85d95ac11"/><file name="fr_GA.xml" hash="87cc610fd5f6a486c63e5cb105cc2d7f"/><file name="fr_GF.xml" hash="cdecac5dac6e7e10336de1dec5982673"/><file name="fr_GN.xml" hash="0ed99a0d3cec1034899413196dde9c06"/><file name="fr_GP.xml" hash="78ffa2393237a67fd202f96784bcea5a"/><file name="fr_GQ.xml" hash="359c388c94381b4bd09868afb8557b43"/><file name="fr_HT.xml" hash="7ecc803d1e947635fcbf0aa1b201ce60"/><file name="fr_KM.xml" hash="ea71c8291e7c8aeaaad03880b7308a2b"/><file name="fr_LU.xml" hash="2f467a6cc20912bea31f2932c26be870"/><file name="fr_MA.xml" hash="a0fcbe1f955e3d76f9e38eef202ffa07"/><file name="fr_MC.xml" hash="9a6304e508d08737c7969b44d9d57939"/><file name="fr_MF.xml" hash="46968723e86571f7455ee534302d3471"/><file name="fr_MG.xml" hash="ff234d4ba2e66cbb7b798ca787c67026"/><file name="fr_ML.xml" hash="7d1c047089abbf427b3635bc977444b1"/><file name="fr_MQ.xml" hash="f8bb16f92cdb67bc46ceb7aa7048d908"/><file name="fr_MR.xml" hash="d838bbdbd611c35862b89899816befb9"/><file name="fr_MU.xml" hash="ead1fa2ecb9031315ac554ca214d551e"/><file name="fr_NC.xml" hash="3d6500c28264363b27bf842259ff8a17"/><file name="fr_NE.xml" hash="f5bec7e22bd5db13346937f58a1312f2"/><file name="fr_PF.xml" hash="d9c7edabd1f8fd52c5320d874c96c021"/><file name="fr_PM.xml" hash="bae26570b49ab5979729a5f5b66ce087"/><file name="fr_RE.xml" hash="0c9b4ea0bf6c26c33ed0cef26f428af4"/><file name="fr_RW.xml" hash="8725f9ee61c3054199536d6d8eec42ba"/><file name="fr_SC.xml" hash="1eeb10b51d815098e01a3f60d71f793f"/><file name="fr_SN.xml" hash="fa6da2f3ae651bd93705f26587ed135c"/><file name="fr_SY.xml" hash="b6ef0c074642c951a04131a3cadfdfe6"/><file name="fr_TD.xml" hash="ff554940988b4f7bd210a2138575c6c8"/><file name="fr_TG.xml" hash="2256df16de2fd7331fbfbeaeaf0ddba3"/><file name="fr_TN.xml" hash="d9996b3dba7d6ca0aa12c1e6766d2f27"/><file name="fr_VU.xml" hash="4f07ba927564fd6d3507816cf3aafe45"/><file name="fr_WF.xml" hash="a6c659de13b695c7e229681b819ed473"/><file name="fr_YT.xml" hash="821b7a10ac601226696fa7d71d0f8247"/><file name="fur.xml" hash="62a65af07d949f1117573e425bee90fd"/><file name="fur_IT.xml" hash="647415f7e2ebd1d55b260dac3823e3f9"/><file name="fy.xml" hash="14a7805cafcf18dc2f21a7925e9d7182"/><file name="fy_NL.xml" hash="dac6922c58516864d0d18df09753b917"/><file name="ga.xml" hash="7cc3d8d5796c554549ea5ebe5fb9cc35"/><file name="ga_IE.xml" hash="49dfc6b41e17ddc6cd93d17b1aad62f6"/><file name="gd.xml" hash="49f89d47c209b25730d8d731973f29b5"/><file name="gd_GB.xml" hash="721b95588bf8f0ab4004d868128cf286"/><file name="genderList.xml" hash="12c8a32237c76cd85cdb15f8cd140023"/><file name="gl.xml" hash="f7c56b822d2cc164b6691956fc79669e"/><file name="gl_ES.xml" hash="05e04a61e62eab6b94d6cfa3ef96ef25"/><file name="gsw.xml" hash="2b9d820569249f8fe88f6f77320223f2"/><file name="gsw_CH.xml" hash="ec2f1146d4fe5125f42c6281bb2f10b7"/><file name="gsw_LI.xml" hash="a6031e3e7ab4512a905d91484d8f5f00"/><file name="gu.xml" hash="8fe2967cebfbb4a19bfdbff9a8029cab"/><file name="gu_IN.xml" hash="0f93d2cd4139a9fa96df164cdf0357ca"/><file name="guz.xml" hash="65566bd2674a999999affe67ddef45a0"/><file name="guz_KE.xml" hash="7891c10bba2ae36ce29ce34f996ded25"/><file name="gv.xml" hash="bdb5556e04a5f2acb2141197e09020ef"/><file name="gv_IM.xml" hash="cf6d862525015e25038f60fc93175e84"/><file name="ha.xml" hash="310c626b795a231ad736c44ffe0df31f"/><file name="ha_Latn.xml" hash="a470076b9866db162e1415aa32350a44"/><file name="ha_Latn_GH.xml" hash="e213acaf6a53ba1d9c33d2ebda346ab3"/><file name="ha_Latn_NE.xml" hash="7983a567b1473874f3bea1dfb045ab29"/><file name="ha_Latn_NG.xml" hash="d2191f02d90e7b9912fe0e66aed70d24"/><file name="haw.xml" hash="5012e655132a7a5a7ad8397052baf955"/><file name="haw_US.xml" hash="5bb77c6692d33c8488fd008640434b2b"/><file name="he.xml" hash="70cd2438f74f6ea64543ec52bbb06e56"/><file name="he_IL.xml" hash="bdc2d75f46f4dced46dd4fbce6cac4f8"/><file name="hi.xml" hash="20e5122052162ec860cd27db34fc1dcb"/><file name="hi_IN.xml" hash="fbc59458d4ad8d295265e79fec26534a"/><file name="hr.xml" hash="ad2c7a5102cb05cec7ae0478d2f5b552"/><file name="hr_BA.xml" hash="bb36010b5b7cb83bf623d27eddc90678"/><file name="hr_HR.xml" hash="0a5068d64bfd804afa623562e6c556b1"/><file name="hu.xml" hash="35260b5e75ed941097710b0a0483e407"/><file name="hu_HU.xml" hash="b816b69e9814d33ad14907c9c3b6316d"/><file name="hy.xml" hash="4dd0bd1e21762124de07651094889237"/><file name="hy_AM.xml" hash="cc2c8134ca77e5bd55315c5faf80c61c"/><file name="ia.xml" hash="a57208d2e90856e670b25cafa90caaa0"/><file name="ia_FR.xml" hash="dbfd4721237b03875d50cb0770f1a5bb"/><file name="id.xml" hash="ad0dbea4ed9c97b2ef44ea451ff43aa5"/><file name="id_ID.xml" hash="349192acc73b4d40b3ea684999c5cd4a"/><file name="ig.xml" hash="0cd19cfcc514c8c5c0d8b8f085e64a72"/><file name="ig_NG.xml" hash="666845e6dc06958bdd682bf40b9a0251"/><file name="ii.xml" hash="db4ca0fa7cd320163163a97946399d6a"/><file name="ii_CN.xml" hash="a112d1ad1b7fa51a30f6cdb0850168b5"/><file name="is.xml" hash="a4587bd0d57e17d1960dba1a45b5e1b4"/><file name="is_IS.xml" hash="5d2fff72bd6199e1e79cdb3fa126b6a3"/><file name="it.xml" hash="dfa19eadbd4b5819453159c12e5bc32c"/><file name="it_CH.xml" hash="da4122fb147f2652de469a3f7703862b"/><file name="it_IT.xml" hash="0fded926a8f00f5f491f4ba2486b0686"/><file name="it_SM.xml" hash="4706ecb3a92e9e05f6d9f54bacbacf34"/><file name="ja.xml" hash="a4bdd8fef7cac5c8ab8a706781d475b8"/><file name="ja_JP.xml" hash="b87ae521fe2527bc9051ee631bd1001f"/><file name="jgo.xml" hash="9471f4b7fa6323bf54a3b8b74813aeb7"/><file name="jgo_CM.xml" hash="8ded303577f1a672dd255dd1fc1490fc"/><file name="jmc.xml" hash="fb1bd646841f4b8af118996f1ffc4591"/><file name="jmc_TZ.xml" hash="fc0d97c3788543fb5a53695be429dd96"/><file name="ka.xml" hash="6223813b9ac5f055c2c682eb79e6e05e"/><file name="ka_GE.xml" hash="b5df45beb8ba26df37d00154fe2e8deb"/><file name="kab.xml" hash="28e3bfe8412eeac7fda8a154c2dc9375"/><file name="kab_DZ.xml" hash="c398b9636cc7716ab1152528de39599f"/><file name="kam.xml" hash="078f9f3de5e4a2e405f91db0580fee61"/><file name="kam_KE.xml" hash="671d06ee91b5451d3bcef26cf6d0962a"/><file name="kde.xml" hash="db0e85e0f1bd852d8d467e13f8a2dfd3"/><file name="kde_TZ.xml" hash="9f41da9a28fdfd1cf618deba5d9e70ee"/><file name="kea.xml" hash="5504f98e950dd836749ecf3eabbb9d03"/><file name="kea_CV.xml" hash="88602da9c4e3bf124a330f1d0fb84113"/><file name="khq.xml" hash="f0deb2302861cb75bfa96b4b11cb6fa9"/><file name="khq_ML.xml" hash="44d6228f6585a0ddfd53f2b13f7f18c7"/><file name="ki.xml" hash="26a88ce1af8c274b1b5ff3a5c11fb3eb"/><file name="ki_KE.xml" hash="2b5e5cf6cd0d7e38ca3d1d1cb63be4fb"/><file name="kk.xml" hash="a298ecc37ae4d60ce87cb0eaad919d3d"/><file name="kk_Cyrl.xml" hash="07046177e2ec5347df348912409e4283"/><file name="kk_Cyrl_KZ.xml" hash="5bfb35389063a05e63ddec93b4ffad82"/><file name="kkj.xml" hash="3a97c2408dfbbbf2ee181c7c70b2ea8a"/><file name="kkj_CM.xml" hash="095d6748ff7c6f070fae30938ef729c5"/><file name="kl.xml" hash="95ed0d90dae8db61f7b46db63aac0a0f"/><file name="kl_GL.xml" hash="ef6c30e0b4063b1b8fad4e4511e3e33c"/><file name="kln.xml" hash="67441932af9b0b24bc2c2ca2e018d5e8"/><file name="kln_KE.xml" hash="f10af3f43ee9aee1bbf52ca5ff1c5196"/><file name="km.xml" hash="dee5bb763d56521b3c2919a340021c62"/><file name="km_KH.xml" hash="8a31a83be02152f33704d7dc2d2e3e4f"/><file name="kn.xml" hash="0b9d9e33559353f7c074672472ad8f7f"/><file name="kn_IN.xml" hash="e4135fa646d16bb15bf8c24919a4122b"/><file name="ko.xml" hash="9f2d95effdc2374377d41ff61f1f8ace"/><file name="ko_KP.xml" hash="cf696a9af609810d08337fb56f4b2a51"/><file name="ko_KR.xml" hash="0e6404f41f456011631a67da431ec48b"/><file name="kok.xml" hash="deea0756950d5465bf3d529ddf533e4b"/><file name="kok_IN.xml" hash="9ae56f19c07124aa5801d3f2d21dbdfc"/><file name="ks.xml" hash="62e4a1072ac6d8a14df457bb325d97bd"/><file name="ks_Arab.xml" hash="2c7ee60c2f9764e87ce01dace3089799"/><file name="ks_Arab_IN.xml" hash="2fea656a91f684489095e5f13d76c778"/><file name="ksb.xml" hash="d4c84ad5e9ce333697588c7cfc6a8ac1"/><file name="ksb_TZ.xml" hash="ccfb53a163d96d54debdaa15d3499027"/><file name="ksf.xml" hash="a8187b83f4ae0a05f0219f6262c38a70"/><file name="ksf_CM.xml" hash="203147426344f510947dcfe51ee77b83"/><file name="ksh.xml" hash="2617cb6c2b91f15403ce462da0021275"/><file name="ksh_DE.xml" hash="8e085f8da562734068ff0141aa759eaa"/><file name="kw.xml" hash="91ad55b87458489c861988b7fb6280c1"/><file name="kw_GB.xml" hash="7e2024541e7aba767e844c0b9663e155"/><file name="ky.xml" hash="a7545fd81340fd75464e271076dc5279"/><file name="ky_Cyrl.xml" hash="2fe62d616b564a7316ef4a8a72210488"/><file name="ky_Cyrl_KG.xml" hash="757d4898a54dcc119b43698784cc8967"/><file name="lag.xml" hash="a8a25a77df5909db3b73340774221cb5"/><file name="lag_TZ.xml" hash="ebd0c62787658dec41e3e49017e2705a"/><file name="languageInfo.xml" hash="9a33723a317db6855c7dc4a37a9fffd5"/><file name="lg.xml" hash="2cc89f3e98775beee70bdd3e3404d9dc"/><file name="lg_UG.xml" hash="d98767310f065c6a3755cfb5fec6b9a0"/><file name="likelySubtags.xml" hash="6a042c9e337512b06f75e101a49981f5"/><file name="lkt.xml" hash="dba6053b63f4c6e3bf2e21f603c8d78b"/><file name="lkt_US.xml" hash="bd6f8a8cc0acca0ad53b85350f2f5b80"/><file name="ln.xml" hash="0cea3d899d3dad394a5e92db22044bc9"/><file name="ln_AO.xml" hash="9eabbf5b540202c5e5b521cdd06564b4"/><file name="ln_CD.xml" hash="5a6fd6126bf58147cdad6a565bae8af5"/><file name="ln_CF.xml" hash="349ec0ad936ee0fc9c5a00530e259390"/><file name="ln_CG.xml" hash="25c98dbc645d64b7cd800fbf6674fc4b"/><file name="lo.xml" hash="52aa20460fe494c813927fdab64feb08"/><file name="lo_LA.xml" hash="0266874e3970a24dab991fc54e111360"/><file name="lt.xml" hash="6d485e98ca9590acf70ea1838e488ad7"/><file name="lt_LT.xml" hash="738d6dfb27e54f7f9a44875b6dacf0e5"/><file name="lu.xml" hash="5ee43a091cdfb35d5f14067f45b0b05c"/><file name="lu_CD.xml" hash="dbe948b08a594210a3d088e414123d86"/><file name="luo.xml" hash="69779720b4294de854bf82a170ffbec9"/><file name="luo_KE.xml" hash="ad6df8710e3b4976c7bc95b0ec739fa3"/><file name="luy.xml" hash="d0e4e4766a744edc1ab08418bec0ee61"/><file name="luy_KE.xml" hash="28a00f1eb2977ad409b0dfca45a0ca9d"/><file name="lv.xml" hash="3a85d69acd0b15e47f9b2df341be7573"/><file name="lv_LV.xml" hash="6e07fe6de844f63ae1605a6a1a5575a5"/><file name="mas.xml" hash="b1ee3c8d903462d3b217b7056a31df20"/><file name="mas_KE.xml" hash="e494f8d43607f742e3a0cf393ad83bcb"/><file name="mas_TZ.xml" hash="a5785e18c75185c28f284f2e18e7f6e0"/><file name="mer.xml" hash="2023c272b2b6e1169d0d45bb195c7d53"/><file name="mer_KE.xml" hash="52600bcaac77d9e6aa9c9741e67323c5"/><file name="metaZones.xml" hash="64a142f5cc668612c9c6ad2ff0af875f"/><file name="mfe.xml" hash="cec57c842e65ebeaf746db91ac55f5b1"/><file name="mfe_MU.xml" hash="990e405c5cae3b6d7226d0482d0b6848"/><file name="mg.xml" hash="fd8b564029dfa72a913ff627c834082c"/><file name="mg_MG.xml" hash="81a7d92eedd7a4d9cb8c8687badf4aec"/><file name="mgh.xml" hash="6008ffd778c2d670383ab125848d5a68"/><file name="mgh_MZ.xml" hash="ed7a568c678bb3ec003732ba4e7c19a8"/><file name="mgo.xml" hash="3e834a9a979970d5c82d963a56947a11"/><file name="mgo_CM.xml" hash="0cf9ba215d10e1f3db255adcccb3d6b8"/><file name="mk.xml" hash="3ee88bf8c02b4f244b5cd1d3ab617f45"/><file name="mk_MK.xml" hash="aeb740a529d8b51b53242d1f1cf59b2e"/><file name="ml.xml" hash="94d67dd84bc66f80d4a6ffaf27a2c508"/><file name="ml_IN.xml" hash="80849e5c197f5dd2b2ea0317f3517ca1"/><file name="mn.xml" hash="e6a18ab3a3c20fe7ab283cf6a901a549"/><file name="mn_Cyrl.xml" hash="9bdcd159b3be6e0ecf96795d5fc1e91e"/><file name="mn_Cyrl_MN.xml" hash="f11f2f4a083ef35c66ff0a10429b5614"/><file name="mr.xml" hash="f2073dc2a11fd9c7be8ba932e45b830a"/><file name="mr_IN.xml" hash="1623ff448071fe23a70309fa70ac531f"/><file name="ms.xml" hash="9b53207db5cc656f53ac5ea3d90195fd"/><file name="ms_Latn.xml" hash="cda2abbda8d3482f36361e946f37b5a8"/><file name="ms_Latn_BN.xml" hash="5740a4fdad13e0eb211736bf0a2f17ec"/><file name="ms_Latn_MY.xml" hash="c537239c8ae70b442dcbf67911f3fd4d"/><file name="ms_Latn_SG.xml" hash="05424711271e51b0e552063edd05b547"/><file name="mt.xml" hash="961881542802dc1cc9f20f8fcb774f45"/><file name="mt_MT.xml" hash="5282b27d9d6a57d726612a09395e6c22"/><file name="mua.xml" hash="8ebb1a4b5ef4baffddb2894b307f2cbc"/><file name="mua_CM.xml" hash="2df1fe2f39dc3402d5892946ab88f2ef"/><file name="my.xml" hash="64f4ef77afb342a522c3b4779ab19486"/><file name="my_MM.xml" hash="02d8bea58fd9bd5e8dc7796477ef5ce0"/><file name="naq.xml" hash="a29dfa41b2e1630f136a18b12d2c2324"/><file name="naq_NA.xml" hash="0ec1dfc6dc7eed7588f1d1bc41ad56dc"/><file name="nb.xml" hash="46eb58f192d18746c09c8c8582ddd8b1"/><file name="nb_NO.xml" hash="626d2f263762cde6e41328a0bf6768e3"/><file name="nb_SJ.xml" hash="02508dd6f1be1de58fefd7b1159564eb"/><file name="nd.xml" hash="db8baa59e10b31daafd068e55ba882da"/><file name="nd_ZW.xml" hash="ccd1724534080cdf1a784ae0435f7785"/><file name="ne.xml" hash="7cb434ada9a049184fd0a2e021012406"/><file name="ne_IN.xml" hash="84558af586315178078c8e91aa410d9d"/><file name="ne_NP.xml" hash="81a679056920fedc05dad2cda150ef53"/><file name="nl.xml" hash="9f122648b0ae9fbf47dc6364311c9b14"/><file name="nl_AW.xml" hash="d44d954375e2f11a3571f0849dc5b116"/><file name="nl_BE.xml" hash="8e255c2c3d01f7680e6b1931521d15c1"/><file name="nl_BQ.xml" hash="05ea3eec1520c8ef9889b627f3c11624"/><file name="nl_CW.xml" hash="b4b444e991046f1e3e3c44eaa6d825bb"/><file name="nl_NL.xml" hash="4e0467c9db5288462ceb8f78611f6fc5"/><file name="nl_SR.xml" hash="ac0e3ff1c6706ecd9ad0b727583e024e"/><file name="nl_SX.xml" hash="3081384591890c797dfc87c4f4ec40d2"/><file name="nmg.xml" hash="96a40607cf05ce8f8ecbd81edfe54188"/><file name="nmg_CM.xml" hash="e4b39732f25ed7f4fd5f8eeab2296cc0"/><file name="nn.xml" hash="df403882fc0d4fbde259805dbb578133"/><file name="nn_NO.xml" hash="bff2529dd25fc5eff4e45c62e57a6102"/><file name="nnh.xml" hash="604802e1f48c5efb5006478f6096cba2"/><file name="nnh_CM.xml" hash="0797c07c5503386e902db37bb81036a1"/><file name="nr.xml" hash="537dfb7c804216084ff12405a79e6363"/><file name="nr_ZA.xml" hash="deaad06361e3310f47a0ae239b2dde45"/><file name="nso.xml" hash="d8d03686f2a5498288ab934b1d23af35"/><file name="nso_ZA.xml" hash="b8d56986c8588034819ce4112447bb7a"/><file name="numberingSystems.xml" hash="978a66b09ff3a7fe924e5220ac632035"/><file name="nus.xml" hash="aeb47a867f44fc22028eea112a9f20d7"/><file name="nus_SD.xml" hash="5b01ebcdeb5e0925420a1ec5a81078e0"/><file name="nyn.xml" hash="7a00226944592e03fbf05992fc97cb37"/><file name="nyn_UG.xml" hash="f98eb55dcdecb237d0d5f4442e967df1"/><file name="om.xml" hash="d7dd5059b280e4e673d39c6681dedae6"/><file name="om_ET.xml" hash="a2bd53f37a0cbde29c75476d11efd951"/><file name="om_KE.xml" hash="6f499797aaf7cddf5c96510055b1cb6b"/><file name="or.xml" hash="a1f44afb1360bea5213e7769b0d555ab"/><file name="or_IN.xml" hash="b8384a249e94ac1d3aeccffe6456d213"/><file name="ordinals.xml" hash="8105f05e542d711fb1c58eda93ee1970"/><file name="os.xml" hash="d3994c255a9ed31b3b485e2a60100bb6"/><file name="os_GE.xml" hash="b707a294c3bda74ce1fe3de56d5a2065"/><file name="os_RU.xml" hash="ed7de0aca2851389edb27ec27cfbff14"/><file name="pa.xml" hash="eb25b28dccb7fc2b9e8a58529383e7ad"/><file name="pa_Arab.xml" hash="d066d05609c4bb72a91b66960df82d4c"/><file name="pa_Arab_PK.xml" hash="af6c1f47b0c9125afa5f1d8b4465afae"/><file name="pa_Guru.xml" hash="3b5761c3adfe0fd8f769757108a33d74"/><file name="pa_Guru_IN.xml" hash="962eb7156fcccfee1c3b62562bcb4c9e"/><file name="pl.xml" hash="4badef8c402fbce8a919fe0345018145"/><file name="pl_PL.xml" hash="9f5e5245cb2b2a52ef56e3fd69363f31"/><file name="plurals.xml" hash="4223a72c769da4553aeaffc82409128d"/><file name="postalCodeData.xml" hash="ee416690bc7b0b51c62a4f60df3c6e49"/><file name="ps.xml" hash="71320ee03ab67c4d86b2042a2a450044"/><file name="ps_AF.xml" hash="e2b047a904f02a454f193f37856e9f6c"/><file name="pt.xml" hash="6c0d496db88b044f4bccea7b2bcf5bb2"/><file name="pt_AO.xml" hash="502a761ed5e5ca0b44403ff8d0e85e94"/><file name="pt_BR.xml" hash="9ec9d29dec55f67013d4e3ce15799d05"/><file name="pt_CV.xml" hash="3f8377d6db982dc7b9cc6294ee963517"/><file name="pt_GW.xml" hash="bec710dffaed02976223f5671fb48ec5"/><file name="pt_MO.xml" hash="1df59a4a05e1141e225a7da25c58ec4b"/><file name="pt_MZ.xml" hash="b5b28ee99e7f12e1c14e015c3ecf5c4d"/><file name="pt_PT.xml" hash="66b28e650fb563d84b53da41a1f261b4"/><file name="pt_ST.xml" hash="7c96e96d8bf1b811ff3358073e3aeb63"/><file name="pt_TL.xml" hash="9e2647ac1cc2d8f949cd000ffc5dd2fd"/><file name="rm.xml" hash="aa5e41d750b8392990ce00c29f4feb4d"/><file name="rm_CH.xml" hash="3bef003a0204b4d2291ee73c46d8f1ee"/><file name="rn.xml" hash="80a76b1975488f778da8abe7dc0292db"/><file name="rn_BI.xml" hash="c5010d52f27f95cf794396339752dda6"/><file name="ro.xml" hash="fd309802d4e90aa4e51d9f014621e5b6"/><file name="ro_MD.xml" hash="4763fe9a5ac2d57fa9cb7bc5aaa09f7a"/><file name="ro_RO.xml" hash="a7f41f443fcc6daed26d608373a0ebcb"/><file name="rof.xml" hash="4d03559ef40f836156f5e516a9eaa5aa"/><file name="rof_TZ.xml" hash="99f8c6ad97c8acbade2a9f3553b57225"/><file name="root.xml" hash="f74f320723d5a31ba06aa2c79de43bd2"/><file name="ru.xml" hash="3aaf7853667c37781e3d886f364968c1"/><file name="ru_BY.xml" hash="931ca3d10a511ea18c705a22c8baaf1d"/><file name="ru_KG.xml" hash="edee35024102c3ffd1c9acd89f0c9c30"/><file name="ru_KZ.xml" hash="7d4138b25f5c8cbafead8f321fd1954e"/><file name="ru_MD.xml" hash="4d629ff877f4c3a1e214548dc7ecccaf"/><file name="ru_RU.xml" hash="ee8433fc8dbc67a22b31c6be08d13402"/><file name="ru_UA.xml" hash="33fe877250fbd7077b4edf45c50bf300"/><file name="rw.xml" hash="73b90e15bea65ad98ac5cea78e878d91"/><file name="rw_RW.xml" hash="c5cb01f5b236208dc96d3268cf85ffbb"/><file name="rwk.xml" hash="af9317a0322bd40302363d5e6bd4b291"/><file name="rwk_TZ.xml" hash="d0f470b223d25203a611bdb7c395c988"/><file name="sah.xml" hash="f4b2cb698fd582845afb18f984089ee7"/><file name="sah_RU.xml" hash="6ee074c02940d5e9a525a7b8a9c2176e"/><file name="saq.xml" hash="130d69870ed3f95808bced7bed701c3b"/><file name="saq_KE.xml" hash="008b90c332f06e019efc1d8e33f401b3"/><file name="sbp.xml" hash="158d785177f949347356d59dc7883ad8"/><file name="sbp_TZ.xml" hash="0d4f52a378680dcd6230f00cc8ed1f61"/><file name="se.xml" hash="10a3649dbfd8bdff0f8b8fe102b444ed"/><file name="se_FI.xml" hash="ea379a5c51168210274b50711f032355"/><file name="se_NO.xml" hash="0a890443d1477c9d275bb945b0c5b589"/><file name="seh.xml" hash="4361fff00579a2efd8d283a152ccc682"/><file name="seh_MZ.xml" hash="a3f4cc61fa6d995fa5d2cc7b193ee1ad"/><file name="ses.xml" hash="00e9cfea10372a6b62590346a596d054"/><file name="ses_ML.xml" hash="dc0cd9eabaf2c08d66007e6c31a6a477"/><file name="sg.xml" hash="e1bda394071d1796efc18e00467e425c"/><file name="sg_CF.xml" hash="ed51c88dd34a233c82150338436c250c"/><file name="shi.xml" hash="b57def0c24096d11985586f621c09159"/><file name="shi_Latn.xml" hash="61054fc24b89c1842a53be5f5e6016e7"/><file name="shi_Latn_MA.xml" hash="d0f90c1ab8e1b3f7340fc2b77f37ff4f"/><file name="shi_Tfng.xml" hash="4670d2933f9ff2b00c787336498fc149"/><file name="shi_Tfng_MA.xml" hash="271bc282c75731c883ea8fbbd72361b8"/><file name="si.xml" hash="8a27b7c7c9bcdb45049974693c8db484"/><file name="si_LK.xml" hash="b637f75035a4fdfe10f0d3fb39781db1"/><file name="sk.xml" hash="c8b930f68837a7fcaa7e0c34aec1235b"/><file name="sk_SK.xml" hash="7beda18d4fd023382190bc9797d51cfc"/><file name="sl.xml" hash="51bf1ccaecc51b117ea843100b2bc782"/><file name="sl_SI.xml" hash="b71c5b3968b50875758dfdf825c6b21a"/><file name="sn.xml" hash="9aa3b734aa010864b0ff582a67e677e8"/><file name="sn_ZW.xml" hash="24a9dfc3030bf253882c9d661eaef17c"/><file name="so.xml" hash="5b1ade5ca9f6416d2a42aaeefe08803b"/><file name="so_DJ.xml" hash="2850875e1e4d197c81948325e8741024"/><file name="so_ET.xml" hash="6210a645a2c598eed597bab39f36d557"/><file name="so_KE.xml" hash="208c20fcd4d27f3ea7a63a1ccd70b64c"/><file name="so_SO.xml" hash="65f7b820f3de2da5fb6adbbf3fed4244"/><file name="sq.xml" hash="9814afac7a465e293306c2036e97397a"/><file name="sq_AL.xml" hash="6b08a2f02bd463c8854d377761d14ad4"/><file name="sq_MK.xml" hash="7b1a4a47c69c2c11539ecf5f2b306dbf"/><file name="sq_XK.xml" hash="a4be94b459a7ddf3c64782b932c43edd"/><file name="sr.xml" hash="a907b6ed4a9233dce8fb2cafacbb9d07"/><file name="sr_Cyrl.xml" hash="df126a848168eebb92d2cb08b0f47051"/><file name="sr_Cyrl_BA.xml" hash="379078c0a256b4f9ec7111cc9f75a2e4"/><file name="sr_Cyrl_ME.xml" hash="fdc47e86343568ccbf1e619800f26614"/><file name="sr_Cyrl_RS.xml" hash="f269bfd320ba2b38a6a614ca4da321a9"/><file name="sr_Cyrl_XK.xml" hash="8e3b5caa0e9997575201e3f7823a81ac"/><file name="sr_Latn.xml" hash="b26fdb85fcea35960444294ab6f10b21"/><file name="sr_Latn_BA.xml" hash="8abd2f52848f701a485ce865e97b851a"/><file name="sr_Latn_ME.xml" hash="49c92f426cc5a5188399c80878686f83"/><file name="sr_Latn_RS.xml" hash="713a42425709d2a2448ed3ceefed8d07"/><file name="sr_Latn_XK.xml" hash="d9f80fc5757c8be78a8bf06b0090bb1e"/><file name="ss.xml" hash="1c8e4708d8197d98b32e84db842531ac"/><file name="ss_SZ.xml" hash="36bd3ae71800ee1509cb005345b7d0d4"/><file name="ss_ZA.xml" hash="929a6fc019f32616331578d55a36412a"/><file name="ssy.xml" hash="4cd34c993f3f737c52ef02dc0c65180c"/><file name="ssy_ER.xml" hash="6500f7ea9752b2272ff4c93530514345"/><file name="st.xml" hash="13de7725514e5dd58f49e0b01ec7858f"/><file name="st_LS.xml" hash="16fac9f2505893a9ae5df24174ec8e94"/><file name="st_ZA.xml" hash="c769d53933a0816218637180bfe3b1e6"/><file name="supplementalData.xml" hash="7c64143e835c0a2facebe573b95c735d"/><file name="supplementalMetadata.xml" hash="89562abe6d40c4c7245a8c465905e618"/><file name="sv.xml" hash="157cbade1293f5bf503b8ce03cac9260"/><file name="sv_AX.xml" hash="eb9596e23c3e3597f9167c56bc456ba8"/><file name="sv_FI.xml" hash="c7985fcaa170e42535eebb8f2821fd8c"/><file name="sv_SE.xml" hash="a234be39c4fe51d5360e867ef057e9cc"/><file name="sw.xml" hash="baa99fb8dae1057541cd174d8c479f63"/><file name="sw_KE.xml" hash="841c4e403526c85c138ec30908f0e639"/><file name="sw_TZ.xml" hash="d8c70853021414f35fff5160e777afc4"/><file name="sw_UG.xml" hash="2f39a025d909e27a3b4d42ada4494f44"/><file name="swc.xml" hash="b78d391b482ebeaaa8d2589248b99475"/><file name="swc_CD.xml" hash="7ef627a3af8e94ce44e118facc634280"/><file name="ta.xml" hash="f14aabe0b254b16a7656cf0eb924a937"/><file name="ta_IN.xml" hash="a3cf28d4dffdfb99fbd06c56f7407690"/><file name="ta_LK.xml" hash="c4cb7d38b9ab64f09398af90233929b6"/><file name="ta_MY.xml" hash="50b7aa25e1de2ba3060cf7f1542dbb1e"/><file name="ta_SG.xml" hash="467cf5081dce3961ff108329da18461f"/><file name="te.xml" hash="9000f302efec5389067682dcb37713ec"/><file name="te_IN.xml" hash="46c5a0f8ad33a8207687131b1e30dbc3"/><file name="telephoneCodeData.xml" hash="df7976ae3ed9a46df9b7a3d153a08782"/><file name="teo.xml" hash="1a54151c61645deebd146ce8167ebb7b"/><file name="teo_KE.xml" hash="28904dbd23feee396d235bddafb88a5f"/><file name="teo_UG.xml" hash="a3c2615908baa53ef6c06c1bbc46d03f"/><file name="tg.xml" hash="b0a784936ff2b4d986bea0a5abaafc41"/><file name="tg_Cyrl.xml" hash="dad9b0de0bca8885769e3eb3b986ed38"/><file name="tg_Cyrl_TJ.xml" hash="ecd76f8a9c11ea36f23aecbd4ba10f94"/><file name="th.xml" hash="93a93b50d5bc06c3aba030a2bc8f3a2c"/><file name="th_TH.xml" hash="16920f2948dfc0169fa4120b6bef4c6c"/><file name="ti.xml" hash="68ba067a766e83fa56b3f8b64e911709"/><file name="ti_ER.xml" hash="fc1625e77b8ee3b39e5a21a5778c6352"/><file name="ti_ET.xml" hash="eda9e0f13702f4f4d6c56bf8702bc158"/><file name="tig.xml" hash="dcbea52ddac1a8641439c191ef8cad3c"/><file name="tig_ER.xml" hash="9e8951b4b641d755277bba697641eeb4"/><file name="tn.xml" hash="5ecf790feae7a56e7d3dda69a3dcdd29"/><file name="tn_BW.xml" hash="5db54fb06600c505374663377ae3c87d"/><file name="tn_ZA.xml" hash="5ffaceb20f45593cf1526096d44811ae"/><file name="to.xml" hash="6abeea01835e1fa2e62a489842917a71"/><file name="to_TO.xml" hash="e17fa8026e023e8614eb6fe68b223300"/><file name="tr.xml" hash="a73038379e7e0396200158e0cb9b2101"/><file name="tr_CY.xml" hash="c02e5d602dc71097faf6e40c43c00df5"/><file name="tr_TR.xml" hash="98e092d092bd6efdacd4c9181bdf1269"/><file name="ts.xml" hash="d4de7842ad3ed50f09e585aeb8fd2b48"/><file name="ts_ZA.xml" hash="a058d38e5fc52060f992a09c44bd2dd4"/><file name="twq.xml" hash="8cb693f4457b01d524eb4dd3a9202fee"/><file name="twq_NE.xml" hash="f3887ed69d01de60ea150fb49741dd7e"/><file name="tzm.xml" hash="184e66cab1c6bfb1c1ede84b1b9b8d5d"/><file name="tzm_Latn.xml" hash="c48b72028daead39c63e06be5940b06f"/><file name="tzm_Latn_MA.xml" hash="adeed44054a352a8a95fb63a47b1277d"/><file name="ug.xml" hash="0048db54db7e96e66309f27990302912"/><file name="ug_Arab.xml" hash="b0916370f9a3dcbe9f9ef7f4941e83ff"/><file name="ug_Arab_CN.xml" hash="ca617ed54b6b547d9cd4929653765e69"/><file name="uk.xml" hash="82e297c9a0e35a239300e9d781246ca7"/><file name="uk_UA.xml" hash="f1f43742973c3e0684078ad1585c09a8"/><file name="ur.xml" hash="4330b97cdc580fd937fb4b48c30138dc"/><file name="ur_IN.xml" hash="620558a8d2b16341b990f739d96fa656"/><file name="ur_PK.xml" hash="4929ef93fcd09c110306500b7b5df200"/><file name="uz.xml" hash="e885a45d72df08108a5fb5553caf5650"/><file name="uz_Arab.xml" hash="bbccf5949290b9a88bdb05112ef0f1f1"/><file name="uz_Arab_AF.xml" hash="e8b2a9bcdfcddf5fe0923bdb79586e3b"/><file name="uz_Cyrl.xml" hash="f11985a357906a9764a2eeae61d87834"/><file name="uz_Cyrl_UZ.xml" hash="e34ac326ca872838cb51f7d95f2cad57"/><file name="uz_Latn.xml" hash="6d1de019d75988a154546b7a6ec4cecb"/><file name="uz_Latn_UZ.xml" hash="9f0dd4f61e4ad966fd33e26c0af5d722"/><file name="vai.xml" hash="4ccc7bd3230a4395017327e278bea5d7"/><file name="vai_Latn.xml" hash="78b6884327d1a568c1dcb55edcc8e8c7"/><file name="vai_Latn_LR.xml" hash="d60cdef15dbd84e66ebf6532935f2735"/><file name="vai_Vaii.xml" hash="4d3b525d05e85213d169a04051aed2cd"/><file name="vai_Vaii_LR.xml" hash="64e621f56506d7b70656d056ed8e8214"/><file name="ve.xml" hash="0238fc0b60b7f9f80a821455e85a26df"/><file name="ve_ZA.xml" hash="cfd73cf7fc6d3bef016b3dea6c1464c2"/><file name="vi.xml" hash="1ec60312f7c6e419dc883676a3cfb10b"/><file name="vi_VN.xml" hash="cfb0ceae9f2e78e0459f062016230998"/><file name="vo.xml" hash="a696981962fe9a84ccf27cd4f46a07a6"/><file name="vo_001.xml" hash="ca84f69da9df24a4e409104c54a8a3d5"/><file name="vun.xml" hash="2838dac67405ebb6515ed35b983f13c5"/><file name="vun_TZ.xml" hash="5c00fe9a927fa96193d8be8f22c4ee99"/><file name="wae.xml" hash="7a6a03e67b505d33af84383427ff1db9"/><file name="wae_CH.xml" hash="bc6ad0fbf82a5317ade928730b115b91"/><file name="wal.xml" hash="5fa5a9a4263c2c0c75cb61e137ec19b7"/><file name="wal_ET.xml" hash="fe6ba6e078852d9949dc023b20e40462"/><file name="windowsZones.xml" hash="bb1d22fd1c7e1073f31559d4ec4f6ea0"/><file name="xh.xml" hash="c4561fd383180394c1719f7af01252ed"/><file name="xh_ZA.xml" hash="7cc6e52fd5bbde7d7a09835462c9005a"/><file name="xog.xml" hash="d159722255a22bf4b113822364e3aa42"/><file name="xog_UG.xml" hash="c9d9ce8325ccd943d17be076e2348509"/><file name="yav.xml" hash="7cd6b28230ea1b592f4f6dc656d7dac6"/><file name="yav_CM.xml" hash="d99d7f9815108fe4040253b525fb1e65"/><file name="yo.xml" hash="94b71c3a56a7d571cdd2cdcca0e3639d"/><file name="yo_BJ.xml" hash="ad14fab000b1bdba3ad0959b41692125"/><file name="yo_NG.xml" hash="1381c16f38223fcd4e645a66f06d3947"/><file name="zgh.xml" hash="47980624ea61e97a271f180c98a7f012"/><file name="zgh_MA.xml" hash="7e72d86646a8b5045dfbedd721e5d0f1"/><file name="zh.xml" hash="7ce5cf9353eaeee426d5d5eb87670dfb"/><file name="zh_Hans.xml" hash="bdb68fe0878c430dc788e383b389dc2c"/><file name="zh_Hans_CN.xml" hash="24a14d8c675ae0c5b2fd211477240405"/><file name="zh_Hans_HK.xml" hash="7c82d550690d9ea63bc19cc76fbb61de"/><file name="zh_Hans_MO.xml" hash="9e4291c5bb0facb592b3ea3c14147e72"/><file name="zh_Hans_SG.xml" hash="01f85db499b693f4d3032e8683db390d"/><file name="zh_Hant.xml" hash="fb57450622d2383ac2f9d0e9c03872d0"/><file name="zh_Hant_HK.xml" hash="8648266bec5d9594fff57e030ff88e53"/><file name="zh_Hant_MO.xml" hash="3625e00e40fe8377de3a9a03628657ad"/><file name="zh_Hant_TW.xml" hash="66f700074df27309b3c6c71701d3b9b0"/><file name="zu.xml" hash="6542a2fe4304ba6289f66b2a68bbbcc7"/><file name="zu_ZA.xml" hash="db4d81680d06e598e322a26e9255ea69"/></dir><file name="Data.php" hash="8fa12d0abbc5557b89cd824b0e18d3bb"/><file name="Exception.php" hash="48210cc1272d8350acafdb8b26e86081"/><file name="Format.php" hash="eb7d886a80ca361bd0c38ec54b5d8bf2"/><dir name="Math"><file name="Exception.php" hash="37609bd0e120bcb0ed890523ac7cd35e"/><file name="PhpMath.php" hash="aa289ad314dc08e0abf97a3f147b6750"/></dir><file name="Math.php" hash="8f03d1a239fa7f642dd43ef7f7c642ad"/></dir><file name="Locale.php" hash="aad364df1a2dcad576c9ae09d94f46d8"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Mage_All_Latest-1.9.3.10.xml b/var/package/Mage_All_Latest-1.9.3.10.xml
deleted file mode 100644
index c66e3c0..0000000
--- a/var/package/Mage_All_Latest-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Mage_All_Latest</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Metapackage for latest Magento 1.9.0.0 release</summary>
-    <description>Metapackage for latest Magento 1.9.0.0 release</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:22</time>
-    <contents><target name="mage"><dir name="pkginfo"><file name="Mage_All_Latest.txt" hash=""/></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Mage_Core_Adminhtml</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Interface_Adminhtml_Default</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Interface_Frontend_Default</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Interface_Install_Default</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Mage_Downloader</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Mage_Centinel</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Interface_Frontend_Base_Default</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Phoenix_Moneybookers</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Mage_Compiler</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Magento_Mobile</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_Cm</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Cm_RedisSession</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Interface_Frontend_Rwd_Default</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Mage_All_Latest-1.9.4.0.xml b/var/package/Mage_All_Latest-1.9.4.0.xml
new file mode 100644
index 0000000..c040320
--- /dev/null
+++ b/var/package/Mage_All_Latest-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Mage_All_Latest</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Metapackage for latest Magento 1.9.0.0 release</summary>
+    <description>Metapackage for latest Magento 1.9.0.0 release</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:07</time>
+    <contents><target name="mage"><dir name="pkginfo"><file name="Mage_All_Latest.txt" hash=""/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Mage_Core_Adminhtml</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Interface_Adminhtml_Default</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Interface_Frontend_Default</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Interface_Install_Default</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Mage_Downloader</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Mage_Centinel</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Interface_Frontend_Base_Default</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Phoenix_Moneybookers</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Mage_Compiler</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Magento_Mobile</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Cm</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Cm_RedisSession</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Interface_Frontend_Rwd_Default</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Mage_Centinel-1.9.3.10.xml b/var/package/Mage_Centinel-1.9.3.10.xml
deleted file mode 100644
index f09252d..0000000
--- a/var/package/Mage_Centinel-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Mage_Centinel</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license>mixed</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>3D Secure Card Validation</summary>
-    <description>An integration with Cardinalcommerce Centinel service. Provides option to validate Visa and Mastercard cards for eliminating possible fraudlent order placement attempts. Adds information about Electronic Commerce Identifier, that designates liability for chargeback.</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:22</time>
-    <contents><target name="magecore"><dir name="Mage"><dir name="Centinel"><dir name="Block"><dir name="Adminhtml"><dir name="Validation"><file name="Form.php" hash="580157479767118dee89edaed4a76113"/></dir><file name="Validation.php" hash="f2d0ef35b0d1e0c44d76242fa8759056"/></dir><dir name="Authentication"><file name="Complete.php" hash="dea665844740663a5b3b73d6d9488d18"/><file name="Start.php" hash="ba6b0d9be0b88a7d091ac5b728f582c9"/></dir><file name="Authentication.php" hash="ca8f75378fdfa3be9e0f17ecccb19155"/><file name="Logo.php" hash="dc4a3574a704c526087cac985c2a80e3"/></dir><dir name="Helper"><file name="Data.php" hash="24d32ec5d70b80c141c1271847f0a13f"/></dir><dir name="Model"><dir name="Api"><file name="Client.php" hash="85ed4326d7f65d3ab01b3f9fe96e1a7f"/></dir><file name="Api.php" hash="710f50c969fb12c68886fe3b7ac8fb62"/><file name="Config.php" hash="007459edff2f1643b066cb5250643d69"/><file name="Observer.php" hash="711718e38cee3100a3a1ccc80fd65a51"/><file name="Service.php" hash="fd85486672f08eb04b3b26553c453e69"/><file name="Session.php" hash="6e15f94b628e241976a28cea8f9a7248"/><dir name="State"><file name="Jcb.php" hash="77fafb70b39703157708caff6b29e805"/><file name="Mastercard.php" hash="6f024a9bad1bed64c95e103debedadb6"/><file name="Visa.php" hash="18798952155a487795444f03b656b00b"/></dir><file name="StateAbstract.php" hash="3986af10adf4cb6cb88ed5a5bfa19037"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Centinel"><file name="IndexController.php" hash="f9ced0c082cdd3b850f7d68f1b9344d2"/></dir></dir><file name="IndexController.php" hash="3285b063676d3ccce91a5ca18ff1f8a0"/></dir><dir name="etc"><file name="config.xml" hash="98edbbf17c1f45426aa398bc353023ed"/><file name="system.xml" hash="8b43b85598f61adf4a733c64571a1bb7"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Mage_Centinel.xml" hash="dff618646b6bc218832ef3e74fbfabb9"/></dir></target><target name="mageweb"><dir name="js"><dir name="mage"><dir name="adminhtml"><dir name="sales"><file name="centinel.js" hash="97e8ee7196b3190d7b89fa9a1862ccba"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="centinel"><dir name="authentication"><file name="complete.phtml" hash="eda63e314921612475ff67612ff8e964"/><file name="start.phtml" hash="a61848102f51ccb5658d56c41ef8a1f8"/></dir><dir name="validation"><file name="form.phtml" hash="db8c9333d07c1ce4d70f58e6b19ec922"/></dir></dir></dir><dir name="layout"><file name="centinel.xml" hash="a489258d441c8576868bedf0847cd1e7"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="centinel"><dir name="authentication"><file name="complete.phtml" hash="fc86cabbbea065226fa0d10e96cee144"/><file name="start.phtml" hash="1feeae7ab6443bcb40989c8385dd864e"/></dir><file name="authentication.phtml" hash="ab19ae6f5fd16fa4c8a6def308a04a13"/><file name="logo.phtml" hash="ca126d969c7820f43e78716686261222"/></dir></dir><dir name="layout"><file name="centinel.xml" hash="8db835f09e4060d10e3fcc5f2381fe4c"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Mage_Centinel.csv" hash="20f331c149ccf32faabdd406626805e0"/></dir></target><target name="magelib"><dir name="3Dsecure"><file name="CentinelClient.php" hash="e8459bd7d542e38058529e9bbb27ca25"/><file name="CentinelErrors.php" hash="e99aa9e865cc56beb2cf99d616ff0ceb"/><file name="XMLParser.php" hash="d089f3a81ac81378c889eee73a52f413"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="centinel"><file name="sc_learn_62x34.png" hash="7d6ec4b19f8eeb6baa2cddd5d4274f87"/><file name="v_activate_steps.gif" hash="005312b14c6aed41e8a47c4acaac7c1a"/><file name="vbv_ltbg_71x57.png" hash="324e5de7f6c75dc3cecb61646113ac41"/></dir></dir></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Mage_Centinel-1.9.4.0.xml b/var/package/Mage_Centinel-1.9.4.0.xml
new file mode 100644
index 0000000..a111f08
--- /dev/null
+++ b/var/package/Mage_Centinel-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Mage_Centinel</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license>mixed</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>3D Secure Card Validation</summary>
+    <description>An integration with Cardinalcommerce Centinel service. Provides option to validate Visa and Mastercard cards for eliminating possible fraudlent order placement attempts. Adds information about Electronic Commerce Identifier, that designates liability for chargeback.</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:07</time>
+    <contents><target name="magecore"><dir name="Mage"><dir name="Centinel"><dir name="Block"><dir name="Adminhtml"><dir name="Validation"><file name="Form.php" hash="580157479767118dee89edaed4a76113"/></dir><file name="Validation.php" hash="f2d0ef35b0d1e0c44d76242fa8759056"/></dir><dir name="Authentication"><file name="Complete.php" hash="dea665844740663a5b3b73d6d9488d18"/><file name="Start.php" hash="ba6b0d9be0b88a7d091ac5b728f582c9"/></dir><file name="Authentication.php" hash="ca8f75378fdfa3be9e0f17ecccb19155"/><file name="Logo.php" hash="dc4a3574a704c526087cac985c2a80e3"/></dir><dir name="Helper"><file name="Data.php" hash="24d32ec5d70b80c141c1271847f0a13f"/></dir><dir name="Model"><dir name="Api"><file name="Client.php" hash="85ed4326d7f65d3ab01b3f9fe96e1a7f"/></dir><file name="Api.php" hash="710f50c969fb12c68886fe3b7ac8fb62"/><file name="Config.php" hash="007459edff2f1643b066cb5250643d69"/><file name="Observer.php" hash="711718e38cee3100a3a1ccc80fd65a51"/><file name="Service.php" hash="fd85486672f08eb04b3b26553c453e69"/><file name="Session.php" hash="6e15f94b628e241976a28cea8f9a7248"/><dir name="State"><file name="Jcb.php" hash="77fafb70b39703157708caff6b29e805"/><file name="Mastercard.php" hash="6f024a9bad1bed64c95e103debedadb6"/><file name="Visa.php" hash="18798952155a487795444f03b656b00b"/></dir><file name="StateAbstract.php" hash="3986af10adf4cb6cb88ed5a5bfa19037"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Centinel"><file name="IndexController.php" hash="f9ced0c082cdd3b850f7d68f1b9344d2"/></dir></dir><file name="IndexController.php" hash="3285b063676d3ccce91a5ca18ff1f8a0"/></dir><dir name="etc"><file name="config.xml" hash="98edbbf17c1f45426aa398bc353023ed"/><file name="system.xml" hash="8b43b85598f61adf4a733c64571a1bb7"/></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Mage_Centinel.xml" hash="dff618646b6bc218832ef3e74fbfabb9"/></dir></target><target name="mageweb"><dir name="js"><dir name="mage"><dir name="adminhtml"><dir name="sales"><file name="centinel.js" hash="97e8ee7196b3190d7b89fa9a1862ccba"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="centinel"><dir name="authentication"><file name="complete.phtml" hash="eda63e314921612475ff67612ff8e964"/><file name="start.phtml" hash="a61848102f51ccb5658d56c41ef8a1f8"/></dir><dir name="validation"><file name="form.phtml" hash="db8c9333d07c1ce4d70f58e6b19ec922"/></dir></dir></dir><dir name="layout"><file name="centinel.xml" hash="a489258d441c8576868bedf0847cd1e7"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="centinel"><dir name="authentication"><file name="complete.phtml" hash="fc86cabbbea065226fa0d10e96cee144"/><file name="start.phtml" hash="1feeae7ab6443bcb40989c8385dd864e"/></dir><file name="authentication.phtml" hash="ab19ae6f5fd16fa4c8a6def308a04a13"/><file name="logo.phtml" hash="ca126d969c7820f43e78716686261222"/></dir></dir><dir name="layout"><file name="centinel.xml" hash="8db835f09e4060d10e3fcc5f2381fe4c"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Mage_Centinel.csv" hash="20f331c149ccf32faabdd406626805e0"/></dir></target><target name="magelib"><dir name="3Dsecure"><file name="CentinelClient.php" hash="e8459bd7d542e38058529e9bbb27ca25"/><file name="CentinelErrors.php" hash="e99aa9e865cc56beb2cf99d616ff0ceb"/><file name="XMLParser.php" hash="d089f3a81ac81378c889eee73a52f413"/></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="centinel"><file name="sc_learn_62x34.png" hash="7d6ec4b19f8eeb6baa2cddd5d4274f87"/><file name="v_activate_steps.gif" hash="005312b14c6aed41e8a47c4acaac7c1a"/><file name="vbv_ltbg_71x57.png" hash="324e5de7f6c75dc3cecb61646113ac41"/></dir></dir></dir></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Mage_Compiler-1.9.3.10.xml b/var/package/Mage_Compiler-1.9.3.10.xml
deleted file mode 100644
index 1b66eaf..0000000
--- a/var/package/Mage_Compiler-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Mage_Compiler</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>This module compiles all files of a Magento installation and creates a single include path to increase performance</summary>
-    <description>This module compiles all files of a Magento installation and creates a single include path to increase performance</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:22</time>
-    <contents><target name="magecore"><dir name="Mage"><dir name="Compiler"><dir name="Block"><file name="Process.php" hash="41e18d0f4970541a185bf4460c23df3b"/></dir><dir name="Helper"><file name="Data.php" hash="0f022c4fa92031db88c3bb3d53577c6c"/></dir><dir name="Model"><file name="Process.php" hash="6c145b0f377f3226e48ae10f989632cc"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Compiler"><file name="ProcessController.php" hash="3f37cdb7bf83444821dec1117e673df2"/></dir></dir><file name="ProcessController.php" hash="375cee8ba1d2069e27d4604794856aa6"/></dir><dir name="etc"><file name="adminhtml.xml" hash="0e29017120ec1f3884bd59e8dfb06f12"/><file name="compilation.xml" hash="7f3dca4c1193a7635b9bd57e597a7ffd"/><file name="config.xml" hash="a766a350cabbeda305fcbfd58738e041"/></dir></dir></dir></target><target name="mage"><dir name="includes"><file name="config.php" hash="9ef6137dbf060ea48b1a976a08518976"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir></target><target name="mageetc"><dir name="modules"><file name="Mage_Compiler.xml" hash="2e87b9c6f4d39f0b8ecf21f3680d2df9"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="compiler.xml" hash="13c580b1937e895f1d6d905aba5a9a9c"/></dir><dir name="template"><dir name="compiler"><file name="process.phtml" hash="6e27c0103b9bf9bf1a2a4592160a9f8b"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Mage_Compiler.csv" hash="caa1d67e6c508421a8c8c234ae204c5d"/></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Mage_Core_Adminhtml</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Mage_Compiler-1.9.4.0.xml b/var/package/Mage_Compiler-1.9.4.0.xml
new file mode 100644
index 0000000..a9fb317
--- /dev/null
+++ b/var/package/Mage_Compiler-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Mage_Compiler</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>This module compiles all files of a Magento installation and creates a single include path to increase performance</summary>
+    <description>This module compiles all files of a Magento installation and creates a single include path to increase performance</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:07</time>
+    <contents><target name="magecore"><dir name="Mage"><dir name="Compiler"><dir name="Block"><file name="Process.php" hash="41e18d0f4970541a185bf4460c23df3b"/></dir><dir name="Helper"><file name="Data.php" hash="0f022c4fa92031db88c3bb3d53577c6c"/></dir><dir name="Model"><file name="Process.php" hash="6c145b0f377f3226e48ae10f989632cc"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Compiler"><file name="ProcessController.php" hash="3f37cdb7bf83444821dec1117e673df2"/></dir></dir><file name="ProcessController.php" hash="375cee8ba1d2069e27d4604794856aa6"/></dir><dir name="etc"><file name="adminhtml.xml" hash="0e29017120ec1f3884bd59e8dfb06f12"/><file name="compilation.xml" hash="7f3dca4c1193a7635b9bd57e597a7ffd"/><file name="config.xml" hash="a766a350cabbeda305fcbfd58738e041"/></dir></dir></dir></target><target name="mage"><dir name="includes"><file name="config.php" hash="9ef6137dbf060ea48b1a976a08518976"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir></target><target name="mageetc"><dir name="modules"><file name="Mage_Compiler.xml" hash="2e87b9c6f4d39f0b8ecf21f3680d2df9"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="compiler.xml" hash="13c580b1937e895f1d6d905aba5a9a9c"/></dir><dir name="template"><dir name="compiler"><file name="process.phtml" hash="6e27c0103b9bf9bf1a2a4592160a9f8b"/></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Mage_Compiler.csv" hash="caa1d67e6c508421a8c8c234ae204c5d"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Mage_Core_Adminhtml</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Mage_Core_Adminhtml-1.9.3.10.xml b/var/package/Mage_Core_Adminhtml-1.9.3.10.xml
deleted file mode 100644
index 303808f..0000000
--- a/var/package/Mage_Core_Adminhtml-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Mage_Core_Adminhtml</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Magento Administration Panel</summary>
-    <description>Magento Administration Panel</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:22</time>
-    <contents><target name="magecore"><dir name="Mage"><dir name="Adminhtml"><dir name="Block"><file name="Abstract.php" hash="8806fa4ecf7bf067bbf1fcd7f1823c2d"/><dir name="Api"><file name="Buttons.php" hash="314177e483ba9bfcda54a53204655552"/><file name="Editroles.php" hash="a67fc165250ada3054e77c7b2b744d5a"/><file name="Edituser.php" hash="a2ffedd09bf0cf135b22c6923ce3191e"/><dir name="Grid"><file name="Role.php" hash="74a101ea38940feb0305b7634727e0ad"/></dir><dir name="Role"><dir name="Grid"><file name="User.php" hash="6524240d05cad8f8596e469da9f5c46f"/></dir></dir><file name="Role.php" hash="a664b5c117989ac16ce1764d90cda9f8"/><file name="Roles.php" hash="f3460089fc5aa7ffa7397c5b29fbe6da"/><dir name="Tab"><file name="Roleinfo.php" hash="e56f4c8e096e824470ccccee9cf51c43"/><file name="Rolesedit.php" hash="55c4f22af226e719d8d2b5eac16f80a2"/><file name="Rolesusers.php" hash="8822621843ff9f3418e8e4caaa03a295"/><file name="Userroles.php" hash="ea1f5256d1a622c51633e72f96b11926"/></dir><dir name="User"><dir name="Edit"><file name="Form.php" hash="b7f5c52dcc1ce3282dadc3eb0634097f"/><dir name="Tab"><file name="Main.php" hash="14e9bc7497923208e006460246adf99e"/><file name="Roles.php" hash="104d49f856280f8fed5a0f578eb3ece1"/></dir><file name="Tabs.php" hash="0604ea459c83ebf74c1e6a9c07a8ac1f"/></dir><file name="Edit.php" hash="bb6065d8bcb146ba1a5b592a9bbbaf65"/><file name="Grid.php" hash="eadf6097acdca68b33d657fd2da5c0a2"/></dir><file name="User.php" hash="27b8a4e95ce9787cd7186978f86d4bdb"/><file name="Users.php" hash="1037a64678b2b8cd122928935c2da5ab"/></dir><dir name="Backup"><file name="Dialogs.php" hash="036a1bd12bd784b6f93899c39d06b072"/><file name="Grid.php" hash="4751549b8d085c91b4f8d423cd116290"/></dir><file name="Backup.php" hash="d1e3ad3ed2cf8075616c88a7297b7d1d"/><dir name="Cache"><file name="Additional.php" hash="5ec255f6146e03b9024c3c99ea34f90a"/><file name="Grid.php" hash="a0184efcd8d09b943cc18936ca232133"/><file name="Notifications.php" hash="4bff39aeefd4f298502f9e3c13fc7b4a"/></dir><file name="Cache.php" hash="3d1fb11560c2c74aff649fa784599d90"/><dir name="Catalog"><dir name="Category"><file name="Abstract.php" hash="c952be2913085f69488927b8bb6f2f66"/><dir name="Checkboxes"><file name="Tree.php" hash="42830b006c7739c14deb63a25507c58c"/></dir><dir name="Edit"><file name="Form.php" hash="fdef9a0013f663496d88219074ebb010"/></dir><file name="Edit.php" hash="74c11841cdbb8078921abbc770e66c4f"/><dir name="Helper"><file name="Image.php" hash="6ee023da9f4558dccec489aa6909592e"/><file name="Pricestep.php" hash="e5410530e4d352ebf811800319178f1e"/><dir name="Sortby"><file name="Available.php" hash="a1d1966c139c466daad8841e388d900e"/><file name="Default.php" hash="12a0a94ca2aa87fdbe555007d7ff1b37"/></dir></dir><dir name="Tab"><file name="Attributes.php" hash="27dc928629025a551037c718a49cdd0d"/><file name="Design.php" hash="37da8d7465aee6246ead6a5f115f8848"/><file name="General.php" hash="484c9431aae47436419f49cfeb0d1e44"/><file name="Product.php" hash="32f1ff555c8f7111312b49c7b1c4844d"/></dir><file name="Tabs.php" hash="83c70ffb9629c8b58d703880b998f631"/><file name="Tree.php" hash="1d0b70578389e31df91ef29656ebc5f7"/><dir name="Widget"><file name="Chooser.php" hash="af29b5edf4ffd47a08e4f04930de2322"/></dir></dir><dir name="Form"><dir name="Renderer"><dir name="Attribute"><file name="Urlkey.php" hash="ff69c8e2daa9e63d3053f8de8e433717"/></dir><dir name="Config"><file name="DateFieldsOrder.php" hash="f4aa2523db0ec199b675826a276d4eef"/><file name="YearRange.php" hash="19eb0dc5aac7008aa158c20593fe1f73"/></dir><dir name="Fieldset"><file name="Element.php" hash="fe445f4119b469427d0ddb82ef6d0a5d"/></dir></dir></dir><file name="Form.php" hash="cc0529c03910aae1a4f8864b208835aa"/><dir name="Helper"><dir name="Form"><dir name="Wysiwyg"><file name="Content.php" hash="ed2b992dbb3e35d2b53908f3ae61f3fe"/></dir><file name="Wysiwyg.php" hash="78e8a96aa71401732436742d422ba41b"/></dir></dir><dir name="Product"><dir name="Attribute"><dir name="Edit"><file name="Form.php" hash="5ab50a6f32d205a2fd6b01853c526d1f"/><dir name="Tab"><file name="Front.php" hash="3de471c33114ff3c4356776558a27093"/><file name="Main.php" hash="1fe7c96d75aad50a7562dce2d38812b8"/><file name="Options.php" hash="1366c27c928649de43e5f60819a12f59"/><file name="System.php" hash="c4be263ded4c331c25dcb06bc8241121"/></dir><file name="Tabs.php" hash="32594f40561239d5739a05d6333d35d7"/></dir><file name="Edit.php" hash="8998b1ff611debb250c07675ebb25e1c"/><file name="Grid.php" hash="824acc4402594b5d668b0a2cc7693059"/><dir name="New"><dir name="Product"><file name="Attributes.php" hash="0d8df5753ec6395f6e040489fc924c53"/><file name="Created.php" hash="272b92f03dcb132bd93cbce18c4717e4"/></dir></dir><dir name="Set"><file name="Grid.php" hash="8235e7536fb95f457c7804bdb359e67e"/><dir name="Main"><file name="Formattribute.php" hash="72788cb0c35e83b16cd297c72816e271"/><file name="Formgroup.php" hash="1357da9d086b7cbea716beaeb4dae246"/><file name="Formset.php" hash="811159896ff795a3f0158e227534fecf"/><dir name="Tree"><file name="Attribute.php" hash="a0c77fed4a8649aa5fe6cfffc186edd2"/><file name="Group.php" hash="f94a1f39ee14d5abb5d8f44e2d97b700"/></dir></dir><file name="Main.php" hash="87425ca70751a94f82cbb131c043c10f"/><dir name="Toolbar"><file name="Add.php" hash="b6948be8c4e92b8ea10edce28dcef91c"/><dir name="Main"><file name="Filter.php" hash="764f4f5e7ed0c87e42f5d9f295ead025"/></dir><file name="Main.php" hash="8ac0042772c63c554242405a190924be"/></dir></dir></dir><file name="Attribute.php" hash="97a860d3c3875affd812362b8a1138dd"/><dir name="Composite"><file name="Configure.php" hash="536bb87840aceb2ad9b8351b8463f4cc"/><file name="Error.php" hash="6c3e478bbac4b301f5a0cf4073432c54"/><dir name="Fieldset"><file name="Configurable.php" hash="53c7bf96d856185b689a2f79514d33ae"/><file name="Grouped.php" hash="b53f2fe7e8686e8f5dfa9864bebf07ee"/><file name="Options.php" hash="2590d50c524e414fb9faaa2fb2dde011"/><file name="Qty.php" hash="2a00e29ed9077301533908d36ecfc770"/></dir><file name="Fieldset.php" hash="c10b07158433cf6139e498f6d220285c"/><dir name="Update"><file name="Result.php" hash="82ad1be2457016dc38a011c7e41e9b25"/></dir></dir><file name="Created.php" hash="5b1e14203080ccec46695956256e9e0c"/><dir name="Edit"><dir name="Action"><dir name="Attribute"><dir name="Tab"><file name="Attributes.php" hash="e7ec07231959a9f8b1021197e3b2b357"/><file name="Inventory.php" hash="7ef543269aa2349ce84f4e972405052d"/><file name="Websites.php" hash="4884477aeb158616d346b06f8cff3c6e"/></dir><file name="Tabs.php" hash="36ec4c5454d6a364028a1317f7de5f0d"/></dir><file name="Attribute.php" hash="b8e61c893d43d8ff7f44e01569292a37"/></dir><file name="Js.php" hash="62c4ec3a54f2e93abf767f332b2a3962"/><dir name="Tab"><dir name="Ajax"><file name="Serializer.php" hash="3b47cf7e093745798e144250c5162ae1"/></dir><dir name="Alerts"><file name="Price.php" hash="089e6bc761ed49c8ad2ec7ba26c7fb73"/><file name="Stock.php" hash="e06ce13d6445624469e8fd2206a29647"/></dir><file name="Alerts.php" hash="b61ffb81888eaa0316a81a604379e208"/><dir name="Attributes"><file name="Create.php" hash="3f7f954930e3e7b749ed292f309caa1c"/></dir><file name="Attributes.php" hash="d1bcd002acea03dca275a06f4cac16e4"/><file name="Categories.php" hash="40a692fe90176aabc59046e97654e401"/><file name="Crosssell.php" hash="664656ac9e319f86bfee33c97545a0f1"/><file name="Inventory.php" hash="64e56bcd189081003f4c395be263f6e2"/><dir name="Options"><file name="Option.php" hash="4582b6c3b2400202ed73a0930a40f8f2"/><dir name="Type"><file name="Abstract.php" hash="818f94de76f82a67d2471051d7442424"/><file name="Date.php" hash="39885b96f8723368ef77181a7b3fbf1c"/><file name="File.php" hash="0ab404bab696d9be91928566adabf3a6"/><file name="Select.php" hash="6a4d6248e19a61d9f5c7cac597dc719c"/><file name="Text.php" hash="096cc18189256a1e9f4a4e53806c4ea7"/></dir></dir><file name="Options.php" hash="9a7d5cb98581857bbe1d1e8ddb74ee7b"/><dir name="Price"><dir name="Group"><file name="Abstract.php" hash="e2ef8472cf860ec16800b34046922aa8"/></dir><file name="Group.php" hash="d16078959e29b11e60b1e76a82b506f9"/><file name="Recurring.php" hash="3d50b901f1d4f965dbc6cdb5eca5ff0a"/><file name="Tier.php" hash="aa66089b33d43ac4d7ad754e0ebd4b5f"/></dir><file name="Price.php" hash="17275003ff0c19185b1f722306b37031"/><file name="Related.php" hash="e72c8c2a39a4d3ae1c2968589fcbb1ff"/><file name="Reviews.php" hash="064f4b3853d3dad28f61b41082b027a9"/><file name="Settings.php" hash="e0950496755a9f8c0b9a55c9b54771ec"/><dir name="Super"><dir name="Config"><dir name="Grid"><dir name="Filter"><file name="Inventory.php" hash="10cbc7c845b97d17d9bd90e01a379ea6"/></dir><dir name="Renderer"><file name="Checkbox.php" hash="ae009d6f1acb453fcee25b40ad240506"/><file name="Inventory.php" hash="99daa1ecdc5ecc2747c0bbb8c7112fb5"/></dir></dir><file name="Grid.php" hash="c98440cb58cc470c261f108841134c9b"/><file name="Simple.php" hash="1ff50725fd2958d6e20eb5713e6e854a"/></dir><file name="Config.php" hash="2e9e39a0472dca2b3f59966d11021f86"/><file name="Group.php" hash="1cd62c22d540ee8e40e0119a7a5cb059"/><file name="Settings.php" hash="7b20ee5f3b058b9736e35d723b348029"/></dir><dir name="Tag"><file name="Customer.php" hash="1199cdb139ad8201214fe7a0419c685c"/></dir><file name="Tag.php" hash="352bb1e1d536cab57b4280de2ce456b8"/><file name="Upsell.php" hash="2e9663a201e50de3bfe3cc292d9e9189"/><file name="Websites.php" hash="9e9cfc3b81e640725be5b6e02c9d3cfd"/></dir><dir name="Tabs"><file name="Configurable.php" hash="6085e32381fb2612ddea1a54a89e1caf"/><file name="Grouped.php" hash="87da69d6b67def224e86326b19cd6ac5"/></dir><file name="Tabs.php" hash="3fdbe6b1b94dfb0ccbc56d7ffa7f4326"/></dir><file name="Edit.php" hash="b501e75c51e8204b9baa954d61848569"/><dir name="Frontend"><dir name="Product"><file name="Watermark.php" hash="c81c187cb29b659a6aef01f1ab535713"/></dir></dir><file name="Grid.php" hash="0f561a7c6f0a9aba3994922216f8ad24"/><dir name="Helper"><dir name="Form"><file name="Apply.php" hash="0f1363899f7655b233e826a7215d5f4f"/><file name="Boolean.php" hash="93bf215159eb1308e315ad8141b50053"/><file name="Config.php" hash="b43b82224566766034373156e313de21"/><dir name="Gallery"><file name="Content.php" hash="fb36c29a35890b693cdd7ffb36b1dbd7"/></dir><file name="Gallery.php" hash="3bb08d8826aa08bbaf6f0e5d689a41ab"/><file name="Image.php" hash="5c0a06796c738b29738b8f45d1afd5e6"/><dir name="Msrp"><file name="Enabled.php" hash="8248490c5c3151787744e04462032b82"/><file name="Price.php" hash="38d46e644e7f0db3e5b893f27f49f525"/></dir><file name="Price.php" hash="f278a7db25a13a027ea25e78d746f322"/><file name="Weight.php" hash="4f0b58df8846b52df64109ca55b08faf"/></dir></dir><file name="Price.php" hash="740839608dd1244d32ef2ca26810898e"/><dir name="Widget"><dir name="Chooser"><file name="Container.php" hash="d4c30a3faa5c3f73707d30c0b7d687cf"/></dir><file name="Chooser.php" hash="fdbb886262f31e134031d77a8311b886"/></dir></dir><file name="Product.php" hash="7c844629bb172d2a510d8549d5fcfb38"/><dir name="Search"><dir name="Edit"><file name="Form.php" hash="19ff5e62cde4d4f75585a6bd3f980660"/></dir><file name="Edit.php" hash="75ca1935d14c89d7b077924a543c0f15"/><file name="Grid.php" hash="95e20704a061de4ec65c3b4c048202f8"/></dir><file name="Search.php" hash="d95b820a68dee749892a655714b75a16"/></dir><file name="Catalog.php" hash="ce5a2cf9a034e0a8926b84811c9ce707"/><dir name="Checkout"><dir name="Agreement"><dir name="Edit"><file name="Form.php" hash="2870329f50e032ca3be556c587835dc3"/></dir><file name="Edit.php" hash="7aa00b6829c6aaa42517159e03ba8050"/><file name="Grid.php" hash="a344b7faf6cb198868305a6d0be42430"/></dir><file name="Agreement.php" hash="127799b649c14d8040be957b67711f19"/><file name="Formkey.php" hash="ccf7cfaeeea137f9ff13aab29179b0b0"/></dir><dir name="Cms"><dir name="Block"><dir name="Edit"><file name="Form.php" hash="ea5ca609d2e3df4e021f2cebb6b211ff"/></dir><file name="Edit.php" hash="4fbb998ae410ef1e4ee6d8090b61670a"/><file name="Grid.php" hash="c35edb4840d079cf660b8e2eab483044"/><dir name="Widget"><file name="Chooser.php" hash="8dc62a9dc661de869f69894f0d9807b1"/></dir></dir><file name="Block.php" hash="57712596a93b882e7cd7386bdc00f914"/><dir name="Page"><dir name="Edit"><file name="Form.php" hash="ed73c4aeaed92f0b8b804eafb9096763"/><dir name="Tab"><file name="Content.php" hash="8b0ff0d6694ecf4cb77aa407ebef3082"/><file name="Design.php" hash="2a6a997c15727a589982e858073ca71a"/><file name="Main.php" hash="13cd7cc038de4f5f7c160b6a12304512"/><file name="Meta.php" hash="3396c6a4d9bf9df78a4efe26a5f2057e"/></dir><file name="Tabs.php" hash="d7c653bc13f03ce9f38fb89d1c60097c"/></dir><file name="Edit.php" hash="413581f1521e0a3225bc30a1d5c9428b"/><dir name="Grid"><dir name="Renderer"><file name="Action.php" hash="82ee47503382870703952244e2293517"/></dir></dir><file name="Grid.php" hash="849ecd981f80b2b05a6fbcb402f93d14"/><dir name="Widget"><file name="Chooser.php" hash="e884ff798c9eef8364721ca9af87882f"/></dir></dir><file name="Page.php" hash="49cb99b5286dcd397e0af9e0b23250da"/><dir name="Wysiwyg"><dir name="Images"><dir name="Content"><file name="Files.php" hash="1163853c0068a0f6d227802fbe8dea70"/><file name="Newfolder.php" hash="e214bdce0908f034aebcb500080eaac8"/><file name="Uploader.php" hash="eb46366072c73eb7157bd539e3800405"/></dir><file name="Content.php" hash="c875dbec8d6ef0382538920d88b150a7"/><file name="Tree.php" hash="aa39816c696aaf7b681fd15034c0a731"/></dir></dir></dir><dir name="Customer"><dir name="Edit"><file name="Form.php" hash="0c289b4fd0a89bfec5a71772d3e6a453"/><dir name="Renderer"><file name="Adminpass.php" hash="32bf316dc52322a59510a83638bfb30c"/><dir name="Attribute"><file name="Group.php" hash="ea7c4d23b59371529440d060728c27d9"/></dir><file name="Newpass.php" hash="552b26b7d447881d577ceebdb594e015"/><file name="Region.php" hash="b3a5cf903c23e96d5387da1052943829"/></dir><dir name="Tab"><file name="Account.php" hash="cb80de35f033c6018df0aa07c5d58bfb"/><file name="Addresses.php" hash="c5ce493dd7d0f3ca64dedf6b46db1d6c"/><file name="Cart.php" hash="dbcd7a63f8a9d777014b7da117337709"/><file name="Carts.php" hash="760e68993751df9c568333bd13c40036"/><dir name="Newsletter"><dir name="Grid"><dir name="Filter"><file name="Status.php" hash="e32c86d186a0f9acd70344b4e1566c7b"/></dir><dir name="Renderer"><file name="Action.php" hash="0e431d80248283b2ae52707cbd397705"/><file name="Status.php" hash="1fe3941bc5f6f0736173e13bd059f1db"/></dir></dir><file name="Grid.php" hash="ec780b4c8ceaaa1f02ce48fbda58faeb"/></dir><file name="Newsletter.php" hash="202d74115632b72daa8f42d97a57b7a4"/><file name="Orders.php" hash="b651ce4f5c30c443b6a70b8e7b371d93"/><file name="Reviews.php" hash="0b6bbe5289881c0f5bd039ccef57dc9a"/><file name="Tag.php" hash="0764367a0636cb632b4103b95f487112"/><file name="Tags.php" hash="52c4a09334625c29534428b5af5c8d38"/><dir name="View"><file name="Accordion.php" hash="f81336d13723d8f527ec48c1ebdeb31a"/><file name="Cart.php" hash="f00d19890687bc12e83c27bbf2bdc329"/><dir name="Grid"><dir name="Renderer"><file name="Item.php" hash="19f6cf2f2d8e23b173e33b2b9d604258"/></dir></dir><file name="Orders.php" hash="23bb04733b29a2357b44e036653ee854"/><file name="Sales.php" hash="e11c52a84f4621d8e24a55596f03a05a"/><file name="Wishlist.php" hash="01601f4e626a08ab539a417396e3e616"/></dir><file name="View.php" hash="2a31077590dc4943008ba9d9ccbdf1b3"/><dir name="Wishlist"><dir name="Grid"><dir name="Renderer"><file name="Description.php" hash="e9ac1bf2699e79903cb6c811663dce32"/></dir></dir></dir><file name="Wishlist.php" hash="9a52b70a7788a3c425fb136978fc46c4"/></dir><file name="Tabs.php" hash="5fe3722dcb5d09048cc876d2c2a14d63"/></dir><file name="Edit.php" hash="42a26f8ed4e680031c6674d8731cb235"/><dir name="Form"><dir name="Element"><file name="Boolean.php" hash="4cbaac7ec7349ae54619ca89e459024e"/><file name="File.php" hash="7432ad033bd39dcec8b4584ddfb2aaab"/><file name="Image.php" hash="0e79379e17e64098679c4455f58deee3"/></dir></dir><dir name="Grid"><dir name="Filter"><file name="Country.php" hash="5f517b81692e7718e05fbc99ed7f84a6"/></dir><dir name="Renderer"><file name="Multiaction.php" hash="af4c89a70fbe4d26dc8db4279f97dbf0"/></dir></dir><file name="Grid.php" hash="06ba05f38c0b4a8883ead63482cb4ecf"/><dir name="Group"><dir name="Edit"><file name="Form.php" hash="0cadbc7ebb1df472f28c54dbb44fe5e6"/></dir><file name="Edit.php" hash="2ba18d42fe16ffacd748ed7534f7d343"/><file name="Grid.php" hash="5bb20efe160ad515ed3ae642ec6a397a"/></dir><file name="Group.php" hash="6ca9df8630e23750c0340f6c3639936b"/><dir name="Online"><file name="Filter.php" hash="25def0b452913c29fdada85b28cedcca"/><dir name="Grid"><dir name="Renderer"><file name="Ip.php" hash="b994acd83317e6d3a39950b7893f0a67"/><file name="Type.php" hash="16aa8fbdc1cdeb0bb3cc2bed78a0b878"/><file name="Url.php" hash="6d9181705db8e74742bb7e9490de76d1"/></dir></dir><file name="Grid.php" hash="3132fde935fcf5f91033d985c3c7dcd9"/></dir><file name="Online.php" hash="89bdbc6f33a15036792e717dfda4a4a0"/><dir name="Sales"><dir name="Order"><dir name="Address"><dir name="Form"><dir name="Renderer"><file name="Vat.php" hash="62836393b817252569217cec61e3584e"/></dir></dir></dir></dir></dir><dir name="System"><dir name="Config"><file name="Validatevat.php" hash="f905c4557329ce6802c8a8abc2d9fff3"/></dir></dir></dir><file name="Customer.php" hash="425fe36c6debba08b77538f26a5c1adf"/><dir name="Dashboard"><file name="Abstract.php" hash="d55265571d05fe5c6ec98d585838bd2e"/><file name="Bar.php" hash="7f89a11678c6787547cffe13fe7e4ae7"/><file name="Diagrams.php" hash="9c207f0bc1d304d761a80df2e88c4093"/><file name="Graph.php" hash="6deb593ae9e725e80d60e7f6b6bc4671"/><file name="Grid.php" hash="1fb286a315624cd1f055bbc03724a820"/><file name="Grids.php" hash="60f08bc998bab01615e814a1c960b6eb"/><dir name="Orders"><file name="Grid.php" hash="b475871f31c7cf78de7e57236f203f94"/></dir><file name="Sales.php" hash="24f1f6bdaeb1729d52faf720b72ae122"/><dir name="Searches"><file name="Last.php" hash="c171fc44097e31c7bc6575b328e55552"/><dir name="Renderer"><file name="Searchquery.php" hash="d9a796c5175fff8e1dfddf94f6f7bffc"/></dir><file name="Top.php" hash="436c2ff96aa9d9c44e5f3a4242f0fa95"/></dir><dir name="Tab"><file name="Amounts.php" hash="f28f8d6d84eab07f116592e855818181"/><dir name="Customers"><file name="Most.php" hash="943e9f0f6a332e2004154d7fdc860a71"/><file name="Newest.php" hash="4d5b87b861a60722148b9157d085ce91"/></dir><file name="Orders.php" hash="b7d58a1db078a8ab9f88988ee82516d0"/><dir name="Products"><file name="Ordered.php" hash="9fbb836a88175a252e1eed16855d7aa7"/><file name="Viewed.php" hash="21892723be536c455108696c030708c7"/></dir></dir><file name="Totals.php" hash="b35bf6bc86642181329d7c6a4063b0d6"/></dir><file name="Dashboard.php" hash="4330555661b77277854314fd963bfc0d"/><file name="Denied.php" hash="f18754e566f29562164e9f4f2154fb7e"/><dir name="Html"><file name="Date.php" hash="b867dbb838bb7b751c9ab4fadd0691d5"/><file name="Select.php" hash="b90d108fbdc632fecec28f588d3c4957"/></dir><dir name="Media"><file name="Editor.php" hash="904734bc8d1f1d535b8446b1cb7bc96e"/><file name="Uploader.php" hash="75fb544b5db702c425830692e3111891"/></dir><file name="Messages.php" hash="63b9051e067080a4484d3254509e2d32"/><dir name="Newsletter"><dir name="Problem"><dir name="Grid"><dir name="Filter"><file name="Checkbox.php" hash="bfb315eba5ce6c24c43aa390f824a2c8"/></dir><dir name="Renderer"><file name="Checkbox.php" hash="b6e6018adfb853dd8f972922467d01de"/></dir></dir><file name="Grid.php" hash="77c982c969880ccc4ec3b3279f890eab"/></dir><file name="Problem.php" hash="d7a5e625ada05d38e9411a54957e0cec"/><dir name="Queue"><dir name="Edit"><file name="Form.php" hash="3a98c1bc08af3bcc66eabdeb1c9488b0"/></dir><file name="Edit.php" hash="eeadc81a388ca892c208e5543d2dc4b4"/><dir name="Grid"><dir name="Renderer"><file name="Action.php" hash="41b2bc208c4cf354065eb4ecc7e8c341"/></dir></dir><file name="Grid.php" hash="2dd9bdbee8a13adc9324de14902a9385"/><dir name="Preview"><file name="Form.php" hash="ec12b9117a9317db74cfc4a62b625ec3"/></dir><file name="Preview.php" hash="e33127ab0fc2ade9df1e5acfd251842c"/></dir><file name="Queue.php" hash="687a80234a6c6942500ce0e355b4bec7"/><dir name="Subscriber"><dir name="Grid"><dir name="Filter"><file name="Checkbox.php" hash="f2b020b52cb5f5d27cc1df8379837db5"/><file name="Website.php" hash="cb5e07f6f075ba08702d08c6c149d995"/></dir><dir name="Renderer"><file name="Checkbox.php" hash="85451acc8b0f56496a7259cd8dd76bc6"/></dir></dir><file name="Grid.php" hash="7260f65c291f4082d70978fdb45a3e12"/></dir><file name="Subscriber.php" hash="547980b120f86a0bdc71af6ea5e4b4df"/><dir name="Template"><dir name="Edit"><file name="Form.php" hash="f2b1549dd92e6883471640646cf3d5ee"/></dir><file name="Edit.php" hash="7f3cafdead3fbf1b353b9f75159a4c8e"/><dir name="Grid"><dir name="Renderer"><file name="Action.php" hash="2de17948babba3255185e824e0df2851"/><file name="Sender.php" hash="e0440c6f3f2af1c5b32ef17d41fc04ef"/></dir></dir><file name="Grid.php" hash="04c90d12653da962e4fac7b33f14594b"/><dir name="Preview"><file name="Form.php" hash="16aa35c3b2e48806625dcaba43c92bad"/></dir><file name="Preview.php" hash="09ed9ad8baa66d06a1fd6faa669717af"/></dir><file name="Template.php" hash="21d5eb58e09ac5096fd92600977fd431"/></dir><dir name="Notification"><file name="Baseurl.php" hash="dfdbc60d946f5666c3495190679cba42"/><file name="Curl.php" hash="2aeba6a2273f8f1e54d81c86ac535917"/><dir name="Grid"><dir name="Renderer"><file name="Actions.php" hash="99a94b2f0aae40f9c7ef88a665d45d67"/><file name="Notice.php" hash="fd90524ee4ae1d2bc16d31c71a532516"/><file name="Severity.php" hash="6745a90e7b990b7daa5618e00dc264c9"/></dir></dir><file name="Grid.php" hash="a18fbdf6a400a9fc1e3872cfea9518e1"/><file name="Inbox.php" hash="cf44b0a8760660ebd8a961a65773f14c"/><file name="Security.php" hash="af74cf2e1c7751d665a4375a0399a8f4"/><file name="Survey.php" hash="ec3650219b7d776c0e8026e3b7bd5ece"/><file name="Symlink.php" hash="6c427d602e5fca949d7813184a9b8b8a"/><file name="Toolbar.php" hash="08f588920aac56a603ea779b467489b2"/><file name="Window.php" hash="7bf40a4df88fc777eb2e2af91ef78043"/></dir><dir name="Page"><file name="Footer.php" hash="3246770f5c748b3a50476211edf75517"/><file name="Head.php" hash="874ebbe5de14ccdd458a6facbb4bd546"/><file name="Header.php" hash="c873bb0587722ff87379791184feac28"/><file name="Menu.php" hash="415744d581de429acd2fea5afe9ab0fa"/><file name="Notices.php" hash="316fd9052641e58b0d703ee36b4976a5"/></dir><file name="Page.php" hash="cb89a371f55974997804de0a61cd5c19"/><dir name="Permissions"><dir name="Block"><dir name="Edit"><file name="Form.php" hash="fb8bb9a6a88d6366eb7bc0647203963a"/></dir><file name="Edit.php" hash="b09be0bc7a515f481e47ba4f563018ab"/><file name="Grid.php" hash="870323bc27cb8b5ec696b2603092b079"/></dir><file name="Block.php" hash="12e30bdf3fef18eb300b4c7bc40764a4"/><file name="Buttons.php" hash="32dd7dbce23d365e0a022bb3f294dd82"/><file name="Editroles.php" hash="09b493890c89039d4ce406b00be0fef6"/><file name="Edituser.php" hash="c855e11269a374c41edd871a19e6bfad"/><dir name="Grid"><file name="Role.php" hash="4524df7249ad6d3b164b5f0fbaf3f585"/><file name="User.php" hash="d0a4baae760877f7ac8587775087f925"/></dir><dir name="Role"><dir name="Grid"><file name="User.php" hash="33a129c9a6b5f2194496773ac7ab70ac"/></dir></dir><file name="Role.php" hash="2a13665d50a202158cc0590fced555d0"/><file name="Roles.php" hash="6bfcc3c0348274b0870b113f4736d260"/><dir name="Tab"><file name="Roleinfo.php" hash="403d663ef771f3611a0a2b50d46b3a4c"/><file name="Rolesedit.php" hash="225662e07a6ab6609c5bbd6f08cf6871"/><file name="Rolesusers.php" hash="8832cde896965e2b7bbca4638c8a9758"/><file name="Useredit.php" hash="e5e881c0790bfc3c6a2710c5fb8a0105"/><file name="Userroles.php" hash="57a5356934d115e47f563c5125848dd0"/></dir><dir name="User"><dir name="Edit"><file name="Form.php" hash="0c708883ce210d0a8b5b4d586a7cf06e"/><dir name="Tab"><file name="Main.php" hash="e6be40174f8206f0daac5d468316e4e3"/><file name="Roles.php" hash="64c25dec02a40da001b119a3dfa7b00e"/></dir><file name="Tabs.php" hash="f0da88dab2504dc3c6c0f5b86a53bbc5"/></dir><file name="Edit.php" hash="5b03bb8145164d560b1bdc8a269ac289"/><file name="Grid.php" hash="0b65eb7f5427cd22b346bfd87b503aca"/></dir><file name="User.php" hash="e5b81acde5072e754b5b28af7900ec03"/><file name="Usernroles.php" hash="6edb8570724b449437e59f067277ece9"/><file name="Users.php" hash="d597744c70b346f88dea87e87305942e"/><dir name="Variable"><dir name="Edit"><file name="Form.php" hash="2026b495af14aa9a56935ba57498c1a3"/></dir><file name="Edit.php" hash="4298ed569a07d89bd75179a682d8c535"/><file name="Grid.php" hash="b019d3c19f49d30dd777d0bf311e4e43"/></dir><file name="Variable.php" hash="c894064b0ddd8ac81e92ab56363626a2"/></dir><dir name="Poll"><dir name="Answer"><dir name="Edit"><file name="Form.php" hash="382d5a97737db8c2b165f281d76f48ac"/></dir><file name="Edit.php" hash="63aed220b152cc116e59543729d73929"/></dir><dir name="Edit"><file name="Form.php" hash="cc568467e30577a1b9b9653d98392907"/><dir name="Tab"><dir name="Answers"><file name="Form.php" hash="27425239a41955cbcad44f5fad907bdf"/><file name="Grid.php" hash="9c52e51b0b0b1d2e1631790bc202a4f4"/><file name="List.php" hash="735a97e401819d79378fea03fb127d8a"/></dir><file name="Answers.php" hash="04540a47671baf275a8c1192197a15a1"/><file name="Form.php" hash="79c421116b0fc45445c5a8b0919a26a2"/></dir><file name="Tabs.php" hash="de583a3f18d5cbc2e1c250fecf7509db"/></dir><file name="Edit.php" hash="6f26bf3bc3d58f827958e2e3519c8c45"/><file name="Grid.php" hash="59be5ee15ed795e564c1c8a4397f81eb"/><file name="Poll.php" hash="9ccf39497025aba7d2ae8dfccbd5048f"/></dir><dir name="Promo"><dir name="Catalog"><dir name="Edit"><file name="Form.php" hash="99b4ccc6c993b3c6f785b90f867d3286"/><file name="Js.php" hash="3567b880caf3424119d21545467a0b6f"/><dir name="Tab"><file name="Actions.php" hash="639c36fe333c0b4193cdb5c858d244d7"/><file name="Conditions.php" hash="1dd1f6afcbc83cf24c8a4a57cd89e41a"/><file name="Main.php" hash="30be5eec578636204e4e2ac749c16fc9"/></dir><file name="Tabs.php" hash="ee13898b58f837d4a850213a450a6e19"/></dir><file name="Edit.php" hash="dc6c584c7b1bf07baceb80f9d9ccc251"/><file name="Grid.php" hash="3b3e748c0d9392fa1d22e851bd520ccd"/></dir><file name="Catalog.php" hash="9e83da3d00dfa31dd27beee92f629fbe"/><dir name="Quote"><dir name="Edit"><file name="Form.php" hash="a3ef7be928573c95300e3a686d109123"/><dir name="Tab"><file name="Actions.php" hash="af80c52b8840ac59e521cc184107f45b"/><file name="Conditions.php" hash="4e6013b559b2d106fa6823e5503b8a7b"/><dir name="Coupons"><file name="Form.php" hash="38a5ba623107f5359a63be333ecc8b52"/><dir name="Grid"><dir name="Column"><dir name="Renderer"><file name="Used.php" hash="c10c900978716e683a88c74865e0bb9c"/></dir></dir></dir><file name="Grid.php" hash="6f12f7a7ac883537a91a868f8f046e8a"/></dir><file name="Coupons.php" hash="90eeb30e7bb308223d170325cfa82973"/><file name="Labels.php" hash="9149c4273f7724d18f6921d692399686"/><dir name="Main"><dir name="Renderer"><file name="Checkbox.php" hash="e24fd8ad3fcf1007293d9788db115ea6"/></dir></dir><file name="Main.php" hash="362533a6e487384930fbc9d31eb2c873"/></dir><file name="Tabs.php" hash="e8efb78f4bbcf33bc6b1f1475c8381a6"/></dir><file name="Edit.php" hash="0eed49127243c460ecf20717fc7c72f6"/><file name="Grid.php" hash="a981de2b2f84900d3aac8e5747d9e4b6"/></dir><file name="Quote.php" hash="cbdd154035e54141097f3f244ae5b698"/><dir name="Widget"><dir name="Chooser"><file name="Daterange.php" hash="817943af923130c019901eb371edd6fa"/><file name="Sku.php" hash="b94cf844cc52ef513213fdf36d4e2c31"/></dir><file name="Chooser.php" hash="85f891c66376974cacb1b94591f97fea"/></dir></dir><dir name="Rating"><dir name="Edit"><file name="Form.php" hash="85bb893fe11569f779e2a2002635cae7"/><dir name="Tab"><file name="Form.php" hash="f52e225c22a0cb338139511210bdf8cd"/><file name="Options.php" hash="d742244d9ede8bc8c1811958c8672940"/></dir><file name="Tabs.php" hash="fab29a2465c8f83d8229ed9a4e12a457"/></dir><file name="Edit.php" hash="57154b7f9692dc1b5fe294151ef7c4c6"/><file name="Grid.php" hash="af5b428dfd715c2488a50a8db6635ed8"/><file name="Rating.php" hash="2063e6bd12dd2154657cfc6a4fd38fae"/></dir><dir name="Report"><dir name="Config"><dir name="Form"><dir name="Field"><file name="MtdStart.php" hash="e8274e4f8675746412d39e424a212177"/><file name="YtdStart.php" hash="d8365453d33234dae3dbac4c4164ad40"/></dir></dir></dir><dir name="Customer"><dir name="Accounts"><file name="Grid.php" hash="4ee062a10a1fd6dd3250751e9387cb1c"/></dir><file name="Accounts.php" hash="1a1511fabb29de8780686d3e9e65a28a"/><dir name="Orders"><file name="Grid.php" hash="0656ce7c9cd7c61d1ed7a0d6356d3638"/></dir><file name="Orders.php" hash="c5d12fb3cb26d20e3de3b10ba69df1a6"/><dir name="Totals"><file name="Grid.php" hash="ff882af980ae3c8811b0aa7b5bea0a83"/></dir><file name="Totals.php" hash="8aa59ae89284d2145650c437279e2afa"/></dir><dir name="Filter"><file name="Form.php" hash="69cd30e782441d2c20e2f7d086b578a4"/></dir><dir name="Grid"><file name="Abstract.php" hash="1259838520e97e6f5e5a86142f960068"/><dir name="Column"><dir name="Renderer"><file name="Blanknumber.php" hash="99b1c0c07fa555fea0cddae25f6a888f"/><file name="Currency.php" hash="fe2d288dfb099ceb914baa95a5ee92ac"/><file name="Customer.php" hash="b1a5250946c49aa2e921c9abb30999a7"/><file name="Product.php" hash="a4ad3eacf672977d5fa6c5213c666b65"/></dir></dir><file name="Shopcart.php" hash="d990aa64540f38084994c55e16b66a36"/></dir><file name="Grid.php" hash="11b7bd61129d0b5f03b5bd26ada47fb8"/><dir name="Product"><dir name="Downloads"><file name="Grid.php" hash="b2c62eb8f8d6cd91686eb418731546aa"/><dir name="Renderer"><file name="Purchases.php" hash="81d96bd5944b7b723fbd69c6fe0fad34"/></dir></dir><file name="Downloads.php" hash="11e4f461607717faf3742492139d97ed"/><file name="Grid.php" hash="a3328280fbfdc1286dadd5695003d2f4"/><dir name="Lowstock"><file name="Grid.php" hash="49ea6e217dfd12742f9f4526fbcf6df5"/></dir><file name="Lowstock.php" hash="f7a0fda9bc65400bcb201ce8c57b4fea"/><dir name="Ordered"><file name="Grid.php" hash="fbe565a94ef00aa0713d3c0676b28455"/></dir><file name="Ordered.php" hash="d0d5a77d45cc05a1cc9d9c6184dce2d5"/><dir name="Sold"><file name="Grid.php" hash="06b8bb8d3fb23fe3fed95f9af6c26110"/></dir><file name="Sold.php" hash="dbc26917ddaf6bd398ec2fe38346a626"/><dir name="Viewed"><file name="Grid.php" hash="c8f127e3f7ba9c1f584a0c6fb6a08471"/></dir><file name="Viewed.php" hash="076655e8c23b29dfc968fd652c46e40c"/></dir><file name="Product.php" hash="6b7d0556f28ddf0816b5fa1723a818a5"/><dir name="Refresh"><dir name="Statistics"><file name="Grid.php" hash="7339559d1a5feb5a317d214026b59714"/></dir><file name="Statistics.php" hash="081553d681795450853d378022096aa4"/></dir><dir name="Review"><dir name="Customer"><file name="Grid.php" hash="9840725cb756a7bb302650784adf2848"/></dir><file name="Customer.php" hash="507272f138c912e8401773ebebfbf601"/><dir name="Detail"><file name="Grid.php" hash="835c153225918f2e3134f03d459528d5"/></dir><file name="Detail.php" hash="bbe8bb058d5edbd4880064ad03892932"/><dir name="Product"><file name="Grid.php" hash="27cb7517a1fb42e1466071023ddae3f5"/></dir><file name="Product.php" hash="6941c4daa613b5975ba3a9d897f7347a"/></dir><dir name="Sales"><dir name="Bestsellers"><file name="Grid.php" hash="b56131a4f69109a4163812880f70fc7e"/></dir><file name="Bestsellers.php" hash="1c7b5ac4ac82eaa2c76efada815ba43b"/><dir name="Coupons"><file name="Grid.php" hash="a25de7482812b4d9bd89713e75c4b540"/></dir><file name="Coupons.php" hash="dea9d22ce3a45989bff418452b474c95"/><dir name="Grid"><dir name="Column"><dir name="Renderer"><file name="Date.php" hash="99724f69d6decef56c305e07c7e56add"/></dir></dir></dir><dir name="Invoiced"><file name="Grid.php" hash="1a23290dd7d7719b94287ee8556d1e94"/></dir><file name="Invoiced.php" hash="d213c1742bceb0e8760cf6c51f122c15"/><dir name="Refunded"><file name="Grid.php" hash="ebe3ac2ca0f2981e4fe6031f82ac4c60"/></dir><file name="Refunded.php" hash="27740811a81123285c6d78bb9f799576"/><dir name="Sales"><file name="Grid.php" hash="5c0dd665a3a92566c3b9ee9b170c095d"/></dir><file name="Sales.php" hash="011f528457f654222487ddc1db15e85b"/><dir name="Shipping"><file name="Grid.php" hash="ea48519fa084857ca4f44c967fe9d667"/></dir><file name="Shipping.php" hash="1cddda3d784b12525d836ac9a3357df0"/><dir name="Tax"><file name="Grid.php" hash="0a2340a418b896d8603f08d132f55b19"/></dir><file name="Tax.php" hash="fb277822cea2f0bb5b71c9d025d559f7"/></dir><dir name="Search"><file name="Grid.php" hash="407e420f3debfe639ae256e2d827b579"/></dir><file name="Search.php" hash="e9cb7352e3b233d5076926b67ae9f03b"/><dir name="Shopcart"><dir name="Abandoned"><file name="Grid.php" hash="932cab762e243101a7c3265dfa599c0c"/></dir><file name="Abandoned.php" hash="c933314669acd2fdbd63defd475d3984"/><dir name="Customer"><file name="Grid.php" hash="25089e52822291d522c42108810ab86f"/></dir><file name="Customer.php" hash="913294130b1a3dc25b0621df903bbd06"/><dir name="Product"><file name="Grid.php" hash="84d16caa0efd06af1d8cbca172e8992b"/></dir><file name="Product.php" hash="3f64b234f73486d662344cd9f52c4ae2"/></dir><dir name="Tag"><dir name="Customer"><dir name="Detail"><file name="Grid.php" hash="dd0c9252e4a70a0c3cb7e8e7c6c23639"/></dir><file name="Detail.php" hash="ebace1ece804b3c606020f8213f8b950"/><file name="Grid.php" hash="2260b6800e4c19ade24115f3f24fa907"/></dir><file name="Customer.php" hash="5ba6e846aababc182b25981aeb4c6f8e"/><dir name="Popular"><dir name="Detail"><file name="Grid.php" hash="818be0e011d29f75be00fa306b1b0c3d"/></dir><file name="Detail.php" hash="0ab400fc8641201ece75a65f1c93b809"/><file name="Grid.php" hash="ada614aaf421a6b35aee85a34d2d0d12"/></dir><file name="Popular.php" hash="54b7e0c887f64b16740869503de14a92"/><dir name="Product"><dir name="Detail"><file name="Grid.php" hash="7f1be567ae5d674f3875e1ba19e9c19d"/></dir><file name="Detail.php" hash="f0b90f22e066edbb5144b3a473ba074e"/><file name="Grid.php" hash="0dbc47e8afe260f1775f64f5abd5f284"/></dir><file name="Product.php" hash="a71f9d9003f52b69af346eff9143bc6c"/></dir><dir name="Wishlist"><file name="Grid.php" hash="0e63d4f557b29ee22ad74e25ab128bf1"/></dir><file name="Wishlist.php" hash="cbca56b25a8b586f64db6c91a538e029"/></dir><dir name="Review"><dir name="Add"><file name="Form.php" hash="912a68c3599baebbfd849d990a78ede3"/></dir><file name="Add.php" hash="c4ef9a8285531f848ef7ec85bd4b0865"/><dir name="Edit"><file name="Form.php" hash="aab9573c34402260a1b8abdb002bc703"/></dir><file name="Edit.php" hash="4bdfe952dff327bbde7c35d9956d8f6d"/><dir name="Grid"><dir name="Filter"><file name="Type.php" hash="dae987db69eb9e6d7e0c6d3e3a4d0d2f"/></dir><dir name="Renderer"><file name="Type.php" hash="6e8026cd79021d31ee978b4ffafe30f0"/></dir></dir><file name="Grid.php" hash="5928d0b988c6dbbbaafd5c36efbd1b87"/><file name="Main.php" hash="4291581219eebb26a55d2c1b250171e2"/><dir name="Product"><file name="Grid.php" hash="eec163557bf71f8f22480bdd57a6c8a4"/></dir><dir name="Rating"><file name="Detailed.php" hash="e30faedc70008b47b14826e323947aea"/><file name="Summary.php" hash="2b8d5dc65e99660833e11b73344ce76e"/></dir></dir><dir name="Sales"><dir name="Creditmemo"><file name="Grid.php" hash="5717b8caec95d79d53baebf5665da23c"/></dir><file name="Creditmemo.php" hash="27fc256b67712baa22a6473e880681c7"/><dir name="Invoice"><file name="Grid.php" hash="bbca8c45b3055dab5327eb7e3f005bdf"/></dir><file name="Invoice.php" hash="f2a31a60dd248d1d023b82fe1ac14987"/><dir name="Items"><file name="Abstract.php" hash="467e9e7ca2f98b0051f3c8e361344439"/><dir name="Column"><file name="Default.php" hash="56d115ca0b116f68e404ef68807d20af"/><dir name="Name"><file name="Grouped.php" hash="4a2f8c476589e2b32af2ac01cafc96dd"/></dir><file name="Name.php" hash="c62de2bf8718a9c2ece2ce7e23e03bef"/><file name="Qty.php" hash="454a94edbe2c5b7a75f00737e170c3a0"/></dir><dir name="Renderer"><file name="Configurable.php" hash="28c70473cbe8350e442b54507dee18a1"/><file name="Default.php" hash="45fb1f4d18d3a3819459366afd873f94"/></dir></dir><dir name="Order"><file name="Abstract.php" hash="9968c36de59df2d73f7ab177ce99ad50"/><dir name="Address"><file name="Form.php" hash="c9f5836acbf4ff81427a9560722144f4"/></dir><file name="Address.php" hash="8b694ca709abe5f2dea49126dad372d2"/><dir name="Comments"><file name="View.php" hash="bd2304e9e8a63a912d132e93b5a121ee"/></dir><dir name="Create"><file name="Abstract.php" hash="ace23380dd4337893be6cd9f8fcc5edd"/><dir name="Billing"><file name="Address.php" hash="c7d6cdf4678e5d2f0961827501dea8a0"/><dir name="Method"><file name="Form.php" hash="729e963ab3ddf852c6aaeb4c374a701b"/></dir><file name="Method.php" hash="1cbda88628683510167d23bf158846ec"/></dir><file name="Comment.php" hash="107d8c6c1434f3e5ed365ae59e37ab52"/><dir name="Coupons"><file name="Form.php" hash="2dfc0a5002b07842e410ccf2710e610e"/></dir><file name="Coupons.php" hash="b9c757d33a7803b0415a9f0c213afb53"/><dir name="Customer"><file name="Grid.php" hash="5748a330e8dcc17699f3c6a1d3a589c4"/></dir><file name="Customer.php" hash="ea07e49bb04b3d7170ce2e5c42b5e85d"/><file name="Data.php" hash="8a086a74430cf27d5815f93b9c71071c"/><dir name="Form"><file name="Abstract.php" hash="994ad1483341a924d7a6c5d19a5e4726"/><file name="Account.php" hash="f14c220d593b0f06003bce684b140068"/><file name="Address.php" hash="87fc0f93e4be39fc0ba54f880490dcc4"/></dir><file name="Form.php" hash="e9879907839a7a810f58ed38e7ec4171"/><dir name="Giftmessage"><file name="Form.php" hash="98d63f507a64efaab99a500a9da71b86"/></dir><file name="Giftmessage.php" hash="2a3f37bf5c3723668344a3f7f2812267"/><file name="Header.php" hash="03f6dad30227f5d473400a7944e1a6d4"/><dir name="Items"><file name="Grid.php" hash="02bb5f83884bc84a82cea8902709e7f6"/></dir><file name="Items.php" hash="c29d6bd3003f80e1ea57b05141b09ea9"/><file name="Load.php" hash="f7a2aa5ea6bec7e254e873bcc82548eb"/><file name="Messages.php" hash="d87bea0103f77041cb81b75113675413"/><dir name="Newsletter"><file name="Form.php" hash="811887cae15aa522b1e358c3dc018507"/></dir><file name="Newsletter.php" hash="c0d9eff723feb880ed235a2a5b17abb5"/><dir name="Search"><dir name="Grid"><dir name="Renderer"><file name="Giftmessage.php" hash="7f9829c812972394931e019e2e96a90b"/><file name="Price.php" hash="ee6ce6908ae15c4407942a7d60fef978"/><file name="Product.php" hash="5d56f384c81931c32853f3d2bc5bb163"/><file name="Qty.php" hash="7611c0b8a7c2d1c7f129304348570ca2"/></dir></dir><file name="Grid.php" hash="649fc59c39244b2f974d15023caa47f1"/></dir><file name="Search.php" hash="e89f2e794055c5df0694a34c8e29ab60"/><dir name="Shipping"><file name="Address.php" hash="0ac0de15586744ec0bf5d671fc97e172"/><dir name="Method"><file name="Form.php" hash="ffb7b1b8af92e0020165271929d97684"/></dir><file name="Method.php" hash="621774bf02b03098d7681f9c81a2c5b1"/></dir><dir name="Sidebar"><file name="Abstract.php" hash="33c186eeb0dd61dc526a27ead10f280a"/><file name="Cart.php" hash="8203cb25f99eaf6fb607469872cd27b6"/><file name="Compared.php" hash="d2472fd4624fc3ba0a068537b5564bd9"/><file name="Pcompared.php" hash="50e6571e0b3a723f220cfc7c7fd3017a"/><file name="Pviewed.php" hash="f224ecc703e61de7704c720cbdb01742"/><file name="Reorder.php" hash="e30c333e309b362b99144de107caf2dd"/><file name="Viewed.php" hash="d188f15e1e330bb9cee987bb96139d47"/><file name="Wishlist.php" hash="3cfd84ed855acc1158825c4bac1eee07"/></dir><file name="Sidebar.php" hash="bb85cb56273718a438e470d3766102d8"/><dir name="Store"><file name="Select.php" hash="e568f34b8ee37902fd1ef5fceeeffa89"/></dir><file name="Store.php" hash="bd028b48bafff28a45141a8c213f7de7"/><dir name="Totals"><file name="Default.php" hash="0c06a5f6f9c9289fc0ec8e8f9bd38ab7"/><file name="Discount.php" hash="4b765ae9160306840358099712ca8f26"/><file name="Grandtotal.php" hash="0b140da78932cb339289247d737bef68"/><file name="Shipping.php" hash="2975332020d0faf31570e401f7431aa8"/><file name="Subtotal.php" hash="ef046c50436c16f9b71a9e13115bfae8"/><file name="Table.php" hash="10249cf6ca8666193e6c83994db02875"/><file name="Tax.php" hash="aaabef204e3c77f6acab7c5a02789c44"/></dir><file name="Totals.php" hash="703be91c809df96bc4e3f33a1a96e536"/></dir><file name="Create.php" hash="c1e4a9b052977322d863ac4bece32f62"/><dir name="Creditmemo"><dir name="Create"><file name="Adjustments.php" hash="89ab6b4a8002d8951b775059f6415d60"/><file name="Form.php" hash="cd6438633514cdf345d4c8a57f6a51aa"/><file name="Items.php" hash="a5ec6e06117c6858ef06d1ca25677597"/></dir><file name="Create.php" hash="c193123a808daf28acbc8793717ac6d3"/><file name="Totals.php" hash="c857b4b6cc5974c75e3a29eea2149009"/><dir name="View"><file name="Comments.php" hash="9135aa72b4bcbe7d3bb6013a2f04f016"/><file name="Form.php" hash="de15ef7c6f249fb9e4678a398011157e"/><file name="Items.php" hash="9a4e4ea401dcb83db60d1ca905d05640"/></dir><file name="View.php" hash="5682c3b6d957fffbe51f65638b6fae57"/></dir><file name="Grid.php" hash="332d48760a7984a6b00207543b88a4f7"/><dir name="Invoice"><dir name="Create"><file name="Form.php" hash="a6fb9792408416068988787f592374bd"/><file name="Items.php" hash="e97830b26af9f6f1bd1d141004ab7056"/><file name="Tracking.php" hash="8ea313eb2289113213c139295c4ea21e"/></dir><file name="Create.php" hash="df68552af456ece05b9d808479763178"/><file name="Totals.php" hash="ec44a68fb16b9222074f70b8392523bc"/><dir name="View"><file name="Comments.php" hash="1745fae306ac48cd9b60d7862253c263"/><file name="Form.php" hash="1cbcadc2e0a5f881c7916867115957c7"/><file name="Items.php" hash="bf1a848f21b8070e35e753ed50e7ddf8"/></dir><file name="View.php" hash="0508c53f38f6668267ff9c5e1e402847"/></dir><file name="Payment.php" hash="2f7d0a7edabb339ecf91426b9b67f204"/><dir name="Shipment"><dir name="Create"><file name="Form.php" hash="bdf8d97c42fd4225b4e7c50f41cb3a3d"/><file name="Items.php" hash="4dd1603a9ce555349c2a144b6448ff00"/><file name="Tracking.php" hash="ce1b2714096f0b2b4b64d020142ada9a"/></dir><file name="Create.php" hash="8a17f9a552ac4043c5ba695b5c2e7f28"/><dir name="Packaging"><file name="Grid.php" hash="c5dc315aa4a10b392647849647f8124f"/></dir><file name="Packaging.php" hash="4bbe680d38e5929c7196bbb26bac3350"/><dir name="Tracking"><file name="Info.php" hash="d1fc1232607baf4f133ec48ca0fae04a"/></dir><dir name="View"><file name="Comments.php" hash="12dfc224b8bd352eeb60d2b9b41a5c4f"/><file name="Form.php" hash="107bd71d65ca52e4fe59c148ff43d059"/><file name="Items.php" hash="0c2c02258238c04d35f8302f208dd5f6"/><file name="Tracking.php" hash="8d41c1e65ba0e3ec6945782957fcee9b"/></dir><file name="View.php" hash="dd4f42d11ffe1ea196bf1b82cd1f8ca2"/></dir><dir name="Status"><dir name="Assign"><file name="Form.php" hash="00cc48e6f0c3d2d8f5a9d276784dfa11"/></dir><file name="Assign.php" hash="9fb13f56dcfc8d5232fe57d729688837"/><dir name="Edit"><file name="Form.php" hash="e1e4a528c760069606a3288eefe9b53e"/></dir><file name="Edit.php" hash="878b0973508b56b3f373f8194cb70a07"/><file name="Grid.php" hash="f829cbd7178db37bf77b765af156f722"/><dir name="New"><file name="Form.php" hash="d0604be68b108b02af082bc7c65cace8"/></dir><file name="New.php" hash="29c01cd2f0e19af5e6250251b31267e9"/></dir><file name="Status.php" hash="6550dc33999e72773eab9478f52cc302"/><file name="Totalbar.php" hash="52aa0b423bcb1141c77b9458737b18c3"/><dir name="Totals"><file name="Item.php" hash="f43a219863c76c571205d832d0b43b45"/><file name="Tax.php" hash="184791b93aca13bd09ffb655f132ad01"/></dir><file name="Totals.php" hash="210db83b7c9a4c7cceb377b80f2a9c10"/><dir name="View"><file name="Form.php" hash="23d9c4ca41d10ae38b587c51450bc3e3"/><file name="Giftmessage.php" hash="42f341de5ae707b247a53424a1b67ed1"/><file name="History.php" hash="1d88d4967c4dc6b0d734e9e0aa4ac2d4"/><file name="Info.php" hash="d7ee83014d4bbab3a24e16d3f1d12eb7"/><dir name="Items"><dir name="Renderer"><file name="Default.php" hash="0a4e91ab3a575dc4e4bb02a74395d6b8"/></dir></dir><file name="Items.php" hash="c989206236501dc8b092d8d84e4f1d1a"/><file name="Messages.php" hash="4025d28ee095a9cd3f8ac60c1233f071"/><dir name="Tab"><file name="Creditmemos.php" hash="059adadd24b70299eccc487a536ab2c5"/><file name="History.php" hash="8e51c6f8901d81383fc8e3b937762f0e"/><file name="Info.php" hash="e2864c503f989daa5798cba16dde2a71"/><file name="Invoices.php" hash="0f308282d18b8193b98229f6b3058953"/><file name="Shipments.php" hash="ba3116e89be4121c316ee8ee87b0909b"/><file name="Transactions.php" hash="6cf7a8da63fbf6303692b0cb94799443"/></dir><file name="Tabs.php" hash="f13f47bc04d78d5c12b2ec834b00c680"/></dir><file name="View.php" hash="e118d98b266f83b7371f3bb2cb0495fc"/></dir><file name="Order.php" hash="7267a7a37d11673f68f0ee372cf3de7e"/><dir name="Reorder"><dir name="Renderer"><file name="Action.php" hash="3af81617dc8d3a5642079c2df2afc4ba"/></dir></dir><dir name="Shipment"><file name="Grid.php" hash="89b8634c717d62fe3b6487c15c8d107e"/></dir><file name="Shipment.php" hash="bf55854c2ea635e3a427a5031bba1125"/><file name="Totals.php" hash="0f2bb0aa24c61390e2727bf485214697"/><dir name="Transactions"><dir name="Child"><file name="Grid.php" hash="9b417be1aa074dc24de8680634ee2476"/></dir><dir name="Detail"><file name="Grid.php" hash="a42a03de4a8a788f02a845047c670db2"/></dir><file name="Detail.php" hash="86cca3beb4a511f8094cf5314a925468"/><file name="Grid.php" hash="da014699b42c2b4c1c81c17044d27da6"/></dir><file name="Transactions.php" hash="320be0527560fed342f9c811b8255bf9"/></dir><file name="Sales.php" hash="a1dc1bd628e8fedfa54aefac97bb41b4"/><dir name="Shipping"><dir name="Carrier"><dir name="Tablerate"><file name="Grid.php" hash="10e83ee8dde4582807a45d69f9acf679"/></dir></dir></dir><dir name="Sitemap"><dir name="Edit"><file name="Form.php" hash="b8d105362b3adf6c03d6a69d45bbc3a5"/></dir><file name="Edit.php" hash="e07b39397eb1286e1fcbc44139bc7e32"/><dir name="Grid"><dir name="Renderer"><file name="Action.php" hash="29bde8080647225153100af893c7a4ce"/><file name="Link.php" hash="fbc71a5ef95188f366fe84ab75516a1e"/><file name="Time.php" hash="a630f3e816cba54341ea826e0509be10"/></dir></dir><file name="Grid.php" hash="c02fabf9285882e6bb1b9395d38053ac"/></dir><file name="Sitemap.php" hash="50481db275cd12bbe56fcf5d8e78950b"/><dir name="Store"><dir name="Switcher"><dir name="Form"><dir name="Renderer"><dir name="Fieldset"><file name="Element.php" hash="c5251b386f061d7e76f9102870e48bb7"/></dir><file name="Fieldset.php" hash="28815718840b9cd9aa3a8f11dc704f75"/></dir></dir></dir><file name="Switcher.php" hash="4045caa8d0fa2303fbe04f26a9d6e1ef"/></dir><dir name="System"><dir name="Account"><dir name="Edit"><file name="Form.php" hash="99dd4d9afb439c78e66a74ea5b77a9e8"/></dir><file name="Edit.php" hash="d93d39b44e99f8c6f8a53fabeb8fe03c"/></dir><dir name="Cache"><file name="Edit.php" hash="3ed6b9c007cf377ff9f564ef281ec1fe"/><file name="Form.php" hash="8b387aa81ddff180e4c927b2fc9dbcd9"/></dir><dir name="Config"><file name="Dwstree.php" hash="949f0304d9a0c5c2a65cec4a491209a0"/><file name="Edit.php" hash="9fe688fa2b68a609bc8718838235da67"/><dir name="Form"><dir name="Field"><dir name="Array"><file name="Abstract.php" hash="3784a47ebc6bf8e201a94fb18bb25336"/></dir><file name="Datetime.php" hash="d9229f22e994bc820057e87cfec90598"/><file name="Export.php" hash="868fd289fe1c6f57ee6c2d056d1fccea"/><file name="File.php" hash="7d37626d158c4372bb3b7cc81f3a02d9"/><file name="Heading.php" hash="4ef6ca5626a72c022e3e8137596add5f"/><file name="Image.php" hash="22fca830060d1394a85da41db05964e0"/><file name="Import.php" hash="fbcca2bd1276efe49f513045592b2e45"/><file name="Notification.php" hash="1cdad5e7436b453245bcdd0489224628"/><file name="Regexceptions.php" hash="758807d54a62f6f61f611e767ec4ecf9"/><dir name="Select"><file name="Allowspecific.php" hash="ac58da8a22ee314eb89068718dbf4626"/><file name="Flatcatalog.php" hash="68c82c41e376b507816ce3ddb07e914a"/><file name="Flatproduct.php" hash="da237d35272d4dfe79fd5c83799205c6"/></dir></dir><file name="Field.php" hash="aea846b299b3399033354483361ee31f"/><dir name="Fieldset"><dir name="Modules"><file name="DisableOutput.php" hash="ce58e2732915fac2fb8936a79088c203"/></dir><dir name="Order"><file name="Statuses.php" hash="1316ef1399463d26d20611e802b998b4"/></dir></dir><file name="Fieldset.php" hash="b1cc5488a485e8c2397af2228dcfe0d6"/></dir><file name="Form.php" hash="e03e58aa776c049e11cc9856964593f1"/><file name="Switcher.php" hash="bd6f6c5dbf6eba1e0a936ac49942514e"/><dir name="System"><dir name="Storage"><dir name="Media"><file name="Synchronize.php" hash="411e489880f2a7d436823e46eb6c2030"/></dir></dir></dir><file name="Tabs.php" hash="6d01b907c1f3cb31132ab5c92902b56b"/></dir><dir name="Convert"><dir name="Gui"><dir name="Edit"><file name="Form.php" hash="51512ab6495c12ae7e521a0b220b5a18"/><dir name="Tab"><file name="Upload.php" hash="d193afda3f613e188d0515ecc19ba6fc"/><file name="View.php" hash="b599ad8fd48be28aab0995b125220b02"/><file name="Wizard.php" hash="b02afe7d66fee207a1f09d8812cf7a99"/></dir><file name="Tabs.php" hash="b9cc2ef30b98b610937b03fc02d8b497"/></dir><file name="Edit.php" hash="5e9488fca79a80b5234f5445e23a6e44"/><file name="Grid.php" hash="810689efe57896fb238e124faae811e9"/></dir><file name="Gui.php" hash="e089b93dd30284819d2d5d62d7d3b0d3"/><dir name="Profile"><dir name="Edit"><dir name="Filter"><file name="Action.php" hash="b7560fbdf0a5611d036ff11d2bbb51cd"/></dir><file name="Form.php" hash="3e3dd0fa111cb965b5752ae71d277c9d"/><dir name="Renderer"><file name="Action.php" hash="cd87651e0cb2e6ded77c76399783089d"/></dir><dir name="Tab"><file name="Edit.php" hash="1123d89a65d5a5aa17a8f23f6970de45"/><file name="History.php" hash="55f3d4c7b3701f990fa8195770dfefcc"/><file name="Run.php" hash="c4904951931aac62dcf658a47d81f40f"/></dir><file name="Tabs.php" hash="e1eb71d164447ccb5ed30d1c0b063895"/></dir><file name="Edit.php" hash="3e03e042fbe826d42fe3227f20f68e21"/><file name="Grid.php" hash="8b8d2d9532fbcc5669e306fe4f178cd5"/><file name="Run.php" hash="566d290a8b18f8d92f4c50ced8167774"/></dir><file name="Profile.php" hash="e98bc3dd91d4f33bb7066fbf16165afa"/></dir><dir name="Currency"><dir name="Edit"><file name="Form.php" hash="20b70301bec0b388197efc08843ae404"/><dir name="Tab"><file name="Main.php" hash="cb4ce996cedb2d09aeba5f7c301e0c77"/><file name="Rates.php" hash="20e20e6398fb25ce0aaabd296808f55c"/></dir><file name="Tabs.php" hash="9106b6dd6120dd32699b7c4d83ee275c"/></dir><dir name="Rate"><file name="Matrix.php" hash="6cae30f47d90546322f9f51feec24de7"/><file name="Services.php" hash="ac762568e16500cd45d3693cd45e73c4"/></dir></dir><file name="Currency.php" hash="c3cffe38d8d44a187ad756ccd7a930a9"/><dir name="Design"><dir name="Edit"><dir name="Tab"><file name="General.php" hash="6bbbf832832b30bbf63fc9d5c3bb2e50"/></dir><file name="Tabs.php" hash="c3d46a8b734ce44adf1afd9a78bad9be"/></dir><file name="Edit.php" hash="146be0ed03e144eb87aa89786f974786"/><file name="Grid.php" hash="41df1e7f4a7f1a310c934ac5c90bac99"/></dir><file name="Design.php" hash="63c84ac10dffefa4a60cb5a16ab2e9c6"/><dir name="Email"><dir name="Template"><dir name="Edit"><file name="Form.php" hash="ba60cf33870466147529540389a098fa"/></dir><file name="Edit.php" hash="fbff822e31d9fd4bfa74c21bd85c675a"/><dir name="Grid"><dir name="Filter"><file name="Type.php" hash="06db8032ae98bcaf02dde31fda26ae20"/></dir><dir name="Renderer"><file name="Action.php" hash="977b2671b09737d77bb76efd8d1d140b"/><file name="Sender.php" hash="365125a25246d9c8698bfa6ee5e1df51"/><file name="Type.php" hash="7e587342637179a910cd521cb3f65d0a"/></dir></dir><file name="Grid.php" hash="0fb16af553465674f16de207b6a00a99"/><file name="Preview.php" hash="f71f27da9dde5eaf2683c98b8e7486bc"/></dir><file name="Template.php" hash="f961a2a3c8f6cb13aa8ed68be9d0ffb7"/></dir><dir name="Store"><dir name="Delete"><file name="Form.php" hash="86e76fd0c747b41a5611d16ef362da4f"/><file name="Group.php" hash="8a9875278ed5c2a1d7cbe2de0c8b5d3e"/><file name="Website.php" hash="02df4f06380e4b90bb36c44512f5f7fc"/></dir><file name="Delete.php" hash="bbf25320410cff2c1347ac4430b3b482"/><dir name="Edit"><file name="Form.php" hash="644b1a2848629900483e4f559d78a986"/></dir><file name="Edit.php" hash="1c26d15fa15443cbdaf7fa10d1c46595"/><dir name="Grid"><dir name="Render"><file name="Group.php" hash="d51172f385ad735d8edc971780ec3058"/><file name="Store.php" hash="56cc10240fdd3478e3d1062d72475360"/><file name="Website.php" hash="5f66c00e4522c40d5bf1b2d546224fe0"/></dir></dir><file name="Grid.php" hash="c75c238c07093f60b02ec4fa919fd7b7"/><file name="Store.php" hash="bc472fb0f06a390b255e9b3592d2ddfd"/><file name="Tree.php" hash="c23e3717d291a812964a9fb8ee916696"/></dir><dir name="Variable"><dir name="Edit"><file name="Form.php" hash="d0d122ec389b0fd702287db9dc6763c1"/></dir><file name="Edit.php" hash="c604fffda2a18a7f112a68aa77baa4cb"/><file name="Grid.php" hash="7bab6ec5c65c3ed970df42674af1002f"/></dir><file name="Variable.php" hash="ce8ece090b8411742f92abc9edb3fdf9"/></dir><dir name="Tag"><dir name="Assigned"><file name="Grid.php" hash="289c2b672a9b03140c00aaf95cc09b5c"/></dir><dir name="Customer"><file name="Grid.php" hash="076b8a64dc03af267c456946d88dae9f"/></dir><file name="Customer.php" hash="5d0e98ae573372eeffa364b4f5e93eb4"/><dir name="Edit"><file name="Accordion.php" hash="3e633cddebf3f7c502d8d69b52b57092"/><file name="Assigned.php" hash="46657200625bbea8f17017cead2a8be4"/><file name="Form.php" hash="096d4192c6b03f86ec7113dc90b38ddb"/></dir><file name="Edit.php" hash="8138bcd7f37fb77365f1f19f813969ca"/><dir name="Grid"><file name="All.php" hash="03f5a39a97b773f8e30a3eb927cc0cf9"/><file name="Customers.php" hash="94dbb5abc8ae1dfa7ac16f4686810a7e"/><file name="Pending.php" hash="046f08f11632ab88da628d54ad428b91"/><file name="Products.php" hash="27039aeb2501fa5d6379524a52297bcb"/></dir><file name="Pending.php" hash="f9d75d43dcf71766ce2624f04fc7f9c3"/><dir name="Product"><file name="Grid.php" hash="74954d069ab71d4efbe262a1c4915684"/></dir><file name="Product.php" hash="d434e1282792816df00779a41b77c097"/><dir name="Store"><file name="Switcher.php" hash="5c832d5e5f1fb28ca6f8c5d250fd0f58"/></dir><dir name="Tag"><dir name="Edit"><file name="Form.php" hash="e3870d4338a56ddc333fadec6488624f"/></dir><file name="Edit.php" hash="3e9552841cb0486f1b07bca133e5cfc2"/><file name="Grid.php" hash="41e8a6118367c742b9180173e8daf02e"/></dir><file name="Tag.php" hash="6e74a75383b9ac5467cdfea6c6672f75"/></dir><file name="Tag.php" hash="dd0d9b1fe5544f616c0f47ac59657180"/><dir name="Tax"><dir name="Class"><dir name="Edit"><file name="Form.php" hash="c4a5a09202ec85a8a5217fb3dd1c9b38"/></dir><file name="Edit.php" hash="dec0c0a5429dd6277e6235f5446de4db"/><file name="Grid.php" hash="01a33ccb33459383a59f288e3242c2aa"/></dir><file name="Class.php" hash="a5c4e0fa6c3fae6e9a67e895a263462e"/><dir name="Rate"><file name="Form.php" hash="3c2e61a925169c6a4f4b2c49f0ddb863"/><dir name="Grid"><dir name="Renderer"><file name="Country.php" hash="ab49dfe7ae7318f2cd4c19f428ff65b3"/><file name="Data.php" hash="ee564a26a28e6c672dc70283b8727156"/></dir></dir><file name="Grid.php" hash="4311cef68b093dd21a464444bb04f182"/><file name="ImportExport.php" hash="51749ab5623e4499e50e534836a571e0"/><dir name="Title"><file name="Fieldset.php" hash="e1d2275ed3ef0683fc2576fa5e4faf57"/></dir><file name="Title.php" hash="4aab833771581272d1ba200432ea00bd"/><dir name="Toolbar"><file name="Add.php" hash="cab32f30562274448ccc28d8d278c037"/><file name="Save.php" hash="97907b0978b7665d45cd8a75acda4b40"/></dir></dir><dir name="Rule"><dir name="Edit"><file name="Form.php" hash="d3117202c01e13c77630fe521b520431"/></dir><file name="Edit.php" hash="075f674a17a8822f20b0d2e7d51ea788"/><file name="Grid.php" hash="d52779e77fc997d22937255d0c6aad1d"/></dir><file name="Rule.php" hash="9312e570058a660557588246e50f1628"/></dir><file name="Template.php" hash="048e4d58a8abf8e3a4c8f5677cf6def7"/><dir name="Text"><file name="List.php" hash="41726f17baf4ba05ceaa79953a0bd611"/></dir><dir name="Urlrewrite"><dir name="Category"><file name="Tree.php" hash="1e01061dac93dcc890e36246ae60b758"/></dir><dir name="Edit"><file name="Form.php" hash="3d703104e5d5e0dc7c2dbd8bdcbba50c"/></dir><file name="Edit.php" hash="abebcb24862a597d023dc47e55e06175"/><file name="Grid.php" hash="951283f25d355557d77ff3fc232c30ca"/><file name="Link.php" hash="a082c052dd2d63e8b47b452090ad7752"/><dir name="Product"><file name="Grid.php" hash="c21688b10e691b43d3c2be26e33068b4"/></dir><file name="Selector.php" hash="42efc1c2c979c7234684da85d0c5f4bc"/></dir><file name="Urlrewrite.php" hash="f6bed2492f4348c239a56b93c2c8cd3e"/><dir name="Widget"><dir name="Accordion"><file name="Item.php" hash="1ac375fb0ad1148f1a3486f1c7dad763"/></dir><file name="Accordion.php" hash="fa8c5ee4d9a67c62860c7995a2f5facd"/><file name="Breadcrumbs.php" hash="f2b60b95e58b36adeb63552424ec00b8"/><file name="Button.php" hash="6dfb5f9a54fcab22606043bdd04d461c"/><file name="Container.php" hash="701d273ac0551c92a87451631ec94cf1"/><dir name="Form"><file name="Container.php" hash="2647161b6a37509a84fc08bff6ce23de"/><dir name="Element"><file name="Dependence.php" hash="12bb49d958b0121ea0bdf6cd3b47a66a"/><file name="Gallery.php" hash="1a9b799b5f8b060be9775a01d7626799"/></dir><file name="Element.php" hash="f0b4276a0c30ecd0f89362c138667690"/><dir name="Renderer"><file name="Element.php" hash="29d1418f521ddb89e24943921c76c4bd"/><dir name="Fieldset"><file name="Element.php" hash="b419b410919759ab61f58dbd86212a2d"/></dir><file name="Fieldset.php" hash="de6bc5059042f678be9014401c1140d8"/></dir></dir><file name="Form.php" hash="8e07b8961c116fdfa109f548c0963b73"/><dir name="Grid"><file name="Block.php" hash="d3415dd6d043edcb8236bcb202a93bdc"/><dir name="Column"><dir name="Filter"><file name="Abstract.php" hash="b99f0dbfe4f3685d8609c3e5e62e2a23"/><file name="Checkbox.php" hash="41eb6bbe5bd4bea08725ade2b9bc254d"/><file name="Country.php" hash="23f713e16b15e7b2b1e8b8202b6aab22"/><file name="Date.php" hash="c143657c6b6b7ebe15abe233e5523918"/><file name="Datetime.php" hash="0b5ec21288cb134916b2a55c07fba169"/><file name="Interface.php" hash="f8709f395b919353186d3a28b2427d12"/><file name="Massaction.php" hash="b0d958db2d2f897510813a0b418e0319"/><file name="Price.php" hash="9d948fa21d31cb67e65a27b60706892a"/><file name="Radio.php" hash="fd316ceb4e867d192ef45382019c54a1"/><file name="Range.php" hash="aa954a9524813a18e450671de7be2a35"/><file name="Select.php" hash="312ac65d14fe5808b94cf01693e73683"/><file name="Store.php" hash="c479999fdd7f63e62a4a2ed7a8b7e85f"/><file name="Text.php" hash="498b987ce2efc08c96c9daf982c7ad93"/><file name="Theme.php" hash="f2f91007375d651411cbfb5d9d31f5d6"/></dir><dir name="Renderer"><file name="Abstract.php" hash="0877927202ba8cb3c007f1e998846c38"/><file name="Action.php" hash="c693f237ebf99daa9d0847253904dce2"/><file name="Checkbox.php" hash="9ffcfeb3859943bf8e21e5ed901f7eb6"/><file name="Concat.php" hash="a0f3dba0a2f719b9d231f5fd6112e9de"/><file name="Country.php" hash="c3ce0bcd5d39be75574ce3014b50874f"/><file name="Currency.php" hash="5381176d3cdfe77c2948bf5b534f402d"/><file name="Date.php" hash="dd112ba85cb251c4ce4acefebcc6d77e"/><file name="Datetime.php" hash="44037bdde740944a80b5d7c67b085155"/><file name="Input.php" hash="c3ca64db8371066aa2313e9d5ae9a2fe"/><file name="Interface.php" hash="9fec60d6ae235d4f050a48f8891397f0"/><file name="Ip.php" hash="a3bc5003397174eee0c4580e522ee5ba"/><file name="Longtext.php" hash="a42d8268677431d06f23b18b73ff0484"/><file name="Massaction.php" hash="48780753058340dcb7d2ad0799886d32"/><file name="Number.php" hash="da8225e2a1282a1966c46e7ac87d61aa"/><file name="Options.php" hash="15ee3eef0f1be48f83e543fd4fddb10d"/><file name="Price.php" hash="e695c582e86897a2b71c8796eb45e370"/><file name="Radio.php" hash="1784e361f47d188c995f7349ee425854"/><file name="Select.php" hash="7445e830f03632a9d4dda2021a3d1cf2"/><file name="Store.php" hash="a29e258b9963d847cffe16577223ee1c"/><file name="Text.php" hash="2f297552e7f0749c75efde13500a75f9"/><file name="Theme.php" hash="282f1e4dcd4833515de87ab0393f6b9b"/><file name="Wrapline.php" hash="2bdb2a2d417fc7d405ee911c40c4b578"/></dir></dir><file name="Column.php" hash="5f37c1b21f74a74aafa9179e95fbfe12"/><file name="Container.php" hash="58fc2e07119b5e4145fefcc4f749118a"/><dir name="Massaction"><file name="Abstract.php" hash="e3394fca7a58c1eddb6188076165c32f"/><dir name="Item"><dir name="Additional"><file name="Default.php" hash="6879cf65e66b360f2163f250e4a3562c"/><file name="Interface.php" hash="04db948fdb1ad2ae5243674869f24b5f"/></dir></dir><file name="Item.php" hash="d6541c34b3d94aece64cf57478569330"/></dir><file name="Massaction.php" hash="0649c03624c79c444cf054ce49d08ba3"/><file name="Serializer.php" hash="cd93824ccd3b24bdb97636cec9bd6013"/></dir><file name="Grid.php" hash="542b30e8c9d360df1160e520137b1a3e"/><dir name="Tab"><file name="Interface.php" hash="61ac6f75ef55994b9409212b7c068fbe"/></dir><file name="Tabs.php" hash="bf410f1dcd6ec5792599d8513eb65e0e"/><file name="Tree.php" hash="8fcf0d8894270461592a1b996a3a1e22"/><dir name="View"><file name="Container.php" hash="48702822606edbc1752eaf8797e2fdb7"/></dir></dir><file name="Widget.php" hash="decb2e463a8f908e4e43245698a6f614"/></dir><dir name="Controller"><file name="Action.php" hash="3ba8923155131f165de4b24cab8b1f34"/><dir name="Report"><file name="Abstract.php" hash="93735d32568b1f392b5fa4a10937392d"/></dir><dir name="Rss"><file name="Abstract.php" hash="b06747180f1212b557f862b729fb4217"/></dir><dir name="Sales"><file name="Creditmemo.php" hash="af189622ec813cf6949cf892dcf6125a"/><file name="Invoice.php" hash="bc00214eeb245421bda96153aafaf19d"/><file name="Shipment.php" hash="5f5cac08a0dfec54a7c4c7039b0e4074"/></dir></dir><file name="Exception.php" hash="44207ed4e9b5d888465e3ec342951647"/><dir name="Helper"><file name="Addresses.php" hash="5efa1e819fa6b6b3276491b040d77283"/><dir name="Catalog"><dir name="Product"><file name="Composite.php" hash="372f822324ef3743ebdaa85a95c68eb2"/><dir name="Edit"><dir name="Action"><file name="Attribute.php" hash="95045d72c50603435d4bb8f7155deb36"/></dir></dir></dir></dir><file name="Catalog.php" hash="e952f09baa412d512b078d855b9f4209"/><dir name="Dashboard"><file name="Abstract.php" hash="30093b0860aabc91f5536fd4804a8a99"/><file name="Data.php" hash="e427b0c5ec57baf11297906ed754b0a4"/><file name="Order.php" hash="103df9c0158567427030a687d228d1f4"/></dir><file name="Data.php" hash="e6d9960369cb287adbaf16cc224f7b15"/><dir name="Help"><file name="Mapping.php" hash="ab759adbe2f9e3187c94c212d4747abe"/></dir><file name="Js.php" hash="82fd6176dd872e8bfa46a4943e6636d1"/><dir name="Media"><file name="Js.php" hash="a7c77ea8858c7a35a545c6f3ae883147"/></dir><file name="Rss.php" hash="a9a4d7bdd91e9d10560205da8ffeacfc"/><file name="Sales.php" hash="8b6034ee70156b8824960f25cacaa4e4"/></dir><dir name="Model"><dir name="Config"><file name="Data.php" hash="4c4206478a3a5b7065481a359dff797e"/></dir><file name="Config.php" hash="2363b4cc646330ce48602ec95cf20dd0"/><dir name="Customer"><dir name="Renderer"><file name="Region.php" hash="e64f33d24ce1acb1fccaf089082930e5"/></dir></dir><dir name="Email"><file name="Template.php" hash="79bfb7dcd80fbb41fecd493c298e2868"/></dir><file name="Extension.php" hash="05c31b0713d19ce57c2b4d05dd9a18f7"/><dir name="Giftmessage"><file name="Save.php" hash="2849a3df15792e773ee0236a353e0692"/></dir><dir name="LayoutUpdate"><file name="Validator.php" hash="1a9e0082789f21e4d205ee5e1af8f5ed"/></dir><dir name="Newsletter"><dir name="Renderer"><file name="Text.php" hash="36fa1832ba5ee4a5f2f86290cda582f1"/></dir></dir><file name="Observer.php" hash="8101ea47383903954f922bcac3050022"/><dir name="Report"><file name="Item.php" hash="249bc4d6c2fe209b5ea8f3872ba04f04"/></dir><dir name="Sales"><dir name="Order"><file name="Create.php" hash="c91499f785f4f39191f978de174b1722"/><file name="Random.php" hash="b40e6c27f9283f934d4f655839126740"/></dir><file name="Order.php" hash="0b7e17e6569bf6dd8c8d26374143b2f2"/></dir><dir name="Search"><file name="Catalog.php" hash="0b11e59e0c4950dfe25e90b0bfe11829"/><file name="Customer.php" hash="5e9563a1ae7abc810c1621305a2903f0"/><file name="Order.php" hash="055f3e4100dd905f559c60a5be7f703c"/></dir><dir name="Session"><file name="Quote.php" hash="ba05387fc32960d10cb0e45286a0447f"/></dir><file name="Session.php" hash="a543f20db68121a0906bebec3ad957dd"/><dir name="System"><dir name="Config"><dir name="Backend"><dir name="Admin"><file name="Custom.php" hash="9a72fab9ce9caa8ef04cf76993160b3e"/><file name="Custompath.php" hash="8ed95aff9688c352ed5def2cc7216375"/><file name="Observer.php" hash="aabc9c2fc39b41823f62c2eebd2544af"/><dir name="Password"><dir name="Link"><file name="Expirationperiod.php" hash="fa69226978a7cc41f139c5efb1da14a7"/></dir></dir><file name="Usecustom.php" hash="52e66d90f8d2aec0c183c5d58457cea6"/><file name="Usecustompath.php" hash="c5f888363c830e0e3546f6826465bce0"/><file name="Usesecretkey.php" hash="8dc5317f4ab19d2265fa1a6b4b69addb"/></dir><file name="Baseurl.php" hash="d883ba04c5294208ca5f739dc4a40567"/><file name="Cache.php" hash="217a5687dd3286d9c9b3cf58f2a35830"/><dir name="Catalog"><dir name="Inventory"><file name="Managestock.php" hash="14a89ee0b26f3dc5b4aff4090eadda51"/></dir><dir name="Search"><file name="Type.php" hash="e923c27c02f96e7915510b6fab3ff6fc"/></dir></dir><file name="Category.php" hash="f944e70e5a075e9f65219f9b37bcceb4"/><file name="Cookie.php" hash="beecbc456b5bcb505cacaecf28fc006a"/><dir name="Currency"><file name="Abstract.php" hash="1fc00525e31cda957aade1c6aeee2338"/><file name="Allow.php" hash="a2c5c466f9b413a072a7976e2fe8b967"/><file name="Base.php" hash="55deb651b2ebd1c0eeaadcc3030847df"/><file name="Cron.php" hash="e223ac8233823981444109ac69ace335"/><file name="Default.php" hash="1220941f500c43c66c9f429ab95a5ac6"/></dir><dir name="Customer"><dir name="Address"><file name="Street.php" hash="2e20de0df187cd66849517466dc3f503"/></dir><dir name="Password"><dir name="Link"><file name="Expirationperiod.php" hash="c73debbe5529ce484eee2a6664764dcf"/></dir></dir><dir name="Show"><file name="Address.php" hash="38b00bdf10d963fbf5be9a0302406861"/><file name="Customer.php" hash="01d91dd5d8eb028c717f319dde677ff2"/></dir></dir><file name="Datashare.php" hash="4bef7e9f6e915c869b7bb3e468415b19"/><dir name="Design"><file name="Exception.php" hash="1b418434347b54e91ea11a94fd07ed74"/><file name="Package.php" hash="6fad5ac9269998768a13ebf7c8f28b90"/></dir><dir name="Email"><file name="Address.php" hash="3ae26dc5453b9cab12263b65f83c2373"/><file name="Logo.php" hash="b4b055cddcbc6f93fa43af8a88421c52"/><file name="Sender.php" hash="d4a0fb1773ca96fa86526799495c1bd5"/></dir><file name="Encrypted.php" hash="a5e3bc1539ffbddcf6ee650bb753c978"/><file name="File.php" hash="f269d665f3a8c7b735ba8e8d63672d31"/><file name="Filename.php" hash="70979f965510f26276c850fce788eea7"/><dir name="Image"><file name="Favicon.php" hash="19d8f4d5d67d9a17ff836fe335d16f34"/><file name="Pdf.php" hash="73076a7f18b04d75c2fc4977687c4137"/></dir><file name="Image.php" hash="eb5e3b2a99384b679d28a5ecb65bcc89"/><dir name="Layer"><file name="Children.php" hash="7f15e3acc71388478f5fe0368c88b497"/></dir><dir name="Locale"><file name="Timezone.php" hash="2a26d9f5e3338e4f0f8e3af45832e940"/></dir><file name="Locale.php" hash="0fec654a0ada04afe93fa53959108a29"/><dir name="Log"><file name="Cron.php" hash="0f3ca3e8ab5ed5bd5346e3b8178367d8"/></dir><dir name="Price"><file name="Scope.php" hash="21f54c017337fec999765785ee93adb8"/></dir><dir name="Product"><dir name="Alert"><file name="Cron.php" hash="fbe701dca5435bca0298b3594efdd397"/></dir></dir><file name="Secure.php" hash="75f06d5e3930f731d1810ecf4040fa6d"/><dir name="Seo"><file name="Product.php" hash="eacb28940d8f1943ddd0bc6a5c6c98bf"/></dir><dir name="Serialized"><file name="Array.php" hash="465549589b59f486e1a2b1610e8c51f8"/></dir><file name="Serialized.php" hash="c60d1f2514fb51c45eb4583581b2ef2a"/><dir name="Shipping"><file name="Tablerate.php" hash="b3b3bd3ee066e48345883bc8c7284b3d"/></dir><dir name="Sitemap"><file name="Cron.php" hash="cd84f70fb65f34de1d7bb105b1d70914"/></dir><file name="Sitemap.php" hash="6fbef301ebe14e2c91eeef01f44f7d9a"/><dir name="Storage"><dir name="Media"><file name="Database.php" hash="9b9502d9ec58868fa6b83e5fc79d5ca3"/></dir></dir><file name="Store.php" hash="aca8ee0d6c7e407ec55570cc18ff272b"/><file name="Symlink.php" hash="9a15c42ff3c5353ed55f5137b8c3e796"/><file name="Translate.php" hash="0a9f0eadbdf8223c9fd630d59a48f1ce"/><dir name="Web"><dir name="Secure"><file name="Offloaderheader.php" hash="21d6657417a1e98b1dbd50cd3c965894"/></dir></dir></dir><dir name="Clone"><dir name="Media"><file name="Image.php" hash="3ac1b8c7a8f63980de8bf747394272c0"/></dir></dir><dir name="Source"><dir name="Admin"><file name="Page.php" hash="2dcd8a52513a711883876224ee6c5e64"/></dir><file name="Allregion.php" hash="1fbac9de5b026fd601b86fdc0e5cd58d"/><dir name="Catalog"><file name="GridPerPage.php" hash="02a52c0d61285b60c32d5681a973289b"/><file name="ListMode.php" hash="0346d08fd7779d3e706cc20a14a39091"/><file name="ListPerPage.php" hash="b9d11b022b805d53a35f3c5be95b9bd1"/><file name="ListSort.php" hash="59aca29e311b6f4cd73a3fdafa32835c"/><dir name="Search"><file name="Type.php" hash="55d156c930a534251dab32395757e997"/></dir><file name="TimeFormat.php" hash="e78f4a50376da5f4bb0d55ecb63324c5"/></dir><file name="Category.php" hash="d310a3a31ba0f8c63b023dd8c7f1fcc8"/><file name="Checktype.php" hash="e523e27f8adab92bc27d85edb7cef249"/><dir name="Cms"><file name="Page.php" hash="d3aeae3a5594dca7bd16b10ad89e55ef"/><dir name="Wysiwyg"><file name="Enabled.php" hash="dc15aa7402520623ff7a993d04a82e7a"/></dir></dir><dir name="Country"><file name="Full.php" hash="48122c72c4eb34afe1471a74e78dc3fb"/></dir><file name="Country.php" hash="1f5754ff1b70ca47a601ec9d6b6221f9"/><dir name="Cron"><file name="Frequency.php" hash="a5175f4b297eb2e465f457c76292cfab"/></dir><dir name="Currency"><file name="Service.php" hash="9804a1f449d3773a0b0071484620217f"/></dir><file name="Currency.php" hash="fbb2930a737860ccb3636136ffe1db4f"/><dir name="Customer"><dir name="Address"><file name="Type.php" hash="aee20f87bab8d750bfc597346ca72eba"/></dir><file name="Forgotpassword.php" hash="2445b9c83a9f6e55be856106c85cd3fd"/><dir name="Group"><file name="Multiselect.php" hash="8e1d29c961825cda6e8865db042e100b"/></dir><file name="Group.php" hash="1e53c280a342b4cae999d831b8ddd412"/></dir><dir name="Date"><file name="Short.php" hash="8b278bb72c56c244210a3ece4c3054c7"/></dir><dir name="Design"><file name="Package.php" hash="baaaecb855ab9c7d44126082c831e18f"/><file name="Robots.php" hash="a2e8c8e61692be022b41524e35415bbc"/></dir><dir name="Dev"><file name="Dbautoup.php" hash="4b1941d1d306dc6af2be43ca1bfdefb4"/></dir><dir name="Email"><file name="Identity.php" hash="64bc2e8b4d778a6d8e20558330d2f7b6"/><file name="Method.php" hash="473ca797528be3d9e133527597f54f05"/><file name="Smtpauth.php" hash="0f6270d9b19fbb06f6d5a3cc4b3a2a68"/><file name="Template.php" hash="b29b38261dd91671497cb8663b0853b7"/></dir><file name="Enabledisable.php" hash="81a7d243afb7a7ae4127325b6d2cb108"/><file name="Frequency.php" hash="575e6895daf761d17ee4bab4906243bb"/><file name="Language.php" hash="7fa90774ae2df6b2e431b8ed01c9b911"/><dir name="Locale"><file name="Country.php" hash="aba15c361ac56c3cd2adff69a5b45ac8"/><dir name="Currency"><file name="All.php" hash="e3f7e6c5a6d52a6bc85b40523a35db6c"/></dir><file name="Currency.php" hash="0a9b47da3e0bd3c9f277b54d8d3808c8"/><file name="Timezone.php" hash="51cc07904fd1608929f11e5b85835081"/><file name="Weekdaycodes.php" hash="a5cf00ad125276e4fd3f86242d7c042d"/><file name="Weekdays.php" hash="fe0043fa190b1f10528b8c9d56139d47"/></dir><file name="Locale.php" hash="724b6cd609273d70290113043a27a91e"/><file name="Nooptreq.php" hash="1f7970e10a3ad304da21fee21c0950a9"/><dir name="Notification"><file name="Frequency.php" hash="7c80b49e84d43ce34794043c8dd15109"/></dir><dir name="Order"><dir name="Status"><file name="New.php" hash="7bcab1d9d7a8b7793ae8da948bf23648"/><file name="Newprocessing.php" hash="e8075d23d12f396b8e0428894af86a2b"/><file name="Processing.php" hash="fd497df34e5ac49d4d62048ade815327"/></dir><file name="Status.php" hash="25d6948207ca120b11b3651ff644535a"/></dir><dir name="Payment"><file name="Allmethods.php" hash="4629ac4f9088842d403525d176690dfa"/><file name="Allowedmethods.php" hash="96675da1c82b3e146cd392f3a1bb0784"/><file name="Allspecificcountries.php" hash="d14af35b787aeaf3f2633f4d66304ce7"/><file name="Cctype.php" hash="62612bd003831821a1602d4ce49b1e9a"/></dir><dir name="Price"><file name="Scope.php" hash="1356d00f77d0fa6dbdb90a0d974285e7"/><file name="Step.php" hash="1dab2a57491b2839ac7716ef88b7cdc7"/></dir><dir name="Product"><dir name="Options"><file name="Price.php" hash="a0c84ce8ba978ef630156959e0b5dc03"/><file name="Type.php" hash="c20c44dbf8063c885e388de0eb2ad17b"/></dir><file name="Thumbnail.php" hash="46491c9be5ecd85337b33b51b26d3de8"/></dir><dir name="Reports"><file name="Scope.php" hash="c6bfc67c88d84f4b30adb94f83bba1e2"/></dir><dir name="Security"><file name="Domainpolicy.php" hash="7631bf64d39e1b68bf05d0cb76a01abc"/></dir><dir name="Shipping"><file name="Allmethods.php" hash="ab9885dde13694d5065544c0edc456bb"/><file name="Allowedmethods.php" hash="40913be5db1f2ec9e239eb4927926bc7"/><file name="Allspecificcountries.php" hash="5242e43b0c2f4907c5dccd05492ae57a"/><file name="Flatrate.php" hash="f5613b3d84039ce90a30fc928a0d8202"/><file name="Tablerate.php" hash="afdeebe2642b148d9e90e9e622096ad8"/><file name="Taxclass.php" hash="0f45581cf3adda47ff3889f0a1727df4"/></dir><dir name="Storage"><dir name="Media"><file name="Database.php" hash="d96400c2e2ced0dd3008ccaf364757d4"/><file name="Storage.php" hash="16e591b972f4b3841cbcf1ce885790d4"/></dir></dir><file name="Store.php" hash="10232c48d66e2644549735eb4606145e"/><dir name="Tax"><dir name="Apply"><file name="On.php" hash="bdb39dce24184d09d50b5e35cef6f060"/></dir><file name="Basedon.php" hash="592c6788bd5390f4ad4826a38487600d"/><file name="Catalog.php" hash="e9b90621307905f9452faaccb13b0cb4"/></dir><dir name="Watermark"><file name="Position.php" hash="d3e2d17de2b2d57534aca4f79f055102"/></dir><dir name="Web"><file name="Protocol.php" hash="1dea95ca27e52decdbd8a338dc8d2762"/><file name="Redirect.php" hash="7ba5f78ac4f044216f3b9aceb808b9ba"/></dir><file name="Website.php" hash="96665c120351a344ec3fdd8a6598fa4c"/><file name="Yesno.php" hash="600ed8f96c7eba056e21612547377b6d"/><file name="Yesnocustom.php" hash="42e39a4459cce6aba6eeb83a76ce540d"/></dir></dir><file name="Store.php" hash="cb173d714c1ec6e7e5ff5d7c90ff4689"/></dir><file name="Url.php" hash="310cc90a9fd659ef641fbc2267080df3"/></dir><dir name="controllers"><file name="AjaxController.php" hash="5a7b3797e9ef2ca0097c83fe868a1d09"/><dir name="Api"><file name="RoleController.php" hash="ebe531ce21f3d9b30a0678f81fabeb47"/><file name="UserController.php" hash="c934a1d0da97db4b20d3b989d34c5eb0"/></dir><file name="CacheController.php" hash="2d17c0b6e2f6c18c2d247c29f230c0af"/><dir name="Catalog"><dir name="Category"><file name="WidgetController.php" hash="8b35918f9a2a3d9c7129baad74e12086"/></dir><file name="CategoryController.php" hash="0a9de0f30a4a37149cd6a19f99812aa2"/><dir name="Product"><dir name="Action"><file name="AttributeController.php" hash="b85ad6500bf470aee94b456189fcd8eb"/></dir><file name="AttributeController.php" hash="74164d7406c1b367c3b066db9c6ef582"/><file name="DatafeedsController.php" hash="6cfd6e07d7e6fd7bda424e9106791bc8"/><file name="GalleryController.php" hash="fd148c927b5922e1f168c7fdcff7a128"/><file name="GroupController.php" hash="a0fb677802ae528c6b9bbf1bfe2c9109"/><file name="ReviewController.php" hash="a6b3116e4bcb42a6119782f6638dd217"/><file name="SetController.php" hash="c0b759fee4fd5a39f2d6550f73506b1c"/><file name="WidgetController.php" hash="ccacb960146224f12e3439fb8d97a1f1"/></dir><file name="ProductController.php" hash="328ad1b8dccec2bc429b10b74d738738"/><file name="SearchController.php" hash="daea0f73460b35816d90afba238563c9"/></dir><file name="CatalogController.php" hash="7fb997bbd75d5d4e97f51c5605a7e5f0"/><dir name="Checkout"><file name="AgreementController.php" hash="4ac302738f4aa364651c58a1a57e70fb"/></dir><dir name="Cms"><dir name="Block"><file name="WidgetController.php" hash="6fe67533f2254d868ab074d71ebd877c"/></dir><file name="BlockController.php" hash="7c377e4d27e00f6ac25906131c572dee"/><dir name="Page"><file name="WidgetController.php" hash="539881fe06abf63fd2c185f71c6b71f1"/></dir><file name="PageController.php" hash="3d7454e5afc07d7c722e0f34e76b7d9b"/><dir name="Wysiwyg"><file name="ImagesController.php" hash="fdc9fc35ed49619bb784acd1867f3d05"/></dir><file name="WysiwygController.php" hash="6873086a0cfbc59ffe9ba56a9dd78927"/></dir><dir name="Customer"><dir name="Cart"><dir name="Product"><dir name="Composite"><file name="CartController.php" hash="d596bbc829a10f20a379ffaf63ef65f2"/></dir></dir></dir><file name="ConfigController.php" hash="e67ab7bac05f8eb96cf158b25540ee03"/><file name="GroupController.php" hash="21fed18ba095a75d46a54f64c3835353"/><file name="OnlineController.php" hash="ef4965523714e1e78fa9919f7101ce27"/><dir name="System"><dir name="Config"><file name="ValidatevatController.php" hash="552587306f03e52da672b74f3026d869"/></dir></dir><dir name="Wishlist"><dir name="Product"><dir name="Composite"><file name="WishlistController.php" hash="7de9d8c532581e4f0672f489e4a79f15"/></dir></dir></dir></dir><file name="CustomerController.php" hash="0c4f66abdcea9c6d9b7f440d78edc5c5"/><file name="DashboardController.php" hash="cb1ba21fa9317cc15ca1b814e90de69a"/><file name="IndexController.php" hash="bb7b651d76c8a875428f3c7911cf94c7"/><file name="JsonController.php" hash="0ca170d1505a2a4fb59af02408361f2d"/><dir name="Media"><file name="EditorController.php" hash="a2302405c906005930299086871fa603"/><file name="UploaderController.php" hash="3fa26d34f883159eabf0d2d1ff2c1a2c"/></dir><dir name="Newsletter"><file name="ProblemController.php" hash="a172b61ad356aabaa4b256608be0e594"/><file name="QueueController.php" hash="e420ddab5547b9df574c5139f5b9f836"/><file name="SubscriberController.php" hash="2388c51a7ff508cbce6179b011d177c4"/><file name="TemplateController.php" hash="b3e2fa20241263496b8eaa2b7266c7f2"/></dir><file name="NotificationController.php" hash="976071f7083b095a328e5622eee442cc"/><dir name="Permissions"><file name="BlockController.php" hash="2608dd88b73bc04f96fe70e076c7da51"/><file name="RoleController.php" hash="019952509d4dae9fafd3fa1024af27f1"/><file name="UserController.php" hash="e899f2277f578cbae0fa0e812e710996"/><file name="VariableController.php" hash="d01073a431417791526ad818b4371493"/></dir><dir name="Poll"><file name="AnswerController.php" hash="7376ba3ba1ebf8e7a18e5a03286e9f60"/></dir><file name="PollController.php" hash="c6d10f8210ea4d04fe311c7671e6d1a4"/><dir name="Promo"><file name="CatalogController.php" hash="5eb839a68d088fc7025f02a1a0001a47"/><file name="QuoteController.php" hash="226f6f88feda67f894caab6332f9d206"/><file name="WidgetController.php" hash="7cf2e09f792a292900207bd082e1aeac"/></dir><file name="PromoController.php" hash="e30837333c4c67d8165007aa2feab35b"/><file name="RatingController.php" hash="edaa7a0e1a01f826aa268ae40a46945f"/><dir name="Report"><file name="CustomerController.php" hash="31b219ae4ba50f4231c4cb45b9feabbd"/><file name="ProductController.php" hash="ab4e8d0060b1c77d08c4db7973b8b376"/><file name="ReviewController.php" hash="460aaa889e3ec75932cf01de98be083c"/><file name="SalesController.php" hash="378fc9ffcaf9477a2f6a85a7fab449b2"/><file name="ShopcartController.php" hash="22390ff4c733f3a3b9671b009d76ddd2"/><file name="StatisticsController.php" hash="5d30167b6686d1ff8f10da6ef6ff5833"/><file name="TagController.php" hash="195c825b6d52f786752d2264210df4ab"/></dir><file name="ReportController.php" hash="bc571493b15f2aeddbbc8b5fc9756a20"/><dir name="Rss"><file name="CatalogController.php" hash="e455ca6991a22325abf3a8b81570c237"/><file name="OrderController.php" hash="ad9f3e5b18868092ba0ae2c2a7fd59ea"/></dir><dir name="Sales"><dir name="Billing"><file name="AgreementController.php" hash="9171c69e6ebe23335ec9f06f24ab53f4"/></dir><file name="CreditmemoController.php" hash="b6facb6394f9ffb6b8007396702243f5"/><file name="InvoiceController.php" hash="3ee8a06cf0fb4328e2dd29f7a681c7eb"/><dir name="Order"><file name="CreateController.php" hash="e604a188139e556fee16e67a8d7ca68f"/><file name="CreditmemoController.php" hash="4187e62788a9f3159cea9d59b3543cf6"/><file name="EditController.php" hash="2eca9986b069dedf221126f5fd02e706"/><file name="InvoiceController.php" hash="a74dc269179ba77c8685254adf24b2ad"/><file name="ShipmentController.php" hash="1736e79b4f69023b576fe9196b81b1dd"/><file name="StatusController.php" hash="336fa850f4d08f34ba23957a0ac51bf4"/><dir name="View"><file name="GiftmessageController.php" hash="14b10af7a53b27f709dda510855c61cf"/></dir></dir><file name="OrderController.php" hash="0664c0fe82684bd4e6d30f9bfdec6693"/><dir name="Recurring"><file name="ProfileController.php" hash="0a1ef81ae9c69e4b8a7d4bdc3b474b64"/></dir><file name="ShipmentController.php" hash="f77a07dd2aaffdb419b128dcd7a43ff5"/><file name="TransactionsController.php" hash="ff60fb56c197aa26edb66d09dc485d97"/></dir><file name="SalesController.php" hash="c491e545c8b8333953489a787cdf2312"/><file name="SitemapController.php" hash="c0c57823745bde275c2116ba771c9489"/><file name="SurveyController.php" hash="22851083d8c816676d22d45ad652c609"/><dir name="System"><file name="AccountController.php" hash="dc2449b19bc120ada582b010a65bf244"/><file name="BackupController.php" hash="48357cccbae6f116ee5ddb9e03083671"/><file name="CacheController.php" hash="6e3c92ae2fb7f8dd70e7913d04733530"/><dir name="Config"><dir name="System"><file name="StorageController.php" hash="adb18b1a46d36eb7e3b76aec6e23724a"/></dir></dir><file name="ConfigController.php" hash="430e0be3cf04c2675ef8677aecfb3864"/><dir name="Convert"><file name="GuiController.php" hash="02f545c596531dafa55d5a0f03898271"/><file name="ProfileController.php" hash="c2e94de74c9dd4fb980bd8bda1abf0e0"/></dir><file name="CurrencyController.php" hash="47f3d181cd6c7d376196cb174c40ae4f"/><file name="DesignController.php" hash="ca36818c226ec2f9e9026ab5199e1fd9"/><dir name="Email"><file name="TemplateController.php" hash="482681d27a4f62dc03377abe8ac96518"/></dir><file name="StoreController.php" hash="b81f6c51aa31f996916ed2d229a9e293"/><file name="VariableController.php" hash="bb26c6bde2237af3075522df35f9f16c"/></dir><file name="SystemController.php" hash="df9e8a4ca6fdda1873fc9140500dd305"/><file name="TagController.php" hash="b7094e346feb452ff4f2edffd88c5664"/><dir name="Tax"><dir name="Class"><file name="CustomerController.php" hash="44181464b9076b6efb12d42c503cb754"/><file name="ProductController.php" hash="af1043ce13870b6930d619d65d02da54"/></dir><file name="ClassController.php" hash="599c1e9515eceeb6327a13240afb5e35"/><file name="RateController.php" hash="613f78cd5df1b03a1c98fd3a6ba74657"/><file name="RuleController.php" hash="4e9877e2fa290b25f206549f7f7f1389"/></dir><file name="TaxController.php" hash="ba5cef021e3bee1f5aa6600fdbe3da2f"/><file name="UrlrewriteController.php" hash="2509696e2d596e38acadf0c9946afb3e"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c9e5ea72c70800629306e7f1eccced0b"/><file name="config.xml" hash="390cf42cfcadeb4947031ad469906b76"/><file name="jstranslator.xml" hash="0c888565406549cc72904a636ffdcd63"/></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Mage_Adminhtml.csv" hash="6b21dbb385419c62dd4a3c61c9bf64fc"/></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_Js_Calendar</name><channel>community</channel><min>1.51.1.16</min><max>1.51.1.16</max></package><package><name>Lib_Js_Ext</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_LinLibertineFont</name><channel>community</channel><min>2.8.14.16</min><max>2.8.14.16</max></package><package><name>Lib_Js_TinyMCE</name><channel>community</channel><min>3.5.11.15</min><max>3.5.11.15</max></package></required></dependencies>
-</package>
diff --git a/var/package/Mage_Core_Adminhtml-1.9.4.0.xml b/var/package/Mage_Core_Adminhtml-1.9.4.0.xml
new file mode 100644
index 0000000..5aa23d7
--- /dev/null
+++ b/var/package/Mage_Core_Adminhtml-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Mage_Core_Adminhtml</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Magento Administration Panel</summary>
+    <description>Magento Administration Panel</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:07</time>
+    <contents><target name="magecore"><dir name="Mage"><dir name="Adminhtml"><dir name="Block"><file name="Abstract.php" hash="8806fa4ecf7bf067bbf1fcd7f1823c2d"/><dir name="Api"><file name="Buttons.php" hash="314177e483ba9bfcda54a53204655552"/><file name="Editroles.php" hash="a67fc165250ada3054e77c7b2b744d5a"/><file name="Edituser.php" hash="a2ffedd09bf0cf135b22c6923ce3191e"/><dir name="Grid"><file name="Role.php" hash="74a101ea38940feb0305b7634727e0ad"/></dir><dir name="Role"><dir name="Grid"><file name="User.php" hash="6524240d05cad8f8596e469da9f5c46f"/></dir></dir><file name="Role.php" hash="a664b5c117989ac16ce1764d90cda9f8"/><file name="Roles.php" hash="f3460089fc5aa7ffa7397c5b29fbe6da"/><dir name="Tab"><file name="Roleinfo.php" hash="e56f4c8e096e824470ccccee9cf51c43"/><file name="Rolesedit.php" hash="55c4f22af226e719d8d2b5eac16f80a2"/><file name="Rolesusers.php" hash="8822621843ff9f3418e8e4caaa03a295"/><file name="Userroles.php" hash="ea1f5256d1a622c51633e72f96b11926"/></dir><dir name="User"><dir name="Edit"><file name="Form.php" hash="b7f5c52dcc1ce3282dadc3eb0634097f"/><dir name="Tab"><file name="Main.php" hash="14e9bc7497923208e006460246adf99e"/><file name="Roles.php" hash="104d49f856280f8fed5a0f578eb3ece1"/></dir><file name="Tabs.php" hash="0604ea459c83ebf74c1e6a9c07a8ac1f"/></dir><file name="Edit.php" hash="bb6065d8bcb146ba1a5b592a9bbbaf65"/><file name="Grid.php" hash="eadf6097acdca68b33d657fd2da5c0a2"/></dir><file name="User.php" hash="27b8a4e95ce9787cd7186978f86d4bdb"/><file name="Users.php" hash="1037a64678b2b8cd122928935c2da5ab"/></dir><dir name="Backup"><file name="Dialogs.php" hash="036a1bd12bd784b6f93899c39d06b072"/><file name="Grid.php" hash="4751549b8d085c91b4f8d423cd116290"/></dir><file name="Backup.php" hash="d1e3ad3ed2cf8075616c88a7297b7d1d"/><dir name="Cache"><file name="Additional.php" hash="5ec255f6146e03b9024c3c99ea34f90a"/><file name="Grid.php" hash="a0184efcd8d09b943cc18936ca232133"/><file name="Notifications.php" hash="4bff39aeefd4f298502f9e3c13fc7b4a"/></dir><file name="Cache.php" hash="3d1fb11560c2c74aff649fa784599d90"/><dir name="Catalog"><dir name="Category"><file name="Abstract.php" hash="c952be2913085f69488927b8bb6f2f66"/><dir name="Checkboxes"><file name="Tree.php" hash="42830b006c7739c14deb63a25507c58c"/></dir><dir name="Edit"><file name="Form.php" hash="fdef9a0013f663496d88219074ebb010"/></dir><file name="Edit.php" hash="74c11841cdbb8078921abbc770e66c4f"/><dir name="Helper"><file name="Image.php" hash="6ee023da9f4558dccec489aa6909592e"/><file name="Pricestep.php" hash="e5410530e4d352ebf811800319178f1e"/><dir name="Sortby"><file name="Available.php" hash="a1d1966c139c466daad8841e388d900e"/><file name="Default.php" hash="12a0a94ca2aa87fdbe555007d7ff1b37"/></dir></dir><dir name="Tab"><file name="Attributes.php" hash="27dc928629025a551037c718a49cdd0d"/><file name="Design.php" hash="37da8d7465aee6246ead6a5f115f8848"/><file name="General.php" hash="484c9431aae47436419f49cfeb0d1e44"/><file name="Product.php" hash="32f1ff555c8f7111312b49c7b1c4844d"/></dir><file name="Tabs.php" hash="83c70ffb9629c8b58d703880b998f631"/><file name="Tree.php" hash="1d0b70578389e31df91ef29656ebc5f7"/><dir name="Widget"><file name="Chooser.php" hash="af29b5edf4ffd47a08e4f04930de2322"/></dir></dir><dir name="Form"><dir name="Renderer"><dir name="Attribute"><file name="Urlkey.php" hash="ff69c8e2daa9e63d3053f8de8e433717"/></dir><dir name="Config"><file name="DateFieldsOrder.php" hash="f4aa2523db0ec199b675826a276d4eef"/><file name="YearRange.php" hash="19eb0dc5aac7008aa158c20593fe1f73"/></dir><dir name="Fieldset"><file name="Element.php" hash="fe445f4119b469427d0ddb82ef6d0a5d"/></dir></dir></dir><file name="Form.php" hash="cc0529c03910aae1a4f8864b208835aa"/><dir name="Helper"><dir name="Form"><dir name="Wysiwyg"><file name="Content.php" hash="ed2b992dbb3e35d2b53908f3ae61f3fe"/></dir><file name="Wysiwyg.php" hash="78e8a96aa71401732436742d422ba41b"/></dir></dir><dir name="Product"><dir name="Attribute"><dir name="Edit"><file name="Form.php" hash="5ab50a6f32d205a2fd6b01853c526d1f"/><dir name="Tab"><file name="Front.php" hash="3de471c33114ff3c4356776558a27093"/><file name="Main.php" hash="a9691fc5cf89a61e399c91ad478ee7dc"/><file name="Options.php" hash="1366c27c928649de43e5f60819a12f59"/><file name="System.php" hash="c4be263ded4c331c25dcb06bc8241121"/></dir><file name="Tabs.php" hash="32594f40561239d5739a05d6333d35d7"/></dir><file name="Edit.php" hash="8998b1ff611debb250c07675ebb25e1c"/><file name="Grid.php" hash="824acc4402594b5d668b0a2cc7693059"/><dir name="New"><dir name="Product"><file name="Attributes.php" hash="0d8df5753ec6395f6e040489fc924c53"/><file name="Created.php" hash="272b92f03dcb132bd93cbce18c4717e4"/></dir></dir><dir name="Set"><file name="Grid.php" hash="8235e7536fb95f457c7804bdb359e67e"/><dir name="Main"><file name="Formattribute.php" hash="72788cb0c35e83b16cd297c72816e271"/><file name="Formgroup.php" hash="1357da9d086b7cbea716beaeb4dae246"/><file name="Formset.php" hash="811159896ff795a3f0158e227534fecf"/><dir name="Tree"><file name="Attribute.php" hash="a0c77fed4a8649aa5fe6cfffc186edd2"/><file name="Group.php" hash="f94a1f39ee14d5abb5d8f44e2d97b700"/></dir></dir><file name="Main.php" hash="87425ca70751a94f82cbb131c043c10f"/><dir name="Toolbar"><file name="Add.php" hash="b6948be8c4e92b8ea10edce28dcef91c"/><dir name="Main"><file name="Filter.php" hash="764f4f5e7ed0c87e42f5d9f295ead025"/></dir><file name="Main.php" hash="8ac0042772c63c554242405a190924be"/></dir></dir></dir><file name="Attribute.php" hash="97a860d3c3875affd812362b8a1138dd"/><dir name="Composite"><file name="Configure.php" hash="536bb87840aceb2ad9b8351b8463f4cc"/><file name="Error.php" hash="6c3e478bbac4b301f5a0cf4073432c54"/><dir name="Fieldset"><file name="Configurable.php" hash="53c7bf96d856185b689a2f79514d33ae"/><file name="Grouped.php" hash="b53f2fe7e8686e8f5dfa9864bebf07ee"/><file name="Options.php" hash="2590d50c524e414fb9faaa2fb2dde011"/><file name="Qty.php" hash="2a00e29ed9077301533908d36ecfc770"/></dir><file name="Fieldset.php" hash="c10b07158433cf6139e498f6d220285c"/><dir name="Update"><file name="Result.php" hash="82ad1be2457016dc38a011c7e41e9b25"/></dir></dir><file name="Created.php" hash="5b1e14203080ccec46695956256e9e0c"/><dir name="Edit"><dir name="Action"><dir name="Attribute"><dir name="Tab"><file name="Attributes.php" hash="e7ec07231959a9f8b1021197e3b2b357"/><file name="Inventory.php" hash="7ef543269aa2349ce84f4e972405052d"/><file name="Websites.php" hash="4884477aeb158616d346b06f8cff3c6e"/></dir><file name="Tabs.php" hash="36ec4c5454d6a364028a1317f7de5f0d"/></dir><file name="Attribute.php" hash="b8e61c893d43d8ff7f44e01569292a37"/></dir><file name="Js.php" hash="62c4ec3a54f2e93abf767f332b2a3962"/><dir name="Tab"><dir name="Ajax"><file name="Serializer.php" hash="3b47cf7e093745798e144250c5162ae1"/></dir><dir name="Alerts"><file name="Price.php" hash="089e6bc761ed49c8ad2ec7ba26c7fb73"/><file name="Stock.php" hash="e06ce13d6445624469e8fd2206a29647"/></dir><file name="Alerts.php" hash="b61ffb81888eaa0316a81a604379e208"/><dir name="Attributes"><file name="Create.php" hash="3f7f954930e3e7b749ed292f309caa1c"/></dir><file name="Attributes.php" hash="d1bcd002acea03dca275a06f4cac16e4"/><file name="Categories.php" hash="40a692fe90176aabc59046e97654e401"/><file name="Crosssell.php" hash="664656ac9e319f86bfee33c97545a0f1"/><file name="Inventory.php" hash="64e56bcd189081003f4c395be263f6e2"/><dir name="Options"><file name="Option.php" hash="4582b6c3b2400202ed73a0930a40f8f2"/><dir name="Type"><file name="Abstract.php" hash="818f94de76f82a67d2471051d7442424"/><file name="Date.php" hash="39885b96f8723368ef77181a7b3fbf1c"/><file name="File.php" hash="0ab404bab696d9be91928566adabf3a6"/><file name="Select.php" hash="6a4d6248e19a61d9f5c7cac597dc719c"/><file name="Text.php" hash="096cc18189256a1e9f4a4e53806c4ea7"/></dir></dir><file name="Options.php" hash="9a7d5cb98581857bbe1d1e8ddb74ee7b"/><dir name="Price"><dir name="Group"><file name="Abstract.php" hash="e2ef8472cf860ec16800b34046922aa8"/></dir><file name="Group.php" hash="d16078959e29b11e60b1e76a82b506f9"/><file name="Recurring.php" hash="3d50b901f1d4f965dbc6cdb5eca5ff0a"/><file name="Tier.php" hash="aa66089b33d43ac4d7ad754e0ebd4b5f"/></dir><file name="Price.php" hash="17275003ff0c19185b1f722306b37031"/><file name="Related.php" hash="e72c8c2a39a4d3ae1c2968589fcbb1ff"/><file name="Reviews.php" hash="064f4b3853d3dad28f61b41082b027a9"/><file name="Settings.php" hash="e0950496755a9f8c0b9a55c9b54771ec"/><dir name="Super"><dir name="Config"><dir name="Grid"><dir name="Filter"><file name="Inventory.php" hash="10cbc7c845b97d17d9bd90e01a379ea6"/></dir><dir name="Renderer"><file name="Checkbox.php" hash="ae009d6f1acb453fcee25b40ad240506"/><file name="Inventory.php" hash="99daa1ecdc5ecc2747c0bbb8c7112fb5"/></dir></dir><file name="Grid.php" hash="c98440cb58cc470c261f108841134c9b"/><file name="Simple.php" hash="1ff50725fd2958d6e20eb5713e6e854a"/></dir><file name="Config.php" hash="2e9e39a0472dca2b3f59966d11021f86"/><file name="Group.php" hash="1cd62c22d540ee8e40e0119a7a5cb059"/><file name="Settings.php" hash="7b20ee5f3b058b9736e35d723b348029"/></dir><dir name="Tag"><file name="Customer.php" hash="1199cdb139ad8201214fe7a0419c685c"/></dir><file name="Tag.php" hash="352bb1e1d536cab57b4280de2ce456b8"/><file name="Upsell.php" hash="2e9663a201e50de3bfe3cc292d9e9189"/><file name="Websites.php" hash="9e9cfc3b81e640725be5b6e02c9d3cfd"/></dir><dir name="Tabs"><file name="Configurable.php" hash="6085e32381fb2612ddea1a54a89e1caf"/><file name="Grouped.php" hash="87da69d6b67def224e86326b19cd6ac5"/></dir><file name="Tabs.php" hash="3fdbe6b1b94dfb0ccbc56d7ffa7f4326"/></dir><file name="Edit.php" hash="b501e75c51e8204b9baa954d61848569"/><dir name="Frontend"><dir name="Product"><file name="Watermark.php" hash="c81c187cb29b659a6aef01f1ab535713"/></dir></dir><file name="Grid.php" hash="0f561a7c6f0a9aba3994922216f8ad24"/><dir name="Helper"><dir name="Form"><file name="Apply.php" hash="0f1363899f7655b233e826a7215d5f4f"/><file name="Boolean.php" hash="93bf215159eb1308e315ad8141b50053"/><file name="Config.php" hash="b43b82224566766034373156e313de21"/><dir name="Gallery"><file name="Content.php" hash="fb36c29a35890b693cdd7ffb36b1dbd7"/></dir><file name="Gallery.php" hash="3bb08d8826aa08bbaf6f0e5d689a41ab"/><file name="Image.php" hash="5c0a06796c738b29738b8f45d1afd5e6"/><dir name="Msrp"><file name="Enabled.php" hash="8248490c5c3151787744e04462032b82"/><file name="Price.php" hash="38d46e644e7f0db3e5b893f27f49f525"/></dir><file name="Price.php" hash="f278a7db25a13a027ea25e78d746f322"/><file name="Weight.php" hash="4f0b58df8846b52df64109ca55b08faf"/></dir></dir><file name="Price.php" hash="740839608dd1244d32ef2ca26810898e"/><dir name="Widget"><dir name="Chooser"><file name="Container.php" hash="d4c30a3faa5c3f73707d30c0b7d687cf"/></dir><file name="Chooser.php" hash="fdbb886262f31e134031d77a8311b886"/></dir></dir><file name="Product.php" hash="7c844629bb172d2a510d8549d5fcfb38"/><dir name="Search"><dir name="Edit"><file name="Form.php" hash="19ff5e62cde4d4f75585a6bd3f980660"/></dir><file name="Edit.php" hash="75ca1935d14c89d7b077924a543c0f15"/><file name="Grid.php" hash="95e20704a061de4ec65c3b4c048202f8"/></dir><file name="Search.php" hash="d95b820a68dee749892a655714b75a16"/></dir><file name="Catalog.php" hash="ce5a2cf9a034e0a8926b84811c9ce707"/><dir name="Checkout"><dir name="Agreement"><dir name="Edit"><file name="Form.php" hash="2870329f50e032ca3be556c587835dc3"/></dir><file name="Edit.php" hash="7aa00b6829c6aaa42517159e03ba8050"/><file name="Grid.php" hash="a344b7faf6cb198868305a6d0be42430"/></dir><file name="Agreement.php" hash="127799b649c14d8040be957b67711f19"/><file name="Formkey.php" hash="ccf7cfaeeea137f9ff13aab29179b0b0"/></dir><dir name="Cms"><dir name="Block"><dir name="Edit"><file name="Form.php" hash="ea5ca609d2e3df4e021f2cebb6b211ff"/></dir><file name="Edit.php" hash="4fbb998ae410ef1e4ee6d8090b61670a"/><file name="Grid.php" hash="c35edb4840d079cf660b8e2eab483044"/><dir name="Widget"><file name="Chooser.php" hash="8dc62a9dc661de869f69894f0d9807b1"/></dir></dir><file name="Block.php" hash="57712596a93b882e7cd7386bdc00f914"/><dir name="Page"><dir name="Edit"><file name="Form.php" hash="ed73c4aeaed92f0b8b804eafb9096763"/><dir name="Tab"><file name="Content.php" hash="8b0ff0d6694ecf4cb77aa407ebef3082"/><file name="Design.php" hash="2a6a997c15727a589982e858073ca71a"/><file name="Main.php" hash="13cd7cc038de4f5f7c160b6a12304512"/><file name="Meta.php" hash="3396c6a4d9bf9df78a4efe26a5f2057e"/></dir><file name="Tabs.php" hash="d7c653bc13f03ce9f38fb89d1c60097c"/></dir><file name="Edit.php" hash="413581f1521e0a3225bc30a1d5c9428b"/><dir name="Grid"><dir name="Renderer"><file name="Action.php" hash="82ee47503382870703952244e2293517"/></dir></dir><file name="Grid.php" hash="849ecd981f80b2b05a6fbcb402f93d14"/><dir name="Widget"><file name="Chooser.php" hash="e884ff798c9eef8364721ca9af87882f"/></dir></dir><file name="Page.php" hash="49cb99b5286dcd397e0af9e0b23250da"/><dir name="Wysiwyg"><dir name="Images"><dir name="Content"><file name="Files.php" hash="1163853c0068a0f6d227802fbe8dea70"/><file name="Newfolder.php" hash="e214bdce0908f034aebcb500080eaac8"/><file name="Uploader.php" hash="eb46366072c73eb7157bd539e3800405"/></dir><file name="Content.php" hash="c875dbec8d6ef0382538920d88b150a7"/><file name="Tree.php" hash="aa39816c696aaf7b681fd15034c0a731"/></dir></dir></dir><dir name="Customer"><dir name="Edit"><file name="Form.php" hash="0c289b4fd0a89bfec5a71772d3e6a453"/><dir name="Renderer"><file name="Adminpass.php" hash="32bf316dc52322a59510a83638bfb30c"/><dir name="Attribute"><file name="Group.php" hash="ea7c4d23b59371529440d060728c27d9"/></dir><file name="Newpass.php" hash="552b26b7d447881d577ceebdb594e015"/><file name="Region.php" hash="b3a5cf903c23e96d5387da1052943829"/></dir><dir name="Tab"><file name="Account.php" hash="cb80de35f033c6018df0aa07c5d58bfb"/><file name="Addresses.php" hash="c5ce493dd7d0f3ca64dedf6b46db1d6c"/><file name="Cart.php" hash="dbcd7a63f8a9d777014b7da117337709"/><file name="Carts.php" hash="760e68993751df9c568333bd13c40036"/><dir name="Newsletter"><dir name="Grid"><dir name="Filter"><file name="Status.php" hash="e32c86d186a0f9acd70344b4e1566c7b"/></dir><dir name="Renderer"><file name="Action.php" hash="0e431d80248283b2ae52707cbd397705"/><file name="Status.php" hash="1fe3941bc5f6f0736173e13bd059f1db"/></dir></dir><file name="Grid.php" hash="ec780b4c8ceaaa1f02ce48fbda58faeb"/></dir><file name="Newsletter.php" hash="202d74115632b72daa8f42d97a57b7a4"/><file name="Orders.php" hash="b651ce4f5c30c443b6a70b8e7b371d93"/><file name="Reviews.php" hash="0b6bbe5289881c0f5bd039ccef57dc9a"/><file name="Tag.php" hash="0764367a0636cb632b4103b95f487112"/><file name="Tags.php" hash="52c4a09334625c29534428b5af5c8d38"/><dir name="View"><file name="Accordion.php" hash="f81336d13723d8f527ec48c1ebdeb31a"/><file name="Cart.php" hash="f00d19890687bc12e83c27bbf2bdc329"/><dir name="Grid"><dir name="Renderer"><file name="Item.php" hash="19f6cf2f2d8e23b173e33b2b9d604258"/></dir></dir><file name="Orders.php" hash="23bb04733b29a2357b44e036653ee854"/><file name="Sales.php" hash="e11c52a84f4621d8e24a55596f03a05a"/><file name="Wishlist.php" hash="01601f4e626a08ab539a417396e3e616"/></dir><file name="View.php" hash="2a31077590dc4943008ba9d9ccbdf1b3"/><dir name="Wishlist"><dir name="Grid"><dir name="Renderer"><file name="Description.php" hash="e9ac1bf2699e79903cb6c811663dce32"/></dir></dir></dir><file name="Wishlist.php" hash="9a52b70a7788a3c425fb136978fc46c4"/></dir><file name="Tabs.php" hash="5fe3722dcb5d09048cc876d2c2a14d63"/></dir><file name="Edit.php" hash="42a26f8ed4e680031c6674d8731cb235"/><dir name="Form"><dir name="Element"><file name="Boolean.php" hash="4cbaac7ec7349ae54619ca89e459024e"/><file name="File.php" hash="7432ad033bd39dcec8b4584ddfb2aaab"/><file name="Image.php" hash="0e79379e17e64098679c4455f58deee3"/></dir></dir><dir name="Grid"><dir name="Filter"><file name="Country.php" hash="5f517b81692e7718e05fbc99ed7f84a6"/></dir><dir name="Renderer"><file name="Multiaction.php" hash="af4c89a70fbe4d26dc8db4279f97dbf0"/></dir></dir><file name="Grid.php" hash="06ba05f38c0b4a8883ead63482cb4ecf"/><dir name="Group"><dir name="Edit"><file name="Form.php" hash="0cadbc7ebb1df472f28c54dbb44fe5e6"/></dir><file name="Edit.php" hash="820b328a15292116341be27a3d829e72"/><file name="Grid.php" hash="5bb20efe160ad515ed3ae642ec6a397a"/></dir><file name="Group.php" hash="6ca9df8630e23750c0340f6c3639936b"/><dir name="Online"><file name="Filter.php" hash="25def0b452913c29fdada85b28cedcca"/><dir name="Grid"><dir name="Renderer"><file name="Ip.php" hash="b994acd83317e6d3a39950b7893f0a67"/><file name="Type.php" hash="16aa8fbdc1cdeb0bb3cc2bed78a0b878"/><file name="Url.php" hash="6d9181705db8e74742bb7e9490de76d1"/></dir></dir><file name="Grid.php" hash="3132fde935fcf5f91033d985c3c7dcd9"/></dir><file name="Online.php" hash="89bdbc6f33a15036792e717dfda4a4a0"/><dir name="Sales"><dir name="Order"><dir name="Address"><dir name="Form"><dir name="Renderer"><file name="Vat.php" hash="62836393b817252569217cec61e3584e"/></dir></dir></dir></dir></dir><dir name="System"><dir name="Config"><file name="Validatevat.php" hash="f905c4557329ce6802c8a8abc2d9fff3"/></dir></dir></dir><file name="Customer.php" hash="425fe36c6debba08b77538f26a5c1adf"/><dir name="Dashboard"><file name="Abstract.php" hash="d55265571d05fe5c6ec98d585838bd2e"/><file name="Bar.php" hash="7f89a11678c6787547cffe13fe7e4ae7"/><file name="Diagrams.php" hash="9c207f0bc1d304d761a80df2e88c4093"/><file name="Graph.php" hash="6deb593ae9e725e80d60e7f6b6bc4671"/><file name="Grid.php" hash="1fb286a315624cd1f055bbc03724a820"/><file name="Grids.php" hash="60f08bc998bab01615e814a1c960b6eb"/><dir name="Orders"><file name="Grid.php" hash="b475871f31c7cf78de7e57236f203f94"/></dir><file name="Sales.php" hash="24f1f6bdaeb1729d52faf720b72ae122"/><dir name="Searches"><file name="Last.php" hash="c171fc44097e31c7bc6575b328e55552"/><dir name="Renderer"><file name="Searchquery.php" hash="d9a796c5175fff8e1dfddf94f6f7bffc"/></dir><file name="Top.php" hash="436c2ff96aa9d9c44e5f3a4242f0fa95"/></dir><dir name="Tab"><file name="Amounts.php" hash="f28f8d6d84eab07f116592e855818181"/><dir name="Customers"><file name="Most.php" hash="943e9f0f6a332e2004154d7fdc860a71"/><file name="Newest.php" hash="4d5b87b861a60722148b9157d085ce91"/></dir><file name="Orders.php" hash="b7d58a1db078a8ab9f88988ee82516d0"/><dir name="Products"><file name="Ordered.php" hash="9fbb836a88175a252e1eed16855d7aa7"/><file name="Viewed.php" hash="21892723be536c455108696c030708c7"/></dir></dir><file name="Totals.php" hash="b35bf6bc86642181329d7c6a4063b0d6"/></dir><file name="Dashboard.php" hash="4330555661b77277854314fd963bfc0d"/><file name="Denied.php" hash="f18754e566f29562164e9f4f2154fb7e"/><dir name="Html"><file name="Date.php" hash="b867dbb838bb7b751c9ab4fadd0691d5"/><file name="Select.php" hash="b90d108fbdc632fecec28f588d3c4957"/></dir><dir name="Media"><file name="Editor.php" hash="904734bc8d1f1d535b8446b1cb7bc96e"/><file name="Uploader.php" hash="75fb544b5db702c425830692e3111891"/></dir><file name="Messages.php" hash="63b9051e067080a4484d3254509e2d32"/><dir name="Newsletter"><dir name="Problem"><dir name="Grid"><dir name="Filter"><file name="Checkbox.php" hash="bfb315eba5ce6c24c43aa390f824a2c8"/></dir><dir name="Renderer"><file name="Checkbox.php" hash="b6e6018adfb853dd8f972922467d01de"/></dir></dir><file name="Grid.php" hash="77c982c969880ccc4ec3b3279f890eab"/></dir><file name="Problem.php" hash="d7a5e625ada05d38e9411a54957e0cec"/><dir name="Queue"><dir name="Edit"><file name="Form.php" hash="3a98c1bc08af3bcc66eabdeb1c9488b0"/></dir><file name="Edit.php" hash="eeadc81a388ca892c208e5543d2dc4b4"/><dir name="Grid"><dir name="Renderer"><file name="Action.php" hash="41b2bc208c4cf354065eb4ecc7e8c341"/></dir></dir><file name="Grid.php" hash="2dd9bdbee8a13adc9324de14902a9385"/><dir name="Preview"><file name="Form.php" hash="ec12b9117a9317db74cfc4a62b625ec3"/></dir><file name="Preview.php" hash="e33127ab0fc2ade9df1e5acfd251842c"/></dir><file name="Queue.php" hash="687a80234a6c6942500ce0e355b4bec7"/><dir name="Subscriber"><dir name="Grid"><dir name="Filter"><file name="Checkbox.php" hash="f2b020b52cb5f5d27cc1df8379837db5"/><file name="Website.php" hash="cb5e07f6f075ba08702d08c6c149d995"/></dir><dir name="Renderer"><file name="Checkbox.php" hash="85451acc8b0f56496a7259cd8dd76bc6"/></dir></dir><file name="Grid.php" hash="7260f65c291f4082d70978fdb45a3e12"/></dir><file name="Subscriber.php" hash="547980b120f86a0bdc71af6ea5e4b4df"/><dir name="Template"><dir name="Edit"><file name="Form.php" hash="f2b1549dd92e6883471640646cf3d5ee"/></dir><file name="Edit.php" hash="5d3fd5853c4e046b3752984fc6b459a6"/><dir name="Grid"><dir name="Renderer"><file name="Action.php" hash="2de17948babba3255185e824e0df2851"/><file name="Sender.php" hash="e0440c6f3f2af1c5b32ef17d41fc04ef"/></dir></dir><file name="Grid.php" hash="04c90d12653da962e4fac7b33f14594b"/><dir name="Preview"><file name="Form.php" hash="16aa35c3b2e48806625dcaba43c92bad"/></dir><file name="Preview.php" hash="09ed9ad8baa66d06a1fd6faa669717af"/></dir><file name="Template.php" hash="21d5eb58e09ac5096fd92600977fd431"/></dir><dir name="Notification"><file name="Baseurl.php" hash="dfdbc60d946f5666c3495190679cba42"/><file name="Curl.php" hash="2aeba6a2273f8f1e54d81c86ac535917"/><dir name="Grid"><dir name="Renderer"><file name="Actions.php" hash="99a94b2f0aae40f9c7ef88a665d45d67"/><file name="Notice.php" hash="fd90524ee4ae1d2bc16d31c71a532516"/><file name="Severity.php" hash="6745a90e7b990b7daa5618e00dc264c9"/></dir></dir><file name="Grid.php" hash="a18fbdf6a400a9fc1e3872cfea9518e1"/><file name="Inbox.php" hash="cf44b0a8760660ebd8a961a65773f14c"/><file name="Security.php" hash="af74cf2e1c7751d665a4375a0399a8f4"/><file name="Survey.php" hash="ec3650219b7d776c0e8026e3b7bd5ece"/><file name="Symlink.php" hash="6c427d602e5fca949d7813184a9b8b8a"/><file name="Toolbar.php" hash="08f588920aac56a603ea779b467489b2"/><file name="Window.php" hash="7bf40a4df88fc777eb2e2af91ef78043"/></dir><dir name="Page"><file name="Footer.php" hash="3246770f5c748b3a50476211edf75517"/><file name="Head.php" hash="874ebbe5de14ccdd458a6facbb4bd546"/><file name="Header.php" hash="c873bb0587722ff87379791184feac28"/><file name="Menu.php" hash="415744d581de429acd2fea5afe9ab0fa"/><file name="Notices.php" hash="316fd9052641e58b0d703ee36b4976a5"/></dir><file name="Page.php" hash="cb89a371f55974997804de0a61cd5c19"/><dir name="Permissions"><dir name="Block"><dir name="Edit"><file name="Form.php" hash="fb8bb9a6a88d6366eb7bc0647203963a"/></dir><file name="Edit.php" hash="b09be0bc7a515f481e47ba4f563018ab"/><file name="Grid.php" hash="870323bc27cb8b5ec696b2603092b079"/></dir><file name="Block.php" hash="12e30bdf3fef18eb300b4c7bc40764a4"/><file name="Buttons.php" hash="32dd7dbce23d365e0a022bb3f294dd82"/><file name="Editroles.php" hash="09b493890c89039d4ce406b00be0fef6"/><file name="Edituser.php" hash="c855e11269a374c41edd871a19e6bfad"/><dir name="Grid"><file name="Role.php" hash="4524df7249ad6d3b164b5f0fbaf3f585"/><file name="User.php" hash="d0a4baae760877f7ac8587775087f925"/></dir><dir name="Role"><dir name="Grid"><file name="User.php" hash="33a129c9a6b5f2194496773ac7ab70ac"/></dir></dir><file name="Role.php" hash="2a13665d50a202158cc0590fced555d0"/><file name="Roles.php" hash="6bfcc3c0348274b0870b113f4736d260"/><dir name="Tab"><file name="Roleinfo.php" hash="403d663ef771f3611a0a2b50d46b3a4c"/><file name="Rolesedit.php" hash="225662e07a6ab6609c5bbd6f08cf6871"/><file name="Rolesusers.php" hash="8832cde896965e2b7bbca4638c8a9758"/><file name="Useredit.php" hash="e5e881c0790bfc3c6a2710c5fb8a0105"/><file name="Userroles.php" hash="57a5356934d115e47f563c5125848dd0"/></dir><dir name="User"><dir name="Edit"><file name="Form.php" hash="0c708883ce210d0a8b5b4d586a7cf06e"/><dir name="Tab"><file name="Main.php" hash="e6be40174f8206f0daac5d468316e4e3"/><file name="Roles.php" hash="64c25dec02a40da001b119a3dfa7b00e"/></dir><file name="Tabs.php" hash="f0da88dab2504dc3c6c0f5b86a53bbc5"/></dir><file name="Edit.php" hash="5b03bb8145164d560b1bdc8a269ac289"/><file name="Grid.php" hash="0b65eb7f5427cd22b346bfd87b503aca"/></dir><file name="User.php" hash="e5b81acde5072e754b5b28af7900ec03"/><file name="Usernroles.php" hash="6edb8570724b449437e59f067277ece9"/><file name="Users.php" hash="d597744c70b346f88dea87e87305942e"/><dir name="Variable"><dir name="Edit"><file name="Form.php" hash="2026b495af14aa9a56935ba57498c1a3"/></dir><file name="Edit.php" hash="4298ed569a07d89bd75179a682d8c535"/><file name="Grid.php" hash="b019d3c19f49d30dd777d0bf311e4e43"/></dir><file name="Variable.php" hash="c894064b0ddd8ac81e92ab56363626a2"/></dir><dir name="Poll"><dir name="Answer"><dir name="Edit"><file name="Form.php" hash="382d5a97737db8c2b165f281d76f48ac"/></dir><file name="Edit.php" hash="63aed220b152cc116e59543729d73929"/></dir><dir name="Edit"><file name="Form.php" hash="cc568467e30577a1b9b9653d98392907"/><dir name="Tab"><dir name="Answers"><file name="Form.php" hash="27425239a41955cbcad44f5fad907bdf"/><file name="Grid.php" hash="9c52e51b0b0b1d2e1631790bc202a4f4"/><file name="List.php" hash="735a97e401819d79378fea03fb127d8a"/></dir><file name="Answers.php" hash="04540a47671baf275a8c1192197a15a1"/><file name="Form.php" hash="79c421116b0fc45445c5a8b0919a26a2"/></dir><file name="Tabs.php" hash="de583a3f18d5cbc2e1c250fecf7509db"/></dir><file name="Edit.php" hash="6f26bf3bc3d58f827958e2e3519c8c45"/><file name="Grid.php" hash="59be5ee15ed795e564c1c8a4397f81eb"/><file name="Poll.php" hash="9ccf39497025aba7d2ae8dfccbd5048f"/></dir><dir name="Promo"><dir name="Catalog"><dir name="Edit"><file name="Form.php" hash="99b4ccc6c993b3c6f785b90f867d3286"/><file name="Js.php" hash="3567b880caf3424119d21545467a0b6f"/><dir name="Tab"><file name="Actions.php" hash="639c36fe333c0b4193cdb5c858d244d7"/><file name="Conditions.php" hash="1dd1f6afcbc83cf24c8a4a57cd89e41a"/><file name="Main.php" hash="30be5eec578636204e4e2ac749c16fc9"/></dir><file name="Tabs.php" hash="ee13898b58f837d4a850213a450a6e19"/></dir><file name="Edit.php" hash="dc6c584c7b1bf07baceb80f9d9ccc251"/><file name="Grid.php" hash="3b3e748c0d9392fa1d22e851bd520ccd"/></dir><file name="Catalog.php" hash="9e83da3d00dfa31dd27beee92f629fbe"/><dir name="Quote"><dir name="Edit"><file name="Form.php" hash="a3ef7be928573c95300e3a686d109123"/><dir name="Tab"><file name="Actions.php" hash="af80c52b8840ac59e521cc184107f45b"/><file name="Conditions.php" hash="4e6013b559b2d106fa6823e5503b8a7b"/><dir name="Coupons"><file name="Form.php" hash="38a5ba623107f5359a63be333ecc8b52"/><dir name="Grid"><dir name="Column"><dir name="Renderer"><file name="Used.php" hash="c10c900978716e683a88c74865e0bb9c"/></dir></dir></dir><file name="Grid.php" hash="6f12f7a7ac883537a91a868f8f046e8a"/></dir><file name="Coupons.php" hash="90eeb30e7bb308223d170325cfa82973"/><file name="Labels.php" hash="9149c4273f7724d18f6921d692399686"/><dir name="Main"><dir name="Renderer"><file name="Checkbox.php" hash="e24fd8ad3fcf1007293d9788db115ea6"/></dir></dir><file name="Main.php" hash="362533a6e487384930fbc9d31eb2c873"/></dir><file name="Tabs.php" hash="e8efb78f4bbcf33bc6b1f1475c8381a6"/></dir><file name="Edit.php" hash="0eed49127243c460ecf20717fc7c72f6"/><file name="Grid.php" hash="a981de2b2f84900d3aac8e5747d9e4b6"/></dir><file name="Quote.php" hash="cbdd154035e54141097f3f244ae5b698"/><dir name="Widget"><dir name="Chooser"><file name="Daterange.php" hash="817943af923130c019901eb371edd6fa"/><file name="Sku.php" hash="b94cf844cc52ef513213fdf36d4e2c31"/></dir><file name="Chooser.php" hash="85f891c66376974cacb1b94591f97fea"/></dir></dir><dir name="Rating"><dir name="Edit"><file name="Form.php" hash="85bb893fe11569f779e2a2002635cae7"/><dir name="Tab"><file name="Form.php" hash="f52e225c22a0cb338139511210bdf8cd"/><file name="Options.php" hash="d742244d9ede8bc8c1811958c8672940"/></dir><file name="Tabs.php" hash="fab29a2465c8f83d8229ed9a4e12a457"/></dir><file name="Edit.php" hash="57154b7f9692dc1b5fe294151ef7c4c6"/><file name="Grid.php" hash="af5b428dfd715c2488a50a8db6635ed8"/><file name="Rating.php" hash="2063e6bd12dd2154657cfc6a4fd38fae"/></dir><dir name="Report"><dir name="Config"><dir name="Form"><dir name="Field"><file name="MtdStart.php" hash="e8274e4f8675746412d39e424a212177"/><file name="YtdStart.php" hash="d8365453d33234dae3dbac4c4164ad40"/></dir></dir></dir><dir name="Customer"><dir name="Accounts"><file name="Grid.php" hash="4ee062a10a1fd6dd3250751e9387cb1c"/></dir><file name="Accounts.php" hash="1a1511fabb29de8780686d3e9e65a28a"/><dir name="Orders"><file name="Grid.php" hash="0656ce7c9cd7c61d1ed7a0d6356d3638"/></dir><file name="Orders.php" hash="c5d12fb3cb26d20e3de3b10ba69df1a6"/><dir name="Totals"><file name="Grid.php" hash="ff882af980ae3c8811b0aa7b5bea0a83"/></dir><file name="Totals.php" hash="8aa59ae89284d2145650c437279e2afa"/></dir><dir name="Filter"><file name="Form.php" hash="69cd30e782441d2c20e2f7d086b578a4"/></dir><dir name="Grid"><file name="Abstract.php" hash="1259838520e97e6f5e5a86142f960068"/><dir name="Column"><dir name="Renderer"><file name="Blanknumber.php" hash="99b1c0c07fa555fea0cddae25f6a888f"/><file name="Currency.php" hash="fe2d288dfb099ceb914baa95a5ee92ac"/><file name="Customer.php" hash="b1a5250946c49aa2e921c9abb30999a7"/><file name="Product.php" hash="a4ad3eacf672977d5fa6c5213c666b65"/></dir></dir><file name="Shopcart.php" hash="d990aa64540f38084994c55e16b66a36"/></dir><file name="Grid.php" hash="11b7bd61129d0b5f03b5bd26ada47fb8"/><dir name="Product"><dir name="Downloads"><file name="Grid.php" hash="b2c62eb8f8d6cd91686eb418731546aa"/><dir name="Renderer"><file name="Purchases.php" hash="81d96bd5944b7b723fbd69c6fe0fad34"/></dir></dir><file name="Downloads.php" hash="11e4f461607717faf3742492139d97ed"/><file name="Grid.php" hash="a3328280fbfdc1286dadd5695003d2f4"/><dir name="Lowstock"><file name="Grid.php" hash="49ea6e217dfd12742f9f4526fbcf6df5"/></dir><file name="Lowstock.php" hash="f7a0fda9bc65400bcb201ce8c57b4fea"/><dir name="Ordered"><file name="Grid.php" hash="fbe565a94ef00aa0713d3c0676b28455"/></dir><file name="Ordered.php" hash="d0d5a77d45cc05a1cc9d9c6184dce2d5"/><dir name="Sold"><file name="Grid.php" hash="06b8bb8d3fb23fe3fed95f9af6c26110"/></dir><file name="Sold.php" hash="dbc26917ddaf6bd398ec2fe38346a626"/><dir name="Viewed"><file name="Grid.php" hash="c8f127e3f7ba9c1f584a0c6fb6a08471"/></dir><file name="Viewed.php" hash="076655e8c23b29dfc968fd652c46e40c"/></dir><file name="Product.php" hash="6b7d0556f28ddf0816b5fa1723a818a5"/><dir name="Refresh"><dir name="Statistics"><file name="Grid.php" hash="7339559d1a5feb5a317d214026b59714"/></dir><file name="Statistics.php" hash="081553d681795450853d378022096aa4"/></dir><dir name="Review"><dir name="Customer"><file name="Grid.php" hash="9840725cb756a7bb302650784adf2848"/></dir><file name="Customer.php" hash="507272f138c912e8401773ebebfbf601"/><dir name="Detail"><file name="Grid.php" hash="835c153225918f2e3134f03d459528d5"/></dir><file name="Detail.php" hash="bbe8bb058d5edbd4880064ad03892932"/><dir name="Product"><file name="Grid.php" hash="27cb7517a1fb42e1466071023ddae3f5"/></dir><file name="Product.php" hash="6941c4daa613b5975ba3a9d897f7347a"/></dir><dir name="Sales"><dir name="Bestsellers"><file name="Grid.php" hash="b56131a4f69109a4163812880f70fc7e"/></dir><file name="Bestsellers.php" hash="1c7b5ac4ac82eaa2c76efada815ba43b"/><dir name="Coupons"><file name="Grid.php" hash="a25de7482812b4d9bd89713e75c4b540"/></dir><file name="Coupons.php" hash="dea9d22ce3a45989bff418452b474c95"/><dir name="Grid"><dir name="Column"><dir name="Renderer"><file name="Date.php" hash="99724f69d6decef56c305e07c7e56add"/></dir></dir></dir><dir name="Invoiced"><file name="Grid.php" hash="1a23290dd7d7719b94287ee8556d1e94"/></dir><file name="Invoiced.php" hash="d213c1742bceb0e8760cf6c51f122c15"/><dir name="Refunded"><file name="Grid.php" hash="ebe3ac2ca0f2981e4fe6031f82ac4c60"/></dir><file name="Refunded.php" hash="27740811a81123285c6d78bb9f799576"/><dir name="Sales"><file name="Grid.php" hash="5c0dd665a3a92566c3b9ee9b170c095d"/></dir><file name="Sales.php" hash="011f528457f654222487ddc1db15e85b"/><dir name="Shipping"><file name="Grid.php" hash="ea48519fa084857ca4f44c967fe9d667"/></dir><file name="Shipping.php" hash="1cddda3d784b12525d836ac9a3357df0"/><dir name="Tax"><file name="Grid.php" hash="0a2340a418b896d8603f08d132f55b19"/></dir><file name="Tax.php" hash="fb277822cea2f0bb5b71c9d025d559f7"/></dir><dir name="Search"><file name="Grid.php" hash="407e420f3debfe639ae256e2d827b579"/></dir><file name="Search.php" hash="e9cb7352e3b233d5076926b67ae9f03b"/><dir name="Shopcart"><dir name="Abandoned"><file name="Grid.php" hash="932cab762e243101a7c3265dfa599c0c"/></dir><file name="Abandoned.php" hash="c933314669acd2fdbd63defd475d3984"/><dir name="Customer"><file name="Grid.php" hash="25089e52822291d522c42108810ab86f"/></dir><file name="Customer.php" hash="913294130b1a3dc25b0621df903bbd06"/><dir name="Product"><file name="Grid.php" hash="84d16caa0efd06af1d8cbca172e8992b"/></dir><file name="Product.php" hash="3f64b234f73486d662344cd9f52c4ae2"/></dir><dir name="Tag"><dir name="Customer"><dir name="Detail"><file name="Grid.php" hash="dd0c9252e4a70a0c3cb7e8e7c6c23639"/></dir><file name="Detail.php" hash="ebace1ece804b3c606020f8213f8b950"/><file name="Grid.php" hash="2260b6800e4c19ade24115f3f24fa907"/></dir><file name="Customer.php" hash="5ba6e846aababc182b25981aeb4c6f8e"/><dir name="Popular"><dir name="Detail"><file name="Grid.php" hash="818be0e011d29f75be00fa306b1b0c3d"/></dir><file name="Detail.php" hash="0ab400fc8641201ece75a65f1c93b809"/><file name="Grid.php" hash="ada614aaf421a6b35aee85a34d2d0d12"/></dir><file name="Popular.php" hash="54b7e0c887f64b16740869503de14a92"/><dir name="Product"><dir name="Detail"><file name="Grid.php" hash="7f1be567ae5d674f3875e1ba19e9c19d"/></dir><file name="Detail.php" hash="f0b90f22e066edbb5144b3a473ba074e"/><file name="Grid.php" hash="0dbc47e8afe260f1775f64f5abd5f284"/></dir><file name="Product.php" hash="a71f9d9003f52b69af346eff9143bc6c"/></dir><dir name="Wishlist"><file name="Grid.php" hash="0e63d4f557b29ee22ad74e25ab128bf1"/></dir><file name="Wishlist.php" hash="cbca56b25a8b586f64db6c91a538e029"/></dir><dir name="Review"><dir name="Add"><file name="Form.php" hash="912a68c3599baebbfd849d990a78ede3"/></dir><file name="Add.php" hash="c4ef9a8285531f848ef7ec85bd4b0865"/><dir name="Edit"><file name="Form.php" hash="aab9573c34402260a1b8abdb002bc703"/></dir><file name="Edit.php" hash="4bdfe952dff327bbde7c35d9956d8f6d"/><dir name="Grid"><dir name="Filter"><file name="Type.php" hash="dae987db69eb9e6d7e0c6d3e3a4d0d2f"/></dir><dir name="Renderer"><file name="Type.php" hash="6e8026cd79021d31ee978b4ffafe30f0"/></dir></dir><file name="Grid.php" hash="5928d0b988c6dbbbaafd5c36efbd1b87"/><file name="Main.php" hash="4291581219eebb26a55d2c1b250171e2"/><dir name="Product"><file name="Grid.php" hash="eec163557bf71f8f22480bdd57a6c8a4"/></dir><dir name="Rating"><file name="Detailed.php" hash="e30faedc70008b47b14826e323947aea"/><file name="Summary.php" hash="2b8d5dc65e99660833e11b73344ce76e"/></dir></dir><dir name="Sales"><dir name="Creditmemo"><file name="Grid.php" hash="5717b8caec95d79d53baebf5665da23c"/></dir><file name="Creditmemo.php" hash="27fc256b67712baa22a6473e880681c7"/><dir name="Invoice"><file name="Grid.php" hash="bbca8c45b3055dab5327eb7e3f005bdf"/></dir><file name="Invoice.php" hash="f2a31a60dd248d1d023b82fe1ac14987"/><dir name="Items"><file name="Abstract.php" hash="467e9e7ca2f98b0051f3c8e361344439"/><dir name="Column"><file name="Default.php" hash="56d115ca0b116f68e404ef68807d20af"/><dir name="Name"><file name="Grouped.php" hash="4a2f8c476589e2b32af2ac01cafc96dd"/></dir><file name="Name.php" hash="c62de2bf8718a9c2ece2ce7e23e03bef"/><file name="Qty.php" hash="454a94edbe2c5b7a75f00737e170c3a0"/></dir><dir name="Renderer"><file name="Configurable.php" hash="28c70473cbe8350e442b54507dee18a1"/><file name="Default.php" hash="45fb1f4d18d3a3819459366afd873f94"/></dir></dir><dir name="Order"><file name="Abstract.php" hash="9968c36de59df2d73f7ab177ce99ad50"/><dir name="Address"><file name="Form.php" hash="c9f5836acbf4ff81427a9560722144f4"/></dir><file name="Address.php" hash="8b694ca709abe5f2dea49126dad372d2"/><dir name="Comments"><file name="View.php" hash="bd2304e9e8a63a912d132e93b5a121ee"/></dir><dir name="Create"><file name="Abstract.php" hash="ace23380dd4337893be6cd9f8fcc5edd"/><dir name="Billing"><file name="Address.php" hash="c7d6cdf4678e5d2f0961827501dea8a0"/><dir name="Method"><file name="Form.php" hash="729e963ab3ddf852c6aaeb4c374a701b"/></dir><file name="Method.php" hash="1cbda88628683510167d23bf158846ec"/></dir><file name="Comment.php" hash="107d8c6c1434f3e5ed365ae59e37ab52"/><dir name="Coupons"><file name="Form.php" hash="2dfc0a5002b07842e410ccf2710e610e"/></dir><file name="Coupons.php" hash="b9c757d33a7803b0415a9f0c213afb53"/><dir name="Customer"><file name="Grid.php" hash="5748a330e8dcc17699f3c6a1d3a589c4"/></dir><file name="Customer.php" hash="ea07e49bb04b3d7170ce2e5c42b5e85d"/><file name="Data.php" hash="8a086a74430cf27d5815f93b9c71071c"/><dir name="Form"><file name="Abstract.php" hash="994ad1483341a924d7a6c5d19a5e4726"/><file name="Account.php" hash="f14c220d593b0f06003bce684b140068"/><file name="Address.php" hash="87fc0f93e4be39fc0ba54f880490dcc4"/></dir><file name="Form.php" hash="e9879907839a7a810f58ed38e7ec4171"/><dir name="Giftmessage"><file name="Form.php" hash="98d63f507a64efaab99a500a9da71b86"/></dir><file name="Giftmessage.php" hash="2a3f37bf5c3723668344a3f7f2812267"/><file name="Header.php" hash="03f6dad30227f5d473400a7944e1a6d4"/><dir name="Items"><file name="Grid.php" hash="02bb5f83884bc84a82cea8902709e7f6"/></dir><file name="Items.php" hash="c29d6bd3003f80e1ea57b05141b09ea9"/><file name="Load.php" hash="f7a2aa5ea6bec7e254e873bcc82548eb"/><file name="Messages.php" hash="d87bea0103f77041cb81b75113675413"/><dir name="Newsletter"><file name="Form.php" hash="811887cae15aa522b1e358c3dc018507"/></dir><file name="Newsletter.php" hash="c0d9eff723feb880ed235a2a5b17abb5"/><dir name="Search"><dir name="Grid"><dir name="Renderer"><file name="Giftmessage.php" hash="7f9829c812972394931e019e2e96a90b"/><file name="Price.php" hash="ee6ce6908ae15c4407942a7d60fef978"/><file name="Product.php" hash="5d56f384c81931c32853f3d2bc5bb163"/><file name="Qty.php" hash="7611c0b8a7c2d1c7f129304348570ca2"/></dir></dir><file name="Grid.php" hash="649fc59c39244b2f974d15023caa47f1"/></dir><file name="Search.php" hash="e89f2e794055c5df0694a34c8e29ab60"/><dir name="Shipping"><file name="Address.php" hash="0ac0de15586744ec0bf5d671fc97e172"/><dir name="Method"><file name="Form.php" hash="ffb7b1b8af92e0020165271929d97684"/></dir><file name="Method.php" hash="621774bf02b03098d7681f9c81a2c5b1"/></dir><dir name="Sidebar"><file name="Abstract.php" hash="33c186eeb0dd61dc526a27ead10f280a"/><file name="Cart.php" hash="8203cb25f99eaf6fb607469872cd27b6"/><file name="Compared.php" hash="d2472fd4624fc3ba0a068537b5564bd9"/><file name="Pcompared.php" hash="50e6571e0b3a723f220cfc7c7fd3017a"/><file name="Pviewed.php" hash="f224ecc703e61de7704c720cbdb01742"/><file name="Reorder.php" hash="e30c333e309b362b99144de107caf2dd"/><file name="Viewed.php" hash="d188f15e1e330bb9cee987bb96139d47"/><file name="Wishlist.php" hash="3cfd84ed855acc1158825c4bac1eee07"/></dir><file name="Sidebar.php" hash="bb85cb56273718a438e470d3766102d8"/><dir name="Store"><file name="Select.php" hash="e568f34b8ee37902fd1ef5fceeeffa89"/></dir><file name="Store.php" hash="bd028b48bafff28a45141a8c213f7de7"/><dir name="Totals"><file name="Default.php" hash="0c06a5f6f9c9289fc0ec8e8f9bd38ab7"/><file name="Discount.php" hash="4b765ae9160306840358099712ca8f26"/><file name="Grandtotal.php" hash="0b140da78932cb339289247d737bef68"/><file name="Shipping.php" hash="2975332020d0faf31570e401f7431aa8"/><file name="Subtotal.php" hash="ef046c50436c16f9b71a9e13115bfae8"/><file name="Table.php" hash="10249cf6ca8666193e6c83994db02875"/><file name="Tax.php" hash="aaabef204e3c77f6acab7c5a02789c44"/></dir><file name="Totals.php" hash="703be91c809df96bc4e3f33a1a96e536"/></dir><file name="Create.php" hash="c1e4a9b052977322d863ac4bece32f62"/><dir name="Creditmemo"><dir name="Create"><file name="Adjustments.php" hash="89ab6b4a8002d8951b775059f6415d60"/><file name="Form.php" hash="cd6438633514cdf345d4c8a57f6a51aa"/><file name="Items.php" hash="a5ec6e06117c6858ef06d1ca25677597"/></dir><file name="Create.php" hash="c193123a808daf28acbc8793717ac6d3"/><file name="Totals.php" hash="c857b4b6cc5974c75e3a29eea2149009"/><dir name="View"><file name="Comments.php" hash="9135aa72b4bcbe7d3bb6013a2f04f016"/><file name="Form.php" hash="de15ef7c6f249fb9e4678a398011157e"/><file name="Items.php" hash="9a4e4ea401dcb83db60d1ca905d05640"/></dir><file name="View.php" hash="5682c3b6d957fffbe51f65638b6fae57"/></dir><file name="Grid.php" hash="332d48760a7984a6b00207543b88a4f7"/><dir name="Invoice"><dir name="Create"><file name="Form.php" hash="a6fb9792408416068988787f592374bd"/><file name="Items.php" hash="e97830b26af9f6f1bd1d141004ab7056"/><file name="Tracking.php" hash="8ea313eb2289113213c139295c4ea21e"/></dir><file name="Create.php" hash="df68552af456ece05b9d808479763178"/><file name="Totals.php" hash="ec44a68fb16b9222074f70b8392523bc"/><dir name="View"><file name="Comments.php" hash="1745fae306ac48cd9b60d7862253c263"/><file name="Form.php" hash="1cbcadc2e0a5f881c7916867115957c7"/><file name="Items.php" hash="bf1a848f21b8070e35e753ed50e7ddf8"/></dir><file name="View.php" hash="0508c53f38f6668267ff9c5e1e402847"/></dir><file name="Payment.php" hash="2f7d0a7edabb339ecf91426b9b67f204"/><dir name="Shipment"><dir name="Create"><file name="Form.php" hash="bdf8d97c42fd4225b4e7c50f41cb3a3d"/><file name="Items.php" hash="4dd1603a9ce555349c2a144b6448ff00"/><file name="Tracking.php" hash="ce1b2714096f0b2b4b64d020142ada9a"/></dir><file name="Create.php" hash="8a17f9a552ac4043c5ba695b5c2e7f28"/><dir name="Packaging"><file name="Grid.php" hash="c5dc315aa4a10b392647849647f8124f"/></dir><file name="Packaging.php" hash="4bbe680d38e5929c7196bbb26bac3350"/><dir name="Tracking"><file name="Info.php" hash="d1fc1232607baf4f133ec48ca0fae04a"/></dir><dir name="View"><file name="Comments.php" hash="12dfc224b8bd352eeb60d2b9b41a5c4f"/><file name="Form.php" hash="107bd71d65ca52e4fe59c148ff43d059"/><file name="Items.php" hash="0c2c02258238c04d35f8302f208dd5f6"/><file name="Tracking.php" hash="8d41c1e65ba0e3ec6945782957fcee9b"/></dir><file name="View.php" hash="dd4f42d11ffe1ea196bf1b82cd1f8ca2"/></dir><dir name="Status"><dir name="Assign"><file name="Form.php" hash="00cc48e6f0c3d2d8f5a9d276784dfa11"/></dir><file name="Assign.php" hash="9fb13f56dcfc8d5232fe57d729688837"/><dir name="Edit"><file name="Form.php" hash="e1e4a528c760069606a3288eefe9b53e"/></dir><file name="Edit.php" hash="878b0973508b56b3f373f8194cb70a07"/><file name="Grid.php" hash="f829cbd7178db37bf77b765af156f722"/><dir name="New"><file name="Form.php" hash="d0604be68b108b02af082bc7c65cace8"/></dir><file name="New.php" hash="29c01cd2f0e19af5e6250251b31267e9"/></dir><file name="Status.php" hash="6550dc33999e72773eab9478f52cc302"/><file name="Totalbar.php" hash="52aa0b423bcb1141c77b9458737b18c3"/><dir name="Totals"><file name="Item.php" hash="f43a219863c76c571205d832d0b43b45"/><file name="Tax.php" hash="184791b93aca13bd09ffb655f132ad01"/></dir><file name="Totals.php" hash="210db83b7c9a4c7cceb377b80f2a9c10"/><dir name="View"><file name="Form.php" hash="23d9c4ca41d10ae38b587c51450bc3e3"/><file name="Giftmessage.php" hash="42f341de5ae707b247a53424a1b67ed1"/><file name="History.php" hash="1d88d4967c4dc6b0d734e9e0aa4ac2d4"/><file name="Info.php" hash="d7ee83014d4bbab3a24e16d3f1d12eb7"/><dir name="Items"><dir name="Renderer"><file name="Default.php" hash="0a4e91ab3a575dc4e4bb02a74395d6b8"/></dir></dir><file name="Items.php" hash="c989206236501dc8b092d8d84e4f1d1a"/><file name="Messages.php" hash="4025d28ee095a9cd3f8ac60c1233f071"/><dir name="Tab"><file name="Creditmemos.php" hash="059adadd24b70299eccc487a536ab2c5"/><file name="History.php" hash="8e51c6f8901d81383fc8e3b937762f0e"/><file name="Info.php" hash="e2864c503f989daa5798cba16dde2a71"/><file name="Invoices.php" hash="0f308282d18b8193b98229f6b3058953"/><file name="Shipments.php" hash="ba3116e89be4121c316ee8ee87b0909b"/><file name="Transactions.php" hash="6cf7a8da63fbf6303692b0cb94799443"/></dir><file name="Tabs.php" hash="f13f47bc04d78d5c12b2ec834b00c680"/></dir><file name="View.php" hash="e118d98b266f83b7371f3bb2cb0495fc"/></dir><file name="Order.php" hash="7267a7a37d11673f68f0ee372cf3de7e"/><dir name="Reorder"><dir name="Renderer"><file name="Action.php" hash="3af81617dc8d3a5642079c2df2afc4ba"/></dir></dir><dir name="Shipment"><file name="Grid.php" hash="89b8634c717d62fe3b6487c15c8d107e"/></dir><file name="Shipment.php" hash="bf55854c2ea635e3a427a5031bba1125"/><file name="Totals.php" hash="0f2bb0aa24c61390e2727bf485214697"/><dir name="Transactions"><dir name="Child"><file name="Grid.php" hash="9b417be1aa074dc24de8680634ee2476"/></dir><dir name="Detail"><file name="Grid.php" hash="a42a03de4a8a788f02a845047c670db2"/></dir><file name="Detail.php" hash="86cca3beb4a511f8094cf5314a925468"/><file name="Grid.php" hash="da014699b42c2b4c1c81c17044d27da6"/></dir><file name="Transactions.php" hash="320be0527560fed342f9c811b8255bf9"/></dir><file name="Sales.php" hash="a1dc1bd628e8fedfa54aefac97bb41b4"/><dir name="Shipping"><dir name="Carrier"><dir name="Tablerate"><file name="Grid.php" hash="10e83ee8dde4582807a45d69f9acf679"/></dir></dir></dir><dir name="Sitemap"><dir name="Edit"><file name="Form.php" hash="b8d105362b3adf6c03d6a69d45bbc3a5"/></dir><file name="Edit.php" hash="e07b39397eb1286e1fcbc44139bc7e32"/><dir name="Grid"><dir name="Renderer"><file name="Action.php" hash="29bde8080647225153100af893c7a4ce"/><file name="Link.php" hash="fbc71a5ef95188f366fe84ab75516a1e"/><file name="Time.php" hash="a630f3e816cba54341ea826e0509be10"/></dir></dir><file name="Grid.php" hash="c02fabf9285882e6bb1b9395d38053ac"/></dir><file name="Sitemap.php" hash="50481db275cd12bbe56fcf5d8e78950b"/><dir name="Store"><dir name="Switcher"><dir name="Form"><dir name="Renderer"><dir name="Fieldset"><file name="Element.php" hash="c5251b386f061d7e76f9102870e48bb7"/></dir><file name="Fieldset.php" hash="28815718840b9cd9aa3a8f11dc704f75"/></dir></dir></dir><file name="Switcher.php" hash="4045caa8d0fa2303fbe04f26a9d6e1ef"/></dir><dir name="System"><dir name="Account"><dir name="Edit"><file name="Form.php" hash="99dd4d9afb439c78e66a74ea5b77a9e8"/></dir><file name="Edit.php" hash="d93d39b44e99f8c6f8a53fabeb8fe03c"/></dir><dir name="Cache"><file name="Edit.php" hash="3ed6b9c007cf377ff9f564ef281ec1fe"/><file name="Form.php" hash="8b387aa81ddff180e4c927b2fc9dbcd9"/></dir><dir name="Config"><file name="Dwstree.php" hash="949f0304d9a0c5c2a65cec4a491209a0"/><file name="Edit.php" hash="9fe688fa2b68a609bc8718838235da67"/><dir name="Form"><dir name="Field"><dir name="Array"><file name="Abstract.php" hash="3784a47ebc6bf8e201a94fb18bb25336"/></dir><file name="Datetime.php" hash="d9229f22e994bc820057e87cfec90598"/><file name="Export.php" hash="868fd289fe1c6f57ee6c2d056d1fccea"/><file name="File.php" hash="7d37626d158c4372bb3b7cc81f3a02d9"/><file name="Heading.php" hash="4ef6ca5626a72c022e3e8137596add5f"/><file name="Image.php" hash="22fca830060d1394a85da41db05964e0"/><file name="Import.php" hash="fbcca2bd1276efe49f513045592b2e45"/><file name="Notification.php" hash="1cdad5e7436b453245bcdd0489224628"/><file name="Regexceptions.php" hash="758807d54a62f6f61f611e767ec4ecf9"/><dir name="Select"><file name="Allowspecific.php" hash="ac58da8a22ee314eb89068718dbf4626"/><file name="Flatcatalog.php" hash="68c82c41e376b507816ce3ddb07e914a"/><file name="Flatproduct.php" hash="da237d35272d4dfe79fd5c83799205c6"/></dir></dir><file name="Field.php" hash="aea846b299b3399033354483361ee31f"/><dir name="Fieldset"><dir name="Modules"><file name="DisableOutput.php" hash="ce58e2732915fac2fb8936a79088c203"/></dir><dir name="Order"><file name="Statuses.php" hash="1316ef1399463d26d20611e802b998b4"/></dir></dir><file name="Fieldset.php" hash="b1cc5488a485e8c2397af2228dcfe0d6"/></dir><file name="Form.php" hash="e03e58aa776c049e11cc9856964593f1"/><file name="Switcher.php" hash="bd6f6c5dbf6eba1e0a936ac49942514e"/><dir name="System"><dir name="Storage"><dir name="Media"><file name="Synchronize.php" hash="411e489880f2a7d436823e46eb6c2030"/></dir></dir></dir><file name="Tabs.php" hash="6d01b907c1f3cb31132ab5c92902b56b"/></dir><dir name="Convert"><dir name="Gui"><dir name="Edit"><file name="Form.php" hash="51512ab6495c12ae7e521a0b220b5a18"/><dir name="Tab"><file name="Upload.php" hash="d193afda3f613e188d0515ecc19ba6fc"/><file name="View.php" hash="b599ad8fd48be28aab0995b125220b02"/><file name="Wizard.php" hash="b02afe7d66fee207a1f09d8812cf7a99"/></dir><file name="Tabs.php" hash="b9cc2ef30b98b610937b03fc02d8b497"/></dir><file name="Edit.php" hash="5e9488fca79a80b5234f5445e23a6e44"/><file name="Grid.php" hash="810689efe57896fb238e124faae811e9"/></dir><file name="Gui.php" hash="e089b93dd30284819d2d5d62d7d3b0d3"/><dir name="Profile"><dir name="Edit"><dir name="Filter"><file name="Action.php" hash="b7560fbdf0a5611d036ff11d2bbb51cd"/></dir><file name="Form.php" hash="3e3dd0fa111cb965b5752ae71d277c9d"/><dir name="Renderer"><file name="Action.php" hash="cd87651e0cb2e6ded77c76399783089d"/></dir><dir name="Tab"><file name="Edit.php" hash="1123d89a65d5a5aa17a8f23f6970de45"/><file name="History.php" hash="55f3d4c7b3701f990fa8195770dfefcc"/><file name="Run.php" hash="c4904951931aac62dcf658a47d81f40f"/></dir><file name="Tabs.php" hash="e1eb71d164447ccb5ed30d1c0b063895"/></dir><file name="Edit.php" hash="3e03e042fbe826d42fe3227f20f68e21"/><file name="Grid.php" hash="8b8d2d9532fbcc5669e306fe4f178cd5"/><file name="Run.php" hash="566d290a8b18f8d92f4c50ced8167774"/></dir><file name="Profile.php" hash="e98bc3dd91d4f33bb7066fbf16165afa"/></dir><dir name="Currency"><dir name="Edit"><file name="Form.php" hash="20b70301bec0b388197efc08843ae404"/><dir name="Tab"><file name="Main.php" hash="cb4ce996cedb2d09aeba5f7c301e0c77"/><file name="Rates.php" hash="20e20e6398fb25ce0aaabd296808f55c"/></dir><file name="Tabs.php" hash="9106b6dd6120dd32699b7c4d83ee275c"/></dir><dir name="Rate"><file name="Matrix.php" hash="6cae30f47d90546322f9f51feec24de7"/><file name="Services.php" hash="ac762568e16500cd45d3693cd45e73c4"/></dir></dir><file name="Currency.php" hash="c3cffe38d8d44a187ad756ccd7a930a9"/><dir name="Design"><dir name="Edit"><dir name="Tab"><file name="General.php" hash="6bbbf832832b30bbf63fc9d5c3bb2e50"/></dir><file name="Tabs.php" hash="c3d46a8b734ce44adf1afd9a78bad9be"/></dir><file name="Edit.php" hash="146be0ed03e144eb87aa89786f974786"/><file name="Grid.php" hash="41df1e7f4a7f1a310c934ac5c90bac99"/></dir><file name="Design.php" hash="63c84ac10dffefa4a60cb5a16ab2e9c6"/><dir name="Email"><dir name="Template"><dir name="Edit"><file name="Form.php" hash="ba60cf33870466147529540389a098fa"/></dir><file name="Edit.php" hash="fbff822e31d9fd4bfa74c21bd85c675a"/><dir name="Grid"><dir name="Filter"><file name="Type.php" hash="06db8032ae98bcaf02dde31fda26ae20"/></dir><dir name="Renderer"><file name="Action.php" hash="977b2671b09737d77bb76efd8d1d140b"/><file name="Sender.php" hash="365125a25246d9c8698bfa6ee5e1df51"/><file name="Type.php" hash="7e587342637179a910cd521cb3f65d0a"/></dir></dir><file name="Grid.php" hash="0fb16af553465674f16de207b6a00a99"/><file name="Preview.php" hash="f71f27da9dde5eaf2683c98b8e7486bc"/></dir><file name="Template.php" hash="f961a2a3c8f6cb13aa8ed68be9d0ffb7"/></dir><dir name="Store"><dir name="Delete"><file name="Form.php" hash="86e76fd0c747b41a5611d16ef362da4f"/><file name="Group.php" hash="8a9875278ed5c2a1d7cbe2de0c8b5d3e"/><file name="Website.php" hash="02df4f06380e4b90bb36c44512f5f7fc"/></dir><file name="Delete.php" hash="bbf25320410cff2c1347ac4430b3b482"/><dir name="Edit"><file name="Form.php" hash="644b1a2848629900483e4f559d78a986"/></dir><file name="Edit.php" hash="1c26d15fa15443cbdaf7fa10d1c46595"/><dir name="Grid"><dir name="Render"><file name="Group.php" hash="d51172f385ad735d8edc971780ec3058"/><file name="Store.php" hash="56cc10240fdd3478e3d1062d72475360"/><file name="Website.php" hash="5f66c00e4522c40d5bf1b2d546224fe0"/></dir></dir><file name="Grid.php" hash="c75c238c07093f60b02ec4fa919fd7b7"/><file name="Store.php" hash="bc472fb0f06a390b255e9b3592d2ddfd"/><file name="Tree.php" hash="c23e3717d291a812964a9fb8ee916696"/></dir><dir name="Variable"><dir name="Edit"><file name="Form.php" hash="d0d122ec389b0fd702287db9dc6763c1"/></dir><file name="Edit.php" hash="c604fffda2a18a7f112a68aa77baa4cb"/><file name="Grid.php" hash="7bab6ec5c65c3ed970df42674af1002f"/></dir><file name="Variable.php" hash="ce8ece090b8411742f92abc9edb3fdf9"/></dir><dir name="Tag"><dir name="Assigned"><file name="Grid.php" hash="289c2b672a9b03140c00aaf95cc09b5c"/></dir><dir name="Customer"><file name="Grid.php" hash="076b8a64dc03af267c456946d88dae9f"/></dir><file name="Customer.php" hash="5d0e98ae573372eeffa364b4f5e93eb4"/><dir name="Edit"><file name="Accordion.php" hash="3e633cddebf3f7c502d8d69b52b57092"/><file name="Assigned.php" hash="46657200625bbea8f17017cead2a8be4"/><file name="Form.php" hash="096d4192c6b03f86ec7113dc90b38ddb"/></dir><file name="Edit.php" hash="8138bcd7f37fb77365f1f19f813969ca"/><dir name="Grid"><file name="All.php" hash="03f5a39a97b773f8e30a3eb927cc0cf9"/><file name="Customers.php" hash="94dbb5abc8ae1dfa7ac16f4686810a7e"/><file name="Pending.php" hash="046f08f11632ab88da628d54ad428b91"/><file name="Products.php" hash="27039aeb2501fa5d6379524a52297bcb"/></dir><file name="Pending.php" hash="f9d75d43dcf71766ce2624f04fc7f9c3"/><dir name="Product"><file name="Grid.php" hash="74954d069ab71d4efbe262a1c4915684"/></dir><file name="Product.php" hash="d434e1282792816df00779a41b77c097"/><dir name="Store"><file name="Switcher.php" hash="5c832d5e5f1fb28ca6f8c5d250fd0f58"/></dir><dir name="Tag"><dir name="Edit"><file name="Form.php" hash="e3870d4338a56ddc333fadec6488624f"/></dir><file name="Edit.php" hash="3e9552841cb0486f1b07bca133e5cfc2"/><file name="Grid.php" hash="41e8a6118367c742b9180173e8daf02e"/></dir><file name="Tag.php" hash="6e74a75383b9ac5467cdfea6c6672f75"/></dir><file name="Tag.php" hash="dd0d9b1fe5544f616c0f47ac59657180"/><dir name="Tax"><dir name="Class"><dir name="Edit"><file name="Form.php" hash="c4a5a09202ec85a8a5217fb3dd1c9b38"/></dir><file name="Edit.php" hash="dec0c0a5429dd6277e6235f5446de4db"/><file name="Grid.php" hash="01a33ccb33459383a59f288e3242c2aa"/></dir><file name="Class.php" hash="a5c4e0fa6c3fae6e9a67e895a263462e"/><dir name="Rate"><file name="Form.php" hash="3c2e61a925169c6a4f4b2c49f0ddb863"/><dir name="Grid"><dir name="Renderer"><file name="Country.php" hash="ab49dfe7ae7318f2cd4c19f428ff65b3"/><file name="Data.php" hash="ee564a26a28e6c672dc70283b8727156"/></dir></dir><file name="Grid.php" hash="4311cef68b093dd21a464444bb04f182"/><file name="ImportExport.php" hash="51749ab5623e4499e50e534836a571e0"/><dir name="Title"><file name="Fieldset.php" hash="e1d2275ed3ef0683fc2576fa5e4faf57"/></dir><file name="Title.php" hash="4aab833771581272d1ba200432ea00bd"/><dir name="Toolbar"><file name="Add.php" hash="cab32f30562274448ccc28d8d278c037"/><file name="Save.php" hash="97907b0978b7665d45cd8a75acda4b40"/></dir></dir><dir name="Rule"><dir name="Edit"><file name="Form.php" hash="d3117202c01e13c77630fe521b520431"/></dir><file name="Edit.php" hash="075f674a17a8822f20b0d2e7d51ea788"/><file name="Grid.php" hash="d52779e77fc997d22937255d0c6aad1d"/></dir><file name="Rule.php" hash="9312e570058a660557588246e50f1628"/></dir><file name="Template.php" hash="048e4d58a8abf8e3a4c8f5677cf6def7"/><dir name="Text"><file name="List.php" hash="41726f17baf4ba05ceaa79953a0bd611"/></dir><dir name="Urlrewrite"><dir name="Category"><file name="Tree.php" hash="1e01061dac93dcc890e36246ae60b758"/></dir><dir name="Edit"><file name="Form.php" hash="3d703104e5d5e0dc7c2dbd8bdcbba50c"/></dir><file name="Edit.php" hash="abebcb24862a597d023dc47e55e06175"/><file name="Grid.php" hash="951283f25d355557d77ff3fc232c30ca"/><file name="Link.php" hash="a082c052dd2d63e8b47b452090ad7752"/><dir name="Product"><file name="Grid.php" hash="c21688b10e691b43d3c2be26e33068b4"/></dir><file name="Selector.php" hash="42efc1c2c979c7234684da85d0c5f4bc"/></dir><file name="Urlrewrite.php" hash="f6bed2492f4348c239a56b93c2c8cd3e"/><dir name="Widget"><dir name="Accordion"><file name="Item.php" hash="1ac375fb0ad1148f1a3486f1c7dad763"/></dir><file name="Accordion.php" hash="fa8c5ee4d9a67c62860c7995a2f5facd"/><file name="Breadcrumbs.php" hash="f2b60b95e58b36adeb63552424ec00b8"/><file name="Button.php" hash="6dfb5f9a54fcab22606043bdd04d461c"/><file name="Container.php" hash="701d273ac0551c92a87451631ec94cf1"/><dir name="Form"><file name="Container.php" hash="2647161b6a37509a84fc08bff6ce23de"/><dir name="Element"><file name="Dependence.php" hash="12bb49d958b0121ea0bdf6cd3b47a66a"/><file name="Gallery.php" hash="1a9b799b5f8b060be9775a01d7626799"/></dir><file name="Element.php" hash="f0b4276a0c30ecd0f89362c138667690"/><dir name="Renderer"><file name="Element.php" hash="29d1418f521ddb89e24943921c76c4bd"/><dir name="Fieldset"><file name="Element.php" hash="b419b410919759ab61f58dbd86212a2d"/></dir><file name="Fieldset.php" hash="de6bc5059042f678be9014401c1140d8"/></dir></dir><file name="Form.php" hash="8e07b8961c116fdfa109f548c0963b73"/><dir name="Grid"><file name="Block.php" hash="d3415dd6d043edcb8236bcb202a93bdc"/><dir name="Column"><dir name="Filter"><file name="Abstract.php" hash="b99f0dbfe4f3685d8609c3e5e62e2a23"/><file name="Checkbox.php" hash="41eb6bbe5bd4bea08725ade2b9bc254d"/><file name="Country.php" hash="23f713e16b15e7b2b1e8b8202b6aab22"/><file name="Date.php" hash="c143657c6b6b7ebe15abe233e5523918"/><file name="Datetime.php" hash="0b5ec21288cb134916b2a55c07fba169"/><file name="Interface.php" hash="f8709f395b919353186d3a28b2427d12"/><file name="Massaction.php" hash="b0d958db2d2f897510813a0b418e0319"/><file name="Price.php" hash="9d948fa21d31cb67e65a27b60706892a"/><file name="Radio.php" hash="fd316ceb4e867d192ef45382019c54a1"/><file name="Range.php" hash="aa954a9524813a18e450671de7be2a35"/><file name="Select.php" hash="312ac65d14fe5808b94cf01693e73683"/><file name="Store.php" hash="c479999fdd7f63e62a4a2ed7a8b7e85f"/><file name="Text.php" hash="498b987ce2efc08c96c9daf982c7ad93"/><file name="Theme.php" hash="f2f91007375d651411cbfb5d9d31f5d6"/></dir><dir name="Renderer"><file name="Abstract.php" hash="0877927202ba8cb3c007f1e998846c38"/><file name="Action.php" hash="c693f237ebf99daa9d0847253904dce2"/><file name="Checkbox.php" hash="9ffcfeb3859943bf8e21e5ed901f7eb6"/><file name="Concat.php" hash="a0f3dba0a2f719b9d231f5fd6112e9de"/><file name="Country.php" hash="c3ce0bcd5d39be75574ce3014b50874f"/><file name="Currency.php" hash="5381176d3cdfe77c2948bf5b534f402d"/><file name="Date.php" hash="dd112ba85cb251c4ce4acefebcc6d77e"/><file name="Datetime.php" hash="44037bdde740944a80b5d7c67b085155"/><file name="Input.php" hash="c3ca64db8371066aa2313e9d5ae9a2fe"/><file name="Interface.php" hash="9fec60d6ae235d4f050a48f8891397f0"/><file name="Ip.php" hash="a3bc5003397174eee0c4580e522ee5ba"/><file name="Longtext.php" hash="a42d8268677431d06f23b18b73ff0484"/><file name="Massaction.php" hash="48780753058340dcb7d2ad0799886d32"/><file name="Number.php" hash="da8225e2a1282a1966c46e7ac87d61aa"/><file name="Options.php" hash="15ee3eef0f1be48f83e543fd4fddb10d"/><file name="Price.php" hash="e695c582e86897a2b71c8796eb45e370"/><file name="Radio.php" hash="1784e361f47d188c995f7349ee425854"/><file name="Select.php" hash="7445e830f03632a9d4dda2021a3d1cf2"/><file name="Store.php" hash="a29e258b9963d847cffe16577223ee1c"/><file name="Text.php" hash="2f297552e7f0749c75efde13500a75f9"/><file name="Theme.php" hash="282f1e4dcd4833515de87ab0393f6b9b"/><file name="Wrapline.php" hash="2bdb2a2d417fc7d405ee911c40c4b578"/></dir></dir><file name="Column.php" hash="5f37c1b21f74a74aafa9179e95fbfe12"/><file name="Container.php" hash="58fc2e07119b5e4145fefcc4f749118a"/><dir name="Massaction"><file name="Abstract.php" hash="e3394fca7a58c1eddb6188076165c32f"/><dir name="Item"><dir name="Additional"><file name="Default.php" hash="6879cf65e66b360f2163f250e4a3562c"/><file name="Interface.php" hash="04db948fdb1ad2ae5243674869f24b5f"/></dir></dir><file name="Item.php" hash="d6541c34b3d94aece64cf57478569330"/></dir><file name="Massaction.php" hash="0649c03624c79c444cf054ce49d08ba3"/><file name="Serializer.php" hash="cd93824ccd3b24bdb97636cec9bd6013"/></dir><file name="Grid.php" hash="542b30e8c9d360df1160e520137b1a3e"/><dir name="Tab"><file name="Interface.php" hash="61ac6f75ef55994b9409212b7c068fbe"/></dir><file name="Tabs.php" hash="bf410f1dcd6ec5792599d8513eb65e0e"/><file name="Tree.php" hash="8fcf0d8894270461592a1b996a3a1e22"/><dir name="View"><file name="Container.php" hash="48702822606edbc1752eaf8797e2fdb7"/></dir></dir><file name="Widget.php" hash="decb2e463a8f908e4e43245698a6f614"/></dir><dir name="Controller"><file name="Action.php" hash="3ba8923155131f165de4b24cab8b1f34"/><dir name="Report"><file name="Abstract.php" hash="93735d32568b1f392b5fa4a10937392d"/></dir><dir name="Rss"><file name="Abstract.php" hash="b06747180f1212b557f862b729fb4217"/></dir><dir name="Sales"><file name="Creditmemo.php" hash="af189622ec813cf6949cf892dcf6125a"/><file name="Invoice.php" hash="bc00214eeb245421bda96153aafaf19d"/><file name="Shipment.php" hash="5f5cac08a0dfec54a7c4c7039b0e4074"/></dir></dir><file name="Exception.php" hash="44207ed4e9b5d888465e3ec342951647"/><dir name="Helper"><file name="Addresses.php" hash="5efa1e819fa6b6b3276491b040d77283"/><dir name="Catalog"><dir name="Product"><file name="Composite.php" hash="372f822324ef3743ebdaa85a95c68eb2"/><dir name="Edit"><dir name="Action"><file name="Attribute.php" hash="95045d72c50603435d4bb8f7155deb36"/></dir></dir></dir></dir><file name="Catalog.php" hash="e952f09baa412d512b078d855b9f4209"/><dir name="Dashboard"><file name="Abstract.php" hash="30093b0860aabc91f5536fd4804a8a99"/><file name="Data.php" hash="e427b0c5ec57baf11297906ed754b0a4"/><file name="Order.php" hash="103df9c0158567427030a687d228d1f4"/></dir><file name="Data.php" hash="e6d9960369cb287adbaf16cc224f7b15"/><dir name="Help"><file name="Mapping.php" hash="ab759adbe2f9e3187c94c212d4747abe"/></dir><file name="Js.php" hash="82fd6176dd872e8bfa46a4943e6636d1"/><dir name="Media"><file name="Js.php" hash="a7c77ea8858c7a35a545c6f3ae883147"/></dir><file name="Rss.php" hash="a9a4d7bdd91e9d10560205da8ffeacfc"/><file name="Sales.php" hash="8b6034ee70156b8824960f25cacaa4e4"/></dir><dir name="Model"><dir name="Config"><file name="Data.php" hash="4c4206478a3a5b7065481a359dff797e"/></dir><file name="Config.php" hash="2363b4cc646330ce48602ec95cf20dd0"/><dir name="Customer"><dir name="Renderer"><file name="Region.php" hash="e64f33d24ce1acb1fccaf089082930e5"/></dir></dir><dir name="Email"><file name="Template.php" hash="79bfb7dcd80fbb41fecd493c298e2868"/></dir><file name="Extension.php" hash="05c31b0713d19ce57c2b4d05dd9a18f7"/><dir name="Giftmessage"><file name="Save.php" hash="2849a3df15792e773ee0236a353e0692"/></dir><dir name="LayoutUpdate"><file name="Validator.php" hash="1a9e0082789f21e4d205ee5e1af8f5ed"/></dir><dir name="Newsletter"><dir name="Renderer"><file name="Text.php" hash="36fa1832ba5ee4a5f2f86290cda582f1"/></dir></dir><file name="Observer.php" hash="8101ea47383903954f922bcac3050022"/><dir name="Report"><file name="Item.php" hash="249bc4d6c2fe209b5ea8f3872ba04f04"/></dir><dir name="Sales"><dir name="Order"><file name="Create.php" hash="c91499f785f4f39191f978de174b1722"/><file name="Random.php" hash="b40e6c27f9283f934d4f655839126740"/></dir><file name="Order.php" hash="0b7e17e6569bf6dd8c8d26374143b2f2"/></dir><dir name="Search"><file name="Catalog.php" hash="0b11e59e0c4950dfe25e90b0bfe11829"/><file name="Customer.php" hash="5e9563a1ae7abc810c1621305a2903f0"/><file name="Order.php" hash="055f3e4100dd905f559c60a5be7f703c"/></dir><dir name="Session"><file name="Quote.php" hash="ba05387fc32960d10cb0e45286a0447f"/></dir><file name="Session.php" hash="a543f20db68121a0906bebec3ad957dd"/><dir name="System"><dir name="Config"><dir name="Backend"><dir name="Admin"><file name="Custom.php" hash="9a72fab9ce9caa8ef04cf76993160b3e"/><file name="Custompath.php" hash="8ed95aff9688c352ed5def2cc7216375"/><file name="Observer.php" hash="aabc9c2fc39b41823f62c2eebd2544af"/><dir name="Password"><dir name="Link"><file name="Expirationperiod.php" hash="fa69226978a7cc41f139c5efb1da14a7"/></dir></dir><file name="Usecustom.php" hash="52e66d90f8d2aec0c183c5d58457cea6"/><file name="Usecustompath.php" hash="c5f888363c830e0e3546f6826465bce0"/><file name="Usesecretkey.php" hash="8dc5317f4ab19d2265fa1a6b4b69addb"/></dir><file name="Baseurl.php" hash="d883ba04c5294208ca5f739dc4a40567"/><file name="Cache.php" hash="217a5687dd3286d9c9b3cf58f2a35830"/><dir name="Catalog"><dir name="Inventory"><file name="Managestock.php" hash="14a89ee0b26f3dc5b4aff4090eadda51"/></dir><dir name="Search"><file name="Type.php" hash="e923c27c02f96e7915510b6fab3ff6fc"/></dir></dir><file name="Category.php" hash="f944e70e5a075e9f65219f9b37bcceb4"/><file name="Cookie.php" hash="beecbc456b5bcb505cacaecf28fc006a"/><dir name="Currency"><file name="Abstract.php" hash="1fc00525e31cda957aade1c6aeee2338"/><file name="Allow.php" hash="a2c5c466f9b413a072a7976e2fe8b967"/><file name="Base.php" hash="55deb651b2ebd1c0eeaadcc3030847df"/><file name="Cron.php" hash="e223ac8233823981444109ac69ace335"/><file name="Default.php" hash="1220941f500c43c66c9f429ab95a5ac6"/></dir><dir name="Customer"><dir name="Address"><file name="Street.php" hash="2e20de0df187cd66849517466dc3f503"/></dir><dir name="Password"><dir name="Link"><file name="Expirationperiod.php" hash="c73debbe5529ce484eee2a6664764dcf"/></dir></dir><dir name="Show"><file name="Address.php" hash="38b00bdf10d963fbf5be9a0302406861"/><file name="Customer.php" hash="01d91dd5d8eb028c717f319dde677ff2"/></dir></dir><file name="Datashare.php" hash="4bef7e9f6e915c869b7bb3e468415b19"/><dir name="Design"><file name="Exception.php" hash="1b418434347b54e91ea11a94fd07ed74"/><file name="Package.php" hash="6fad5ac9269998768a13ebf7c8f28b90"/></dir><dir name="Email"><file name="Address.php" hash="3ae26dc5453b9cab12263b65f83c2373"/><file name="Logo.php" hash="b4b055cddcbc6f93fa43af8a88421c52"/><file name="Sender.php" hash="d4a0fb1773ca96fa86526799495c1bd5"/></dir><file name="Encrypted.php" hash="a5e3bc1539ffbddcf6ee650bb753c978"/><file name="File.php" hash="f269d665f3a8c7b735ba8e8d63672d31"/><file name="Filename.php" hash="70979f965510f26276c850fce788eea7"/><dir name="Image"><file name="Favicon.php" hash="19d8f4d5d67d9a17ff836fe335d16f34"/><file name="Pdf.php" hash="73076a7f18b04d75c2fc4977687c4137"/></dir><file name="Image.php" hash="eb5e3b2a99384b679d28a5ecb65bcc89"/><dir name="Layer"><file name="Children.php" hash="7f15e3acc71388478f5fe0368c88b497"/></dir><dir name="Locale"><file name="Timezone.php" hash="2a26d9f5e3338e4f0f8e3af45832e940"/></dir><file name="Locale.php" hash="0fec654a0ada04afe93fa53959108a29"/><dir name="Log"><file name="Cron.php" hash="0f3ca3e8ab5ed5bd5346e3b8178367d8"/></dir><dir name="Price"><file name="Scope.php" hash="21f54c017337fec999765785ee93adb8"/></dir><dir name="Product"><dir name="Alert"><file name="Cron.php" hash="fbe701dca5435bca0298b3594efdd397"/></dir></dir><file name="Secure.php" hash="75f06d5e3930f731d1810ecf4040fa6d"/><dir name="Seo"><file name="Product.php" hash="eacb28940d8f1943ddd0bc6a5c6c98bf"/></dir><dir name="Serialized"><file name="Array.php" hash="465549589b59f486e1a2b1610e8c51f8"/></dir><file name="Serialized.php" hash="c60d1f2514fb51c45eb4583581b2ef2a"/><dir name="Shipping"><file name="Tablerate.php" hash="b3b3bd3ee066e48345883bc8c7284b3d"/></dir><dir name="Sitemap"><file name="Cron.php" hash="cd84f70fb65f34de1d7bb105b1d70914"/></dir><file name="Sitemap.php" hash="6fbef301ebe14e2c91eeef01f44f7d9a"/><dir name="Storage"><dir name="Media"><file name="Database.php" hash="9b9502d9ec58868fa6b83e5fc79d5ca3"/></dir></dir><file name="Store.php" hash="aca8ee0d6c7e407ec55570cc18ff272b"/><file name="Symlink.php" hash="9a15c42ff3c5353ed55f5137b8c3e796"/><file name="Translate.php" hash="0a9f0eadbdf8223c9fd630d59a48f1ce"/><dir name="Web"><dir name="Secure"><file name="Offloaderheader.php" hash="21d6657417a1e98b1dbd50cd3c965894"/></dir></dir></dir><dir name="Clone"><dir name="Media"><file name="Image.php" hash="3ac1b8c7a8f63980de8bf747394272c0"/></dir></dir><dir name="Source"><dir name="Admin"><file name="Page.php" hash="2dcd8a52513a711883876224ee6c5e64"/></dir><file name="Allregion.php" hash="1fbac9de5b026fd601b86fdc0e5cd58d"/><dir name="Catalog"><file name="GridPerPage.php" hash="02a52c0d61285b60c32d5681a973289b"/><file name="ListMode.php" hash="0346d08fd7779d3e706cc20a14a39091"/><file name="ListPerPage.php" hash="b9d11b022b805d53a35f3c5be95b9bd1"/><file name="ListSort.php" hash="59aca29e311b6f4cd73a3fdafa32835c"/><dir name="Search"><file name="Type.php" hash="55d156c930a534251dab32395757e997"/></dir><file name="TimeFormat.php" hash="e78f4a50376da5f4bb0d55ecb63324c5"/></dir><file name="Category.php" hash="d310a3a31ba0f8c63b023dd8c7f1fcc8"/><file name="Checktype.php" hash="e523e27f8adab92bc27d85edb7cef249"/><dir name="Cms"><file name="Page.php" hash="d3aeae3a5594dca7bd16b10ad89e55ef"/><dir name="Wysiwyg"><file name="Enabled.php" hash="dc15aa7402520623ff7a993d04a82e7a"/></dir></dir><dir name="Country"><file name="Full.php" hash="48122c72c4eb34afe1471a74e78dc3fb"/></dir><file name="Country.php" hash="1f5754ff1b70ca47a601ec9d6b6221f9"/><dir name="Cron"><file name="Frequency.php" hash="a5175f4b297eb2e465f457c76292cfab"/></dir><dir name="Currency"><file name="Service.php" hash="9804a1f449d3773a0b0071484620217f"/></dir><file name="Currency.php" hash="fbb2930a737860ccb3636136ffe1db4f"/><dir name="Customer"><dir name="Address"><file name="Type.php" hash="aee20f87bab8d750bfc597346ca72eba"/></dir><file name="Forgotpassword.php" hash="2445b9c83a9f6e55be856106c85cd3fd"/><dir name="Group"><file name="Multiselect.php" hash="8e1d29c961825cda6e8865db042e100b"/></dir><file name="Group.php" hash="1e53c280a342b4cae999d831b8ddd412"/></dir><dir name="Date"><file name="Short.php" hash="8b278bb72c56c244210a3ece4c3054c7"/></dir><dir name="Design"><file name="Package.php" hash="baaaecb855ab9c7d44126082c831e18f"/><file name="Robots.php" hash="a2e8c8e61692be022b41524e35415bbc"/></dir><dir name="Dev"><file name="Dbautoup.php" hash="4b1941d1d306dc6af2be43ca1bfdefb4"/></dir><dir name="Email"><file name="Identity.php" hash="64bc2e8b4d778a6d8e20558330d2f7b6"/><file name="Method.php" hash="473ca797528be3d9e133527597f54f05"/><file name="Smtpauth.php" hash="0f6270d9b19fbb06f6d5a3cc4b3a2a68"/><file name="Template.php" hash="b29b38261dd91671497cb8663b0853b7"/></dir><file name="Enabledisable.php" hash="81a7d243afb7a7ae4127325b6d2cb108"/><file name="Frequency.php" hash="575e6895daf761d17ee4bab4906243bb"/><file name="Language.php" hash="7fa90774ae2df6b2e431b8ed01c9b911"/><dir name="Locale"><file name="Country.php" hash="aba15c361ac56c3cd2adff69a5b45ac8"/><dir name="Currency"><file name="All.php" hash="e3f7e6c5a6d52a6bc85b40523a35db6c"/></dir><file name="Currency.php" hash="0a9b47da3e0bd3c9f277b54d8d3808c8"/><file name="Timezone.php" hash="51cc07904fd1608929f11e5b85835081"/><file name="Weekdaycodes.php" hash="a5cf00ad125276e4fd3f86242d7c042d"/><file name="Weekdays.php" hash="fe0043fa190b1f10528b8c9d56139d47"/></dir><file name="Locale.php" hash="724b6cd609273d70290113043a27a91e"/><file name="Nooptreq.php" hash="1f7970e10a3ad304da21fee21c0950a9"/><dir name="Notification"><file name="Frequency.php" hash="7c80b49e84d43ce34794043c8dd15109"/></dir><dir name="Order"><dir name="Status"><file name="New.php" hash="7bcab1d9d7a8b7793ae8da948bf23648"/><file name="Newprocessing.php" hash="e8075d23d12f396b8e0428894af86a2b"/><file name="Processing.php" hash="fd497df34e5ac49d4d62048ade815327"/></dir><file name="Status.php" hash="25d6948207ca120b11b3651ff644535a"/></dir><dir name="Payment"><file name="Allmethods.php" hash="4629ac4f9088842d403525d176690dfa"/><file name="Allowedmethods.php" hash="96675da1c82b3e146cd392f3a1bb0784"/><file name="Allspecificcountries.php" hash="d14af35b787aeaf3f2633f4d66304ce7"/><file name="Cctype.php" hash="62612bd003831821a1602d4ce49b1e9a"/></dir><dir name="Price"><file name="Scope.php" hash="1356d00f77d0fa6dbdb90a0d974285e7"/><file name="Step.php" hash="1dab2a57491b2839ac7716ef88b7cdc7"/></dir><dir name="Product"><dir name="Options"><file name="Price.php" hash="a0c84ce8ba978ef630156959e0b5dc03"/><file name="Type.php" hash="c20c44dbf8063c885e388de0eb2ad17b"/></dir><file name="Thumbnail.php" hash="46491c9be5ecd85337b33b51b26d3de8"/></dir><dir name="Reports"><file name="Scope.php" hash="c6bfc67c88d84f4b30adb94f83bba1e2"/></dir><dir name="Security"><file name="Domainpolicy.php" hash="7631bf64d39e1b68bf05d0cb76a01abc"/></dir><dir name="Shipping"><file name="Allmethods.php" hash="ab9885dde13694d5065544c0edc456bb"/><file name="Allowedmethods.php" hash="40913be5db1f2ec9e239eb4927926bc7"/><file name="Allspecificcountries.php" hash="5242e43b0c2f4907c5dccd05492ae57a"/><file name="Flatrate.php" hash="f5613b3d84039ce90a30fc928a0d8202"/><file name="Tablerate.php" hash="afdeebe2642b148d9e90e9e622096ad8"/><file name="Taxclass.php" hash="0f45581cf3adda47ff3889f0a1727df4"/></dir><dir name="Storage"><dir name="Media"><file name="Database.php" hash="d96400c2e2ced0dd3008ccaf364757d4"/><file name="Storage.php" hash="16e591b972f4b3841cbcf1ce885790d4"/></dir></dir><file name="Store.php" hash="10232c48d66e2644549735eb4606145e"/><dir name="Tax"><dir name="Apply"><file name="On.php" hash="bdb39dce24184d09d50b5e35cef6f060"/></dir><file name="Basedon.php" hash="592c6788bd5390f4ad4826a38487600d"/><file name="Catalog.php" hash="e9b90621307905f9452faaccb13b0cb4"/></dir><dir name="Watermark"><file name="Position.php" hash="d3e2d17de2b2d57534aca4f79f055102"/></dir><dir name="Web"><file name="Protocol.php" hash="1dea95ca27e52decdbd8a338dc8d2762"/><file name="Redirect.php" hash="7ba5f78ac4f044216f3b9aceb808b9ba"/></dir><file name="Website.php" hash="96665c120351a344ec3fdd8a6598fa4c"/><file name="Yesno.php" hash="600ed8f96c7eba056e21612547377b6d"/><file name="Yesnocustom.php" hash="42e39a4459cce6aba6eeb83a76ce540d"/></dir></dir><file name="Store.php" hash="cb173d714c1ec6e7e5ff5d7c90ff4689"/></dir><file name="Url.php" hash="310cc90a9fd659ef641fbc2267080df3"/></dir><dir name="controllers"><file name="AjaxController.php" hash="5a7b3797e9ef2ca0097c83fe868a1d09"/><dir name="Api"><file name="RoleController.php" hash="ebe531ce21f3d9b30a0678f81fabeb47"/><file name="UserController.php" hash="c934a1d0da97db4b20d3b989d34c5eb0"/></dir><file name="CacheController.php" hash="2d17c0b6e2f6c18c2d247c29f230c0af"/><dir name="Catalog"><dir name="Category"><file name="WidgetController.php" hash="8b35918f9a2a3d9c7129baad74e12086"/></dir><file name="CategoryController.php" hash="0a9de0f30a4a37149cd6a19f99812aa2"/><dir name="Product"><dir name="Action"><file name="AttributeController.php" hash="b85ad6500bf470aee94b456189fcd8eb"/></dir><file name="AttributeController.php" hash="09f95f07fa0b6f98e686b8c0d27015a4"/><file name="DatafeedsController.php" hash="6cfd6e07d7e6fd7bda424e9106791bc8"/><file name="GalleryController.php" hash="fd148c927b5922e1f168c7fdcff7a128"/><file name="GroupController.php" hash="a0fb677802ae528c6b9bbf1bfe2c9109"/><file name="ReviewController.php" hash="a6b3116e4bcb42a6119782f6638dd217"/><file name="SetController.php" hash="c0b759fee4fd5a39f2d6550f73506b1c"/><file name="WidgetController.php" hash="ccacb960146224f12e3439fb8d97a1f1"/></dir><file name="ProductController.php" hash="328ad1b8dccec2bc429b10b74d738738"/><file name="SearchController.php" hash="daea0f73460b35816d90afba238563c9"/></dir><file name="CatalogController.php" hash="7fb997bbd75d5d4e97f51c5605a7e5f0"/><dir name="Checkout"><file name="AgreementController.php" hash="4ac302738f4aa364651c58a1a57e70fb"/></dir><dir name="Cms"><dir name="Block"><file name="WidgetController.php" hash="6fe67533f2254d868ab074d71ebd877c"/></dir><file name="BlockController.php" hash="4784c52d57f9e2554f2da44704809071"/><dir name="Page"><file name="WidgetController.php" hash="539881fe06abf63fd2c185f71c6b71f1"/></dir><file name="PageController.php" hash="3d7454e5afc07d7c722e0f34e76b7d9b"/><dir name="Wysiwyg"><file name="ImagesController.php" hash="fdc9fc35ed49619bb784acd1867f3d05"/></dir><file name="WysiwygController.php" hash="6873086a0cfbc59ffe9ba56a9dd78927"/></dir><dir name="Customer"><dir name="Cart"><dir name="Product"><dir name="Composite"><file name="CartController.php" hash="d596bbc829a10f20a379ffaf63ef65f2"/></dir></dir></dir><file name="ConfigController.php" hash="e67ab7bac05f8eb96cf158b25540ee03"/><file name="GroupController.php" hash="6dd2c74c9a5f637b07f8bb2dd862e57e"/><file name="OnlineController.php" hash="ef4965523714e1e78fa9919f7101ce27"/><dir name="System"><dir name="Config"><file name="ValidatevatController.php" hash="552587306f03e52da672b74f3026d869"/></dir></dir><dir name="Wishlist"><dir name="Product"><dir name="Composite"><file name="WishlistController.php" hash="7de9d8c532581e4f0672f489e4a79f15"/></dir></dir></dir></dir><file name="CustomerController.php" hash="0c4f66abdcea9c6d9b7f440d78edc5c5"/><file name="DashboardController.php" hash="cb1ba21fa9317cc15ca1b814e90de69a"/><file name="IndexController.php" hash="bb7b651d76c8a875428f3c7911cf94c7"/><file name="JsonController.php" hash="0ca170d1505a2a4fb59af02408361f2d"/><dir name="Media"><file name="EditorController.php" hash="a2302405c906005930299086871fa603"/><file name="UploaderController.php" hash="3fa26d34f883159eabf0d2d1ff2c1a2c"/></dir><dir name="Newsletter"><file name="ProblemController.php" hash="a172b61ad356aabaa4b256608be0e594"/><file name="QueueController.php" hash="e420ddab5547b9df574c5139f5b9f836"/><file name="SubscriberController.php" hash="2388c51a7ff508cbce6179b011d177c4"/><file name="TemplateController.php" hash="b3e2fa20241263496b8eaa2b7266c7f2"/></dir><file name="NotificationController.php" hash="976071f7083b095a328e5622eee442cc"/><dir name="Permissions"><file name="BlockController.php" hash="2608dd88b73bc04f96fe70e076c7da51"/><file name="RoleController.php" hash="019952509d4dae9fafd3fa1024af27f1"/><file name="UserController.php" hash="e899f2277f578cbae0fa0e812e710996"/><file name="VariableController.php" hash="d01073a431417791526ad818b4371493"/></dir><dir name="Poll"><file name="AnswerController.php" hash="7376ba3ba1ebf8e7a18e5a03286e9f60"/></dir><file name="PollController.php" hash="c6d10f8210ea4d04fe311c7671e6d1a4"/><dir name="Promo"><file name="CatalogController.php" hash="5eb839a68d088fc7025f02a1a0001a47"/><file name="QuoteController.php" hash="226f6f88feda67f894caab6332f9d206"/><file name="WidgetController.php" hash="7cf2e09f792a292900207bd082e1aeac"/></dir><file name="PromoController.php" hash="e30837333c4c67d8165007aa2feab35b"/><file name="RatingController.php" hash="edaa7a0e1a01f826aa268ae40a46945f"/><dir name="Report"><file name="CustomerController.php" hash="31b219ae4ba50f4231c4cb45b9feabbd"/><file name="ProductController.php" hash="ab4e8d0060b1c77d08c4db7973b8b376"/><file name="ReviewController.php" hash="460aaa889e3ec75932cf01de98be083c"/><file name="SalesController.php" hash="378fc9ffcaf9477a2f6a85a7fab449b2"/><file name="ShopcartController.php" hash="22390ff4c733f3a3b9671b009d76ddd2"/><file name="StatisticsController.php" hash="5d30167b6686d1ff8f10da6ef6ff5833"/><file name="TagController.php" hash="195c825b6d52f786752d2264210df4ab"/></dir><file name="ReportController.php" hash="bc571493b15f2aeddbbc8b5fc9756a20"/><dir name="Rss"><file name="CatalogController.php" hash="e455ca6991a22325abf3a8b81570c237"/><file name="OrderController.php" hash="ad9f3e5b18868092ba0ae2c2a7fd59ea"/></dir><dir name="Sales"><dir name="Billing"><file name="AgreementController.php" hash="9171c69e6ebe23335ec9f06f24ab53f4"/></dir><file name="CreditmemoController.php" hash="b6facb6394f9ffb6b8007396702243f5"/><file name="InvoiceController.php" hash="3ee8a06cf0fb4328e2dd29f7a681c7eb"/><dir name="Order"><file name="CreateController.php" hash="e604a188139e556fee16e67a8d7ca68f"/><file name="CreditmemoController.php" hash="4187e62788a9f3159cea9d59b3543cf6"/><file name="EditController.php" hash="2eca9986b069dedf221126f5fd02e706"/><file name="InvoiceController.php" hash="a74dc269179ba77c8685254adf24b2ad"/><file name="ShipmentController.php" hash="1736e79b4f69023b576fe9196b81b1dd"/><file name="StatusController.php" hash="336fa850f4d08f34ba23957a0ac51bf4"/><dir name="View"><file name="GiftmessageController.php" hash="14b10af7a53b27f709dda510855c61cf"/></dir></dir><file name="OrderController.php" hash="0664c0fe82684bd4e6d30f9bfdec6693"/><dir name="Recurring"><file name="ProfileController.php" hash="0a1ef81ae9c69e4b8a7d4bdc3b474b64"/></dir><file name="ShipmentController.php" hash="f77a07dd2aaffdb419b128dcd7a43ff5"/><file name="TransactionsController.php" hash="ff60fb56c197aa26edb66d09dc485d97"/></dir><file name="SalesController.php" hash="c491e545c8b8333953489a787cdf2312"/><file name="SitemapController.php" hash="2d46ec6584606ff5327e51f819ec3eb9"/><file name="SurveyController.php" hash="22851083d8c816676d22d45ad652c609"/><dir name="System"><file name="AccountController.php" hash="dc2449b19bc120ada582b010a65bf244"/><file name="BackupController.php" hash="27e291a12b51a5fb0055cc4cd9c16634"/><file name="CacheController.php" hash="6e3c92ae2fb7f8dd70e7913d04733530"/><dir name="Config"><dir name="System"><file name="StorageController.php" hash="adb18b1a46d36eb7e3b76aec6e23724a"/></dir></dir><file name="ConfigController.php" hash="430e0be3cf04c2675ef8677aecfb3864"/><dir name="Convert"><file name="GuiController.php" hash="02f545c596531dafa55d5a0f03898271"/><file name="ProfileController.php" hash="c2e94de74c9dd4fb980bd8bda1abf0e0"/></dir><file name="CurrencyController.php" hash="47f3d181cd6c7d376196cb174c40ae4f"/><file name="DesignController.php" hash="ca36818c226ec2f9e9026ab5199e1fd9"/><dir name="Email"><file name="TemplateController.php" hash="482681d27a4f62dc03377abe8ac96518"/></dir><file name="StoreController.php" hash="b81f6c51aa31f996916ed2d229a9e293"/><file name="VariableController.php" hash="bb26c6bde2237af3075522df35f9f16c"/></dir><file name="SystemController.php" hash="df9e8a4ca6fdda1873fc9140500dd305"/><file name="TagController.php" hash="b7094e346feb452ff4f2edffd88c5664"/><dir name="Tax"><dir name="Class"><file name="CustomerController.php" hash="44181464b9076b6efb12d42c503cb754"/><file name="ProductController.php" hash="af1043ce13870b6930d619d65d02da54"/></dir><file name="ClassController.php" hash="599c1e9515eceeb6327a13240afb5e35"/><file name="RateController.php" hash="613f78cd5df1b03a1c98fd3a6ba74657"/><file name="RuleController.php" hash="4e9877e2fa290b25f206549f7f7f1389"/></dir><file name="TaxController.php" hash="ba5cef021e3bee1f5aa6600fdbe3da2f"/><file name="UrlrewriteController.php" hash="2509696e2d596e38acadf0c9946afb3e"/></dir><dir name="etc"><file name="adminhtml.xml" hash="c9e5ea72c70800629306e7f1eccced0b"/><file name="config.xml" hash="390cf42cfcadeb4947031ad469906b76"/><file name="jstranslator.xml" hash="0c888565406549cc72904a636ffdcd63"/></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Mage_Adminhtml.csv" hash="6b21dbb385419c62dd4a3c61c9bf64fc"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Js_Calendar</name><channel>community</channel><min>1.51.1.17</min><max>1.51.1.17</max></package><package><name>Lib_Js_Ext</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_LinLibertineFont</name><channel>community</channel><min>2.8.14.17</min><max>2.8.14.17</max></package><package><name>Lib_Js_TinyMCE</name><channel>community</channel><min>3.5.11.16</min><max>3.5.11.16</max></package></required></dependencies>
+</package>
diff --git a/var/package/Mage_Core_Modules-1.9.3.10.xml b/var/package/Mage_Core_Modules-1.9.3.10.xml
deleted file mode 100644
index e6a3d17..0000000
--- a/var/package/Mage_Core_Modules-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Mage_Core_Modules</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Collection of Magento Core Modules</summary>
-    <description>Collection of Magento Core Modules</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:23</time>
-    <contents><target name="magecore"><dir name="Mage"><dir name="Admin"><dir name="Helper"><file name="Block.php" hash="caa2d50273d135454432a82279a11568"/><file name="Data.php" hash="a1e30b8cff30b64d0071e3fc0d4d747c"/><dir name="Rules"><file name="Fallback.php" hash="5482131732670d135c93815ccda8c06f"/></dir><file name="Variable.php" hash="fae16e7d6ff7c120b7f4ef6382c00286"/></dir><dir name="Model"><dir name="Acl"><dir name="Assert"><file name="Ip.php" hash="a59d50ca3b29cc9a624261da4dbe9c1b"/><file name="Time.php" hash="7192ead0d21ba20bfe1790f5e2aff34b"/></dir><file name="Resource.php" hash="0839068c44eddb3b3748236642bf84e7"/><dir name="Role"><file name="Generic.php" hash="21c78892191682d198ebeb3a4995db8c"/><file name="Group.php" hash="538b9f77a4c75aa1060a52f611abaf1a"/><file name="Registry.php" hash="a24c7a642f46edd6c2d4c7675c0c84f1"/><file name="User.php" hash="46d3710d79d3640420f58a262fbeffd4"/></dir><file name="Role.php" hash="943df3fdcf2f2c819b804203762c405b"/></dir><file name="Acl.php" hash="54433cdf323e543e1867c2549ece2146"/><file name="Block.php" hash="6f4be02782162b7139294394fb2004ef"/><file name="Config.php" hash="a3bcd071ae1f775d2e1501a7a4f9822b"/><dir name="Mysql4"><dir name="Acl"><dir name="Role"><file name="Collection.php" hash="9b07c8d517462b6204a83d90acd16756"/></dir><file name="Role.php" hash="8b294821cf814a143d850198f4c43152"/></dir><file name="Acl.php" hash="6cc39341f37e79af75598f6cac080928"/><dir name="Permissions"><file name="Collection.php" hash="adefccfe4c00a5107351e4db77640acb"/></dir><dir name="Role"><file name="Collection.php" hash="d932179a37015862d102e9bad94f3bbf"/></dir><file name="Role.php" hash="f9e310b9e3866e9b444e914275a7874e"/><dir name="Roles"><file name="Collection.php" hash="dfc8f612252f1290b2159451fe4e9436"/><dir name="User"><file name="Collection.php" hash="4e7b8bf1992f866fe90e3ddf5b0c6461"/></dir></dir><file name="Roles.php" hash="983a8d78acc8b0497aac971d41aca7ad"/><dir name="Rules"><file name="Collection.php" hash="a8dbbe361030637cfb8302a9b00d1679"/></dir><file name="Rules.php" hash="28114cde294f6cc6e145b46ec725c72f"/><dir name="User"><file name="Collection.php" hash="57f200bf02f6ea105ceb61e8fe46e756"/></dir><file name="User.php" hash="55f3f78be0507543391cbc8e540c6b7b"/></dir><file name="Observer.php" hash="81cc930f29d4344171630cb7ea4a1edd"/><file name="Redirectpolicy.php" hash="b646df71602dbe82e7ab1782fbd84133"/><dir name="Resource"><dir name="Acl"><dir name="Role"><file name="Collection.php" hash="1926e0a7c8bf8940f70e26e3c2dd70ae"/></dir><file name="Role.php" hash="be13385eb722b00b08ee72c333f3c948"/></dir><file name="Acl.php" hash="f24de22c611f36f6fc7be3ac20c46695"/><dir name="Block"><file name="Collection.php" hash="718324e3f2d4c5d48c056bc6fda734de"/></dir><file name="Block.php" hash="5035beb7d68f54ffd191e1f7b8884421"/><dir name="Permissions"><file name="Collection.php" hash="cad5501e6d14ab6e7422881c2bd0529a"/></dir><dir name="Role"><file name="Collection.php" hash="daa545d25e2b93754fd2f7b5eac63795"/></dir><file name="Role.php" hash="f464a8b332d285af1bd80248fb18400c"/><dir name="Roles"><file name="Collection.php" hash="8ccb0a88f2091d75721a52c3b12757a3"/><dir name="User"><file name="Collection.php" hash="0f674723bb96b168ace8a02a1cca0186"/></dir></dir><file name="Roles.php" hash="8cc80a0c8b61fe74fb736ce8dfcac4c7"/><dir name="Rules"><file name="Collection.php" hash="fdc5f99600a5fbd7dba4fae947895689"/></dir><file name="Rules.php" hash="7d29a42a640f540fb93fcd74d5736670"/><dir name="User"><file name="Collection.php" hash="4ce53e45a26d3e054bb88df76471de9b"/></dir><file name="User.php" hash="d83993d485d972470d74e3bbef5129ef"/><dir name="Variable"><file name="Collection.php" hash="a6e4c9520ae8814e22a86126263a8123"/></dir><file name="Variable.php" hash="d552d6a33a00e83583c2c9b958fc57e9"/></dir><file name="Role.php" hash="427f7e03d269ad1dc23a4173621c6d3a"/><file name="Roles.php" hash="b83f289438abb74f56f1912877f53f1c"/><file name="Rules.php" hash="489fdb5eae36676cc780ef79bd0b3f2c"/><file name="Session.php" hash="2028c3c98afd35568fb8d3cc4f134581"/><file name="User.php" hash="c0acee16404bf6cb02f161ef3b77d7ee"/><file name="Variable.php" hash="7d47e44adeea80a3497965d4ac43a11c"/></dir><dir name="data"><dir name="admin_setup"><file name="data-install-1.6.0.0.php" hash="0c513c2cfa2157991f25ced0078a0a28"/></dir></dir><dir name="etc"><file name="config.xml" hash="e46e6daf902ff5fa67e29aeb7822dc25"/></dir><dir name="sql"><dir name="admin_setup"><file name="install-1.6.0.0.php" hash="980f7a261260766a99bb1c2168ee9ee8"/><file name="mysql4-install-0.7.0.php" hash="3ac4123cb71f013d2ad470dea9d30810"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="72634f2eb3a48eeceaea8c5996628e58"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="0b41c60e4309ab58b185475035690803"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="a6e086154afbf0e78ebda93b8df1e6e5"/><file name="upgrade-1.6.0.0-1.6.1.0.php" hash="aa06fe4ff87c19621f325a7eb7ef74af"/><file name="upgrade-1.6.1.0-1.6.1.1.php" hash="b09feaaa0526ef59693920d6eda5bc70"/><file name="upgrade-1.6.1.1-1.6.1.2.php" hash="6b79418a832f51d1f9c28c5ce748322a"/></dir></dir></dir><dir name="AdminNotification"><dir name="Helper"><file name="Data.php" hash="df042bc27f5d78373840d635b65b602c"/></dir><dir name="Model"><file name="Feed.php" hash="db188fd3c854c92ab2f2fd18e3aeef56"/><file name="Inbox.php" hash="3f3e76c94db42f21e2213e87f347650b"/><dir name="Mysql4"><dir name="Inbox"><file name="Collection.php" hash="5d92840cb8289659edf2bea39c9506e5"/></dir><file name="Inbox.php" hash="efbb324a01db989b7abe345a7e2a0603"/></dir><file name="Observer.php" hash="b4ed5e01e17ab5d02af5dbf62fd6b99f"/><dir name="Resource"><dir name="Inbox"><file name="Collection.php" hash="161c59fda876ddb47af017f3d3688e92"/></dir><file name="Inbox.php" hash="c88b47b782cfcdf0752568434b29fd4a"/></dir><file name="Survey.php" hash="1b099509ff57f10c585295f95b1bdbf6"/></dir><dir name="etc"><file name="adminhtml.xml" hash="8306afc5cbf075e597ea182abbbad3bf"/><file name="config.xml" hash="93e0e7500211acff718572a494b1ff1d"/><file name="system.xml" hash="5022df69821d874a52f57c9073cebb27"/></dir><dir name="sql"><dir name="adminnotification_setup"><file name="install-1.6.0.0.php" hash="cf2dd6c652424ef76d06f74c89b66a7b"/><file name="mysql4-install-1.0.0.php" hash="f0ae881e7787a929c476dd20798eab98"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="d2c80d03e0f86c9b8825f033c23b6d01"/></dir></dir></dir><dir name="Api"><dir name="Controller"><file name="Action.php" hash="6c3628b0ac300a4cd89b98eda8d09c26"/></dir><file name="Exception.php" hash="f1c37ee004e19d1bd0d89feee1cb8399"/><dir name="Helper"><file name="Data.php" hash="0ef5815133c5d83c063356a3e0da3daa"/></dir><dir name="Model"><dir name="Acl"><dir name="Assert"><file name="Ip.php" hash="c2a37bf362c2a7b2b7541bdfaecec197"/><file name="Time.php" hash="c914e7c3bdfd6a9db3520a09092042c7"/></dir><file name="Resource.php" hash="c73618e1e22cd9e536ac70743cdd2540"/><dir name="Role"><file name="Generic.php" hash="fb84e9243f5b0b259550ac04d78f3f14"/><file name="Group.php" hash="8767858e21f6f122daf9e9613aa46daf"/><file name="Registry.php" hash="86e7d446f72e86958fd31fd0529a89ff"/><file name="User.php" hash="c469eff3b9a049abfffa2713efae214f"/></dir><file name="Role.php" hash="d96b56ede53505c56b58b0f38135823e"/></dir><file name="Acl.php" hash="939deaca14b67306b767e389187590e6"/><file name="Config.php" hash="bb1e22bcb0fb28ad2588f6c2b2a60e31"/><dir name="Mysql4"><dir name="Acl"><dir name="Role"><file name="Collection.php" hash="32fe974a16a7b48f1894d2679b84e1a2"/></dir><file name="Role.php" hash="e5e0771ac8010362fa549c6e7daa7e30"/></dir><file name="Acl.php" hash="70c0aeedb1fb6ab524ab2794686e2901"/><dir name="Permissions"><file name="Collection.php" hash="4cd6e1648ef9de08aac8cd601f0e6dc7"/></dir><dir name="Role"><file name="Collection.php" hash="be4910ba32a9a2523441b0e94055cb96"/></dir><file name="Role.php" hash="ac94438d85b8e1fe7dd54ea5b6e63ae3"/><dir name="Roles"><file name="Collection.php" hash="18e2d6868811a2ca964bc8b6bd114976"/><dir name="User"><file name="Collection.php" hash="747d7d19d70c23540b3fd2597700eea8"/></dir></dir><file name="Roles.php" hash="49c8bf80cce95a6144ab436e3325fa0f"/><dir name="Rules"><file name="Collection.php" hash="9074b80fdbe0064239f630923205116a"/></dir><file name="Rules.php" hash="428cd0c12e6fd67e9c8034c7ac916020"/><dir name="User"><file name="Collection.php" hash="a5528fbfb43795975f632684de0a1e9b"/></dir><file name="User.php" hash="ffa15689d0d3be22d1dd833854c9918e"/></dir><dir name="Resource"><file name="Abstract.php" hash="f651d503d44050750e347dea6c4eb2a1"/><dir name="Acl"><dir name="Role"><file name="Collection.php" hash="8cebb1abdaa3a0047515c8f293024185"/></dir><file name="Role.php" hash="89d84c7acc34e89db2ce8da6549cb309"/></dir><file name="Acl.php" hash="68367d41c8cddb578356dd3e954b4e05"/><dir name="Permissions"><file name="Collection.php" hash="8f0a8da938b11ae2f807a8cea8ed90fb"/></dir><dir name="Role"><file name="Collection.php" hash="4b0f67fd9f8b98d6290d89637b8d316e"/></dir><file name="Role.php" hash="fb845fb504654a9d77d589f9375cec0c"/><dir name="Roles"><file name="Collection.php" hash="107712d451f49d5117b0ca501993e725"/><dir name="User"><file name="Collection.php" hash="dd46a32c262b6f614e06c137e966b444"/></dir></dir><file name="Roles.php" hash="601e50dd0dcee557e210dc58d8a6cefa"/><dir name="Rules"><file name="Collection.php" hash="71e01b2d03324b5cca1febb062c16b82"/></dir><file name="Rules.php" hash="8bc2f8599ff63bace0f881b7dbad38d4"/><dir name="User"><file name="Collection.php" hash="af7f66ac98385c12eb69eec621091b7c"/></dir><file name="User.php" hash="4e00711e498dbad779d00e44abdadafb"/></dir><file name="Role.php" hash="ae0c28bdc096f4a02a24bacffbe43e4c"/><file name="Roles.php" hash="fa40e03fd2fb95ad6d180006b372a000"/><file name="Rules.php" hash="19025dc7e78b47f7bfab247abbf3dfab"/><dir name="Server"><dir name="Adapter"><file name="Interface.php" hash="5a2b192b023481b9334867830f7fc138"/><file name="Soap.php" hash="ea07c3bad993021d2b30901ad5277691"/><file name="Xmlrpc.php" hash="89630ebb23280c22955d32834dd428e7"/></dir><dir name="Handler"><file name="Abstract.php" hash="958f6fb48098d3f5593be13444b6271d"/></dir><file name="Handler.php" hash="15041baa52a1f7378c923a7fe19ddbf9"/><dir name="V2"><dir name="Adapter"><file name="Soap.php" hash="b40c707f4d69a59570142e416eae6ea6"/></dir><file name="Handler.php" hash="645b2e4ab2515e5ad8ad88d7513cbba9"/></dir><dir name="Wsi"><dir name="Adapter"><file name="Soap.php" hash="e04892f8ee83aa2236240f7f674beebe"/></dir><file name="Handler.php" hash="c8287d2c89cb6135104bda851f977489"/></dir></dir><file name="Server.php" hash="9be34054f5a0c93688ddfd9f052169b7"/><file name="Session.php" hash="8a290c5d23e5caba85adbc5748ddee85"/><file name="User.php" hash="15f64d4cc591f61fbf227ba25c3a1485"/><dir name="Wsdl"><dir name="Config"><file name="Base.php" hash="5c284d7e8e13f59f4b4f8b275d191452"/><file name="Element.php" hash="e42b6b1c30064f8a53f0fb199d77e5cb"/></dir><file name="Config.php" hash="fca16130d0fc928d68c4307fc7fc4886"/></dir></dir><dir name="controllers"><file name="IndexController.php" hash="0d50721374b168478c75084b9e0aa784"/><file name="SoapController.php" hash="caaba72fa28c829c358566baefeccbaf"/><dir name="V2"><file name="SoapController.php" hash="7bf9b20009581e5ec0cee7fba29fae6d"/></dir><file name="XmlrpcController.php" hash="757a12d58d3c89c92c25767d78bb8ba5"/></dir><dir name="etc"><file name="adminhtml.xml" hash="57ae0b2026085976e92bc10a4bfe0aab"/><file name="api.xml" hash="338887365fd87a21806a14089685d4cb"/><file name="config.xml" hash="abee7d9e23f6d7d2684eaa5b517f21f7"/><file name="system.xml" hash="f48c397a9a8ae46ec06bd051cfa38626"/><file name="wsdl.xml" hash="f0db676b04733b38f310355bb44bc3cb"/><file name="wsdl2.xml" hash="7d527421ba4b63a8a812ab6b1095891d"/><file name="wsi.xml" hash="9fb1700cf935a26e7fada90a07fae7fe"/></dir><dir name="sql"><dir name="api_setup"><file name="install-1.6.0.0.php" hash="09e011980354c86266cdf9d63a5af8cd"/><file name="mysql4-install-0.7.0.php" hash="4cb547e0f089626e582767db0ec8ee90"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="6aba64817491a0d6a75bf672ac4cab44"/><file name="mysql4-upgrade-0.8.0-0.8.1.php" hash="193d3c806f3f6f9c8b9d78695856ae3d"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="8e4802513a90731e5d70d1882b38b806"/><file name="mysql4-upgrade-1.6.0.0-1.6.0.1.php" hash="f7b95ac048305ed05d040e3f21c495b4"/></dir></dir></dir><dir name="Api2"><dir name="Block"><dir name="Adminhtml"><dir name="Attribute"><file name="Buttons.php" hash="e57b2cca67185e3cd213f8a0f8b85f40"/><dir name="Edit"><file name="Form.php" hash="c8d355c13150048b44adbb7890807182"/></dir><file name="Edit.php" hash="f16b5c8886a820c2e6aa98bd4aa4d643"/><file name="Grid.php" hash="86ba4658fb06045763abb8c7a06b15a4"/><dir name="Tab"><file name="Resource.php" hash="3239ed35e6d73f4d99f3aebc6cb15df2"/></dir><file name="Tabs.php" hash="505fd3e313888bf6841b8419de4a36b9"/></dir><file name="Attribute.php" hash="0dd6ead429d30891593ef5dd46694fd8"/><dir name="Permissions"><dir name="User"><dir name="Edit"><dir name="Tab"><file name="Roles.php" hash="fae6fda77fa35cb811e343db83ab538f"/></dir></dir></dir></dir><dir name="Roles"><file name="Buttons.php" hash="99d83abfae8d8c391c2f1ec74cacf783"/><file name="Grid.php" hash="34d4de009fe78255533328d5d9948e24"/><dir name="Tab"><file name="Info.php" hash="b580103e0eb426629d6abab30bcbbbf8"/><file name="Resources.php" hash="a9cb4685233d34c84fb44b0fcc79df4f"/><file name="Users.php" hash="dd1412f767dd45ba5ca2766095cec422"/></dir><file name="Tabs.php" hash="d60717cf367b7fb6bbb0ae11dba22c0a"/></dir><file name="Roles.php" hash="1d276329e5a50560e6e2f2b32ec29285"/></dir></dir><file name="Exception.php" hash="f4ced7d9dfb82edfdeb2c7d0b5ce2768"/><dir name="Helper"><file name="Data.php" hash="8975105793473a87063e164aea84feaa"/></dir><dir name="Model"><dir name="Acl"><dir name="Filter"><dir name="Attribute"><file name="Operation.php" hash="7772c8a909faec7391ce93fe91e077df"/><file name="ResourcePermission.php" hash="7980da3c1b5f522349a63f43938e37a1"/></dir><file name="Attribute.php" hash="af82dddf8646031fdae39a58dfa307df"/></dir><file name="Filter.php" hash="5109370c1a4adc8bc1f6b276f50868ae"/><dir name="Global"><file name="Role.php" hash="ae97b45a46e8770005e419678fa8ebf9"/><dir name="Rule"><file name="Permission.php" hash="8de779f299484181680195e87387fc88"/><file name="Privilege.php" hash="d90ec9b7324de863e74e6f13b3dfcde3"/><file name="ResourcePermission.php" hash="48f8373c47060c8c01358500d4548d5e"/><file name="Tree.php" hash="9a49b87115c274c87198a612fac101ff"/></dir><file name="Rule.php" hash="321434a2a494b8b519df55c0554b99e2"/></dir><file name="Global.php" hash="7819e08f4116c8c5a26af3a5a7f8a5fc"/><file name="PermissionInterface.php" hash="cabcf2514da2259366f1f68767937646"/></dir><file name="Acl.php" hash="8168df9324f44b487637330fe94e5b45"/><dir name="Auth"><dir name="Adapter"><file name="Abstract.php" hash="fa725f5d2bc74776393ab577da5213e0"/><file name="Oauth.php" hash="dafe7bb6be6ebb9648dd8d013c68f924"/></dir><file name="Adapter.php" hash="872d0216ee0446972dc2d486ff0d7bd4"/><dir name="User"><file name="Abstract.php" hash="81117cecf3a752eb7bf0ba689a4c0528"/><file name="Admin.php" hash="02230ffbbe56609a244dcb4f531a5739"/><file name="Customer.php" hash="0023067ca016f00f011204ffe6a346d2"/><file name="Guest.php" hash="e57dd3245a2a09a2755a1ade2cf1a788"/></dir><file name="User.php" hash="2b22b00fbd482e569f7e01c6ee4f1e74"/></dir><file name="Auth.php" hash="665a2694ec0fc6e233767d05ddc7b0f5"/><file name="Config.php" hash="ed2cdc8b2c092280a58cee2ec8ab9e2e"/><file name="Dispatcher.php" hash="30da396e02ddb880a36fcae44b3f4ffb"/><file name="Multicall.php" hash="c82b0b041e8b71685658ce9939d9f537"/><file name="Observer.php" hash="23b35ca3a5c0de9419bff1b50b98ef64"/><dir name="Renderer"><file name="Interface.php" hash="d9bd0c2d19c4f216ca1495ac30987233"/><file name="Json.php" hash="76b25110de667ee1c5f76c93fb242565"/><file name="Query.php" hash="5ef975348f915590b5fba1ff5a5a4958"/><dir name="Xml"><file name="Writer.php" hash="03bcf955bf8cb14b2143647161949357"/></dir><file name="Xml.php" hash="92504e9d4da46b51835e029882cdbe0b"/></dir><file name="Renderer.php" hash="6802baf80fe73e306e2361054a7b4687"/><dir name="Request"><file name="Internal.php" hash="ed73acd6aa487d4d55ddb073cc92a54f"/><dir name="Interpreter"><file name="Interface.php" hash="bd8eea102f6fdd48da627dad533b87b9"/><file name="Json.php" hash="28ae2899eaeb54f13a10424ad0bd2222"/><file name="Query.php" hash="dbdc8defdc20549dde842a6f30b05926"/><file name="Xml.php" hash="ce5d93d53da641b1f92514b2490b5c40"/></dir><file name="Interpreter.php" hash="c983432ec6ab8ab19061e2895b0b12ee"/></dir><file name="Request.php" hash="52ce6e5ed8b67e92242c89358c0ff61f"/><dir name="Resource"><dir name="Acl"><dir name="Filter"><dir name="Attribute"><file name="Collection.php" hash="c5c3f91562564872857a90de8f6e6eb1"/></dir><file name="Attribute.php" hash="4b31a1a4c3923d393607c65c363cb74a"/></dir><dir name="Global"><dir name="Role"><file name="Collection.php" hash="c8cdd0443473ccdef524bbc9d0ee5faf"/></dir><file name="Role.php" hash="d512859354a0f3a68482c0b5b724200f"/><dir name="Rule"><file name="Collection.php" hash="199861b7d7ac3a114a9a3acd7b3b6bdc"/></dir><file name="Rule.php" hash="027b4342ef354ae654b95d3ad67d052a"/></dir></dir><file name="Setup.php" hash="06271b676d7740c82d9b87cab3f9c7cb"/><dir name="Validator"><file name="Eav.php" hash="f8eca8dadc2a2b16b01c523bf18a1fe9"/><file name="Fields.php" hash="9afa037fbf7489ea9042eb6955083b0d"/></dir><file name="Validator.php" hash="dc081ab02438cd20f95540a9a9552b30"/></dir><file name="Resource.php" hash="2de527731797b00eee24128ea7dadcb6"/><file name="Response.php" hash="03b815e352a2e39648c1836a28106519"/><dir name="Route"><file name="Abstract.php" hash="ad6970f5b98a7d2c8b7f6686d3e5e50e"/><file name="ApiType.php" hash="5bd38d66efe6a96558778c22cbd3cf25"/><file name="Interface.php" hash="635382ad0b407c35a551832250c79ab7"/><file name="Rest.php" hash="a1524cd462cb860fbb586e999a6a3dc7"/></dir><file name="Router.php" hash="26b93184e98020f9266225c0654cc011"/><file name="Server.php" hash="636ebda89a840623c4ec3c783c2c0581"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Api2"><file name="AttributeController.php" hash="e7c9a4ff55b6bfde147b4562cf9d6867"/><file name="RoleController.php" hash="a281f68c3d40ead23d29a5a761c27036"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="120807e3d576ab501e5a289d97e25978"/><file name="config.xml" hash="692bf96f7375cb891461e67f1e3e2ee1"/></dir><dir name="sql"><dir name="api2_setup"><file name="install-1.0.0.0.php" hash="ed93a6c9c5d36b8c9e552c1b75cb8c2d"/></dir></dir></dir><dir name="Authorizenet"><dir name="Block"><dir name="Directpost"><file name="Form.php" hash="e69a1ed465822af82fcca19b6232296e"/><file name="Iframe.php" hash="d175239ccdac988fe85d3ac55552d060"/></dir></dir><dir name="Helper"><file name="Admin.php" hash="73abd68b846923ba6841d0f16bb68ac3"/><file name="Data.php" hash="57de952e77147fe84c0ac75701b055a1"/></dir><dir name="Model"><dir name="Directpost"><file name="Observer.php" hash="49b71dfe98c71e0704f503fc6b1ee200"/><file name="Request.php" hash="373852a6d6a4b2d204d2105748a3d0e4"/><file name="Response.php" hash="d671a881c1241f1bbb173babbcf082b0"/><file name="Session.php" hash="9ed74b4f3bd8694cb4e9512748cff581"/></dir><file name="Directpost.php" hash="f68182cb174048294a2069ad5f19c510"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Authorizenet"><dir name="Directpost"><file name="PaymentController.php" hash="58a391e6780c02cbb6e96629406b70d5"/></dir></dir></dir><dir name="Directpost"><file name="PaymentController.php" hash="68655a8dec57f412c6c1c75472310385"/></dir></dir><dir name="etc"><file name="config.xml" hash="e5b53414e308a72beb5964c9e52bb891"/><file name="system.xml" hash="ffc68b24656677cc1f4191332a59a90f"/></dir></dir><dir name="Backup"><file name="Exception.php" hash="aef32492db8e2e178a6f19dd60ec44b2"/><dir name="Helper"><file name="Data.php" hash="0f9eb22500eecf1541ffae88a455ebbf"/></dir><dir name="Model"><file name="Backup.php" hash="b9f82ae285c4d1537dcde437da930445"/><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="e55dc0f8d625f820247117fa8340a7c2"/></dir><dir name="Source"><file name="Type.php" hash="b717810ab4fdae54653a5a2fbc7ea83f"/></dir></dir><file name="Db.php" hash="8e4071a663d5c9c56ccdefe6f11f202a"/><dir name="Fs"><file name="Collection.php" hash="12b97f06d9bf26f826f06c0eea7409fc"/></dir><dir name="Mysql4"><file name="Db.php" hash="9d8151ac0ee8a690f82250ca69af7d21"/></dir><file name="Observer.php" hash="863ee663b43f6d2034d485df551e8408"/><dir name="Resource"><file name="Db.php" hash="16989c6a7a852e56e0fc163e28ea7579"/><dir name="Helper"><file name="Mysql4.php" hash="5871dac4d9b3224d5a1ad47095346d11"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="43b323c1e0b322d4a01a0a27e6c235c6"/><file name="config.xml" hash="668b53e3184cbdf3fc15250286b53c4d"/><file name="system.xml" hash="903010312af10460e9eef9cd2936f816"/></dir></dir><dir name="Bundle"><dir name="Block"><dir name="Adminhtml"><dir name="Catalog"><dir name="Product"><dir name="Composite"><dir name="Fieldset"><file name="Bundle.php" hash="9f4002ed90b9e2a53dc20e71151acda8"/><dir name="Options"><dir name="Type"><file name="Checkbox.php" hash="96f52f78dc7a09bdb427c8ee52b65d23"/><file name="Multi.php" hash="3722af33a4e0dbb000091073426fb096"/><file name="Radio.php" hash="2d5e65660d87f101cb7cece0b11ae040"/><file name="Select.php" hash="b649193e763687ee21b24869a8339133"/></dir></dir></dir></dir><dir name="Edit"><dir name="Tab"><dir name="Attributes"><file name="Extend.php" hash="5af45e344d7369bbf96c509da09306db"/><file name="Special.php" hash="af9f401061ebb00a733af4bb305bc5ee"/></dir><file name="Attributes.php" hash="fbfb5661ef64a6f9e30054208b760ae5"/><dir name="Bundle"><dir name="Option"><dir name="Search"><file name="Grid.php" hash="89d6f93c59a52af2cf56950665054b7c"/></dir><file name="Search.php" hash="9fa52e06eb3f75a425d5402116ce47e0"/><file name="Selection.php" hash="8f70becf362c369b2f6bcb8c3378763c"/></dir><file name="Option.php" hash="4eb61a0f38c5d7ebf82a58ee985bc28f"/></dir><file name="Bundle.php" hash="3c8a140d681c43aa707dadf3891178b4"/></dir><file name="Tabs.php" hash="51e04fa4277ae8461e947fa11bb6f3df"/></dir></dir></dir><dir name="Sales"><dir name="Order"><dir name="Items"><file name="Renderer.php" hash="b9ed58833e99ba225f7e06a5c770447b"/></dir><dir name="View"><dir name="Items"><file name="Renderer.php" hash="a6b39e26ae9800313883689ac88ace9e"/></dir></dir></dir></dir></dir><dir name="Catalog"><dir name="Product"><dir name="List"><file name="Partof.php" hash="0626bb248d0bfc65fbfabe1afa6fca63"/></dir><file name="Price.php" hash="c2fb9faa87455332faa3e860d35e938a"/><dir name="View"><dir name="Type"><dir name="Bundle"><dir name="Option"><file name="Checkbox.php" hash="cb772c2e417713caf2f9fa98b0a32d4c"/><file name="Multi.php" hash="e143ea304896f9f9e4b1d257d87260b3"/><file name="Radio.php" hash="f12ee7d486847ca528183856e07c5174"/><file name="Select.php" hash="fe4ac96fab3ff577861643ed565e330c"/></dir><file name="Option.php" hash="f85c1a9ff47d44591680f5e65aada7f6"/></dir><file name="Bundle.php" hash="a31d887cea522b42895561f80c0fb535"/></dir></dir><file name="View.php" hash="a91000e3d040ad4db6c9b2709ce77af0"/></dir></dir><dir name="Checkout"><dir name="Cart"><dir name="Item"><file name="Renderer.php" hash="5a7bb36644dfc43964eea9aabf815825"/></dir></dir></dir><dir name="Sales"><dir name="Order"><dir name="Items"><file name="Renderer.php" hash="1cfbb62968ad39b38626233a30901805"/></dir></dir></dir></dir><dir name="Helper"><dir name="Catalog"><dir name="Product"><file name="Configuration.php" hash="f3db3dce8aa1d5d8bf31cc0767708c47"/></dir></dir><file name="Data.php" hash="a504909d004a1d701008aed90be4d3bd"/></dir><dir name="Model"><dir name="CatalogIndex"><dir name="Data"><file name="Bundle.php" hash="7ca532d3cebc8c69213d8f9f407cf190"/></dir></dir><dir name="Mysql4"><file name="Bundle.php" hash="e3b32c7f32917f53ac37e3636f903868"/><dir name="Indexer"><file name="Price.php" hash="9b1ff395e4dd949d3d335f165c36276a"/><file name="Stock.php" hash="1f2616a3a7410536206b7808d5007eb2"/></dir><dir name="Option"><file name="Collection.php" hash="f9c4648e7460f9a5f7b2551b7fc9f746"/></dir><file name="Option.php" hash="f5e970a9a7f208a92726761804dc7551"/><dir name="Price"><file name="Index.php" hash="203756cdc4713e771e0a7a05a892d544"/></dir><dir name="Selection"><file name="Collection.php" hash="45ab88a71e63861349fcbfad333a5d03"/></dir><file name="Selection.php" hash="91af51ec66d9c5d965977743ea871d40"/></dir><file name="Observer.php" hash="28e69ae14ca167303063cf0b82acbb16"/><file name="Option.php" hash="e8e875976ecb9f67244c0759415a5c90"/><dir name="Price"><file name="Index.php" hash="04a040260f89de6d07b49b40c8242434"/></dir><dir name="Product"><dir name="Attribute"><dir name="Source"><dir name="Price"><file name="View.php" hash="ef62864559ecc464e984df4d8d6dd264"/></dir></dir></dir><file name="Price.php" hash="08be1b25c01a1afb9b6fe2f60210c04a"/><file name="Type.php" hash="c3ac88d57ee7bca0fe7f6f7a4a11c46a"/></dir><dir name="Resource"><file name="Bundle.php" hash="bdba9059fb28a4cd03ef8ff63c9f57a2"/><dir name="Indexer"><file name="Price.php" hash="2128077c360503bbdad7cea6d0c055bc"/><file name="Stock.php" hash="b8c3dbf508ccaebda2ff5e6187dc3b82"/></dir><dir name="Option"><file name="Collection.php" hash="c25e5bda5dd2f5d53084a836be9c2e6c"/></dir><file name="Option.php" hash="c4d9d237f6c0a481b6ab26d3c3e0fd7e"/><dir name="Price"><file name="Index.php" hash="362d1e90ca755bd15888781e6834a54b"/></dir><dir name="Selection"><file name="Collection.php" hash="7066e059b329afdc3c78f581ace99f86"/></dir><file name="Selection.php" hash="843e5b865eccaba72cd30f39559ee1ba"/></dir><dir name="Sales"><dir name="Order"><dir name="Pdf"><dir name="Items"><file name="Abstract.php" hash="77d8b0578aae73f0d15a9fca4ee61c4c"/><file name="Creditmemo.php" hash="8c526bf1db150d294d3f7895529db53a"/><file name="Invoice.php" hash="646cca8fdb8fedc83dcd9c29ea40ed8d"/><file name="Shipment.php" hash="cbc9cf391fe7f28ad74462eb09d49dca"/></dir></dir></dir></dir><file name="Selection.php" hash="6f30a4943f5092f5495ff7b37eb191ab"/><dir name="Source"><dir name="Option"><dir name="Selection"><dir name="Price"><file name="Type.php" hash="c654f9f6bf71f078160d4a34641e051c"/></dir></dir><file name="Type.php" hash="ed911131f87e6574bccdf4253565c1da"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Bundle"><dir name="Product"><file name="EditController.php" hash="0eaa6bfbaaaff740bbda5b3a135fe2ab"/></dir><file name="SelectionController.php" hash="f0884d1f147a752bd8e6f509189882d2"/></dir></dir><dir name="Product"><file name="EditController.php" hash="0255f1bdfac6e3fe6a740bdcf4a1a9d3"/></dir><file name="SelectionController.php" hash="ac354d6e6c719b3bc3fd03471b6c418c"/></dir><dir name="data"><dir name="bundle_setup"><file name="data-install-1.6.0.0.php" hash="51f712340a2a28e9da1e7b72bdab97c0"/></dir></dir><dir name="etc"><file name="config.xml" hash="93215a0503d700dca5f2e13f7223bded"/></dir><dir name="sql"><dir name="bundle_setup"><file name="install-1.6.0.0.php" hash="a1cfca05b83d498cb152e03b90dbe70f"/><file name="mysql4-data-upgrade-0.1.13-0.1.14.php" hash="ed4ad4a2e94719374e7425a6a1405583"/><file name="mysql4-install-0.1.0.php" hash="999ed121f79a34042f49c3b3d2b08aeb"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="2b177adfaf3ef71fac894b17d6183145"/><file name="mysql4-upgrade-0.1.1-0.1.2.php" hash="6a9d04d83024f3284f5cff880e54936c"/><file name="mysql4-upgrade-0.1.10-0.1.11.php" hash="459d1215e6cef3708c88a3f9e813094c"/><file name="mysql4-upgrade-0.1.11-0.1.12.php" hash="7dc6038bc99f2ae1222e11fc3cfb6765"/><file name="mysql4-upgrade-0.1.12-0.1.13.php" hash="ca59841ba6210240fcc85959743255df"/><file name="mysql4-upgrade-0.1.2-0.1.3.php" hash="717da80d58087bee6a40d313cba86d0e"/><file name="mysql4-upgrade-0.1.3-0.1.4.php" hash="b7bd7f7f9e7a8cddfba8f6fb4ea37353"/><file name="mysql4-upgrade-0.1.4-0.1.5.php" hash="9971b39c34daf8797596b4cdbbcaf3f4"/><file name="mysql4-upgrade-0.1.5-0.1.6.php" hash="35e56f2170462bc56c108eab708dccb4"/><file name="mysql4-upgrade-0.1.6-0.1.7.php" hash="a0208cfa774d98b0331ed9812c93c205"/><file name="mysql4-upgrade-0.1.7-0.1.8.php" hash="01b9bf1ed81e71b6e7c53ae35cb31f3e"/><file name="mysql4-upgrade-0.1.8-0.1.9.php" hash="0edea46d0d166eb6fad7acc3dc586048"/><file name="mysql4-upgrade-0.1.9-0.1.10.php" hash="194078628aff605dd856189c02e8053c"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="69349ff72fe2b1ef99db0b08da589cc9"/><file name="mysql4-upgrade-1.6.0.0-1.6.0.0.1.php" hash="a96e843cf78d277cc933940fa0d1d7d2"/><file name="upgrade-1.6.0.0-1.6.0.0.1.php" hash="83d9e00ff228d78b44e6d56d754b3b53"/></dir></dir></dir><dir name="Captcha"><dir name="Block"><dir name="Captcha"><file name="Zend.php" hash="9e650dca067fab58be1817aae23f97f9"/></dir><file name="Captcha.php" hash="c88c6aff85e912f8018af95c830a52ec"/></dir><dir name="Helper"><file name="Data.php" hash="cca9932fc8cebcc419deaa08f82f632e"/></dir><dir name="Model"><dir name="Config"><file name="Font.php" hash="f6855855204af49b27021a07dc4997f5"/><dir name="Form"><file name="Abstract.php" hash="aed06b20ca537c8001e8a652628cb6b1"/><file name="Backend.php" hash="ad0061b6efb7b52a774c0b92fbf97d49"/><file name="Frontend.php" hash="f889118ab152231b826b2b8c347a9193"/></dir><file name="Mode.php" hash="83cbb2e35c76da541767eca87eec22d3"/></dir><file name="Interface.php" hash="d098c44cd60168ba7659c826a7a92cda"/><file name="Observer.php" hash="9cadfe6574859dce5e27930eedc0769d"/><dir name="Resource"><file name="Log.php" hash="f8095dd5be1d14a799fe8c7dc3746a22"/></dir><file name="Zend.php" hash="3d2ef7a57400b6928004e46931b7cba2"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="RefreshController.php" hash="85a78cd9706548cdd2d0bea07a9d68d5"/></dir><file name="RefreshController.php" hash="1c13db5d690d5818476b9ece2a906e79"/></dir><dir name="etc"><file name="config.xml" hash="8ed46f1d3db41fb9b077d6452806d304"/><file name="system.xml" hash="045798ed80f08456fa4bde6538115200"/></dir><dir name="sql"><dir name="captcha_setup"><file name="install-1.7.0.0.0.php" hash="79b8836dc21b7e5bf7da7c077f3d84fa"/></dir></dir></dir><dir name="Catalog"><dir name="Block"><file name="Breadcrumbs.php" hash="dff5d9fb1b553e501f75c88030d744cb"/><dir name="Category"><file name="View.php" hash="59d72d523c2748a5c2a08cc2c3f5c0cd"/><dir name="Widget"><file name="Link.php" hash="87d7738143ee4e40e863c5e67a8f6bdb"/></dir></dir><dir name="Layer"><dir name="Filter"><file name="Abstract.php" hash="d605f8ef9809fb47302d175a539c5d94"/><file name="Attribute.php" hash="698725af0c0341607dbbd914f95630f5"/><file name="Category.php" hash="70b91e71c41ca3518fa935d4ab645c34"/><file name="Decimal.php" hash="ad2c34e653da950d13944da5a4d3c00b"/><file name="Price.php" hash="6226b66128b6748bdf2a42b9edf04345"/></dir><file name="State.php" hash="2200cf8e1fbe736cca46ad217ea37988"/><file name="View.php" hash="bb5bedfaa2f986ac88a6ee4b2b932da5"/></dir><file name="Navigation.php" hash="01f02f9f5aea7d8086afdb806f2508b5"/><dir name="Product"><file name="Abstract.php" hash="b3de11057a65efa46ca5f85a00cf77a5"/><dir name="Compare"><file name="Abstract.php" hash="eb1dd4aab523921a65e273881836b70f"/><file name="List.php" hash="aeff8054c24559dc325f7d2f0351c875"/><file name="Sidebar.php" hash="a62ecd9ff51fdc71bdbfe5fe60c3af92"/></dir><file name="Gallery.php" hash="af6d5c6eadc817482bf6dce6c57c95f4"/><dir name="List"><file name="Crosssell.php" hash="b5b416cb2af25edf53cebf62a74758c0"/><file name="Promotion.php" hash="b76409fdf26b11c07f9363733dd37fa9"/><file name="Random.php" hash="1086668ebc995d636f5ade64c67c4669"/><file name="Related.php" hash="9f4aae52a6a5a20f2b04f67238444820"/><file name="Toolbar.php" hash="792a5c55e1af817370b163022fdab038"/><file name="Upsell.php" hash="d2760b9e9144964a536a778ffc9eb996"/></dir><file name="List.php" hash="7d3419df76b9e532fd7945e2579bf630"/><file name="New.php" hash="ca34053438dca273450f23902124bbe3"/><dir name="Price"><file name="Template.php" hash="c070ad6804ae31e33b4b0f75c3081ef3"/></dir><file name="Price.php" hash="5ba3147f9d6edc765a459eaae5ca2fc6"/><file name="Send.php" hash="fad4ac95aa668d13335ee67173f992e4"/><dir name="View"><file name="Abstract.php" hash="02afc973fe15d2b186148522dde4253e"/><file name="Additional.php" hash="fd23972777ae7f22166c8637b4452f48"/><file name="Attributes.php" hash="418505496533f47cfdb552653478ec64"/><file name="Description.php" hash="3933e86b723ee0eeccb8d0e15c35cdb2"/><file name="Media.php" hash="c67ad24d870bc3fbac46b6c034262d0e"/><dir name="Options"><file name="Abstract.php" hash="673200ae6c98005daccc0bb45f557590"/><dir name="Type"><file name="Date.php" hash="23e971c82349012b2674f53cf78b21ae"/><file name="Default.php" hash="45df1b4c1f76c7c3f0c6b161a2364a32"/><file name="File.php" hash="27916e714ab9663e3c6559e9fc5be771"/><file name="Select.php" hash="f361ede3f754ca9471cc51fdd3f5d872"/><file name="Text.php" hash="b1693b780ff9bbcfffaad43771fcf8eb"/></dir></dir><file name="Options.php" hash="f544353c1c28e13adb5ffda0c2809253"/><file name="Price.php" hash="2931561be062a5c174868d6da75d5ee1"/><file name="Tabs.php" hash="5308f17a3c09fa7ebe810f6131588dba"/><dir name="Type"><file name="Configurable.php" hash="1d101337ffe557e3565bfcc29fefeae0"/><file name="Grouped.php" hash="e5914c1612836ac7e4beb4ffd4be3edb"/><file name="Simple.php" hash="407e6a940c8f2904aaa89f49e4bf28e7"/><file name="Virtual.php" hash="6ca0c8c536343b13424ad1722c22d1cd"/></dir></dir><file name="View.php" hash="35973636c7800bde04ed8fed69bb8b87"/><dir name="Widget"><dir name="Html"><file name="Pager.php" hash="3c025a4ade4383a2936ad5aa7bb39894"/></dir><file name="Link.php" hash="24341cfdad66bd4f4c41aa30fe977372"/><file name="New.php" hash="cdc5ab6e5ae7c3d1622830123852bd17"/></dir></dir><file name="Product.php" hash="c3016a548c94c5067a9971da0d7d7e20"/><dir name="Seo"><dir name="Sitemap"><file name="Abstract.php" hash="45bdaf82409349f8e6f511be3f4dd011"/><file name="Category.php" hash="af055f9f149c46feb59fae19e5ccedb7"/><file name="Product.php" hash="015b16562aaa16931affccc8dd71f1ba"/><dir name="Tree"><file name="Category.php" hash="7a3f8afcfc448f7d71dd42c1d4925432"/><file name="Pager.php" hash="de260e14c195ddb1aeb736dcf8cf2383"/></dir></dir></dir><dir name="Widget"><file name="Link.php" hash="7a86f0e03c53f2bb1e9252141c9020d3"/></dir></dir><file name="Exception.php" hash="0179104ce5022bcc5512e962d431bba2"/><dir name="Helper"><dir name="Category"><file name="Flat.php" hash="e403f3fea684f4b40a6a8e131a715304"/><dir name="Url"><dir name="Rewrite"><file name="Interface.php" hash="7d6c19e3883d3bbd99de969bdeb3c0e4"/></dir><file name="Rewrite.php" hash="f20dafaabe85500b298989e37f1ca0ab"/></dir></dir><file name="Category.php" hash="bdc769946270dfdbe696f3b7e6dd4fa6"/><file name="Data.php" hash="51c9b79ee40eea71e548dc2f1fc05eab"/><dir name="Flat"><file name="Abstract.php" hash="fdbb21698a8fbe8db7603c4355b73a51"/></dir><file name="Image.php" hash="4434f405f3a2f2200a94cd90ad50b10e"/><file name="Map.php" hash="1686e6ed32f6b5dbeb5a597288254652"/><file name="Output.php" hash="489484164b5e7ba9372b186988de082c"/><dir name="Product"><file name="Compare.php" hash="0766ebc34366d772617632e8da5d7671"/><dir name="Configuration"><file name="Interface.php" hash="001b92f52823ecc5777807f986b4c0dd"/></dir><file name="Configuration.php" hash="cc9c25e19e2af63d782ad96bff298a02"/><file name="Flat.php" hash="720def1753c77d7c55b57c7246703568"/><file name="Options.php" hash="c8fc172f2eefd0804d5e4753ddae00c4"/><dir name="Type"><file name="Composite.php" hash="22568c93e4fdb14ac1b49ccfd977641c"/></dir><dir name="Url"><dir name="Rewrite"><file name="Interface.php" hash="364322afee5e385f7d3294436fd7f493"/></dir><file name="Rewrite.php" hash="623588d9ff88a376b8b736bfb1f98b76"/></dir><file name="Url.php" hash="f2d6d9473153c84a406c7960d944018a"/><file name="View.php" hash="aeab098bc4a82af3ac33f1670dcfb15d"/></dir><file name="Product.php" hash="8f74cd3e74940bc977b37d2e5f33b5c3"/></dir><dir name="Model"><file name="Abstract.php" hash="5399d56b627d1a675cd3cadd8aaa768f"/><dir name="Api"><file name="Resource.php" hash="5d342b70a49b19b2747e7a03c85095af"/></dir><dir name="Api2"><dir name="Product"><dir name="Category"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="cad9ef1517173f0f00ff569be0b981bf"/></dir><dir name="Customer"><file name="V1.php" hash="a108c6bb33433839a3694c425cf92d69"/></dir><dir name="Guest"><file name="V1.php" hash="3ce11e40688705dca640b1186f414453"/></dir></dir><file name="Rest.php" hash="ac416fbef617af536dff5bbcbbdd61d0"/></dir><file name="Category.php" hash="bedb76db707efccaa3c53ef7fe602aa5"/><dir name="Image"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="fe17e0445eecea5f6250d20ccaa17481"/></dir><dir name="Customer"><file name="V1.php" hash="2a73ed3ae72e037d4e107216fcb66576"/></dir><dir name="Guest"><file name="V1.php" hash="01f2136a7a27329bcec67560c069cc3f"/></dir></dir><file name="Rest.php" hash="0a64e319ac196c15d3af58f2a74efe48"/><dir name="Validator"><file name="Image.php" hash="c3d9e939bfdc90d9f2309fede3d61eaf"/></dir></dir><file name="Image.php" hash="b36d59fa96a06f1225de7ce226b32a7f"/><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="a9aa9dab5be83186e1a4d88f55fb2513"/></dir><dir name="Customer"><file name="V1.php" hash="7e330764edf3b2ed1e581e49c2de3315"/></dir><dir name="Guest"><file name="V1.php" hash="4285c2ba5ca5b228d1f0f8039655e34e"/></dir></dir><file name="Rest.php" hash="2c1d36d5174b420d031697b672afa8fd"/><dir name="Validator"><file name="Product.php" hash="3d774220754452726072f51246e113c0"/></dir><dir name="Website"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="54aaaf767c93cebbcc4c30d768b460cc"/></dir></dir><file name="Rest.php" hash="41088bbc5eb642ee779e30f2cbe13415"/><dir name="Validator"><dir name="Admin"><file name="Website.php" hash="49bfed6811464d93eafdad36d358f472"/></dir></dir></dir><file name="Website.php" hash="c85d0759a2a89efffe85dac4318b6472"/></dir><file name="Product.php" hash="8ebe91dc817724fe0d4502d8de5cdd03"/></dir><dir name="Attribute"><dir name="Backend"><file name="Customlayoutupdate.php" hash="1906499bafc1edd37e26f3959055427f"/><dir name="Urlkey"><file name="Abstract.php" hash="4e84559fa09f5dd3dc701c1cd3defe89"/></dir></dir></dir><dir name="Category"><dir name="Api"><file name="V2.php" hash="74d409f156cafc8d1eae110782228867"/></dir><file name="Api.php" hash="26d34123ccb312221f7b8e720be39c64"/><dir name="Attribute"><dir name="Api"><file name="V2.php" hash="06af4c1245b1450021cc52bbce2a8864"/></dir><file name="Api.php" hash="f116285d1ea2de3e22cfa76d380ec7ae"/><dir name="Backend"><file name="Image.php" hash="88de246cf8a346d336e6d30b0f453910"/><file name="Sortby.php" hash="2d1b48beda0699587b1eff7d9eb18f8d"/><file name="Urlkey.php" hash="469c1883e70ebfcc3f6e2a18b927d760"/></dir><dir name="Source"><file name="Layout.php" hash="38316f42324a3227e27e753d2d17f015"/><file name="Mode.php" hash="29a887a321b5f1cb199d859b33ad89aa"/><file name="Page.php" hash="d8f1fb0693fa613b87cad674832a7cae"/><file name="Sortby.php" hash="f95940ed9bd96805d9d099a111557b08"/></dir></dir><dir name="Indexer"><file name="Flat.php" hash="3a8aed45dd42d6c5e89b4cfc24ab0a11"/><file name="Product.php" hash="7c332ea93f25e4d0586d94c00c3f83a5"/></dir><file name="Url.php" hash="03204ac658d9c3548a1e0111a3ed6a7f"/></dir><file name="Category.php" hash="0ab3203b113fb38341a6972b08357929"/><file name="Config.php" hash="960943c9b90cd595356b1f439932751e"/><dir name="Convert"><dir name="Adapter"><file name="Catalog.php" hash="e2d7a1b5016c9c937a5f940e8bd4a9dd"/><file name="Product.php" hash="2249eb2cc4c64504ec0ffbff80bb6a6d"/></dir><dir name="Parser"><file name="Product.php" hash="bf4f3af184dbb2dfb6b553d960cabe4c"/></dir></dir><file name="Convert.php" hash="f8711c86e2936d74b793321d0b3398ba"/><file name="Design.php" hash="0788ad594384e78dc18211e541a97985"/><dir name="Entity"><file name="Attribute.php" hash="967d705a4b89a92d41fae1b4518fbd12"/><dir name="Product"><dir name="Attribute"><dir name="Design"><dir name="Options"><file name="Container.php" hash="0c06ba7586010a01e30aebfdc0e5aa7b"/></dir></dir><dir name="Frontend"><file name="Image.php" hash="b1eb392c46c0d0e31fd4ceec82d91677"/></dir></dir></dir></dir><file name="Factory.php" hash="37199b8fa6933b87e8bf9e6643fd0862"/><file name="Index.php" hash="4f7bb172ee1334e510fecbce52373c51"/><dir name="Indexer"><file name="Url.php" hash="ac4a5bb7efeba1fe9313d220f6249ded"/></dir><dir name="Layer"><dir name="Filter"><file name="Abstract.php" hash="6d339963bab9940293e0f42782022e1f"/><file name="Attribute.php" hash="187f66e483e8654d5decf4abae8fcee8"/><file name="Category.php" hash="fc0b6dc472326743f30439fa3801fa85"/><file name="Decimal.php" hash="35d10ab83c9fdae952affaa48b043817"/><file name="Item.php" hash="c11edf35238a31aa492dfc8ed6aa327a"/><dir name="Price"><file name="Algorithm.php" hash="394ee3039156f05cb153bc87d55b1fc8"/></dir><file name="Price.php" hash="2ca517a1a54e992cbf167b970ff52e03"/></dir><file name="State.php" hash="077f09092c1414b4d8a73653db81dd00"/></dir><file name="Layer.php" hash="0d2ac9d06fcd6688beb4a07d0045da65"/><file name="Observer.php" hash="c5146dfd5fc5a556aa4f5d77b38d65b1"/><dir name="Product"><file name="Action.php" hash="c5148e1d47094a363250e732815082b0"/><dir name="Api"><file name="V2.php" hash="f6920d64fb2ddb9afb784dc70e888186"/></dir><file name="Api.php" hash="38f7c365b6938803956d8d5384effc68"/><dir name="Attribute"><dir name="Api"><file name="V2.php" hash="b496a0f7d27095451fbcf9ccfc7ce32f"/></dir><file name="Api.php" hash="14a858bcac11c35ceef2500538830f91"/><dir name="Backend"><file name="Boolean.php" hash="229e9a7fb8d2e15d1fdeb8181445ebe0"/><dir name="Groupprice"><file name="Abstract.php" hash="d35b8dd3ff94f32d03d974ac33fde2f9"/></dir><file name="Groupprice.php" hash="e13ab416436949702144be98a8c94e9d"/><file name="Media.php" hash="5b643b94d167bcd3cbb8dde5623246e0"/><file name="Msrp.php" hash="fe63bc9e0d65dc3d1237eb2078923d76"/><file name="Price.php" hash="ff52da1f8a92a9c4271b4ad435801856"/><file name="Recurring.php" hash="f8e58b745661650d28892373ec982f90"/><file name="Sku.php" hash="46cfd45e115daa320b751e857ba9e8b7"/><dir name="Startdate"><file name="Specialprice.php" hash="cdcf2668c93fa5035b76aa15ef88fffc"/></dir><file name="Startdate.php" hash="b9a4b229fe15ba352db8ec9a04291691"/><file name="Tierprice.php" hash="1ac4294d92e3d250159564751335d6e2"/><file name="Urlkey.php" hash="004afee828cc01704b31919349eb1851"/></dir><dir name="Frontend"><file name="Image.php" hash="386d33679a77c37895bda511517c17ff"/></dir><file name="Group.php" hash="2a129a217055568d0958af302a1a5d2d"/><dir name="Media"><dir name="Api"><file name="V2.php" hash="9e5969b4b8530e57ee00ac55280cd2f8"/></dir><file name="Api.php" hash="4fcacef88af8803aa20931cd44235352"/></dir><dir name="Set"><dir name="Api"><file name="V2.php" hash="ec27f9bd23529e40243196b006ddfdfc"/></dir><file name="Api.php" hash="44d60e0fef24f0d1b6fa369353d8c1e0"/></dir><dir name="Source"><file name="Boolean.php" hash="8188d6e83cc0d2d16fc4876d228c2475"/><file name="Countryofmanufacture.php" hash="b5ab8824ea10fbce4088c050fbcf67f6"/><file name="Inputtype.php" hash="e8b344c662a099b7cbe3bb1d0ae312c4"/><file name="Layout.php" hash="ecd67bb233e6aa0b188f446d5962f8ff"/><dir name="Msrp"><dir name="Type"><file name="Enabled.php" hash="874a11135465a502bbbf62cd58461556"/><file name="Price.php" hash="f3dbe7528b070894c617dc982f33f348"/></dir><file name="Type.php" hash="1d30a1e90e79d90af028202e5bd622c6"/></dir></dir><dir name="Tierprice"><dir name="Api"><file name="V2.php" hash="db92cf6602484be811da52fd5cda27a2"/></dir><file name="Api.php" hash="623e710a8cde8e495fff36009a6c2ff6"/></dir></dir><dir name="Compare"><file name="Item.php" hash="5a0b8c6dbd3e554d23d7edde6dc7664c"/><file name="List.php" hash="3ccac75f80eb97e5e7ed05ccfb4a8e80"/></dir><dir name="Condition"><file name="Interface.php" hash="3d1e83608560f21fcd94ca45a979b41c"/></dir><file name="Condition.php" hash="25a0cd54440afbf3ad8d915e88f10a4f"/><dir name="Configuration"><dir name="Item"><file name="Interface.php" hash="e7d838c6995cf062706f3aff8343390e"/><dir name="Option"><file name="Interface.php" hash="4a73836aad7135383a37250e6bfca517"/></dir><file name="Option.php" hash="f0dcacab62c5bf1c693c1abbd9352098"/></dir></dir><dir name="Flat"><file name="Flag.php" hash="dbfc46eefe47f08ab90de7b9729e6c72"/><file name="Indexer.php" hash="30f815a8c6c39c49954fe75e4b519f01"/><file name="Observer.php" hash="41e970922615897d150f92612196c764"/></dir><file name="Image.php" hash="a18f0d17efe6d01ec6ef1cce06960ccc"/><dir name="Indexer"><file name="Eav.php" hash="7618ab5d273a835fdebcd05aa146dae0"/><file name="Flat.php" hash="dbb5aa4c06b3353d1957b876d2c40167"/><file name="Price.php" hash="97c4e703f62475e3358865f12d811e28"/></dir><dir name="Link"><dir name="Api"><file name="V2.php" hash="6c70e65f2586fc28f09384f349244457"/></dir><file name="Api.php" hash="ad3458914b4ada1b1cfad8944c7eb9d9"/></dir><file name="Link.php" hash="4397ebb8e0e755273b84849c2bad05c8"/><dir name="Media"><file name="Config.php" hash="7f730c523323b820493066b116e160d0"/></dir><dir name="Option"><dir name="Api"><file name="V2.php" hash="e2e337f444291e17e84e813f34b5e686"/></dir><file name="Api.php" hash="8a56eb1b5c9c7990c9df368cc562805e"/><file name="Observer.php" hash="13cf958417156e721339f05893ba8aae"/><dir name="Type"><file name="Date.php" hash="e4d7596b3f4dbf962383d87d85dc154e"/><file name="Default.php" hash="ba662f4493c2e6a966ba6e2720b88b71"/><file name="File.php" hash="056f59762babcd043f3455f5abecf6c3"/><file name="Select.php" hash="281ed0e1384dbf4dc18ff9638ccdc68c"/><file name="Text.php" hash="cdff8cdce60d340e95e5d2d4a28baee8"/></dir><dir name="Value"><dir name="Api"><file name="V2.php" hash="f478fc9cad96b446af48597122d85664"/></dir><file name="Api.php" hash="afdb12fc5e3e52e4e8ac687b05f5b4f7"/></dir><file name="Value.php" hash="a63d01e87928ca3bb65229145dc1efd4"/></dir><file name="Option.php" hash="2d4d937648d019311a2a72a6ef1dc174"/><file name="Status.php" hash="ced8970f86fdccb17c830b80b12b33fb"/><dir name="Type"><file name="Abstract.php" hash="cd675bf61affc80c7410a38dbae08eb0"/><dir name="Api"><file name="V2.php" hash="7c9c9c80f446a59897f25e60672fb2ec"/></dir><file name="Api.php" hash="8ebd7e0d437a70645a0cf80e9834069f"/><dir name="Configurable"><file name="Attribute.php" hash="c8f8d57c9a3804c408b9e261beb3eefc"/><file name="Price.php" hash="cf7daffcb252267d1e502273e28a305e"/></dir><file name="Configurable.php" hash="42ad7a5df7ef6a527bb5b14588aacf42"/><dir name="Grouped"><file name="Price.php" hash="28eaf519153d5db1b79028b120a48bd4"/></dir><file name="Grouped.php" hash="9553d7467f1167744ea3f3d57a81c1d8"/><file name="Price.php" hash="2a757a8c1268c07ae43c4d3c1eba45f9"/><file name="Simple.php" hash="bc8aa458ff494d4475511cad48a866a9"/><file name="Virtual.php" hash="82c8912508ac48b7dd3dc55706c3c528"/></dir><file name="Type.php" hash="8c919879f58180f42da96db9303bafbd"/><file name="Url.php" hash="29b50e89e08b81a3b0fb00c3833dfc3c"/><file name="Visibility.php" hash="8c6dd0f045c26492e5a082086d18aa9b"/><file name="Website.php" hash="56c6082ede65a6764a892c35f235a579"/></dir><file name="Product.php" hash="31af73217a24db0417da73b51af88b67"/><dir name="Resource"><file name="Abstract.php" hash="c78fb80b238aa93bffd770da2634077b"/><file name="Attribute.php" hash="083fbabafa2f9b2b93be9c32febe9c9a"/><dir name="Category"><dir name="Attribute"><file name="Collection.php" hash="16bb20412710d7a2a9ecf1d499942be1"/><dir name="Frontend"><file name="Image.php" hash="a3f01f4cdb9d581b7005fff83e1b7b73"/></dir><dir name="Source"><file name="Layout.php" hash="b528859d861098e5ab7ce183cd878c7a"/><file name="Mode.php" hash="268e61822290de0bf2cd59be33766d86"/><file name="Page.php" hash="675cf0b87655fff869bfc1f8d45d9e38"/></dir></dir><file name="Collection.php" hash="6b7ef3804ad45381b0164b967f595aca"/><dir name="Flat"><file name="Collection.php" hash="b4c7a90acb2d41d0be620c4994025926"/></dir><file name="Flat.php" hash="fa589f1153b9eeaf0b2311671152adb1"/><dir name="Indexer"><file name="Product.php" hash="7c573ac7e1d0be9d510d3cabae9d7c77"/></dir><file name="Tree.php" hash="2a160b88ab1aded63dc37040ee843a00"/></dir><file name="Category.php" hash="3c079ade2f2bf38e9423ef47e8d9a456"/><dir name="Collection"><file name="Abstract.php" hash="19c6f3250eb34e02648885695bb72a10"/></dir><file name="Config.php" hash="56b4be1960a399cca1f6e3a5413cdfc8"/><dir name="Eav"><file name="Attribute.php" hash="0553b24b137b571fe5adaf6f7079eae8"/><dir name="Mysql4"><file name="Abstract.php" hash="77bf8d831649cbd4cb22c6e38e1e6cbd"/><file name="Attribute.php" hash="ce29fde69b75dbfa76ee59395c27ef46"/><dir name="Category"><dir name="Attribute"><file name="Collection.php" hash="16fd9fb1c0a9e3f7f0a3da630f8b5f5d"/><dir name="Frontend"><file name="Image.php" hash="7b1efd69b7068f6269e5963fcb0f2421"/></dir><dir name="Source"><file name="Layout.php" hash="5902b8ec96fdabbfba22d12147a1f9f8"/><file name="Mode.php" hash="d298a9b154606d73977448afd409cf14"/><file name="Page.php" hash="2a0d8a3d458f6ad47fab99709c575b83"/></dir></dir><file name="Collection.php" hash="1e919121af88496fd3c9e12204d984b5"/><dir name="Flat"><file name="Collection.php" hash="3b6493ded5a4b074074984210c083900"/></dir><file name="Flat.php" hash="c6310cc6f9b3ad85fa543fcdb59f0ebf"/><dir name="Indexer"><file name="Product.php" hash="7cfc40ac2f41452ad477c6ead974d440"/></dir><file name="Tree.php" hash="e12a81ba27afb2c5044283bcb2ca9580"/></dir><file name="Category.php" hash="9f2f641cb0de686c995718288a4c1b2e"/><dir name="Collection"><file name="Abstract.php" hash="80eac3b59973421b48c8ff0082227f4d"/></dir><file name="Config.php" hash="26650f9818fca47b48c4654acee00a41"/><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2fe32b4753d30dfc5de743e512c2fe69"/><file name="Decimal.php" hash="72e4695e08258a882ef36b2b2ef25a2e"/><file name="Price.php" hash="e3fe65ace9436eb406c68796cd21bf93"/></dir></dir><dir name="Product"><file name="Action.php" hash="5227ea6c0ce4484b4bf997bce9cd37cf"/><dir name="Attribute"><dir name="Backend"><file name="Image.php" hash="c3b5adfd873cb29c60c3ac18e2bd7bf3"/><file name="Media.php" hash="f05b409ffa13b07ce7f387925aba5c35"/><file name="Tierprice.php" hash="9ea320310cf7f210d0e5f61e3fd5a622"/><file name="Urlkey.php" hash="22b92b8efd3a9a92bcc4477ed07b8c77"/></dir><file name="Collection.php" hash="656272a27a7d0fb7bb7783fabe7ed4ba"/><dir name="Frontend"><file name="Image.php" hash="6e1bb32214d33789802cad5224b31d0d"/><file name="Tierprice.php" hash="7aa313df344f028150607d3715069fef"/></dir></dir><file name="Collection.php" hash="bca3f22426b03396a8b99ce4c886b086"/><dir name="Compare"><dir name="Item"><file name="Collection.php" hash="9013f3daaea7e9a6fec6ac018c97fc7f"/></dir><file name="Item.php" hash="d85209d65afb97ce19ea977d74b414ae"/></dir><dir name="Flat"><file name="Indexer.php" hash="86dae654289b2146c4d2fcfd15c313c7"/></dir><file name="Flat.php" hash="c6c46472a572248707522cdf977a0369"/><dir name="Indexer"><file name="Abstract.php" hash="e2469fe950d76f10da8a811e688abd3f"/><dir name="Eav"><file name="Abstract.php" hash="7d6704efe0e95a3ef525e85bcafb3983"/><file name="Decimal.php" hash="34c9b97c8bf1b2821e7cd3c4b6eb7dbe"/><file name="Source.php" hash="fb4544e261a3ec415aeb420255f5a70a"/></dir><file name="Eav.php" hash="d9c748945123a47685db1fb255ee0264"/><dir name="Price"><file name="Configurable.php" hash="6555f812507f36d3139b2406bf2691b0"/><file name="Default.php" hash="ef2e3327c73efd98120b7b10ffed1cbd"/><file name="Grouped.php" hash="8823446108436d3bf360bca5b75e0bb5"/><file name="Interface.php" hash="3466a545d21ee82855f1caf2c2e04a24"/></dir><file name="Price.php" hash="c042288cbde8958279292469e7ef977f"/></dir><dir name="Link"><file name="Collection.php" hash="3f1dedead3fc806ab616edbea689d08d"/><dir name="Product"><file name="Collection.php" hash="e742fe4505d1f9b66e605f638f70d064"/></dir></dir><file name="Link.php" hash="9a8426299e8ececb93eba31c4651f511"/><dir name="Option"><file name="Collection.php" hash="6f94b6f180f1261cfd97a48319f0b267"/><dir name="Value"><file name="Collection.php" hash="64d49df810c454e57dc352af45e79db4"/></dir><file name="Value.php" hash="98d0ac8c28fcd7b73b0300e2bd03e038"/></dir><file name="Option.php" hash="a5fe5fef0022403ce04d3f6d8f5d66b8"/><file name="Relation.php" hash="7528ce5262e287b5ac4570c39cecdd80"/><file name="Status.php" hash="1d85dfd645199aff01697f9075ea69ec"/><dir name="Type"><dir name="Configurable"><dir name="Attribute"><file name="Collection.php" hash="11bb638081b4749458946e1448d9ca10"/></dir><file name="Attribute.php" hash="0ac0ea517b292148c8847bfd30baefcc"/><dir name="Product"><file name="Collection.php" hash="c3ba64bb9367830b6870195e46ec1cc9"/></dir></dir><file name="Configurable.php" hash="330a459b1686b6ae6f19563f32ffdb8d"/></dir><file name="Website.php" hash="ab17bc81707fd31b1eb6b4985e0382f5"/></dir><file name="Product.php" hash="5db16fca9860bf397d035b5dba87507d"/><dir name="Sendfriend"><file name="Collection.php" hash="41e24179196d884a89d8fcb7c292e964"/></dir><file name="Sendfriend.php" hash="dafac33cd5a9ad0f0bd1503e17f1e693"/><file name="Setup.php" hash="d8a92cc2f3f802f3943911fdafcb3362"/><file name="Url.php" hash="f06beb416bb905d70d1350a4fb6fbddc"/></dir></dir><dir name="Helper"><file name="Mysql4.php" hash="bddc88c4de81e944e3bbf35fdd4363ed"/></dir><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="beef208a673d4acbd9afbccc639ad200"/><file name="Decimal.php" hash="469556abeb7e15eef17b5ea3353894f5"/><file name="Price.php" hash="0eb1fde29b2098ac20a7e2ad548adabe"/></dir></dir><dir name="Product"><file name="Action.php" hash="3faf7b08a790efd350e9f992d24221ab"/><dir name="Attribute"><dir name="Backend"><dir name="Groupprice"><file name="Abstract.php" hash="0c44439c5413141510ae5a094928cf68"/></dir><file name="Groupprice.php" hash="f3d29b2f169cbd0a8fe24d39c8710a7e"/><file name="Image.php" hash="33034e003246bdaa3732444289385724"/><file name="Media.php" hash="d8f212a3d6ca27c4392b700f66dae802"/><file name="Tierprice.php" hash="a2cbaacb0ac840adfe9646db31ed855a"/><file name="Urlkey.php" hash="2262eb9b8c6db5b7fbbcda8535976a30"/></dir><file name="Collection.php" hash="a73b5a17c24744e95ac32d1f97f3cab7"/><dir name="Frontend"><file name="Image.php" hash="139229526616ebdef9fb27aca81db6c0"/><file name="Tierprice.php" hash="5d4ceecd198819c7ba458b7f28622f5b"/></dir></dir><file name="Collection.php" hash="f8734b940c695e15a05c4b0346a82063"/><dir name="Compare"><dir name="Item"><file name="Collection.php" hash="948e5a8ff1ea4dc486a19b2229ffc8a3"/></dir><file name="Item.php" hash="9d2d9c3902a8985e140598169e670e65"/></dir><dir name="Flat"><file name="Indexer.php" hash="00c53d98e3a205e3d2c97d7d03835012"/></dir><file name="Flat.php" hash="7a2c7d7711c9c598b4a04ba436160617"/><dir name="Indexer"><file name="Abstract.php" hash="21126ba16f5f2ca4db63897f9a559f43"/><dir name="Eav"><file name="Abstract.php" hash="d37eae3cc381710ec7abad80571ec52a"/><file name="Decimal.php" hash="0372d92275a05c07cd5715cbde92c06e"/><file name="Source.php" hash="b4edfcd21fb7974a08bf195bdbd8b560"/></dir><file name="Eav.php" hash="f579a7e70b13ec272eacc6b8f6850e6d"/><dir name="Price"><file name="Configurable.php" hash="8ec53532373b5e8c2326041d71d7b1e9"/><file name="Default.php" hash="6e04e9071bd8bb74bbefa54ad3cb8dc0"/><file name="Grouped.php" hash="d044889afe733ecedcca6c03777142a3"/><file name="Interface.php" hash="021e40baacd8bee14d34678eaa6cbda7"/></dir><file name="Price.php" hash="d1eccd5ff490dd96d27bfedfa4ad3f4e"/></dir><dir name="Link"><file name="Collection.php" hash="c58cdd3a4bb7439b8e0f01d2c23deb4e"/><dir name="Product"><file name="Collection.php" hash="7fe7daecdb0738f726c89a1a9b4ab5fb"/></dir></dir><file name="Link.php" hash="f6315829fc96747e5cfcc1f7cb920024"/><dir name="Option"><file name="Collection.php" hash="411f7f3d3d4ff31128a35e8012fe6f2c"/><dir name="Value"><file name="Collection.php" hash="faa70f0e1340def77f28676f33c117d0"/></dir><file name="Value.php" hash="9a2eb3f77bed40339874df0d7735aa48"/></dir><file name="Option.php" hash="e9ce26ccbe023f25ffcd0cd6119913d6"/><file name="Relation.php" hash="29a7c4f5416dbfb510f10e1e5ca7b307"/><file name="Status.php" hash="babd4c22ef0706906e5a17cfa3ae2451"/><dir name="Type"><dir name="Configurable"><dir name="Attribute"><file name="Collection.php" hash="f2d589d068f6e3252d8d3e1c27971d59"/></dir><file name="Attribute.php" hash="733bd1f4d46246a5c6cab4afacd12d66"/><dir name="Product"><file name="Collection.php" hash="7c74e62a50f7062fc67343224aff59d9"/></dir></dir><file name="Configurable.php" hash="c1e2764cc282e227c9cc90e664adc57c"/></dir><file name="Website.php" hash="24eabf1dac8102c0a172522c41edf63d"/></dir><file name="Product.php" hash="07048cb76beb23b3eaad5c8dfe200111"/><file name="Setup.php" hash="a07f84365233d9e247508ca1d52fb8fc"/><file name="Url.php" hash="7f392dc6284e61e239c0e1dfdf463688"/></dir><file name="Session.php" hash="85dc8d88009120a351c2cdf2e59ddd23"/><dir name="System"><dir name="Config"><dir name="Backend"><dir name="Catalog"><dir name="Category"><file name="Flat.php" hash="d6a167189578f6729a8464a5b00c889f"/></dir><dir name="Product"><file name="Flat.php" hash="29d00096aab5c387fe09d53914599a50"/></dir><dir name="Url"><dir name="Rewrite"><file name="Suffix.php" hash="3c096e44cb311bff7b8827be26d9a7a9"/></dir></dir></dir></dir></dir></dir><dir name="Template"><file name="Filter.php" hash="873a8a3731ed4d71b18ecee89a8389f1"/></dir><file name="Url.php" hash="cb7fdd0608ab6ef7b6ded81966ae7c50"/></dir><dir name="controllers"><file name="CategoryController.php" hash="1a90cc9dd1b10853972d8c4859309078"/><file name="IndexController.php" hash="e015ae60fb19f872e6ccce968f5f5517"/><dir name="Product"><file name="CompareController.php" hash="9625bc3c8663dcfd52f8c20ee4ec9e71"/></dir><file name="ProductController.php" hash="2e1746bb7cccec9146b0d0430be78b81"/><dir name="Seo"><file name="SitemapController.php" hash="8faa57ee67d67ebc07f3c7d7c2ff6701"/></dir></dir><dir name="data"><dir name="catalog_setup"><file name="data-install-1.6.0.0.php" hash="0911877b0f5f7f75153e647632144053"/><file name="data-upgrade-1.6.0.0.12-1.6.0.0.13.php" hash="7408d9bebec81bac8cfaa82d2246bc61"/><file name="data-upgrade-1.6.0.0.13-1.6.0.0.14.php" hash="f6d063b376d8239af71933169aada7e3"/><file name="data-upgrade-1.6.0.0.19.1.3-1.6.0.0.19.1.4.php" hash="3ea878479e551944714ac2b22c0ee96c"/><file name="data-upgrade-1.6.0.0.4-1.6.0.0.5.php" hash="69a1c10da60ed0aaaf76686f1510494c"/><file name="data-upgrade-1.6.0.0.8-1.6.0.0.9.php" hash="5f1f3a491473a2e60afe18e9bb3ec319"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="cc8126ed44039f3578a18e8408190bda"/><file name="api.xml" hash="d784a8b268ef8848061df57fa4190625"/><file name="api2.xml" hash="2ea1ea69a6bfd1efaffb00c8f5cc6022"/><file name="config.xml" hash="98ad8521c9b08aaeab31fbda617e0c26"/><file name="convert.xml" hash="9cc9a49a719e66e2bd8dd229d6886f3a"/><file name="system.xml" hash="c85941108a3321424e46c07f258c6ca2"/><file name="widget.xml" hash="63d9a69bdeffb96fd652f832e93b4dea"/><file name="wsdl.xml" hash="fa198392d766134085b3c2ec1be4a0e9"/><file name="wsi.xml" hash="0acfd65c613ccb83404317500078a85d"/></dir><dir name="sql"><dir name="catalog_setup"><file name="install-1.6.0.0.php" hash="d3d83b26127ce996b341e4d67fb4b2ca"/><file name="mysql4-data-upgrade-0.7.57-0.7.58.php" hash="e77b598a1c7080a97e2d066530bc4780"/><file name="mysql4-data-upgrade-0.7.63-0.7.64.php" hash="b5443e86cc381622e7bbb4128732f5fa"/><file name="mysql4-data-upgrade-1.4.0.0.28-1.4.0.0.29.php" hash="dafb3fd3c8ff721f9c2bdb2cb8e03332"/><file name="mysql4-data-upgrade-1.4.0.0.42-1.4.0.0.43.php" hash="8052bc5216e4f035f32bb806727ff3dd"/><file name="mysql4-install-0.7.0.php" hash="c2ecf9ab172739266247748be75aef25"/><file name="mysql4-install-1.4.0.0.0.php" hash="d3faa8bc8f7c294a6953087776bd9456"/><file name="mysql4-upgrade-0.6.40-0.7.0.php" hash="1a4fb3cab768f3aa36023818c89af55f"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="ac13e51cb31dda3ecab2597beb51bc8c"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="3806192600b523969eef31c5a18a03c3"/><file name="mysql4-upgrade-0.7.11-0.7.12.php" hash="a3f49edb28d84c59fe9ca7837dcea688"/><file name="mysql4-upgrade-0.7.12-0.7.13.php" hash="71021c0648afc8b71256e66f41ff40e3"/><file name="mysql4-upgrade-0.7.13-0.7.14.php" hash="d03a980c274d1f676db2eefa856eeecc"/><file name="mysql4-upgrade-0.7.14-0.7.15.php" hash="b4287cf3624eae49641148ffbef8de5b"/><file name="mysql4-upgrade-0.7.15-0.7.16.php" hash="ae46ab3bacd5e00907f115a45764db05"/><file name="mysql4-upgrade-0.7.16-0.7.17.php" hash="71021c0648afc8b71256e66f41ff40e3"/><file name="mysql4-upgrade-0.7.17-0.7.18.php" hash="981e85d7a3413309de30374f910deb9d"/><file name="mysql4-upgrade-0.7.18-0.7.19.php" hash="55b76609304d873314a15330948ae957"/><file name="mysql4-upgrade-0.7.19-0.7.20.php" hash="a3f49edb28d84c59fe9ca7837dcea688"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="aa675f723b60582fde073c690a42ebb6"/><file name="mysql4-upgrade-0.7.20-0.7.21.php" hash="e8f620a5a054b991489c48860ba10221"/><file name="mysql4-upgrade-0.7.21-0.7.22.php" hash="556cfef21109c164e2e41eb485637eff"/><file name="mysql4-upgrade-0.7.22-0.7.23.php" hash="f2cd9fd2ff63f12e8399a5d7e4e62c18"/><file name="mysql4-upgrade-0.7.23-0.7.24.php" hash="3bb145d699f3c5a6db4c5f32233e2e93"/><file name="mysql4-upgrade-0.7.24-0.7.25.php" hash="bf5b8bee4bd3d1e4ebc687a2dc2c3b30"/><file name="mysql4-upgrade-0.7.25-0.7.26.php" hash="bf5b8bee4bd3d1e4ebc687a2dc2c3b30"/><file name="mysql4-upgrade-0.7.26-0.7.27.php" hash="88908e44653f5001778a2c215d2334a2"/><file name="mysql4-upgrade-0.7.27-0.7.28.php" hash="18c56edc18cb2d26b4fee1602031a8b0"/><file name="mysql4-upgrade-0.7.28-0.7.29.php" hash="82e449ada8ef2dd3f772f672ac9c8f4f"/><file name="mysql4-upgrade-0.7.29-0.7.30.php" hash="19993f5d8b5061d548402dd1ced2511a"/><file name="mysql4-upgrade-0.7.30-0.7.31.php" hash="ce6e9a220b1f47a449b1da768b481362"/><file name="mysql4-upgrade-0.7.31-0.7.32.php" hash="1f95d965cdd2ef8e0701c36d9a6d81ad"/><file name="mysql4-upgrade-0.7.32-0.7.33.php" hash="a3a0bb1853557a46d94ba9717e17c21c"/><file name="mysql4-upgrade-0.7.33-0.7.34.php" hash="1b317292156c19786d0c7891a8b6c94c"/><file name="mysql4-upgrade-0.7.34-0.7.35.php" hash="ae2f124dc9859240b3e5ce1a5ab0f79f"/><file name="mysql4-upgrade-0.7.35-0.7.36.php" hash="7b5b00ab8ec63b5fd02d8fa65cadf1b9"/><file name="mysql4-upgrade-0.7.36-0.7.37.php" hash="cb86e22aa7fd8996725dcd06935dff86"/><file name="mysql4-upgrade-0.7.37-0.7.38.php" hash="97a399efa3aa04df7dc63b395c2580ee"/><file name="mysql4-upgrade-0.7.38-0.7.39.php" hash="fb4444e6f5e32ef7dfca18a41e68ac50"/><file name="mysql4-upgrade-0.7.39-0.7.40.php" hash="bdde08b163e8c6a309637611ab6ebb06"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="b6f41c583a739161c2255da179ac2bd7"/><file name="mysql4-upgrade-0.7.40-0.7.41.php" hash="d2e40907a7c8182999b4fd4b05aa54a7"/><file name="mysql4-upgrade-0.7.41-0.7.42.php" hash="827225fc74e03e78dd9394881330eb5e"/><file name="mysql4-upgrade-0.7.43-0.7.44.php" hash="95b7e4a01611587a57ae1c8421b0683d"/><file name="mysql4-upgrade-0.7.44-0.7.45.php" hash="6d9ee0c7fb4bd68452f1d82743005ef7"/><file name="mysql4-upgrade-0.7.45-0.7.46.php" hash="0fc03ee03ae2ffa5be0e718d3b5481c3"/><file name="mysql4-upgrade-0.7.46-0.7.47.php" hash="db9d37ff3ad447df8969dcf82b9bfdf6"/><file name="mysql4-upgrade-0.7.47-0.7.48.php" hash="f2ba617765373d640b78c409feec30f6"/><file name="mysql4-upgrade-0.7.48-0.7.49.php" hash="0eab9338782973dc63bec3ea582b8a5e"/><file name="mysql4-upgrade-0.7.49-0.7.50.php" hash="d85f9f9b9bcae12794b6bf6370d94644"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="3cee2cef6e32abe440cccdadd671f932"/><file name="mysql4-upgrade-0.7.50-0.7.51.php" hash="e55d842ef8a8437553644cf25cfcb9c9"/><file name="mysql4-upgrade-0.7.51-0.7.52.php" hash="0bfafab7de0664a4178de76f3890daf9"/><file name="mysql4-upgrade-0.7.52-0.7.53.php" hash="29533cc9df23e68747399c8263731477"/><file name="mysql4-upgrade-0.7.53-0.7.54.php" hash="d22c9a89e63753b14a8a7f1688a3526d"/><file name="mysql4-upgrade-0.7.54-0.7.55.php" hash="0dc3e2a1902cb6b14e9b7055ab570799"/><file name="mysql4-upgrade-0.7.55-0.7.56.php" hash="60753837cd5d60361534cbb0225a3454"/><file name="mysql4-upgrade-0.7.56-0.7.57.php" hash="170c670d3d72f70148e4d6c08342d235"/><file name="mysql4-upgrade-0.7.57-0.7.58.php" hash="12e12c08e28702e44fafd0028c1b849f"/><file name="mysql4-upgrade-0.7.58-0.7.59.php" hash="051192900951ee98fc951b5cc6aa9483"/><file name="mysql4-upgrade-0.7.59-0.7.60.php" hash="55fc783cb0f0729167ff5fd2e0a1dd57"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="a3f49edb28d84c59fe9ca7837dcea688"/><file name="mysql4-upgrade-0.7.60-0.7.61.php" hash="b895f5353751e0188c753acf337818ec"/><file name="mysql4-upgrade-0.7.61-0.7.62.php" hash="7a5c16a58337826b6d99039b8afaf5fd"/><file name="mysql4-upgrade-0.7.62-0.7.63.php" hash="a5191a21d2a025b70a4c9b3262300da6"/><file name="mysql4-upgrade-0.7.63-0.7.64.php" hash="996bd2a70e9038fad8394f45d0eff9f6"/><file name="mysql4-upgrade-0.7.64-0.7.65.php" hash="010c4eea30beaa065d1978cc9c75858f"/><file name="mysql4-upgrade-0.7.65-0.7.66.php" hash="31937181e9cb258de9ac045166cf2e36"/><file name="mysql4-upgrade-0.7.66-0.7.67.php" hash="965f4ea3f8a2a3462b2643e6aba90d65"/><file name="mysql4-upgrade-0.7.67-0.7.68.php" hash="64799f0acc85d3dd4f38d329e5af0aab"/><file name="mysql4-upgrade-0.7.68-0.7.69.php" hash="a77cf62660a94679202d0afcfe5c377c"/><file name="mysql4-upgrade-0.7.69-0.7.70.php" hash="27b1fb809c832ba02a1ee11408733fdc"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="6101295efd5f3f08f01a25736ec5e4f2"/><file name="mysql4-upgrade-0.7.70-0.7.71.php" hash="fd9597fd643c92bf0fca4d47dc12d774"/><file name="mysql4-upgrade-0.7.71-0.7.72.php" hash="9cd8144308f5164ced498a58cee7338a"/><file name="mysql4-upgrade-0.7.72-0.7.73.php" hash="2bb63d43241c32344f04ba08ec779b9c"/><file name="mysql4-upgrade-0.7.73-1.4.0.0.0.php" hash="a7ac06f492342ad7aa7a793c2b777f16"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="5da5b75ea047b1650baf789cd8ca5b4a"/><file name="mysql4-upgrade-1.4.0.0.0-1.4.0.0.1.php" hash="4eb5719eaeb28af0b58a5eb55b782c0c"/><file name="mysql4-upgrade-1.4.0.0.1-1.4.0.0.2.php" hash="77631a576880ed0c95bae492b0ec43c9"/><file name="mysql4-upgrade-1.4.0.0.10-1.4.0.0.11.php" hash="64bccc23fe9b77f2baab984f8cd9a4f0"/><file name="mysql4-upgrade-1.4.0.0.11-1.4.0.0.12.php" hash="9e71f44020268215ce0442be5390ad0a"/><file name="mysql4-upgrade-1.4.0.0.12-1.4.0.0.13.php" hash="98320c3efea02f3cdc48b736f062af25"/><file name="mysql4-upgrade-1.4.0.0.13-1.4.0.0.14.php" hash="769851d021ea071c5472a688a7ec27a9"/><file name="mysql4-upgrade-1.4.0.0.14-1.4.0.0.15.php" hash="85a2d3ea3b5b01559306595127f10108"/><file name="mysql4-upgrade-1.4.0.0.15-1.4.0.0.16.php" hash="31ac945d49fe496eb1b9bc097dee6809"/><file name="mysql4-upgrade-1.4.0.0.16-1.4.0.0.17.php" hash="af36774824c34c2e4607deb6c7a4cd8a"/><file name="mysql4-upgrade-1.4.0.0.17-1.4.0.0.18.php" hash="db18c11c5cb8a2629e1a542509eca131"/><file name="mysql4-upgrade-1.4.0.0.18-1.4.0.0.19.php" hash="3f279db6d9bc87e9da98805465ea58f0"/><file name="mysql4-upgrade-1.4.0.0.19-1.4.0.0.20.php" hash="273d8e4e1ae2746e546a206d62e43820"/><file name="mysql4-upgrade-1.4.0.0.2-1.4.0.0.3.php" hash="9ecd093559741748ace7a4cfd5b88f11"/><file name="mysql4-upgrade-1.4.0.0.20-1.4.0.0.21.php" hash="efaf7fd6da74170c570c8a318ae21e35"/><file name="mysql4-upgrade-1.4.0.0.21-1.4.0.0.22.php" hash="9fbbbc917f61035c2660f3506f81ab0d"/><file name="mysql4-upgrade-1.4.0.0.22-1.4.0.0.23.php" hash="5d060e7f034fce20260a77318207a5e5"/><file name="mysql4-upgrade-1.4.0.0.23-1.4.0.0.24.php" hash="601f0a64fded0b691d4e5cee1d4605f1"/><file name="mysql4-upgrade-1.4.0.0.24-1.4.0.0.25.php" hash="ef6456951f48c49a2c8655371dfc3882"/><file name="mysql4-upgrade-1.4.0.0.25-1.4.0.0.26.php" hash="6e28c9a7f29d0f4e84a2e288be34a0d2"/><file name="mysql4-upgrade-1.4.0.0.26-1.4.0.0.27.php" hash="e81a3dad476185e2d34b8a8f4e17aed9"/><file name="mysql4-upgrade-1.4.0.0.27-1.4.0.0.28.php" hash="a48503aadadba707cc96a39f344b3e87"/><file name="mysql4-upgrade-1.4.0.0.28-1.4.0.0.29.php" hash="2cfb7b7f14ef594bc4d09768cceff672"/><file name="mysql4-upgrade-1.4.0.0.3-1.4.0.0.4.php" hash="445490fc8158fd0ef7cd83c27ba93743"/><file name="mysql4-upgrade-1.4.0.0.30-1.4.0.0.31.php" hash="2a428605b7c8ddf194eccd4f40b57627"/><file name="mysql4-upgrade-1.4.0.0.31-1.4.0.0.32.php" hash="7d8e65edb87932c9a03c1e037e15c217"/><file name="mysql4-upgrade-1.4.0.0.32-1.4.0.0.33.php" hash="70e5a99b44286483ded586c2c77609ae"/><file name="mysql4-upgrade-1.4.0.0.33-1.4.0.0.34.php" hash="8dfca4d13fedcd3927800ce3abb3adcb"/><file name="mysql4-upgrade-1.4.0.0.34-1.4.0.0.35.php" hash="c452a59ae39426cf10bf2dd296363fa8"/><file name="mysql4-upgrade-1.4.0.0.35-1.4.0.0.36.php" hash="9ce0c5ae8cf94b5b2aaf29934d77ff94"/><file name="mysql4-upgrade-1.4.0.0.36-1.4.0.0.37.php" hash="a0b70d350522db088260ad4ec2c6fb6f"/><file name="mysql4-upgrade-1.4.0.0.37-1.4.0.0.38.php" hash="bceac8cc99838b2eb12609af7fa4d289"/><file name="mysql4-upgrade-1.4.0.0.38-1.4.0.0.39.php" hash="a183832b91182bc1d76a001f33fa2c91"/><file name="mysql4-upgrade-1.4.0.0.39-1.4.0.0.40.php" hash="d22ec63695cf1d6c6d73a45a423b1560"/><file name="mysql4-upgrade-1.4.0.0.4-1.4.0.0.5.php" hash="07ce9770be5a2c649589ae390077d11f"/><file name="mysql4-upgrade-1.4.0.0.40-1.4.0.0.41.php" hash="ea749610e40e90c9614314964b64a396"/><file name="mysql4-upgrade-1.4.0.0.41-1.4.0.0.42.php" hash="38846d1d51038070a2733c032c157970"/><file name="mysql4-upgrade-1.4.0.0.43-1.4.0.0.44.php" hash="9b31f4b214dbb5230c29d83cace9fba7"/><file name="mysql4-upgrade-1.4.0.0.5-1.4.0.0.6.php" hash="d1c7df345f9d59660a45ae79c4aa159c"/><file name="mysql4-upgrade-1.4.0.0.6-1.4.0.0.7.php" hash="34c9a15dbd4b6c0b765c2730022f8c1a"/><file name="mysql4-upgrade-1.4.0.0.7-1.4.0.0.8.php" hash="10547a76c65573fa3dbe2a2c8d683817"/><file name="mysql4-upgrade-1.4.0.0.8-1.4.0.0.9.php" hash="c4895fa8b5b66db9a98cc765116b54ca"/><file name="mysql4-upgrade-1.4.0.0.9-1.4.0.0.10.php" hash="dfdc909dbc50f6e4556b3f350bb31cf9"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="262c663c9367c7404f63608ff545cd72"/><file name="mysql4-upgrade-1.6.0.0.8-1.6.0.0.9.php" hash="26fd60835af8537cdcaecfc86776b4c5"/><file name="upgrade-1.6.0.0-1.6.0.0.1.php" hash="a407effa970d70d0c38e8f8a3c1190b5"/><file name="upgrade-1.6.0.0.1-1.6.0.0.2.php" hash="683a300cf2c2b65967804b1ba86b6247"/><file name="upgrade-1.6.0.0.10-1.6.0.0.11.php" hash="be8d5e4b7ef6f6d698837e7d7d038468"/><file name="upgrade-1.6.0.0.11-1.6.0.0.12.php" hash="5f27bb2394ca437ccc6eafacda319c26"/><file name="upgrade-1.6.0.0.14-1.6.0.0.15.php" hash="5a64b192dfb43b5b6068a36c750f666d"/><file name="upgrade-1.6.0.0.15-1.6.0.0.18.php" hash="6713ad3a3e1279840570d09be596ad8d"/><file name="upgrade-1.6.0.0.18-1.6.0.0.19.php" hash="2b9ff26ac0a03b7b06d11e5da20a36fd"/><file name="upgrade-1.6.0.0.19.1.1-1.6.0.0.19.1.2.php" hash="3b43f2365ac8a0cc69128b42ef55a552"/><file name="upgrade-1.6.0.0.19.1.2-1.6.0.0.19.1.3.php" hash="0c50b1fe993a9c96ebfc1195cec2d9ef"/><file name="upgrade-1.6.0.0.19.1.4-1.6.0.0.19.1.5.php" hash="8bf92dde7ab583472cf41e3aa3bc7854"/><file name="upgrade-1.6.0.0.2-1.6.0.0.3.php" hash="977b5802c56f3995d1e3f350bc560840"/><file name="upgrade-1.6.0.0.3-1.6.0.0.4.php" hash="5fb5d4f3f47671b5b9de7bc189420df6"/><file name="upgrade-1.6.0.0.4-1.6.0.0.5.php" hash="2fb8b3607046c292040810e74a07f4e0"/><file name="upgrade-1.6.0.0.5-1.6.0.0.6.php" hash="48946c60f1c39c90f12423af8fd9ab4a"/><file name="upgrade-1.6.0.0.6-1.6.0.0.7.php" hash="d902f18b3d77ceb531870db665dd6a5f"/><file name="upgrade-1.6.0.0.7-1.6.0.0.8.php" hash="1954af67d8f5ce325f211a062e607185"/><file name="upgrade-1.6.0.0.9-1.6.0.0.10.php" hash="8bea76f4be2e8a15b414fe85200e0146"/></dir></dir></dir><dir name="CatalogIndex"><dir name="Model"><file name="Aggregation.php" hash="d8af150f1f31f8eeb374b372112c7bd6"/><file name="Attribute.php" hash="e7fc5f65b7150d29466cf72e660499a3"/><dir name="Catalog"><dir name="Index"><file name="Flag.php" hash="f9994f4bfa80c140a5dc3c7d56f354eb"/><dir name="Kill"><file name="Flag.php" hash="aadfadde5165ee0d52c48b171eabdba9"/></dir></dir></dir><dir name="Data"><file name="Abstract.php" hash="1ad82e249c4503cdf441957c7b455b57"/><file name="Configurable.php" hash="ba79b0a91e7250057b67ac0d83604534"/><file name="Grouped.php" hash="5914fe1730fe66b4b9f5f3127a4f422a"/><file name="Simple.php" hash="7f58b8c4463fe055fe99427fdfd4cb1f"/><file name="Virtual.php" hash="383cf1b8a7936cdedc1f37b2966fd687"/></dir><dir name="Indexer"><file name="Abstract.php" hash="3f4d1948c963b9295eb9d74cadad19bb"/><file name="Eav.php" hash="f48fda3c09788e64982acd730859a681"/><file name="Interface.php" hash="17198f0e5b2db1597e934a7fc87df8ba"/><file name="Minimalprice.php" hash="6083e851bd5987d52b783f7534dfe54b"/><file name="Price.php" hash="f3f374ff229ed0e4275e3d75801152b5"/><file name="Tierprice.php" hash="80e587f773db5240db32eea1fbf0eb02"/></dir><file name="Indexer.php" hash="ea8f414c384e223f7066f40a1825da58"/><dir name="Mysql4"><file name="Abstract.php" hash="d31a3c0e2196eed9b5803f7f3dcbadcb"/><file name="Aggregation.php" hash="1e2bd5dbd163b5d380de7042caa476af"/><file name="Attribute.php" hash="5432abbb2508b9e035a3e281fedc9a32"/><dir name="Data"><file name="Abstract.php" hash="e923a9926a1f067de21d8d1f401545db"/><file name="Configurable.php" hash="3de1676d25c734ecd245c7bf878f73aa"/><file name="Grouped.php" hash="c68cd41d33583c508227e85cf60976b9"/></dir><dir name="Indexer"><file name="Abstract.php" hash="af322c8d3d112ecde8ca776a0018e664"/><file name="Eav.php" hash="a12a21ca3b5d071c70da3ccf3ba594be"/><file name="Minimalprice.php" hash="00922c6b3c641c559eca64383bb77769"/><file name="Price.php" hash="36d9a8cc30d851f144db2687ab2f403a"/></dir><file name="Indexer.php" hash="638fe575e181ee6c68c4bfbc988c24e5"/><file name="Price.php" hash="88052475d8f04c300c6fae7b09d319e8"/><file name="Retreiver.php" hash="8f05bd5edb9b7a6ff19bea9f844dfbc6"/><file name="Setup.php" hash="1fbb2d9be694eadc61f2d1d83a0309d5"/></dir><file name="Observer.php" hash="8047d191d20f391728e223f9fc8e311d"/><file name="Price.php" hash="a195a56776dc8633fefaf4bf95cf7da8"/><dir name="Resource"><file name="Abstract.php" hash="55c819cd20eb177370d0d7c9a53a3174"/><file name="Aggregation.php" hash="67dc7625e3715466d02be700f5af432a"/><file name="Attribute.php" hash="9771e6b7750db77ada5437c299f0c097"/><dir name="Data"><file name="Abstract.php" hash="81f481e13bff2c1516442eef052ae670"/><file name="Configurable.php" hash="1c28a438bee1ab045dae5831d2d9514a"/><file name="Grouped.php" hash="ae6f6724480661972838fb5a5495addd"/></dir><dir name="Indexer"><file name="Abstract.php" hash="192816c1dfa15625f02ec3b24bdd6950"/><file name="Eav.php" hash="e2c4848e82adfe4e1a36084aed6e1276"/><file name="Minimalprice.php" hash="d09967b2fc0f04afbf7109a1fbce2851"/><file name="Price.php" hash="e950948c90f03beeb93e8351b6e095e3"/></dir><file name="Indexer.php" hash="cf50fc45c5da409e70e1496b395c2934"/><file name="Price.php" hash="2383523c21df945fc7c6a1d335f2f27a"/><file name="Retreiver.php" hash="70598ae252e98fb6f89cab93469bba01"/><file name="Setup.php" hash="2a69b5d885631ea810158a4909329a9e"/></dir><file name="Retreiver.php" hash="cbec9f6f58e97c37f191d310a1eff230"/></dir><dir name="etc"><file name="config.xml" hash="50ff66b4fc9b312bc89626503b3cd348"/></dir><dir name="sql"><dir name="catalogindex_setup"><file name="install-1.6.0.0.php" hash="cf8f185eee27560f80f39a914b5c3c82"/><file name="mysql4-install-0.7.0.php" hash="58a76cfbf513042d9241684681c6b079"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="d0aa67bf065bb707fe2abab0425caf6d"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="c9148eaec8f5380d769b2b34ffb18084"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="b2710d3bef49d9fd256c6ae9c871be05"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="bb820f1d177b543937070e00fb4b1845"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="29314bf0698771534cab5eb548402ca1"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="24cbd4a5b74266bcfbade17ef5f8ada4"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="7b2a5ed488381396236020a21579aeb1"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="af7837b7a4a1824e87c9f0f1645dd33c"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="d68c3505c7b47de51e4fe56a6cbd791e"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="8d8b05c8e5df2bf84b586816ac1b13d3"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="3870bb2755fbb8547c7d7862f869c7b1"/></dir></dir></dir><dir name="CatalogInventory"><dir name="Block"><dir name="Adminhtml"><dir name="Form"><dir name="Field"><file name="Customergroup.php" hash="a1bc58f2f084c1f648e56e3b9da4fc7c"/><file name="Minsaleqty.php" hash="70ad8c04e28efb204fc106207c33aeeb"/></dir></dir></dir><file name="Qtyincrements.php" hash="b261f945d395df544101b9aefbeef6ad"/><dir name="Stockqty"><file name="Abstract.php" hash="e24fe678792bd0418688654445adabcc"/><file name="Composite.php" hash="7e64a2096cf31e8403a8ef2f059f0f9b"/><file name="Default.php" hash="89e5d0814a90450ccd11b8505c74a0e9"/><dir name="Type"><file name="Configurable.php" hash="cbffc0a8607f8ace1240b22f8d989fcb"/><file name="Grouped.php" hash="ab6c2c5e76f4d4bf3355b0a63cde0493"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="dead0e2fb29574261d5b5d315e356e05"/><file name="Minsaleqty.php" hash="838420acee2dd3a5acb6001ef5382494"/></dir><dir name="Model"><dir name="Api2"><dir name="Stock"><dir name="Item"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="97562c6058565fe06b265442414811f0"/></dir></dir><file name="Rest.php" hash="76b2a33c938950385b8201e3df6b090d"/><dir name="Validator"><file name="Item.php" hash="1b0cfbaed0d9ba8f83b02fc32185de6b"/></dir></dir><file name="Item.php" hash="cbca2f7f7afcf55b105e90a0673ce262"/></dir></dir><dir name="Indexer"><file name="Stock.php" hash="c0984aedb09efd73fe70a489761e6ae1"/></dir><dir name="Mysql4"><dir name="Indexer"><dir name="Stock"><file name="Configurable.php" hash="31fa6e10d95ed91f2cd36ec49087eb47"/><file name="Default.php" hash="3a95a221685f00b7bb1d75715e6955fc"/><file name="Grouped.php" hash="f0014ec4bb9d18b18ad8fe076777ac64"/><file name="Interface.php" hash="dd5e3abc59defff34dae52e7ade0541d"/></dir><file name="Stock.php" hash="6f0903cd0b2ab90b43d58d6343a81f8a"/></dir><dir name="Stock"><dir name="Item"><file name="Collection.php" hash="f782cd8443b68f42c9b9f1040bf23637"/></dir><file name="Item.php" hash="d78fcc6b999ef32713e1e3a40c74d127"/><file name="Status.php" hash="b771b21943d3dbf935125ba221fde479"/></dir><file name="Stock.php" hash="f459ba26acf3bc5c48d28d94ddf9bacf"/></dir><file name="Observer.php" hash="cf0787c14b69f8a331548a2d6ed341ce"/><dir name="Resource"><dir name="Indexer"><dir name="Stock"><file name="Configurable.php" hash="99b85c19436fd2cb1bb639c234507903"/><file name="Default.php" hash="d3b5e2ef640c5b1ddd51d1d384ac7a23"/><file name="Grouped.php" hash="373135e46cfb49c9ac161cdf4542e216"/><file name="Interface.php" hash="21633d6d7270d2f27a6a3e43aa4e3718"/></dir><file name="Stock.php" hash="006bd7c6552ba58f3f5c6f4d2b02b801"/></dir><dir name="Stock"><dir name="Item"><file name="Collection.php" hash="ac116ab6c146546acfe59331b2652a21"/></dir><file name="Item.php" hash="7aa6d956789b642696f070490bb886ab"/><file name="Status.php" hash="5069f9b3d81cc2653932563e972a3a1c"/></dir><file name="Stock.php" hash="75a6f191034e6b3cd459198f5200846a"/></dir><dir name="Source"><file name="Backorders.php" hash="dd5a2e4f5efb98cc3ea16b8b7e9ec555"/><file name="Stock.php" hash="bf73ca9c63cda414afd2b2a1217ddd97"/></dir><dir name="Stock"><dir name="Item"><dir name="Api"><file name="V2.php" hash="ff859921c2c7b1ee05aebe08d30fb197"/></dir><file name="Api.php" hash="47b8ff35afcf3619b439f064b2290e64"/></dir><file name="Item.php" hash="8bd5d30e4c56b9bb9553e8c2a50b1254"/><file name="Status.php" hash="d95989bb579fc09fe4de165589a32eb2"/></dir><file name="Stock.php" hash="16f67a9361cee9a7147ddb739d401a98"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Minqty.php" hash="d9831c57b177371b4df7dcc296c842d7"/><file name="Minsaleqty.php" hash="b09b9183f94e35e2c01bf076e4a73dbe"/><file name="Qtyincrements.php" hash="048f74672f457990537be44d98b9315f"/></dir></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="7e7bf9fcaf608e7655e2fadb729b12c5"/><file name="api.xml" hash="0568837d13dc040aa49b41ab4dff808a"/><file name="api2.xml" hash="bd3260899f9b9486db208d765a24e8d1"/><file name="config.xml" hash="014f7fe202259a429541ca3128f13940"/><file name="system.xml" hash="3d995e44a4426e9bf2df71c86b53f2df"/><file name="wsdl.xml" hash="cfad5924eb32b8fb7ccf79309e5966df"/><file name="wsi.xml" hash="ec7bdd8cb2bc5dd12c0a4d865fe3d313"/></dir><dir name="sql"><dir name="cataloginventory_setup"><file name="install-1.6.0.0.php" hash="f27e471805eddff1bf82df8107f3f974"/><file name="mysql4-install-0.7.0.php" hash="6ba7aa64d910b36a119e6a4ccab4f1d9"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="5a9307e341725852439334f7d5e2816f"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="28fcfff6687a76578474774b791ede4d"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="3c038bcc6fd8d8a377833995c8e57188"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="ccd6337d78f140a84b40a3aa34d594f8"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="1f84078a74c0b69b25627921ba46d9a6"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="594dda2c42f64420af520403b0ad280d"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="fd73a003742f3e2568de9e4b1cbaab59"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="8129f7ce45e56324a5ecd7e5bc65e039"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="b72a6c90993bc3285473ac430078e2b6"/><file name="mysql4-upgrade-1.6.0.0-1.6.0.0.1.php" hash="aa090c910f467d017f647bf9bed33f85"/><file name="upgrade-1.6.0.0.1-1.6.0.0.2.php" hash="f07d18a7750209513b5e30acd4d0b372"/></dir></dir></dir><dir name="CatalogRule"><dir name="Helper"><file name="Data.php" hash="f114ddae5cdaf5bb9062fbc0525a65a4"/></dir><dir name="Model"><dir name="Action"><dir name="Index"><dir name="Refresh"><file name="Row.php" hash="cf9ea839eac7052dd9016baa261571e9"/></dir><file name="Refresh.php" hash="6988a0c4ef21306a3fc3f9bf5a3c26b2"/></dir></dir><file name="Flag.php" hash="89da7917e6cdfb0d297190251ebf4169"/><dir name="Mysql4"><dir name="Rule"><file name="Collection.php" hash="98dc46b90d3d123138e2ceca984e1a16"/><dir name="Product"><dir name="Price"><file name="Collection.php" hash="082fee76f3ec35c9e6574848aaee5148"/></dir><file name="Price.php" hash="df79ff85fd019caec3a0e3c00deabee6"/></dir></dir><file name="Rule.php" hash="e6cccfd2c15365dd7fadd0cb7d3e11c5"/></dir><file name="Observer.php" hash="0a085d9342bd1781dfc1c94dff083539"/><dir name="Resource"><dir name="Rule"><file name="Collection.php" hash="44c60a399686f678146b4030cc178cb1"/><dir name="Product"><dir name="Price"><file name="Collection.php" hash="be34144ee4fc34011eedcadcc023d5a2"/></dir><file name="Price.php" hash="db97799a10e708a7ce51ee5aed4b3290"/></dir></dir><file name="Rule.php" hash="d3ef4a4ff9876be7c747e181e827f8dc"/></dir><dir name="Rule"><dir name="Action"><file name="Collection.php" hash="8597f6e2ba5196887db9182bb4a16877"/><file name="Product.php" hash="37363ef9f7e28a4e4895586f99526e95"/></dir><dir name="Condition"><file name="Combine.php" hash="585427b59b5c3a2cd2940ab7812e6901"/><file name="Product.php" hash="00fd7823a5edca69180b03533896150d"/></dir><dir name="Product"><file name="Price.php" hash="60226e4a64afc637de9c77f5591b425c"/></dir></dir><file name="Rule.php" hash="d004ff0a9cd62a4e06f4a9f7cd88369e"/></dir><dir name="etc"><file name="adminhtml.xml" hash="73016378f9ba7645398de6357859d1c1"/><file name="config.xml" hash="322f34e65bdf4e2bd7356f24cc2bf3e3"/></dir><dir name="sql"><dir name="catalogrule_setup"><file name="install-1.6.0.0.php" hash="f99c00bb678a800719c5d4c412a49170"/><file name="mysql4-install-0.7.0.php" hash="b357df1aa63143f7ed1fc4c1c2d4a1a0"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="adc3ad486f6a80fe863b9d44df345d1e"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="f005bc366de60f96a1505055d817a5e8"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="20435e11621f0306884a64005286c0e3"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="4936b71df8df089c274f2dc5f2c8821e"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="1a238cedfd2b80d5ea30879c53ce8e43"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="cd4c75cd9a21b6d9cd3f0e5a799815f5"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="c918bb2d58138ed34576b591521d8ef6"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="f082bd75ebca7b25f64f07df9a099db8"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="ab2e1f2440c969df314517be519f64a2"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="8edc824dd64b606a204ee9fe1c610a91"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="02a57c0410a008a9be02f9f6a7b54de2"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="4e0c6fab17fb8551c47322c6765341f5"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="dc42862c395434103f7fa6bdca290164"/><file name="upgrade-1.6.0.2-1.6.0.3.php" hash="73f0ee67893eee7948cb9f48242e88a9"/></dir></dir></dir><dir name="CatalogSearch"><dir name="Block"><dir name="Advanced"><file name="Form.php" hash="c4c1713e4bbdc16cb0ee850aaedc3cad"/><file name="Result.php" hash="310fc695dcbfcbceb35119312ec66b5f"/></dir><file name="Autocomplete.php" hash="e202dd4bbef904236e7cd062fba11705"/><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2dc8cf868e549f09695c8332163933d8"/></dir></dir><file name="Layer.php" hash="68ff0d6b3a774c4dee71a63db303fe49"/><file name="Result.php" hash="7fa721871ca0ddae2f8170b5c995997e"/><file name="Term.php" hash="cb1b28a95c749bf853631e1a4b1777c9"/></dir><dir name="Helper"><file name="Data.php" hash="07929ff5bf2897db21b8d941e2f6827c"/></dir><dir name="Model"><file name="Advanced.php" hash="28c2238611b6a6839870720ed3a4e9d0"/><dir name="Fulltext"><file name="Observer.php" hash="db616d623addda792285431dba58d592"/></dir><file name="Fulltext.php" hash="c2214a9c614551ac8a73e25e7ba08909"/><dir name="Indexer"><file name="Fulltext.php" hash="110dfc244cc187d62a803ff6daa33cec"/></dir><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2bad10ccda4b15a38b22d4bd149d1e71"/></dir></dir><file name="Layer.php" hash="404dcaa87375d9170e81e4c3e04f0cf5"/><dir name="Mysql4"><dir name="Advanced"><file name="Collection.php" hash="aa03f1339b7ebc61d4be24edcd74ce10"/></dir><file name="Advanced.php" hash="945e86183ddabab0dc939e7c8dbe36fa"/><dir name="Fulltext"><file name="Collection.php" hash="967735a54331b0f7675ea682d876eb09"/><file name="Engine.php" hash="ae74f610dfd3278c86757304357b096a"/></dir><file name="Fulltext.php" hash="e8b8165e231a1a47e354550156023a7b"/><dir name="Indexer"><file name="Fulltext.php" hash="f3895c8928c0729144fcb543341e0933"/></dir><dir name="Query"><file name="Collection.php" hash="80795ac59424f9343ec3579cd3afaf5f"/></dir><file name="Query.php" hash="eca5a8fed6561e2bf1f503a5e3894bd9"/><dir name="Search"><file name="Collection.php" hash="0c8336671fa586fbbbf45cfc011fdb79"/></dir></dir><file name="Query.php" hash="0ec47e6cfa90f303cc0aeeaf4242dec1"/><dir name="Resource"><dir name="Advanced"><file name="Collection.php" hash="5a35a25c346410403155657d9c794b80"/></dir><file name="Advanced.php" hash="3d8c2a496f2adff90f97ea7b27bd7093"/><dir name="Fulltext"><file name="Collection.php" hash="aa2f7ad37c1f328d4a858af5224161d1"/><file name="Engine.php" hash="2922f0eab7a7157a62ece349ffad4656"/></dir><file name="Fulltext.php" hash="b10421b49c01934e25a0b5b89423a286"/><dir name="Helper"><file name="Mysql4.php" hash="1cb52148ea9f147443142802a5ccac8e"/></dir><dir name="Indexer"><file name="Fulltext.php" hash="6d6c52c0bb00ac1a4ff0283f1ffc135e"/></dir><dir name="Query"><file name="Collection.php" hash="1f36d427babb22a0f610cd217bd88729"/></dir><file name="Query.php" hash="e0960c2bb8fae4146fd06f4c97967053"/><dir name="Search"><file name="Collection.php" hash="3bac930ad9b9fbdbcf18e85083741e1f"/></dir></dir><file name="Session.php" hash="3b64d6f7dcd2bd9ae5c0c5347887529d"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Sitemap.php" hash="f8a202c12c4eec2c3a07ef7b462f69e5"/></dir></dir></dir></dir><dir name="controllers"><file name="AdvancedController.php" hash="bb536922f21c24c1ae0b12744300f807"/><file name="AjaxController.php" hash="b5addc862bb4c8d3f768e314e52ec9a6"/><file name="ResultController.php" hash="221e519f7985eb066d64792862fc59b2"/><file name="TermController.php" hash="22420488e648e5f852fb7df4120cc884"/></dir><dir name="etc"><file name="adminhtml.xml" hash="ab94dc4bbf1312308549b7d3999452ee"/><file name="config.xml" hash="8b374762e2c06a24be57da998c87fcc7"/><file name="system.xml" hash="a2fcb985b8b881b78d27010897c13870"/></dir><dir name="sql"><dir name="catalogsearch_setup"><file name="install-1.6.0.0.php" hash="a2b0d197a9e45e8ba6ec6fdb199888d6"/><file name="mysql4-install-0.7.0.php" hash="712a386cbbd394efe749e5194370fca2"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="f1298524c0e8389799244f065e097a0d"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="83e4a715af4d5690b58dc4dbad3006f9"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="392ccdab42485cea7426beea3288792e"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="4186e84dd5d4b4be4e78b3f9428f78b9"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="27d10ec3e6a9e8ab6fb2e6fc7cd45e0d"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="c36dec0d08b86b36cceeafda534321a0"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="e0610cececc06f7d0d96a82ddb648344"/><file name="upgrade-1.6.0.0-1.8.2.0.php" hash="3f43aa1f65cc87f92d7e19b4c180ca21"/></dir></dir></dir><dir name="Checkout"><dir name="Block"><file name="Agreements.php" hash="01835129ca84c8a6f56097b06636fd5d"/><dir name="Cart"><file name="Abstract.php" hash="872be8c057c924ca191ba0537f5b0794"/><file name="Coupon.php" hash="1fceac167119d3c42af64a6e7c8a71a2"/><file name="Crosssell.php" hash="13dbf998a15118ea5b56f3bc7841c560"/><dir name="Item"><file name="Configure.php" hash="842993ebdfeb50a0c26ae19fc6997997"/><dir name="Renderer"><file name="Configurable.php" hash="0c2e3530214b12cb21c736248dea8803"/><file name="Grouped.php" hash="67625b5ec0559494f73cc2ae19ee8347"/></dir><file name="Renderer.php" hash="5b5b9830a510c0967bf27da2912d36fe"/></dir><file name="Minicart.php" hash="1a542fc17951851fab4caf179db2bc55"/><file name="Shipping.php" hash="6fc8fe017f2373cb29628c113d1bb1b8"/><file name="Sidebar.php" hash="b9ce6dc90840fb4e522025e6a2417817"/><file name="Totals.php" hash="3acc1369b38f6f51075219698d03345f"/></dir><file name="Cart.php" hash="90530b2ceef673632d7198950523d896"/><file name="Links.php" hash="46de6b3a0fc7ae8a1ae381bb74bd0d00"/><dir name="Multishipping"><file name="Abstract.php" hash="e341425a398ff768c34a65230682ba6a"/><dir name="Address"><file name="Select.php" hash="1793fb3a0ea7e43a1cdcd9b755bd39b0"/></dir><file name="Addresses.php" hash="8759f8cc535172f9b8d9ee5356780fba"/><dir name="Billing"><file name="Items.php" hash="53b44cedd1239aa341c6eafe08d48fe5"/></dir><file name="Billing.php" hash="ad98a619f72678d071839ed955915fb8"/><file name="Link.php" hash="94c157e952a32362e76b712197a59c66"/><file name="Overview.php" hash="ca306b397661c6123c131e5e535bb261"/><dir name="Payment"><file name="Info.php" hash="08ef96244b3ebca5d7732ee56cf5c263"/></dir><file name="Shipping.php" hash="f705bb50a314ebbaeb3083dec924e448"/><file name="State.php" hash="334ee0b3c9545fd5e581f4ef63330092"/><file name="Success.php" hash="5b83ad214e1b0384cb1c871528995e90"/></dir><dir name="Onepage"><file name="Abstract.php" hash="4b39037994dfe61e2cfc7bef63448cce"/><file name="Billing.php" hash="ba0a71fa042248952a74636202652680"/><file name="Failure.php" hash="9106efb1dccccfc80f5d307b134c7448"/><file name="Link.php" hash="bd368ed291976634c9c52f33cd5f6809"/><file name="Login.php" hash="7857bc45c6226a8229b83f562679a5fe"/><dir name="Payment"><file name="Info.php" hash="ac4a991b0a6d05048ca2db14d246509a"/><file name="Methods.php" hash="8265cc80ed4910af39b6e1f74e78c5ed"/></dir><file name="Payment.php" hash="bc88e1014705d486be1e33d094f2ac49"/><file name="Progress.php" hash="20d530cb1867ed769bb8cec8052afe4b"/><dir name="Review"><file name="Info.php" hash="b061baa6f8d251c64b9cab27a94c9127"/></dir><file name="Review.php" hash="7dcf5f69495112c22a13088025e91845"/><dir name="Shipping"><dir name="Method"><file name="Additional.php" hash="482c7aced91da476fcc7940ba2422aa4"/><file name="Available.php" hash="ac975fe58100c7187c7ad41efee2f3c6"/></dir><file name="Method.php" hash="9635ce02ff9e552c6ca316ee87e3e41d"/></dir><file name="Shipping.php" hash="80b9583f205de49524da89d391acb084"/><file name="Success.php" hash="0885c2795f13c50f57e69bce8d085b41"/></dir><file name="Onepage.php" hash="5cf1c1c0489e8f9a1f0012e2b9595752"/><file name="Success.php" hash="e8018a6b54cded2365d186c663cd4968"/><dir name="Total"><file name="Default.php" hash="66dc9076a8ce6931fdc699db167ba92b"/><file name="Nominal.php" hash="cabb2ac2a88ba346625b9247a3a71a08"/><file name="Tax.php" hash="6f154ed6626155404969501946c71344"/></dir></dir><dir name="Controller"><file name="Action.php" hash="2140565efbed00f9adf27760f44b2f84"/></dir><file name="Exception.php" hash="5ec650bdcb9d71f0b5fc348fc2758f19"/><dir name="Helper"><file name="Cart.php" hash="5baa4a7803d841df763d75c3301b8deb"/><file name="Data.php" hash="f4dc9af9742b7842867ed99c2e83772f"/><file name="Url.php" hash="16a0c1a51531c77e47d59d3d1c626c18"/></dir><dir name="Model"><file name="Agreement.php" hash="b580e9f9103423b901ab91f5310770b6"/><dir name="Api"><dir name="Resource"><file name="Customer.php" hash="025742b119d655c84df990522df5d48b"/><file name="Product.php" hash="a0ff764a225e34426528bed282710d51"/></dir><file name="Resource.php" hash="6bae9a50adf01bf17a8026ae5ea16e15"/></dir><dir name="Cart"><dir name="Api"><file name="V2.php" hash="ca951fb2730c2a3b8a25aba1e48bf669"/></dir><file name="Api.php" hash="64362c38ea6adb5569300c9302c6150b"/><dir name="Coupon"><dir name="Api"><file name="V2.php" hash="9147be382a0f3e670b935e854d21149b"/></dir><file name="Api.php" hash="7281c3d83022812980530277d988b9df"/></dir><dir name="Customer"><dir name="Api"><file name="V2.php" hash="24f3b7eb8dea09b6fddb7785078768f8"/></dir><file name="Api.php" hash="80552ab2df6b4a666c5026894e6b7fdc"/></dir><file name="Interface.php" hash="a18f87449ec50d3759620e08f7b209de"/><dir name="Payment"><dir name="Api"><file name="V2.php" hash="84aa5a5f31a36cdd0ec87a2120b9fcea"/></dir><file name="Api.php" hash="505b707924d3510781922693db5705e5"/></dir><dir name="Product"><dir name="Api"><file name="V2.php" hash="52d7e0631effa6573f2e7cb9f499c34b"/></dir><file name="Api.php" hash="b205126d26bcfef83c42c5c004336e58"/></dir><dir name="Shipping"><dir name="Api"><file name="V2.php" hash="0ca7ed3c830a45b6e0a22ed412f48fd1"/></dir><file name="Api.php" hash="e9af22352df7284f040dad6a9a5ec241"/></dir></dir><file name="Cart.php" hash="78a88f2b65cfbf9f83b75316b62dce3f"/><dir name="Config"><dir name="Source"><dir name="Cart"><file name="Summary.php" hash="8e54e142a018e30c2a6263d734091ed4"/></dir></dir></dir><dir name="Mysql4"><dir name="Agreement"><file name="Collection.php" hash="a5d2e187861d7a47e33a1f8dfe568799"/></dir><file name="Agreement.php" hash="8fd16cd1119f012cdc66ce0101f7cd72"/><file name="Cart.php" hash="68a293fb22cdedf7fd4c49d4d01cc577"/><file name="Setup.php" hash="0818088b40ef0aacf85e35bd10822a8f"/></dir><file name="Observer.php" hash="95c74ef6d46a2421855f991659c7dc23"/><dir name="Resource"><dir name="Agreement"><file name="Collection.php" hash="70390a18d13f12efd292c76228d29034"/></dir><file name="Agreement.php" hash="7f20980118952614f5714c1f4153b92c"/><file name="Cart.php" hash="ce89a605fd599477cac950d59d41f4fd"/><file name="Setup.php" hash="813ccb7e69f00a31c143037af7662e3f"/></dir><file name="Session.php" hash="0375614ce3144681b02f37bc25a414bf"/><dir name="Type"><file name="Abstract.php" hash="df92eaf8fd8e69285de36aa2aa4110f4"/><dir name="Multishipping"><file name="State.php" hash="48e6080608d05fc6dc7284b635040e76"/></dir><file name="Multishipping.php" hash="05e6c897750305c65f21ac527cb6f064"/><file name="Onepage.php" hash="bb170775e5417ee7b4f87fee907f4bbe"/></dir></dir><dir name="controllers"><file name="CartController.php" hash="faa0fc6412c38453d34c14d84cc6427d"/><file name="IndexController.php" hash="835b0dbd4fac4b76a274d7299cbd3c00"/><dir name="Multishipping"><file name="AddressController.php" hash="c9c93e7093db346806c9f79d8f5b52d6"/></dir><file name="MultishippingController.php" hash="d89be0e85e9bc6483dcb25cdbac3ccdb"/><file name="OnepageController.php" hash="39d587af894924785d515642d2afae17"/></dir><dir name="etc"><file name="adminhtml.xml" hash="72fa6908b80f63b891ab5ac9e60a74ad"/><file name="api.xml" hash="07869dd7ea9e838ae3ab12df67816a2d"/><file name="config.xml" hash="1a3aa782c78fa35897769c97763089d6"/><file name="jstranslator.xml" hash="e7d071b767fb4269f62d5b33dd241f80"/><file name="system.xml" hash="3226cfa047ceb033fdab8ba223f01fd9"/><file name="wsdl.xml" hash="9a10e25803e84713f5031a168dd0c624"/><file name="wsi.xml" hash="2567bee4ef18e1b426c700ce66c3bcb1"/></dir><dir name="sql"><dir name="checkout_setup"><file name="install-1.6.0.0.php" hash="8023f1dce251f1376c3ba9a15262d1e5"/><file name="mysql4-install-0.9.1.php" hash="121a29cd5d6fac478e0e7c8cc0ae4e0e"/><file name="mysql4-upgrade-0.9.0-0.9.1.php" hash="caf108e5f9ad2c1cbcd6dd4512405bc0"/><file name="mysql4-upgrade-0.9.1-0.9.2.php" hash="8b7187ee19e04e5722522ee204df4bbe"/><file name="mysql4-upgrade-0.9.2-0.9.3.php" hash="2fe9fb1f351f24f255e01578acdf5e20"/><file name="mysql4-upgrade-0.9.3-0.9.4.php" hash="c86e236086ee30581d8ab81d5be6d8bc"/><file name="mysql4-upgrade-0.9.4-0.9.5.php" hash="d5eb44438a47c217307b567b5d5b3cda"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="1647b99f4ca60de0ca2caabae08b1cc2"/></dir></dir></dir><dir name="Cms"><dir name="Block"><file name="Block.php" hash="2026d5e3ec9868f3a565d461e2781185"/><file name="Page.php" hash="8a942685ce32d526fb633b05d61e633d"/><dir name="Widget"><file name="Block.php" hash="87384c28f0fcf94ff4cdb894d94c3bd9"/><dir name="Page"><file name="Link.php" hash="62d09bfafc2eee9d3df946a8348e5434"/></dir></dir></dir><dir name="Controller"><file name="Router.php" hash="5dd259a31fbbb1d93d37479585d98adb"/></dir><dir name="Helper"><file name="Data.php" hash="5b401887c9b6ea30b87faa3383e32676"/><file name="Page.php" hash="9dbd6afbf7f7fc1020ab6bf2e5308de1"/><dir name="Wysiwyg"><file name="Images.php" hash="9d37c7df55870372c67ef614c87e7012"/></dir></dir><dir name="Model"><dir name="Adminhtml"><dir name="Template"><file name="Filter.php" hash="4b8f25b0d6a794d041807fee31d4cf92"/></dir></dir><file name="Block.php" hash="83d40f33b021463bc4bb0eb1d56f40ac"/><dir name="Mysql4"><dir name="Block"><file name="Collection.php" hash="0ce095dbc704bf96a03b58cc34bcee38"/></dir><file name="Block.php" hash="e58e789de65a1d0b1e3200f308a326a3"/><dir name="Page"><file name="Collection.php" hash="1b0ab33ca1731ea0317355b4cd26a80f"/><file name="Service.php" hash="a36048e18e769374bffd794b01aeb5c8"/></dir><file name="Page.php" hash="79becb04a45a36b58361057380cb63a2"/></dir><file name="Observer.php" hash="56af81a9637530097458c997fa6d7a70"/><file name="Page.php" hash="3b60c996d092d36d0df2381f072bc828"/><dir name="Resource"><dir name="Block"><file name="Collection.php" hash="094cbc78f457b943183bd62986ade660"/></dir><file name="Block.php" hash="1a984c70b61e3c501a791919595b51d4"/><dir name="Page"><file name="Collection.php" hash="fb752a9e5941720852132c2526ac4ac5"/><file name="Service.php" hash="031c3b36bd9327c264c94a5ace150fde"/></dir><file name="Page.php" hash="de4319cd668bb83608932ba3d608fbd5"/></dir><dir name="Template"><file name="Filter.php" hash="21286b1ddb5e180223905d9a2930cd2b"/></dir><dir name="Wysiwyg"><file name="Config.php" hash="d8d910e5a4c480f6d93184f107989b2e"/><dir name="Images"><dir name="Storage"><file name="Collection.php" hash="fe8a17645ea1a2e5ea23f31ac2f34251"/></dir><file name="Storage.php" hash="4d78c15803dbbadefd293e80ad872488"/></dir></dir></dir><dir name="controllers"><file name="IndexController.php" hash="22073687a4879efcae896723ba6901c7"/><file name="PageController.php" hash="1c0eee5022af77ad35fa6387823a7b7c"/></dir><dir name="data"><dir name="cms_setup"><file name="data-install-1.6.0.0.php" hash="98ffdd112d54cd7d8bf0baa9fb42a497"/><file name="data-upgrade-1.6.0.0.0-1.6.0.0.1.php" hash="cf1aa0ef419605b9041c511f1df6b30c"/><file name="data-upgrade-1.6.0.0.1-1.6.0.0.2.php" hash="d34ef38bbe7c6454609549735924cacc"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="26cfaa3305365414a7bbcb212ba6676e"/><file name="config.xml" hash="5ee4baa239fe2f016bd366e002d08406"/><file name="system.xml" hash="f96d55ee55ec88d17ab1fd129fd15526"/><file name="widget.xml" hash="19daa63e98d6adf9bf7a8743ebcfec60"/></dir><dir name="sql"><dir name="cms_setup"><file name="install-1.6.0.0.php" hash="036832fd0187d0c97a386e02548e4b7e"/><file name="mysql4-install-0.7.0.php" hash="eba8ab5a1a3b17a4efaee22ee36e2303"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="43ca4351a1f90c5b6d15b160140fec4e"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="c1e07029aea48f5efea912da751d3364"/><file name="mysql4-upgrade-0.7.10-0.7.11.php" hash="3c0b96adf71c6548a7d060aa2887f7bd"/><file name="mysql4-upgrade-0.7.11-0.7.12.php" hash="df2dd2e5fb88662ec3aeef3ca66cb683"/><file name="mysql4-upgrade-0.7.12-0.7.13.php" hash="94959b92163ebeb21ee267b056f9fffe"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="33c5082df30fe56f5b52cb3e3ba33f5e"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="80036501cd1d3673b29025791bad936f"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="5a7f7d8801adb61b7f40742f14fcc5c0"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="9296cf6a7bf311e21d38f78b7a4382f5"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="bbd1d797b5efcd9d700e4172475fe96e"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="3673999c0fb91684094cbe9360dec2fc"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="7eb82690d68c916e310cbb3afa3ce612"/></dir></dir></dir><dir name="ConfigurableSwatches"><dir name="Block"><dir name="Catalog"><dir name="Layer"><dir name="State"><file name="Swatch.php" hash="5870932d0398e31209b38592e0f2a1de"/></dir></dir><dir name="Media"><dir name="Js"><file name="Abstract.php" hash="ac0376fb546b2b5466fc265db805500e"/><file name="List.php" hash="32c3e7a38a8464b96d36e6bf9bf70e10"/><file name="Product.php" hash="b4110492547aac402ab6299a24312c3a"/></dir></dir><dir name="Product"><dir name="List"><file name="Price.php" hash="3f5bfebd086a4a15766a92f5033711e7"/></dir><dir name="View"><dir name="Type"><dir name="Configurable"><file name="Swatches.php" hash="f6bbfd51d4c3cfa820120323e39e37d9"/></dir></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="b8ba8a4a2f67ce5ad3ad68be3fa8c669"/><dir name="List"><file name="Price.php" hash="6bd1fe6fe96ffd70d0056ae40a8d94ee"/></dir><file name="Mediafallback.php" hash="3b05c50121fee8862a6632aadea056d0"/><file name="Productimg.php" hash="71e7736d739d8ffed15bf7f20532180b"/><file name="Productlist.php" hash="3f04a102b5456a7d51b45c53b435dbf9"/><file name="Swatchdimensions.php" hash="e2ff093ff96ef0c759095bdc46964d52"/></dir><dir name="Model"><file name="Observer.php" hash="152d660d8b152d089cbd3bdb9b288be7"/><dir name="Resource"><dir name="Catalog"><dir name="Product"><dir name="Attribute"><dir name="Super"><file name="Collection.php" hash="537866e74b606cef3c8254a1bba6a288"/></dir></dir><dir name="Type"><dir name="Configurable"><dir name="Product"><file name="Collection.php" hash="00671910ae721b7e4b0c5fd65bd3f6b6"/></dir></dir><file name="Configurable.php" hash="d602e5e25165db00445513598b15ca19"/></dir></dir></dir></dir><dir name="System"><dir name="Config"><dir name="Source"><dir name="Catalog"><dir name="Product"><dir name="Configattribute"><file name="Select.php" hash="2d9fa3692840f71216f7753ab92121aa"/></dir><file name="Configattribute.php" hash="0d540fa0f5d44d102c7f48469b208a97"/></dir></dir></dir></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="8e694ee9e63658cf427583a0048b4298"/><file name="config.xml" hash="985c7d9dc014951dacbc8e087103bc50"/><file name="jstranslator.xml" hash="f2648cac1386d4ba4c1b5a8d699f66c2"/><file name="system.xml" hash="04c114ed08e34c9d258a900101f6423d"/></dir></dir><dir name="Connect"><dir name="Block"><dir name="Adminhtml"><dir name="Extension"><dir name="Custom"><dir name="Edit"><file name="Form.php" hash="e26414f64cedd1321ba8da2cc225ed19"/><dir name="Tab"><file name="Abstract.php" hash="dbd67c2564728e893753dd3dde4f6e0b"/><file name="Authors.php" hash="cd6621452faba0be529c8eda1fee984c"/><file name="Contents.php" hash="3c8132774831b661b0f47daa178cd2e8"/><file name="Depends.php" hash="9e380c2f0dde7c4a6586a3425d02cc72"/><file name="Grid.php" hash="2bc4b16f7dd704fbdef92fe506771ad9"/><file name="Load.php" hash="5763af2594d2e4761d05c2095afbdf7e"/><file name="Local.php" hash="051aafb1da88da0d4a20fac4e26a63f1"/><file name="Package.php" hash="0a3a063eb7a3d2deec9c58a10e8da807"/><file name="Release.php" hash="edfb87af6df90f33a3645bcc47a9630b"/></dir><file name="Tabs.php" hash="eaadde7d25104b25c86f6fc15be1072a"/></dir><file name="Edit.php" hash="77160823c353eec4ead9b1a91533de65"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="8f4525f02dbd792bca739def1a54c66b"/></dir><dir name="Model"><dir name="Extension"><file name="Collection.php" hash="e3edca7adb4900df4959dc0672842790"/></dir><file name="Extension.php" hash="eb7923ef67622eeba1fa0e13f77ab095"/><file name="Session.php" hash="b3668a4540c2ac629c3897ec494d8b4f"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Extension"><file name="CustomController.php" hash="aa399d37bc97765d0003b9f64f1107d2"/><file name="LocalController.php" hash="d51c4ca3b11eb15ec4bedb3d06361385"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="81c78906e15656a7a38c602e48bf39d6"/><file name="config.xml" hash="9c7adf5d5c9381d03a47ec8a4c0f1dd7"/></dir></dir><dir name="Contacts"><dir name="Helper"><file name="Data.php" hash="5b94241f71c741c1f1ec214614dddf0f"/></dir><dir name="Model"><dir name="System"><dir name="Config"><dir name="Backend"><file name="Links.php" hash="8e3b0397091a6e8ec8d46957fd413aa9"/></dir></dir></dir></dir><dir name="controllers"><file name="IndexController.php" hash="228964505f71cabc33ff172c01337f07"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6a077dd2f29239e1bd4d6f157047e3e0"/><file name="config.xml" hash="8c70aedd3e5f207e3a60aa96f2a2fdf5"/><file name="system.xml" hash="464371ade06413d71129ddf133c8138f"/></dir><dir name="sql"><dir name="contacts_setup"><file name="install-1.6.0.0.php" hash="4523d0df619c528b9fe09c217b1403fe"/><file name="mysql4-install-0.7.1.php" hash="5177d23b10f5c4f13c71611ccf498bc1"/><file name="mysql4-install-0.8.0.php" hash="75c9bc4e6b64ff6b66e5e38e8356ca13"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="329bc2138e3c827cbdc0e43e0ce2eab9"/></dir></dir></dir><dir name="Core"><dir name="Block"><file name="Abstract.php" hash="a4758c091f367ef85d0c6b4629fc1a34"/><file name="Flush.php" hash="1c81f1f58c42f8be5de5c18de7930004"/><dir name="Html"><file name="Calendar.php" hash="5a93eb0c181d3856b43b9427eb1fa2c7"/><file name="Date.php" hash="5e258063e63e9a671fcc62652a035b42"/><file name="Link.php" hash="91bc4e1065dba61f08d7ae10c82d05b9"/><file name="Select.php" hash="d5a535fd18cbb27e602f8ba5337a4d2f"/></dir><file name="Messages.php" hash="e7083c054bbdae836dad9a475dd872a0"/><file name="Profiler.php" hash="5c6fb9ba6ecaf6b6d63c36f3fb8aa3ad"/><dir name="Store"><file name="Switcher.php" hash="9739aed5c6f4102b74f4cbaa04f82d26"/></dir><dir name="Template"><file name="Facade.php" hash="7922ee4c04286ce3eb98059cadb267dd"/><file name="Smarty.php" hash="2ee2ff23f9699c3e5344d0cdad0a8682"/><file name="Zend.php" hash="8502425e486ee06d7990cf59e6c352ed"/></dir><file name="Template.php" hash="74ae08a5f164504e178563f3cb472717"/><dir name="Text"><dir name="List"><file name="Item.php" hash="78507c198e651856f6eb0b1de165d018"/><file name="Link.php" hash="ebe9462234b8e722dbb78d9c69733ea2"/></dir><file name="List.php" hash="56072cf10a5747c38a953322d8b9df1f"/><dir name="Tag"><dir name="Css"><file name="Admin.php" hash="84cc0d77b7246ec4057eb79e055fb8fb"/></dir><file name="Css.php" hash="edadd3969bfe2c3aeada707b3c2b3088"/><file name="Debug.php" hash="dbc940a9871b56c0c88248bfda2c3694"/><file name="Js.php" hash="2ed1784cb60e4278660f9aab1ab0cc8e"/><file name="Meta.php" hash="a571e8f423426d0a26eb64243f290a64"/></dir><file name="Tag.php" hash="482ad79a266f5892cf522c92e76fc9cf"/></dir><file name="Text.php" hash="ec7485a26b1b035ecb008fc39b637148"/></dir><dir name="Controller"><dir name="Front"><file name="Action.php" hash="9e79d3d56b4da2478017d92b78ed9398"/><file name="Router.php" hash="4f8912333744827c28d814ef62851699"/></dir><dir name="Request"><file name="Http.php" hash="d634129e9ed625819159358d4793ed11"/></dir><dir name="Response"><file name="Http.php" hash="ff98a825b04f4159bd56f60e129b6dc3"/></dir><dir name="Varien"><file name="Action.php" hash="0de4286af825455c29e455ff6a561304"/><file name="Exception.php" hash="323d91b1c5020d2f0f8e70923dfee51f"/><file name="Front.php" hash="6f29f0475c5eff2eb93f6e89b5e0c7cf"/><dir name="Router"><file name="Abstract.php" hash="e7d162ad38982815fe1e3be8d4b91e0e"/><file name="Admin.php" hash="90039dea8a57f01308861db0ada6b237"/><file name="Default.php" hash="28e45c061f48ffea9b2ed93658194456"/><file name="Standard.php" hash="8e46f8bd97db4693976a80e9f98db675"/></dir></dir></dir><file name="Exception.php" hash="a6a9dea6b1f59cba29564e44acc7bd88"/><dir name="Helper"><file name="Abstract.php" hash="be419d2ae92967b64101d8476c6e1b3a"/><file name="Array.php" hash="c2789f63f05681b449f7a6ccef2b1369"/><file name="Cookie.php" hash="de1f32bc6d23d9b1d79af8c3c17c2aaa"/><file name="Data.php" hash="61face3d2ea03f4c2e3c51f20fb18211"/><dir name="File"><dir name="Storage"><file name="Database.php" hash="70c2d3685fe216a9dfe47ce46d6d1121"/></dir><file name="Storage.php" hash="fec468db62c90dce4f84c1fecf4d904e"/></dir><file name="Hint.php" hash="bc7c4d51b8494323f9722f44384c4331"/><file name="Http.php" hash="c601ef1dc4b63f02651b78d7303bc231"/><file name="Js.php" hash="129ca78b4a4be5a0ad419fe668c847e4"/><file name="String.php" hash="e501986df9fef06fc8823dc3a45f975f"/><file name="Translate.php" hash="ddf28a39448666179aa0971c39e2d3a8"/><file name="UnserializeArray.php" hash="08bae1b3464e662df323a50c592a4a6b"/><dir name="Url"><file name="Rewrite.php" hash="7f6fcc21fc757de6784057e1747afac5"/></dir><file name="Url.php" hash="c894c0a3eacd745355468bdc1301fbdd"/></dir><dir name="Model"><file name="Abstract.php" hash="3f4befe189872445b531739b1346f9e0"/><dir name="App"><file name="Area.php" hash="48ae85f39015edd9e79ee189e9ebda2f"/><file name="Emulation.php" hash="4056aeb1d1db4398ee9d7f322e524b11"/></dir><file name="App.php" hash="6b0e193af8cdb2d74eb28ca98259cc88"/><file name="Cache.php" hash="1e0b6cac7b114332ec0a20cf6b53c4dc"/><file name="Calculator.php" hash="04b04f608cc3b4caf76d8f927b930b0f"/><dir name="Config"><file name="Base.php" hash="50ed2b4e270db833ee91c21d35986c65"/><file name="Data.php" hash="663eb167c35391f77caf53c07347d7cb"/><file name="Element.php" hash="830513274ce2e355317f0cd80b5cae96"/><file name="Options.php" hash="bf6e7351c30e291fcf28bfda7b73c9e7"/><file name="System.php" hash="dd0497c8e28c365b5b5f22c6b591a118"/></dir><file name="Config.php" hash="ccd5ec20ff7e8685dac7cbdd453ff280"/><file name="Convert.php" hash="7061bd4dfc8a68e3ee8bd97edb40ae37"/><file name="Cookie.php" hash="34ef9b7ad40572763d2c1dc298f9a49e"/><file name="Date.php" hash="55b340e0ea366ed6d73dc1d1527be844"/><dir name="Design"><file name="Config.php" hash="cc7204a98d3ab882e8910a99e280ed4c"/><file name="Fallback.php" hash="c2304f13391a3f18f17441f6ebc327cb"/><file name="Package.php" hash="11bf73f2ff2e0528aa06811a4e9f90c8"/><dir name="Source"><file name="Apply.php" hash="340087f0619d7666ab5737479a563876"/><file name="Design.php" hash="d712c236572a3891af359ec8b3e4e89a"/></dir></dir><file name="Design.php" hash="bc0cc433586f176a2016de5bea4ab66b"/><file name="Domainpolicy.php" hash="8ed8dcd059fdfdf2218fb458c3b44763"/><dir name="Email"><file name="Info.php" hash="3a1152c569ba371366c876ce09580ebc"/><file name="Queue.php" hash="5d5d01ffe9aa4d3592cf663ecf25142e"/><dir name="Template"><file name="Abstract.php" hash="11305d196235edfbd986e6a10ffb0d39"/><file name="Filter.php" hash="17b3201f056acaa8e0f8b112db52561e"/><file name="Mailer.php" hash="cd7fbc1e3be6945446d3d2386c7e8e24"/></dir><file name="Template.php" hash="58917615766c5e3238bf2debc539210f"/><file name="Transport.php" hash="dee3f7b1dac344ee7ce6908eb7acec3b"/></dir><file name="Email.php" hash="3a6a3ee260169b333be8bd75dcd945c7"/><file name="Encryption.php" hash="0f21e842fddf683bb1a0c0de4e4ea8ef"/><file name="Factory.php" hash="3c63a62a08dd427aca268d6abe4a52b3"/><dir name="File"><dir name="Storage"><file name="Abstract.php" hash="eead16bc8a93b7eb0fa96cccada9570c"/><dir name="Database"><file name="Abstract.php" hash="43838858cc42d70897c99b45195e4933"/></dir><file name="Database.php" hash="3d8c5c9c3c4c7db04223cc50cdef1283"/><dir name="Directory"><file name="Database.php" hash="572d4f449cb211963eb5b1864d80e1cd"/></dir><file name="File.php" hash="564a477c9a19e138cb0f9a87cdaec6f9"/><file name="Flag.php" hash="f7c9c910b8998b2d797276769838efce"/></dir><file name="Storage.php" hash="eb25e64a06a12a866b1d9e7c9f111a62"/><file name="Uploader.php" hash="d91a08273557273378beab0a6f9fb60d"/><dir name="Validator"><file name="AvailablePath.php" hash="51c35fa5e4ece45893f88ebba52529d4"/><file name="Image.php" hash="dbd45c9eea5f9d061917e3938abea16f"/><file name="NotProtectedExtension.php" hash="68e1493daf2ced574367115c92556640"/></dir></dir><file name="Flag.php" hash="12f33ffabeae1142bd5bd12bc25de002"/><dir name="Input"><dir name="Filter"><file name="MaliciousCode.php" hash="49d2e9a0dbcc0c8e220628885bab6640"/></dir><file name="Filter.php" hash="5fd5d9338ca0082ff98912c3eb9359c8"/></dir><file name="Language.php" hash="8fddf850daf6897171bb6ba4c6f15789"/><dir name="Layout"><file name="Data.php" hash="9da1afc128962e84044f4463c44ed558"/><file name="Element.php" hash="118b879171c589409b9fe40dd4629dab"/><file name="Update.php" hash="bd1af87aa563228ffd86fe622991ea72"/></dir><file name="Layout.php" hash="9d2c128a29924244431610cd1cf69f0a"/><dir name="Locale"><file name="Config.php" hash="83ad0ba769761ebcced7e5b5aeada4c9"/></dir><file name="Locale.php" hash="fc771d4a95e27648181e69bab7e7155d"/><dir name="Log"><file name="Adapter.php" hash="7a8401e4d25e0da113d0de139ef9a9e8"/></dir><file name="Logger.php" hash="d9ae8759b479ff92d354bc99d7ef4979"/><dir name="Magento"><dir name="Api"><file name="V2.php" hash="407d967185263a58ed75caf3a2d4f701"/></dir><file name="Api.php" hash="25df5649d1cd7953941dcf13df2e3a7f"/></dir><dir name="Message"><file name="Abstract.php" hash="8c3a895255d819b98a37499bad00bf76"/><file name="Collection.php" hash="e0b87967a18fb8c9bf9835f95bf0d2a1"/><file name="Error.php" hash="5f899d95612fdda8df4bbc2ea457dfd5"/><file name="Notice.php" hash="79ab2b274b750be42ba95dc67c0d12a7"/><file name="Success.php" hash="bd6a19eb5801bda3b13238022bdd3718"/><file name="Warning.php" hash="1e6b045c0cfb6108278a65fc3c56a3d4"/></dir><file name="Message.php" hash="22fefaca51c85298d2b9840d0dcf8c2b"/><dir name="Mysql4"><file name="Abstract.php" hash="a5b0dffc0523feb7ac71b98d4ecc8689"/><file name="Cache.php" hash="d153d94172471184bd189ff347569ecd"/><dir name="Collection"><file name="Abstract.php" hash="acbea581a60f43d5a4b84785a114ca6a"/></dir><dir name="Config"><dir name="Data"><file name="Collection.php" hash="e85b8dcb782634137f8b6a5616c16adb"/></dir><file name="Data.php" hash="970870fb626f85630c78ed1136284e51"/></dir><file name="Config.php" hash="bc3c014b73d5ae8e24961b289ab0ebb2"/><dir name="Design"><file name="Collection.php" hash="48943d6c564b7db32e4c09d69f271dbb"/><dir name="Package"><file name="Collection.php" hash="293f71c1a6f67e1e3b4bf6c85782c360"/></dir><dir name="Theme"><file name="Collection.php" hash="636491bc7c6f569f96c5005022d242fb"/></dir></dir><file name="Design.php" hash="692036df13b9d9c1058b550f52483f69"/><dir name="Email"><dir name="Template"><file name="Collection.php" hash="f23e024d78302a7f9f0c0be8b0694c22"/></dir><file name="Template.php" hash="846c3b75b324d575200359a7b8be2220"/></dir><dir name="File"><dir name="Storage"><file name="Abstract.php" hash="49eb25d34e39054e01b0b7d4d741323a"/><file name="Database.php" hash="1fd0f24f483a7c10a977fdd27fe715e2"/><dir name="Directory"><file name="Database.php" hash="bd191938529bab16adb6def749799b9b"/></dir><file name="File.php" hash="d32e4e94fa8a68db9fbf8c617da0b066"/></dir></dir><file name="Flag.php" hash="14ac206457b121fcc7df5ea9832d38b5"/><dir name="Language"><file name="Collection.php" hash="8c51e96c56e66e3911208a2317628c45"/></dir><file name="Language.php" hash="79ba6c8a50b5f52ab05668ca361d58d4"/><file name="Layout.php" hash="2a0208447b0ce6ef1505ba9868f4b590"/><file name="Resource.php" hash="3f3896a0e511a1e4591dfb9aefada380"/><file name="Session.php" hash="c912515bf0c0dff233e7d64b38735d9a"/><dir name="Store"><file name="Collection.php" hash="2b66b1cec8018315ba307bb3c5b60159"/><dir name="Group"><file name="Collection.php" hash="351d169b4d8eb2ef01d5db074252ab59"/></dir><file name="Group.php" hash="9d9f26a9133487df0615352335df733c"/></dir><file name="Store.php" hash="8dfb196abb20d16f825095dfdae70c44"/><dir name="Translate"><file name="String.php" hash="2808fdec826d5c451b11e3d798eaf20e"/></dir><file name="Translate.php" hash="6f8cb9fd5e0edafd2ea9bc56633e14f8"/><dir name="Url"><dir name="Rewrite"><file name="Collection.php" hash="faf8681e97b36e6c3f47af3183064f46"/></dir><file name="Rewrite.php" hash="130d9e44375487c19b51eb4c64b117d5"/></dir><dir name="Variable"><file name="Collection.php" hash="b2f02972a0dfd4f1ea42f306927eaf54"/></dir><file name="Variable.php" hash="00f32aad2d2e2cf3eddc6206ede0cc6a"/><dir name="Website"><file name="Collection.php" hash="5b62abbb214c52c22bdb72d403e9e75e"/></dir><file name="Website.php" hash="cdb13ace26831a84c72d61b06f9cb8b2"/></dir><file name="Observer.php" hash="effe59867a72d6e8d69652d85069fb2f"/><dir name="Resource"><file name="Abstract.php" hash="6249b6cd53449f175086e864fc701dd7"/><file name="Cache.php" hash="f6cdcf5c628073e9de24a12699dea566"/><dir name="Config"><dir name="Data"><file name="Collection.php" hash="6e12f1d9bed4f1199509a106ec4c1ab0"/></dir><file name="Data.php" hash="334c7f498c9f362160456d5afa2e4f61"/></dir><file name="Config.php" hash="628fc6ad70658c502e01d43fb01cc428"/><dir name="Db"><file name="Abstract.php" hash="70742e4f98224203c04a01836d23c1c5"/><dir name="Collection"><file name="Abstract.php" hash="45689c0f4f1a0e1a016fe72610a9c2b4"/></dir></dir><dir name="Design"><file name="Collection.php" hash="2786593e20815b30b8b372717b78fcd4"/><dir name="Package"><file name="Collection.php" hash="3d7a17b1b7abe93afeb6ad623f8235c1"/></dir></dir><file name="Design.php" hash="5cddce7c05e36d1ce1aef2c4ef950d9e"/><dir name="Email"><dir name="Queue"><file name="Collection.php" hash="a0f9a4bec6ed16c4fcc554dbe958c862"/></dir><file name="Queue.php" hash="281cd39e5d3edf692a5604e722c20b0c"/><dir name="Template"><file name="Collection.php" hash="7fcbb63a73cfab972415daf18e35aecb"/></dir><file name="Template.php" hash="708e3b8fd6327cdc960659b90d82275c"/></dir><dir name="Entity"><file name="Abstract.php" hash="99e23e03c62b44e02b581d78c8b79cbd"/><file name="Table.php" hash="6335ecad183a1955ac12bcb0fa581773"/></dir><dir name="File"><dir name="Storage"><file name="Abstract.php" hash="76e4cc5f176c054926e2006b90f63635"/><file name="Database.php" hash="52245f989927dc671eb9182a8e35b007"/><dir name="Directory"><file name="Database.php" hash="11b6a6f504540e2e0e0ac53a32c0f20b"/></dir><file name="File.php" hash="bc0da83b2bff3932edccd77e5e79fcc4"/></dir></dir><file name="Flag.php" hash="e61fd49103e42a38d912f9a11ca4fd8c"/><dir name="Helper"><file name="Abstract.php" hash="fea98c00b89d7976ef18d0961346b212"/><file name="Mysql4.php" hash="c6e9f97258577a6a4c587f90d99341dd"/></dir><file name="Iterator.php" hash="a210d63d17e893b907e96190bfa38fae"/><dir name="Language"><file name="Collection.php" hash="0d4a2657ee3c590f932c66b0bae934c9"/></dir><file name="Language.php" hash="c24c716d7dcd561bc5b729f1423322cc"/><file name="Layout.php" hash="51de17855da5063e25941ee9b891acf5"/><file name="Resource.php" hash="54558489eaeaebcc7160ecbcfdb3e67e"/><file name="Session.php" hash="638889014525aa94eeea00ab64a49cfd"/><dir name="Setup"><dir name="Query"><file name="Modifier.php" hash="73d0f717ecf8901097a15ea8f3d43504"/></dir></dir><file name="Setup.php" hash="5a4a58fe4bd1a2a3f642ef46cc81c4e9"/><dir name="Store"><file name="Collection.php" hash="9a7cc552adb5eb04f5576bfdbadae03d"/><dir name="Group"><file name="Collection.php" hash="cf663e2dda1c1130e0e47d59b686ee92"/></dir><file name="Group.php" hash="ab767197a0686013520ed7ad64c1bcb5"/></dir><file name="Store.php" hash="724e5fbbcdeae9491ed48a969477714d"/><file name="Transaction.php" hash="f2fbd76d08845ca1b3ec53e12230c668"/><dir name="Translate"><file name="String.php" hash="a346efbf76625f7b3399f40d62ab228f"/></dir><file name="Translate.php" hash="6f6549e2a389e08c68aadeb22e9f2b15"/><dir name="Type"><file name="Abstract.php" hash="a8e391ec218b55760800284ae511f37a"/><dir name="Db"><dir name="Mysqli"><file name="Setup.php" hash="63c50624b4fb9ac00a780dc0fac2a96e"/></dir><file name="Mysqli.php" hash="0b741fdb7e318bce2b61d25a2da498a8"/><dir name="Pdo"><file name="Mysql.php" hash="00a917b3cb7eb4f8c72ccc4805eec0f3"/></dir></dir><file name="Db.php" hash="1c91391d4ddee72a30df5a684a2927b2"/></dir><dir name="Url"><dir name="Rewrite"><file name="Collection.php" hash="2cb8f9d4f734a0937d1f0b356d3a1da8"/></dir><file name="Rewrite.php" hash="ccc4dcdc077ca7ce028295faa7f1ac1b"/></dir><dir name="Variable"><file name="Collection.php" hash="b7c09727d07c9b7fe0fc1ba7e89cfdb0"/></dir><file name="Variable.php" hash="ec4b046ce49519d63a091a4f48e2df81"/><dir name="Website"><file name="Collection.php" hash="e074d4b0943374022b3ce225bb4d26e2"/></dir><file name="Website.php" hash="0cf266c0cd26f8d0e4f3d1f376fe6b0a"/></dir><file name="Resource.php" hash="0d494aef71eb1df19e34cdd6581a2092"/><dir name="Session"><dir name="Abstract"><file name="Varien.php" hash="9264a60587c181789b6021eb96330e72"/><file name="Zend.php" hash="5ca67559ac0904e1474b7ce6686056d9"/></dir><file name="Abstract.php" hash="e3bbbe8c2fe16e0a8830a7ca57f18b39"/><file name="Exception.php" hash="2ce0d2e3923104ec5f9e041285876f41"/></dir><file name="Session.php" hash="2f427ed8f6303d1dc9573dc76920c11a"/><dir name="Source"><dir name="Email"><file name="Variables.php" hash="ccd018681dfa5eead7152f379714ffa5"/></dir></dir><dir name="Store"><dir name="Api"><file name="V2.php" hash="18ee7c33dd0a8ff7eca9b5b82fdcd30b"/></dir><file name="Api.php" hash="973ae7808f90acc5f50eeef25b5a0d4a"/><file name="Exception.php" hash="f6043d3c13b888eb4c57fa55b26fb49a"/><file name="Group.php" hash="53414869d792ce401cd539ae795cc549"/><file name="Observer.php" hash="eb7511c32941f027fc485b860b1805c0"/></dir><file name="Store.php" hash="234b1bad13494763cbb47f3addcadde9"/><file name="Template.php" hash="aa933216eb7f4c0f228e6f74866b9974"/><dir name="Translate"><file name="Expr.php" hash="5e9c06ad00e633bcc4a9592a5120ecec"/><file name="Inline.php" hash="bedb481b05c8d3a721cb5c52a0f4a16b"/><file name="String.php" hash="4934297c507c27507ace7d898cfc3ae7"/></dir><file name="Translate.php" hash="bbeaa42c48a253f0366bc8f43c162796"/><dir name="Url"><dir name="Rewrite"><file name="Interface.php" hash="f3d5ccdada27a76c2a7c15cf926973d5"/><file name="Request.php" hash="f40827c0146b53cd6e93ee3f5955035f"/></dir><file name="Rewrite.php" hash="a00559f1795bb44f61fc43c9923c2a0c"/><file name="Validator.php" hash="04b9e2c0fb7bf6e4337335fdea3ff759"/></dir><file name="Url.php" hash="1078f2a6231e5c9bc2f05db23b41d239"/><dir name="Variable"><file name="Config.php" hash="affa171299550c5558dfcc94c5e9d8ee"/><file name="Observer.php" hash="501bd5408054c499673c515e679545f5"/></dir><file name="Variable.php" hash="7b91ae3d55518b0c2f8de6c8363c0e59"/><file name="Website.php" hash="20477ae06b1c27fd6a60fb8da6fb7b04"/></dir><dir name="controllers"><file name="AjaxController.php" hash="5cf58eec53bbcbd449e23ac865daf7c9"/><file name="IndexController.php" hash="edbad5b5eb4a268c83859cf51d64610b"/></dir><dir name="etc"><file name="api.xml" hash="90a4f686b4b8900874eab726e149c880"/><file name="config.xml" hash="cddd9613ac3fa8f9d6e41b08986814e1"/><file name="jstranslator.xml" hash="7759bdffe5bb74d5d358df45d3fe3804"/><file name="system.xml" hash="7a58d8527b930fa01f3278ca2403d532"/><file name="wsdl.xml" hash="79501d6ccf39846b5dd551e85880dcb8"/><file name="wsi.xml" hash="31fa195d527181c946019bcd44d819d6"/></dir><file name="functions.php" hash="c22b0564fec36d37fe48754cabb0f5c2"/><dir name="sql"><dir name="core_setup"><file name="install-1.6.0.0.php" hash="207fc73211835ecd5b49093f69bab4d1"/><file name="mysql4-data-upgrade-1.6.0.2-1.6.0.3.php" hash="1d4fcc69c6f9fa8067678977b0dc5c95"/><file name="mysql4-install-0.7.0.php" hash="d83334de1789e098603fefa69f39f282"/><file name="mysql4-install-0.8.0.php" hash="7061c4a797513e811c7efe7c6f735c63"/><file name="mysql4-upgrade-0.6.26-0.7.0.php" hash="1dd91b18dfe36b82216fe1c6ed9e4a0f"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="19e29347f075f6189ad00f3c4c012e56"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="1143d68867fd0ccbf562d4aec21660fd"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="169fab24feb57a49a42daded0d383958"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="a6600be894f2532c5cef50cec2007c0b"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="e793862db62739a013029bc4c3abef6b"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="f60564dbab8975c5a72aba870e31bd22"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="ea7ea8fa28524f360df30308e6557c97"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="d87fff0113dca61276ec2f7decb3e8fa"/><file name="mysql4-upgrade-0.8.0-0.8.1.php" hash="b4c44da961498683ee9f7f0ec6aa125e"/><file name="mysql4-upgrade-0.8.1-0.8.2.php" hash="825e321edf450059ea62412a78fa4b11"/><file name="mysql4-upgrade-0.8.10-0.8.11.php" hash="e0efe65cf9d2d987c7b83e95bdd4b34f"/><file name="mysql4-upgrade-0.8.11-0.8.12.php" hash="7d6c21a027ba7fb754ec92577dad3ef7"/><file name="mysql4-upgrade-0.8.12-0.8.13.php" hash="bcdaa98ee4d7c83c7568c063bda07699"/><file name="mysql4-upgrade-0.8.13-0.8.14.php" hash="eb967ee83a8c7bd5b0cdefb693ba4062"/><file name="mysql4-upgrade-0.8.14-0.8.15.php" hash="e1f09afd0caef193b05453634390b8c5"/><file name="mysql4-upgrade-0.8.15-0.8.16.php" hash="396c159dac306c08379918f06e824b2f"/><file name="mysql4-upgrade-0.8.16-0.8.17.php" hash="0a8d8ae910028fd5aa59c229f919d07f"/><file name="mysql4-upgrade-0.8.17-0.8.18.php" hash="64ef5bd40aab9d958211614b4f68a568"/><file name="mysql4-upgrade-0.8.18-0.8.19.php" hash="88d0c45baab863a737b2d15973294322"/><file name="mysql4-upgrade-0.8.19-0.8.20.php" hash="ba233f3cda242eed69e6793382dfda47"/><file name="mysql4-upgrade-0.8.2-0.8.3.php" hash="bbbb2b3554505abb07a1988a87b8d9d1"/><file name="mysql4-upgrade-0.8.20-0.8.21.php" hash="75bf4b1ffde80714098dc3bb4fe4e2de"/><file name="mysql4-upgrade-0.8.21-0.8.22.php" hash="77fdd776cd12f1114eaa6d7f85f2d20f"/><file name="mysql4-upgrade-0.8.22-0.8.23.php" hash="2704ddfaaec17ac0a99883cd91072ea6"/><file name="mysql4-upgrade-0.8.23-0.8.24.php" hash="0e70926bb4262b24cbdfa1e947c7eddd"/><file name="mysql4-upgrade-0.8.24-0.8.25.php" hash="2321dd3ebdb9898d6616dd324a7ef54a"/><file name="mysql4-upgrade-0.8.25-0.8.26.php" hash="e0ebe20e9ab0dff68647ab00fb9f0c66"/><file name="mysql4-upgrade-0.8.26-0.8.27.php" hash="85d3080545d141ca6ff8bcbdff1b514b"/><file name="mysql4-upgrade-0.8.27-0.8.28.php" hash="48f40823eefa729259add6b2f81f366d"/><file name="mysql4-upgrade-0.8.3-0.8.4.php" hash="1a5ec8dccd994ad3761e68e1cd588372"/><file name="mysql4-upgrade-0.8.4-0.8.5.php" hash="240256a88580d96a50ca0fd833a8c7f8"/><file name="mysql4-upgrade-0.8.5-0.8.6.php" hash="f7275b1915e80d7296113a3dfe725cf8"/><file name="mysql4-upgrade-0.8.6-0.8.7.php" hash="13df9d23e39c7570e1cdb18abf1e996e"/><file name="mysql4-upgrade-0.8.7-0.8.8.php" hash="8b20971ed0197db54611f227413ff239"/><file name="mysql4-upgrade-0.8.8-0.8.9.php" hash="fb213c2773f2f2cdd2cfd83bd4077ea8"/><file name="mysql4-upgrade-0.8.9-0.8.10.php" hash="120fe10e615eb5943b42a2ca06a3336f"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="667bf08e56b52f9eb049d177abe5b1a0"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="078c49764308e40b133039ae907044fb"/><file name="upgrade-1.6.0.2-1.6.0.3.php" hash="3e1d4dae0a1de35ac70551d438e50a58"/><file name="upgrade-1.6.0.3-1.6.0.4.php" hash="c276a2413a5af5bf2ef31270d20f6afe"/><file name="upgrade-1.6.0.5-1.6.0.6.php" hash="86d0277801776f2fde3fd53a4b85914e"/><file name="upgrade-1.6.0.6-1.6.0.7.php" hash="1fcc06dca2bc742c1c8cb4730d19f951"/></dir></dir></dir><dir name="Cron"><file name="Exception.php" hash="698e1ae4ab5e8ea37299653add15f225"/><dir name="Helper"><file name="Data.php" hash="9eef300858d951cebc7297535a2768e8"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Schedule"><file name="Collection.php" hash="af9a782cc7af9b9770bd820e092dd9b6"/></dir><file name="Schedule.php" hash="5214e7c13aa7365707a7040e97533ba1"/></dir><file name="Observer.php" hash="b27044c1c30795906f10c5c8bab1dee7"/><dir name="Resource"><dir name="Schedule"><file name="Collection.php" hash="031a856a7e5f60d8d7ddb9195707a19c"/></dir><file name="Schedule.php" hash="5466ff7798ca4a0ee0382a58c41ae6b3"/></dir><file name="Schedule.php" hash="04144e52081a8cf3cab6d3f78c812d77"/></dir><dir name="etc"><file name="config.xml" hash="46d440f1e6ee5ed818a6efd37c0d7d2e"/><file name="system.xml" hash="bad12ffe57452fef65dec8c8b2b638c2"/></dir><dir name="sql"><dir name="cron_setup"><file name="install-1.6.0.0.php" hash="272c23770f78ad5b1eb97345a5b9ce02"/><file name="mysql4-install-0.7.0.php" hash="1f39f29137ac0af690ea2b818bf32bdb"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="acad1a38a1dd136af831fcefc5c72710"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="46911e5c2891db7f51148ca7750b16ee"/></dir></dir></dir><dir name="CurrencySymbol"><dir name="Block"><dir name="Adminhtml"><dir name="System"><file name="Currencysymbol.php" hash="e76a96fbb861ca950eb63de00bdf4a9f"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="9a8845e99868d20d9c8306511ecf98ba"/></dir><dir name="Model"><file name="Observer.php" hash="b95780e39abdb087465e8e003b08969d"/><dir name="System"><file name="Currencysymbol.php" hash="e5ee2b0c099200097bca1cb992ea2a1e"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="System"><file name="CurrencysymbolController.php" hash="63fde0a3389998317587a527401f6070"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="10a63d13f96c5fe11c378a589e538635"/><file name="config.xml" hash="80547d477b4c01ed8a9d1e12a9eaa20f"/></dir></dir><dir name="Customer"><dir name="Block"><dir name="Account"><file name="Changeforgotten.php" hash="2165e8674836d3f6077b483dde55a524"/><dir name="Dashboard"><file name="Address.php" hash="bb468d82e2fc11e7e04f257bc726e146"/><file name="Block.php" hash="07ed7e21b9e1eeb23da49076b69a594b"/><file name="Hello.php" hash="94b9169f9ae6cdd0a55e4eb0681404de"/><file name="Info.php" hash="b1680c05fed7931f2db96b524f70f1cf"/><file name="Newsletter.php" hash="1307cd50a5fd5adbdc16e76492915152"/><file name="Sidebar.php" hash="3f294c394525e981a3b054626ea8e368"/></dir><file name="Dashboard.php" hash="188cda8616e1d4d9023ac4b8bed5d66b"/><file name="Forgotpassword.php" hash="90e79520d13aed885e774160a42fe01b"/><file name="Navigation.php" hash="026681e321fbbad6ad29d815b0faac9f"/><file name="Resetpassword.php" hash="ed7f01bb5386900ee50245ab36016ec1"/></dir><file name="Account.php" hash="396fc3f7fb48be6a3538b04135d875e4"/><dir name="Address"><file name="Book.php" hash="0b171d4bd5ad21144aeec5b81bba61f0"/><file name="Edit.php" hash="c4b0c1d640b1b0b935ab96529e7b21f8"/><dir name="Renderer"><file name="Default.php" hash="125728a42ac70607881ed13d88b00983"/><file name="Interface.php" hash="24e732400bee61ac8323c7ef40ea2207"/></dir></dir><dir name="Form"><file name="Edit.php" hash="feb426e2d7fb6e4bcec1bc5988266523"/><file name="Login.php" hash="2d66cd34739d5a311d05fa91e512f00c"/><file name="Register.php" hash="d851618f8c530b3b02e81f41b6a1d13a"/></dir><file name="Newsletter.php" hash="1d134f5c6cdbc5dfd7c0df6ee075cc43"/><dir name="Widget"><file name="Abstract.php" hash="37a2d217bd8542ec907776eb292e12dd"/><file name="Dob.php" hash="3960da7db95ac69ac800ac021137cd2e"/><file name="Gender.php" hash="5780729cb26d78623fa19fff5ab5cfc0"/><file name="Name.php" hash="c678280a641859850a38743bf5f0702a"/><file name="Taxvat.php" hash="4d45092a70e3fb94ec24c346b8aeda22"/></dir></dir><file name="Exception.php" hash="dca1ff1b1dfbf189979aa500f9d48158"/><dir name="Helper"><file name="Address.php" hash="d8ab02f0954687c02146356ad289289e"/><file name="Data.php" hash="e6d0f585162c55285ce4407a56df52cc"/></dir><dir name="Model"><dir name="Address"><file name="Abstract.php" hash="c8b4c4c792d297cec5f245c0efdda8b4"/><dir name="Api"><file name="V2.php" hash="0df7a6b269c9c66de3f507b12539cc4e"/></dir><file name="Api.php" hash="7cf53451b28c4aef47b4a3bf1797a900"/><file name="Config.php" hash="d3b2fda5b82d2fdbcdc7266771cba0c1"/></dir><file name="Address.php" hash="04170cb7363debfca14d81510fdbe38b"/><dir name="Api"><file name="Resource.php" hash="cec904fdca1932b6f939931ec75512dc"/></dir><dir name="Api2"><dir name="Customer"><dir name="Address"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="47f7475beed2029f8249dc85dbacc003"/></dir><dir name="Customer"><file name="V1.php" hash="c750635dfeb399f3191648769749b401"/></dir></dir><file name="Rest.php" hash="d7b1d8b2a87435993f9ad1720902533f"/><file name="Validator.php" hash="723dcf84a7c3041e4a65b61028af8238"/></dir><file name="Address.php" hash="982ca3e8815193ab93bcc74a2cd4a4ff"/><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="14dcb7f30dc8307cb4ef66ee010ab461"/></dir><dir name="Customer"><file name="V1.php" hash="2fc46be21aa72477180284a4270607f2"/></dir></dir><file name="Rest.php" hash="76b670c80fcb2e755279f08cd97db60c"/></dir><file name="Customer.php" hash="bb2083444d7dcf5ae9851c533979ae54"/></dir><dir name="Attribute"><dir name="Backend"><dir name="Data"><file name="Boolean.php" hash="a83b90a0cadbbaf0a6a2a0ca97f42ef7"/></dir></dir><dir name="Data"><file name="Abstract.php" hash="d6fa9133e31c8836c7cc86e678bf6e17"/><file name="Boolean.php" hash="3c81d8a93839757c93e2dbf672de7fcc"/><file name="Date.php" hash="bee8757ec8cd9e7d6cf6227e2412b4ff"/><file name="File.php" hash="d3c09e55bb7f81c617654e96f9fd36f1"/><file name="Hidden.php" hash="9167d59b97ba65de906c9bcea4cbbb12"/><file name="Image.php" hash="1ad8011e210c69f928179646e930aade"/><file name="Multiline.php" hash="0b9a4dd5ebd3dac1e6d9cfbd26dcd314"/><file name="Multiselect.php" hash="f3dd8e4a58e04ba6fed979909fe29eae"/><file name="Postcode.php" hash="0ebcfeb413f684090ad77986637b46a9"/><file name="Select.php" hash="78ea1fea99b14dadf1d16c10bd7a2bbc"/><file name="Text.php" hash="774686a2285b7b1d8d3349d479851ed4"/><file name="Textarea.php" hash="e6bfed03f06a397ac0e9a9398f61e03e"/></dir><file name="Data.php" hash="27aaf4bd021dc85a3481ce1795c3fe90"/></dir><file name="Attribute.php" hash="294c4b2feae71fe4ccefb29272bf07db"/><dir name="Config"><file name="Share.php" hash="7c686c3441868fcc6b13428e74b630c0"/></dir><dir name="Convert"><dir name="Adapter"><file name="Customer.php" hash="a48b5b89d865057a61899c4db960c9ca"/></dir><dir name="Parser"><file name="Customer.php" hash="f454ce0b343c8b6db2344c1ecdc07c56"/></dir></dir><dir name="Customer"><dir name="Api"><file name="V2.php" hash="1b0032263dfe9dc3b454df91f5d5b59c"/></dir><file name="Api.php" hash="1879b627678e095d9201ace5f6c87d20"/><dir name="Attribute"><dir name="Backend"><file name="Billing.php" hash="c790e51101d66c9f15f83063674d2ab0"/><file name="Password.php" hash="ca5cf2dd24a73edc132006c033d605a2"/><file name="Shipping.php" hash="e3115593c9775f827fcec44763c129b1"/><file name="Store.php" hash="d0a6243dacb6ab1dee73fa06a9d34ed4"/><file name="Website.php" hash="efadf3585544e5a303131aed29902150"/></dir><dir name="Source"><file name="Group.php" hash="9021fce34cccaf51aa89415da4f93f07"/><file name="Store.php" hash="bbd92c75ab1afa336b2d5ba6220fe931"/><file name="Website.php" hash="2f20de5cca41757bc73621b1841b83bc"/></dir></dir></dir><file name="Customer.php" hash="9c05aa3e6820feae8280fbfa0a940c9b"/><dir name="Entity"><dir name="Address"><dir name="Attribute"><dir name="Backend"><file name="Region.php" hash="e7bb13fac9313d6244a0773cebee9b90"/><file name="Street.php" hash="3adb0e7e180f12d16e08871b46d9c54d"/></dir><file name="Collection.php" hash="df7147b4c1eabf10f0ae9098e7eca5dc"/><dir name="Source"><file name="Country.php" hash="20ba461b79f13a30f5c01fd8d2f7dca2"/><file name="Region.php" hash="a2b67e84fa17a62b5d908d2b3a2c1778"/></dir></dir><file name="Collection.php" hash="949fc8a7a58aae1c8b9c59a7f2a8a182"/></dir><file name="Address.php" hash="0492fcbb856189d00d66a2dd6ac7fd72"/><dir name="Attribute"><file name="Collection.php" hash="2b7624138b5c4c0d743673be04edf040"/></dir><file name="Attribute.php" hash="2cb29633e3866836fca7d65f4fb362ee"/><dir name="Customer"><file name="Collection.php" hash="7ca7ee4b50bd1f60b166ff2d1888f255"/></dir><file name="Customer.php" hash="20127bf34252803f5f48b366a22e9f4e"/><dir name="Form"><dir name="Attribute"><file name="Collection.php" hash="6c7584593f3f6df841e62d0753f16c79"/></dir><file name="Attribute.php" hash="3dcc90e92a126e425625268a4af3708d"/></dir><dir name="Group"><file name="Collection.php" hash="c75ecbc772ba3e31982682709c5e9b75"/></dir><file name="Group.php" hash="65b79330116831293f4a76a2d2d63875"/><file name="Setup.php" hash="ce1184ded6a42aa443a5c8c43c219390"/><dir name="Wishlist"><file name="Collection.php" hash="e3db89598d9088101f81c276f491655c"/></dir></dir><file name="Flowpassword.php" hash="6dab53fb9b686fbe5ff7b6c412eb5442"/><file name="Form.php" hash="578b7921ecb8a6e47d9fecfe8496dc72"/><dir name="Group"><dir name="Api"><file name="V2.php" hash="777166c9c186dcb5895e85b5dfd5db0c"/></dir><file name="Api.php" hash="94648fc954036011fb28b18732d196dd"/></dir><file name="Group.php" hash="e2014a157641a22edb354a3aa99ad7b6"/><file name="Observer.php" hash="3f0671a7e623f6b5bb32235175ab0dd1"/><dir name="Resource"><dir name="Address"><dir name="Attribute"><dir name="Backend"><file name="Region.php" hash="017256abf7f99dae72fd05961d812e19"/><file name="Street.php" hash="27145361c9523b9c3e0f1ed68c19b6c5"/></dir><file name="Collection.php" hash="f7ec8cff4bb7c41ae82e5ee7918bed20"/><dir name="Source"><file name="Country.php" hash="2ae63824effb51e25e156906253a9d3c"/><file name="Region.php" hash="24b82fcde9181ab34170afd450d127aa"/></dir></dir><file name="Collection.php" hash="dfcd8f8884a9847982800bf0948ec20b"/></dir><file name="Address.php" hash="763b668489edfb8432a70b38cb828fda"/><dir name="Attribute"><file name="Collection.php" hash="d66a1141fbc70acf24d179600b9c61c0"/></dir><file name="Attribute.php" hash="0e188694a33b3acc70ec71ec5871a75b"/><dir name="Customer"><file name="Collection.php" hash="a29158a6b9b5b35d8e6267d73cb02ce4"/></dir><file name="Customer.php" hash="478d8f4f866c20b86bcc1363744a9813"/><dir name="Flowpassword"><file name="Collection.php" hash="78d4510d187abac4a3891054b6ae7034"/></dir><file name="Flowpassword.php" hash="bd2057a2d3ac57f00d4d582674a7ad1f"/><dir name="Form"><dir name="Attribute"><file name="Collection.php" hash="5572cab9a0e1e3f5417cc08ce5a50e29"/></dir><file name="Attribute.php" hash="cb0b5cf6af662e3b4e71af72d1885244"/></dir><dir name="Group"><file name="Collection.php" hash="3b47d4c152cabece1b1328bee3b70143"/></dir><file name="Group.php" hash="2a109f070024d1eac7de055ce89e1129"/><file name="Setup.php" hash="e92903e8249c89f34fe325bb3afcf981"/><dir name="Wishlist"><file name="Collection.php" hash="568caa7c996736d83fa1b3fd16780a47"/></dir></dir><file name="Session.php" hash="f6c22413f7f9f6cbcf83314e0e7157ff"/></dir><dir name="controllers"><file name="AccountController.php" hash="11ba2ddc87439e592be2459e64bee992"/><file name="AddressController.php" hash="0f0692985f38e2fbc4b895910e80c71f"/><file name="ReviewController.php" hash="09c4a76238c9aa2f6a53679ca1b1ca70"/></dir><dir name="data"><dir name="customer_setup"><file name="data-upgrade-1.6.2.0.2-1.6.2.0.3.php" hash="5e2bc7393945d4c1f916c3beb51c9a0d"/><file name="data-upgrade-1.6.2.0.4-1.6.2.0.5.php" hash="238f41bdbe43950cfec729c37bbb48d0"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="6fcdaaa7fde1907e2385bb0343c1bed8"/><file name="api.xml" hash="12578cdd5eb4f083910ecf88408b4439"/><file name="api2.xml" hash="ead1ed09da00aa66b9aa877be5d1e084"/><file name="config.xml" hash="ea2233e4eb4bb61ef86173320d64e251"/><file name="system.xml" hash="51c792ceb49448faece9b1a325b70204"/><file name="wsdl.xml" hash="b31ebf1de4a58469781b383f455991f5"/><file name="wsi.xml" hash="4c81aee30c525677be5c38e078b98408"/></dir><dir name="sql"><dir name="customer_setup"><file name="install-1.6.0.0.php" hash="d2954a98182da41fde0adbfcbaffe195"/><file name="mysql4-data-upgrade-1.4.0.0.11-1.4.0.0.12.php" hash="c33fd77867bcf4f13c8c06ff3d7b7024"/><file name="mysql4-data-upgrade-1.4.0.0.13-1.4.0.0.14.php" hash="343415802d404a260070b7e098105e38"/><file name="mysql4-data-upgrade-1.4.0.0.7-1.4.0.0.8.php" hash="cbaf3411b9c93fb4c11368359d55199c"/><file name="mysql4-data-upgrade-1.4.0.0.8-1.4.0.0.9.php" hash="1916487374f08a6438c203688a682f11"/><file name="mysql4-install-0.7.0.php" hash="fd9b5478bfda45834810ca7d12a4743d"/><file name="mysql4-install-0.8.0.php" hash="804d79a4d498b6ff315d9234d30bcd20"/><file name="mysql4-install-1.4.0.0.0.php" hash="f69dca07689d5184dc47a55170559b62"/><file name="mysql4-upgrade-0.6.1-0.7.0.php" hash="94edeef8a4d892b308d1435a627dc26b"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="b078ab70e40aeb9d8e8e5b2500ce9394"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="708aebee9d6b0a0c8ba683f48f2e25cb"/><file name="mysql4-upgrade-0.8.0-0.8.1.php" hash="ccd49f55274344a42aa0c28352095230"/><file name="mysql4-upgrade-0.8.10-0.8.11.php" hash="2643dcdc4d3af31f3fc64ccbe229005c"/><file name="mysql4-upgrade-0.8.11-0.8.12.php" hash="722c8c7019240145f83503ef3c25672d"/><file name="mysql4-upgrade-0.8.12-1.4.0.0.0.php" hash="e9a5d864230004ee0588cf8c03aeb58f"/><file name="mysql4-upgrade-0.8.4-0.8.5.php" hash="0a08f7e04adb43ce644b12e2324b7e7c"/><file name="mysql4-upgrade-0.8.5-0.8.6.php" hash="5bace0b9dcf142bc7f81e74255b2b411"/><file name="mysql4-upgrade-0.8.6-0.8.7.php" hash="9ef24d3661aee9fbd69ce708641ef4f2"/><file name="mysql4-upgrade-0.8.7-0.8.8.php" hash="58d79dcc8e9772b9996c5cf98c6983ef"/><file name="mysql4-upgrade-0.8.8-0.8.9.php" hash="08c336853502414b87303d506f103772"/><file name="mysql4-upgrade-0.8.9-0.8.10.php" hash="0149e3e53723b5121571cebbadc8c18c"/><file name="mysql4-upgrade-1.4.0.0.0-1.4.0.0.1.php" hash="5bbffccca8a6178ecbabf3bf289056b1"/><file name="mysql4-upgrade-1.4.0.0.1-1.4.0.0.2.php" hash="b635e478f1c9f61e5099ac0c2bb0dc1c"/><file name="mysql4-upgrade-1.4.0.0.10-1.4.0.0.11.php" hash="255fa61555ef1ae9ee49642aade7d9c5"/><file name="mysql4-upgrade-1.4.0.0.12-1.4.0.0.13.php" hash="dcdb4497854588ca6e12e4907404f27c"/><file name="mysql4-upgrade-1.4.0.0.2-1.4.0.0.3.php" hash="0a93f1e367aaf0a62cae6c07734ea129"/><file name="mysql4-upgrade-1.4.0.0.3-1.4.0.0.4.php" hash="e0ecad3fc1c05d112dab117c67059c78"/><file name="mysql4-upgrade-1.4.0.0.5-1.4.0.0.6.php" hash="87b10e436f90b5fa56ad6cc0cf6904e5"/><file name="mysql4-upgrade-1.4.0.0.6-1.4.0.0.7.php" hash="21ba959239cbd436d78834464f258b22"/><file name="mysql4-upgrade-1.4.0.0.7-1.4.0.0.8.php" hash="f99f0568dbbfbb8284fa40107c6d367e"/><file name="mysql4-upgrade-1.4.0.0.8-1.4.0.0.9.php" hash="176f6b5b7f52fa3d619e90626da1ce22"/><file name="mysql4-upgrade-1.4.0.0.9-1.4.0.0.10.php" hash="214d180f85958672b4588404e66aa13d"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="b6ebde8d13e2b4fc83d5d7a76909f6ee"/><file name="mysql4-upgrade-1.6.0.0-1.6.1.0.php" hash="5ec13b9bbd4aff56e7f912ee163f204c"/><file name="upgrade-1.6.1.0-1.6.2.0.php" hash="79483a191e9a06f439e1c301bccb750a"/><file name="upgrade-1.6.2.0-1.6.2.0.1.php" hash="df76a788c48d9e06a521271fcf333b4a"/><file name="upgrade-1.6.2.0.1-1.6.2.0.2.php" hash="05ef590163c85515a2dc5ba6f59e2763"/><file name="upgrade-1.6.2.0.3-1.6.2.0.4.php" hash="7793e15f6b89ae1ef39a111346bfa04f"/><file name="upgrade-1.6.2.0.4-1.6.2.0.5.php" hash="44d497f99af3a16c7ba7590f7a5dce82"/><file name="upgrade-1.6.2.0.5-1.6.2.0.6.php" hash="1f52f23f1e014e40deb9cb0300850e33"/><file name="upgrade-1.6.2.0.6-1.6.2.0.7.php" hash="8864bd4550bbcf0eb8bdafedc12bbc3b"/></dir></dir></dir><dir name="Dataflow"><dir name="Helper"><file name="Data.php" hash="ba0c7d7b0ebbe85cdc161daf58ed818d"/></dir><dir name="Model"><dir name="Batch"><file name="Abstract.php" hash="3543ba2800ba5ee38bac37ec00d275c3"/><file name="Export.php" hash="d701e10f4c6f3f5cbc31744be7811dee"/><file name="Import.php" hash="9173bb07584a68e50e5c88102089576b"/><file name="Io.php" hash="a2b3504d88757ab81f133752006b7559"/></dir><file name="Batch.php" hash="b070f1a35519016888ed33eb43a388b0"/><dir name="Convert"><dir name="Action"><file name="Abstract.php" hash="16cb4e158c1e976cc8a23f1b1969e625"/><file name="Interface.php" hash="9685043ccbdec28bc203f6f89ff58538"/></dir><file name="Action.php" hash="a0eac5d684aad0a52ebd9999d93e40eb"/><dir name="Adapter"><file name="Abstract.php" hash="4b599e7300ae3025c45734f3eae53103"/><dir name="Db"><file name="Table.php" hash="bc8f691b432a592c58af98ab6fe497fe"/></dir><dir name="Http"><file name="Curl.php" hash="e7d49e8826112b54d7379d7a8ae1cbe1"/></dir><file name="Http.php" hash="0210afa8d3272999b9fc98e05f8daf94"/><file name="Interface.php" hash="73f2c70039dde1a6228db866735f4f19"/><file name="Io.php" hash="41615998377cfa8c8be8566587395094"/><file name="Soap.php" hash="ba8a2bc6d1db1fadfbf62ea44dbca02b"/><file name="Std.php" hash="2ed56f9f09c3cd2b2a43572e8f6cb067"/><dir name="Zend"><file name="Cache.php" hash="5098b27d145d6e3e600354668382191c"/><file name="Db.php" hash="f79aaa83f74d4e7127ef7828da023325"/></dir></dir><dir name="Container"><file name="Abstract.php" hash="9f897e8ff05a07bcd2216c9d154d17ac"/><file name="Collection.php" hash="524623eb4ee22f41733a719f610256e0"/><file name="Generic.php" hash="0aa8ef9254ac3992f3a2c44760d94161"/><file name="Interface.php" hash="0cdcdb866b5e763a00d17983fd7da4f5"/></dir><file name="Exception.php" hash="67c3a53179e7611fd85b6b9cddb6e74e"/><dir name="Iterator"><dir name="File"><file name="Csv.php" hash="abe3394015e92bd440377fdd26112e54"/></dir><file name="Http.php" hash="cd9fe0bd3f40a0d6a138f5b7bfaffe09"/><file name="Interface.php" hash="6c862c3886f10444133f674de27ed12d"/></dir><file name="Iterator.php" hash="3e0435baffe704561b94bd3fa094cfb2"/><dir name="Mapper"><file name="Abstract.php" hash="f1c55848d32916f3aa0d7fbe29745b34"/><file name="Column.php" hash="314699dda7a12c97db22b44d7c76797c"/><file name="Interface.php" hash="14bf4780e2b0714b915817bca16baef6"/></dir><dir name="Parser"><file name="Abstract.php" hash="184653a172556aaf30ae011bdf8a709b"/><file name="Csv.php" hash="956ff398a9e77aa5721529a65cb7d3ac"/><file name="Interface.php" hash="8c034c04958dec654b4ff6e89e995548"/><file name="Serialize.php" hash="5bc986b7f5d75fb631fb4e9886791abc"/><dir name="Xml"><file name="Excel.php" hash="80afe217220f9e1bd3155d3b45b8eeff"/></dir></dir><dir name="Profile"><file name="Abstract.php" hash="8625b39536ed7f8ac6c6f1ff362b3be2"/><file name="Collection.php" hash="ac7f050bf0893a95dd5d1763c0a73286"/><file name="Interface.php" hash="0d3b1dfd027ff14c33d2e0a1aaf29441"/></dir><file name="Profile.php" hash="364dc7b99afed83feb7582e8fc823d8a"/><dir name="Validator"><file name="Abstract.php" hash="cbfe5a09ccdb86444a5d4cdcdcb8051c"/><file name="Column.php" hash="1abea0910f88e265bc829b4c331c9a46"/><file name="Dryrun.php" hash="b5c492bba60680cc846e9d24955b4c49"/><file name="Interface.php" hash="03f27c47cf2e481da96423e1d36e5087"/></dir></dir><file name="Convert.php" hash="b64fc1b5d816f58afec56ee51dcc8351"/><file name="Import.php" hash="4573a6ef4d0b95b803b2c01f9663462e"/><dir name="Mysql4"><dir name="Batch"><file name="Abstract.php" hash="e70e77cc8668a29189dec4ad9e56fa8f"/><file name="Collection.php" hash="ed46e43597beb2ec95002a840c47a641"/><file name="Export.php" hash="6ef9e98156da48ad51cbfd0f3776d681"/><file name="Import.php" hash="74a0db2a88fc41dc80355cf7ea25af56"/></dir><file name="Batch.php" hash="89929eba1effb5486ff4ec2b319f50c4"/><file name="Catalogold.php" hash="b66882011d992c6b8b2517e109d77dea"/><dir name="Import"><file name="Collection.php" hash="70bb331246ec17243bd6c300636750cd"/></dir><file name="Import.php" hash="a71013c6cb85f1ef29892ce889f18550"/><dir name="Profile"><file name="Collection.php" hash="56876c9976738f0e21a9b8ff6aa3c27d"/><dir name="History"><file name="Collection.php" hash="163b2a826d2b8fd96398960aa92f3e81"/></dir><file name="History.php" hash="09b2b4f263b324b523d832d75071dee6"/></dir><file name="Profile.php" hash="9aa4936500033a62679b84f1da27c041"/><file name="Session.php" hash="6c30e12d60f78221dae3835dad0037e9"/></dir><dir name="Profile"><file name="History.php" hash="728b39b8a1520b7fd91952a695c379ad"/></dir><file name="Profile.php" hash="54b918565d7afc27e5da9f35a4c099dd"/><dir name="Resource"><dir name="Batch"><file name="Abstract.php" hash="612fafd01d83759b1e10a39ed50e0652"/><file name="Collection.php" hash="02ff02d640c78e9a06490215daebebcc"/><file name="Export.php" hash="0d22450c096f16387ba00e0ba8f0a24f"/><file name="Import.php" hash="7a1e167147c4a5641c5a3e52b4b1aaa9"/></dir><file name="Batch.php" hash="9403c9b07303b56e3f442e37af936651"/><dir name="Import"><file name="Collection.php" hash="bde0dfbd42b4ff401e481bd268b5f859"/></dir><file name="Import.php" hash="58574de8620131253f1ed739e549056a"/><dir name="Profile"><file name="Collection.php" hash="98cc3701db9032fd8826d1fc75d94193"/><dir name="History"><file name="Collection.php" hash="67a836cfe4cafe0b2b3d7ef0a5ff3051"/></dir><file name="History.php" hash="ce6905b9dbae69351f57c0ed524bbc53"/></dir><file name="Profile.php" hash="f3cff7f8e8155732fae8d4f421ab0103"/><file name="Session.php" hash="453263f698ac876ce8557ac2be7c1496"/></dir><dir name="Session"><dir name="Adapter"><file name="Http.php" hash="edc6b564cf9d56e0f12de5ea447dbdfd"/></dir><dir name="Parser"><file name="Csv.php" hash="61840f83e0d43b67d53930fec1385d1e"/></dir></dir><file name="Session.php" hash="b94c5b87b2d4f3ea7cf6c84b46cb4cff"/></dir><dir name="data"><dir name="dataflow_setup"><file name="data-install-1.6.0.0.php" hash="42c052e1062f756b947dd923e50c3776"/></dir></dir><dir name="etc"><file name="config.xml" hash="035ee01a0e0220f14801318b58f8be49"/></dir><dir name="sql"><dir name="dataflow_setup"><file name="install-1.6.0.0.php" hash="094c2853f4d7308dea858833be058181"/><file name="mysql4-install-0.7.0.php" hash="b6f614644e7b7ccca8c5b321fd25fc7d"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="30d4761c1860cd8d42ce0a43727e5943"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="9ba941a259ee395cfd90ad3dbdd71c2e"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="7eda27a8f788e7ee1fb6e380e02cf5fa"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="5535484fec01d7822ac93e7096290ca3"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="303ca60636f0518f09239cd259a5a338"/></dir></dir></dir><dir name="Directory"><dir name="Block"><dir name="Adminhtml"><dir name="Frontend"><dir name="Currency"><file name="Base.php" hash="e0e170e03ca4d96a7dce5d56336a80a2"/></dir><dir name="Region"><file name="Updater.php" hash="f47e815e8c798610b80dc4b6fcf186d5"/></dir></dir></dir><file name="Currency.php" hash="bd713bb957c6a23c548a7697de84efb4"/><file name="Data.php" hash="c257ee7d3517ca2ee9d8bb2e6252afc7"/></dir><file name="Exception.php" hash="f9639b73bf22148a74976f4daf6f6af4"/><dir name="Helper"><file name="Data.php" hash="4bf35e82fae3db2aba4958bd836d5d09"/><file name="Url.php" hash="f17914084283bc6d7aa4dd5d237ba68b"/></dir><dir name="Model"><dir name="Country"><dir name="Api"><file name="V2.php" hash="312e1300362594a3ba7a522305c5d227"/></dir><file name="Api.php" hash="5133388d9e059b505cae9c4b04f2e354"/><file name="Format.php" hash="ad52c9c51abe5f00f6226c5e43bb0fac"/></dir><file name="Country.php" hash="8c2fafcf43814d42244965f9c09ac52a"/><dir name="Currency"><file name="Filter.php" hash="0b8340daa8a90406059f1acb59933825"/><dir name="Import"><file name="Abstract.php" hash="8d6378f932e87726aadefcd28215eb42"/><file name="Webservicex.php" hash="d53038bf530401b6f1c8201210a5ac72"/></dir></dir><file name="Currency.php" hash="75aeb64410600e854a30f6cfc7645c42"/><dir name="Mysql4"><dir name="Country"><file name="Collection.php" hash="c1fc63c262198bbf18c3edb570c0d52f"/><dir name="Format"><file name="Collection.php" hash="16a17d89b911114555cb775cedf550dd"/></dir><file name="Format.php" hash="e8fcf24b451e4a2454c11df0e7dc1810"/></dir><file name="Country.php" hash="b2bea61b669d97241aa89fc42e17e524"/><dir name="Currency"><file name="Collection.php" hash="41261c0556f08a31e14a233764003e37"/></dir><file name="Currency.php" hash="f415ccb29551abf0dba5d7e43c12863d"/><dir name="Region"><file name="Collection.php" hash="3be48e3b6caf317f289af5f386c5284f"/></dir><file name="Region.php" hash="c2db0ac95c10e1d366b7837318c936f1"/></dir><file name="Observer.php" hash="3e5b58a1b7a1b6bd7ddf93656fc8162e"/><dir name="Region"><dir name="Api"><file name="V2.php" hash="84695e6d5d487bd0aea05eaac060dae2"/></dir><file name="Api.php" hash="2fbbd4774edec8785db449c066b43b71"/></dir><file name="Region.php" hash="63f29958a6533648182ea867d18cc07c"/><dir name="Resource"><dir name="Country"><file name="Collection.php" hash="514bbcc131797481e5ae5021be0e6ff4"/><dir name="Format"><file name="Collection.php" hash="211b05e29af2f95189b64b5ab5bebb5d"/></dir><file name="Format.php" hash="624d5e614fad28b2d23d470a49a780ed"/></dir><file name="Country.php" hash="90802624de442f1813e202179761f294"/><dir name="Currency"><file name="Collection.php" hash="6143827bee6390e2106da6b6020b2bd2"/></dir><file name="Currency.php" hash="2b05897729d8c123b0906a00ad3c5d37"/><dir name="Region"><file name="Collection.php" hash="b84e4245bf5f29be351840d6bf8debfa"/></dir><file name="Region.php" hash="de5686e13ec0ae244ea2981da6f2eed9"/></dir></dir><dir name="controllers"><file name="CurrencyController.php" hash="0a8ad93782d6a0ed66fa1e42912feaca"/></dir><dir name="data"><dir name="directory_setup"><file name="data-install-1.6.0.0.php" hash="c33868f8e7e39dc584672a9d0514d293"/><file name="data-upgrade-1.6.0.0-1.6.0.1.php" hash="98b30b282695ba73fd344cdbfeacbb5c"/><file name="data-upgrade-1.6.0.2-1.6.0.3.php" hash="902c18199d5c5cc78222277ff5cf7626"/></dir></dir><dir name="etc"><file name="api.xml" hash="2f6edb16617f5aba97008638ebbfec36"/><file name="config.xml" hash="56c352b6bdebc026b4ab3ef846cec026"/><file name="system.xml" hash="e73b60ed25b6c6b787a135793388ff28"/><file name="wsdl.xml" hash="cc488b81c0eae648a0ee360d6e2d9960"/><file name="wsi.xml" hash="66de37cc17e24c0c66f74c52e2df616e"/></dir><dir name="sql"><dir name="directory_setup"><file name="install-1.6.0.0.php" hash="47aa97efec924128eab805e5636fe099"/><file name="mysql4-install-0.7.0.php" hash="b5c454d8d309525d71a8634781b931ce"/><file name="mysql4-install-0.8.0.php" hash="bb3cf4e3d432dfb8f94bebfcab61cbc8"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="cfd6af022870643f32aeff8b6cb27c99"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="5542d4352bd04edc8803c729c371db22"/><file name="mysql4-upgrade-0.8.0-0.8.1.php" hash="e1c4fbe48c99a7e87fc27b693683e1f7"/><file name="mysql4-upgrade-0.8.1-0.8.2.php" hash="f81458a4b6f6734b4acc1ec01db4220e"/><file name="mysql4-upgrade-0.8.10-0.8.11.php" hash="e640398483b9695c739c88507ac65690"/><file name="mysql4-upgrade-0.8.2-0.8.3.php" hash="eeeb163cefe0c778c2077c63cc1fcb73"/><file name="mysql4-upgrade-0.8.3-0.8.4.php" hash="6ff564fa86ffdec80ab88379f5da5134"/><file name="mysql4-upgrade-0.8.4-0.8.5.php" hash="bf3b8d577a19cc941eb14c7f261c8ceb"/><file name="mysql4-upgrade-0.8.5-0.8.6.php" hash="a29e42eaad895ed4a8c0f3ecda42c19e"/><file name="mysql4-upgrade-0.8.6-0.8.7.php" hash="b1b88c828f88211e1260dcee4108b173"/><file name="mysql4-upgrade-0.8.7-0.8.8.php" hash="62f5447cdc62ac6799375bf5db44a7ae"/><file name="mysql4-upgrade-0.8.8-0.8.9.php" hash="29ae507ef1d1aee81047dbbfed152895"/><file name="mysql4-upgrade-0.8.9-0.8.10.php" hash="5d8904e905b2ac9d962cc7bcbc937fd7"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="cc3a1d63c33612a38b1824b37c40f606"/><file name="mysql4-upgrade-1.6.0.1-1.6.0.2.php" hash="c9f1054bd8fe3afb6837f5a8546d313c"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="8245890ddee5b8f396ffa6274794d205"/></dir></dir></dir><dir name="Downloadable"><dir name="Block"><dir name="Adminhtml"><dir name="Catalog"><dir name="Product"><dir name="Composite"><dir name="Fieldset"><file name="Downloadable.php" hash="77e55e5dc308822d8bc555fcbefdbe58"/></dir></dir><dir name="Edit"><dir name="Tab"><dir name="Downloadable"><file name="Links.php" hash="3a08edc2a67d0f56b08a44c3cce6253a"/><file name="Samples.php" hash="eed530baa2d844aedad97aeed7239c78"/></dir><file name="Downloadable.php" hash="5ef9d5819dd23845c4f22f607010b699"/></dir></dir></dir></dir><dir name="Sales"><dir name="Items"><dir name="Column"><dir name="Downloadable"><file name="Name.php" hash="51f6e2c18ac7f9c318fcb17ee035d277"/></dir></dir></dir></dir></dir><dir name="Catalog"><dir name="Product"><file name="Links.php" hash="8f19b5ed669a01eacd225b6a9907779c"/><file name="Samples.php" hash="75c9baa52ae8bc43f9ec8103f2e25c1c"/><dir name="View"><file name="Type.php" hash="485e6be75ad728e4aa26ea594026e69d"/></dir></dir></dir><dir name="Checkout"><dir name="Cart"><dir name="Item"><file name="Renderer.php" hash="b2e42724a1d0f44b52058741c43afc23"/></dir></dir><file name="Success.php" hash="d56ec2dd50af50f75a135e83b466c3c3"/></dir><dir name="Customer"><dir name="Products"><file name="List.php" hash="9127274b3057d49572318b694e1e0292"/></dir></dir><dir name="Sales"><dir name="Order"><dir name="Email"><dir name="Items"><file name="Downloadable.php" hash="df331c7b0aa306c6f7ea15045b719953"/><dir name="Order"><file name="Downloadable.php" hash="6d2ebaaaef11110583be03527941a5a4"/></dir></dir></dir><dir name="Item"><dir name="Renderer"><file name="Downloadable.php" hash="8f303cbe0ace26b706fcb00be8cc498e"/></dir></dir></dir></dir></dir><dir name="Helper"><dir name="Catalog"><dir name="Product"><file name="Configuration.php" hash="af46f2f32acab466b264892a3ee3e29b"/></dir></dir><file name="Data.php" hash="7aa704d7f269529a1ed08854b763f322"/><file name="Download.php" hash="34b7eb406082d674cf335c93cddd64f1"/><file name="File.php" hash="5a3d283e711d328246742b39a378c14d"/></dir><dir name="Model"><dir name="CatalogIndex"><dir name="Data"><file name="Downloadable.php" hash="97bc07e2d0627436ea42bed84819a22e"/></dir></dir><dir name="Link"><dir name="Api"><file name="Uploader.php" hash="ebf17810830ae7f0f7ffdfa2943eb8b1"/><file name="V2.php" hash="630b806eb820e97db4e24579b582478a"/><file name="Validator.php" hash="a33511ef63ce2b72f4cbe0f52b385a34"/></dir><file name="Api.php" hash="40977ea134fe7d7a7e7f1df52812a05d"/><dir name="Purchased"><file name="Item.php" hash="967313e0d6d239338ae63da5e09c1614"/></dir><file name="Purchased.php" hash="3c28742e85b74a5b32fe4063133e5097"/></dir><file name="Link.php" hash="c8421acc93494d6bc7ae215724b5ae6b"/><dir name="Mysql4"><dir name="Indexer"><file name="Price.php" hash="029700e06b7b63b8572c4fbcc150eda1"/></dir><dir name="Link"><file name="Collection.php" hash="87d378e29012ffc6fc6e0a4a6688f609"/><dir name="Purchased"><file name="Collection.php" hash="bf291246aafb628ac154df41cfb26f2c"/><dir name="Item"><file name="Collection.php" hash="926cdd08de3a6f7ffcde1a82a1acd6bb"/></dir><file name="Item.php" hash="788b0541f99fe64ac3522326375d14c6"/></dir><file name="Purchased.php" hash="172425d690bbf19f12c3a5226f570ba8"/></dir><file name="Link.php" hash="27c16f53f3a9035b32ebcdb0b027705f"/><dir name="Sample"><file name="Collection.php" hash="3e191b153dfeac19f3ee50a203f07c0d"/></dir><file name="Sample.php" hash="4c8f836ce98f98f1461b020949e9609c"/></dir><file name="Observer.php" hash="ed975e0eab2425f9f0c102c30ca804f7"/><dir name="Product"><file name="Price.php" hash="6c2d6ecb0d3fc48e0f479c980dcdd2c0"/><file name="Type.php" hash="67d40e317b34be3a3caabfffd1752028"/></dir><dir name="Resource"><dir name="Indexer"><file name="Price.php" hash="526544bd79468c6641b785d6cb07da31"/></dir><dir name="Link"><file name="Collection.php" hash="729b6d9003d8b3f942db75b6c4befce2"/><dir name="Purchased"><file name="Collection.php" hash="d7adc05ec8432f95c6c7e3a3be40b697"/><dir name="Item"><file name="Collection.php" hash="8f42e22586347f5f895572cf88b95070"/></dir><file name="Item.php" hash="abcf293327e3bb0bfa709d18fadb7c8f"/></dir><file name="Purchased.php" hash="2b59397a1aff196004542a14230fca00"/></dir><file name="Link.php" hash="9be179d68f5448d38aca23fa27e16289"/><dir name="Sample"><file name="Collection.php" hash="3b40c3da6ed3aed34822d6eff4e4a2a0"/></dir><file name="Sample.php" hash="0f32fb1d00539f03e5221e200ed85522"/></dir><dir name="Sales"><dir name="Order"><dir name="Pdf"><dir name="Items"><file name="Abstract.php" hash="432e2c16960010365705e365ca35fc6f"/><file name="Creditmemo.php" hash="7cf76116841c5c8b409cc51503637bc5"/><file name="Invoice.php" hash="2ab75c691e6f8efa21c1c34f23147fb3"/></dir></dir></dir></dir><file name="Sample.php" hash="5eadf7eae3a5ec395bc2c25816d59b9a"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Contentdisposition.php" hash="7d63d4e0768044cd86480eca8edd5ebb"/><file name="Orderitemstatus.php" hash="dc8ed67d3a3bf8d905389c71a46a5a72"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Downloadable"><file name="FileController.php" hash="7f6088cc8e8cd74444e50e71d73829d9"/><dir name="Product"><file name="EditController.php" hash="2880fec7d953a2fd52ea2a126b5a4246"/></dir></dir></dir><file name="CustomerController.php" hash="a34bf5346a11e528f854363492b9441a"/><file name="DownloadController.php" hash="62d043ad37366ab6b772b727eb7f81bb"/><file name="FileController.php" hash="e8b1eb0949070406deea301a08bb87d9"/><dir name="Product"><file name="EditController.php" hash="17f8841c6c0d40b268326e489d46d594"/></dir></dir><dir name="data"><dir name="downloadable_setup"><file name="data-install-1.6.0.0.php" hash="310d216938c8e74cd319d063c90e7350"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="58497f09521db8a24ea83b86a7e31ad0"/><file name="api.xml" hash="c85905a7aeb88d75ab4e7bd18d121527"/><file name="config.xml" hash="44161669aa492757ff48e918d895d74b"/><file name="system.xml" hash="4defd2adf9adb88a3ed18c9e44f63d08"/><file name="wsdl.xml" hash="b3935ff3bf7e2ca40ddd304b4c78577f"/><file name="wsi.xml" hash="7eef36b29c2abf88596e63b6a042626d"/></dir><dir name="sql"><dir name="downloadable_setup"><file name="install-1.6.0.0.php" hash="4793286c9962b042b95f24b5bbd37c07"/><file name="mysql4-install-0.1.0.php" hash="1ab98631cd79b8e009b931b39a192a50"/><file name="mysql4-install-1.4.0.0.php" hash="a363ea42b837c06fbc7510caa62d8fd6"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="2f199f03c7223cf0c1b09f2075004fb5"/><file name="mysql4-upgrade-0.1.1-0.1.2.php" hash="6decba51bdbf5ed44f9a3ff1b3df385c"/><file name="mysql4-upgrade-0.1.10-0.1.11.php" hash="3c9fe53c07b3cf47ce1dcfae8316da12"/><file name="mysql4-upgrade-0.1.11-0.1.12.php" hash="a6ed75d590b8a0ca9102f8d51f2df969"/><file name="mysql4-upgrade-0.1.12-0.1.13.php" hash="19241f621502e8587b28b98f98c2cc6a"/><file name="mysql4-upgrade-0.1.13-0.1.14.php" hash="7947fb9ba92e7d49b5e6b2c624047a94"/><file name="mysql4-upgrade-0.1.14-0.1.15.php" hash="da6a046bf037037722fce7ab52120ce6"/><file name="mysql4-upgrade-0.1.15-0.1.16.php" hash="176c8f58e6d47958108f4f56d4b8fd64"/><file name="mysql4-upgrade-0.1.2-0.1.3.php" hash="01bb73724dff697f98fe0545ea9011d3"/><file name="mysql4-upgrade-0.1.3-0.1.4.php" hash="a6288325fa8db2cffa1f730413806caa"/><file name="mysql4-upgrade-0.1.4-0.1.5.php" hash="531ce0cd65051a1c1cc552a93cc14ae2"/><file name="mysql4-upgrade-0.1.5-0.1.6.php" hash="ef10502c5995e745e50054a6ad89dd58"/><file name="mysql4-upgrade-0.1.6-0.1.7.php" hash="3503c89a97630439c4bb07dd3021ff72"/><file name="mysql4-upgrade-0.1.7-0.1.8.php" hash="2c7d8cc7e2f9c5c0198c2373e861a852"/><file name="mysql4-upgrade-0.1.8-0.1.9.php" hash="21b6bd6346bc3bb610945592968e571a"/><file name="mysql4-upgrade-0.1.9-0.1.10.php" hash="0700661f8dbe9ce7233697d62b78317f"/><file name="mysql4-upgrade-1.3.9-1.4.0.0.php" hash="7b3c1cdf1d9c388e6d720cca660447ef"/><file name="mysql4-upgrade-1.4.0.0-1.4.0.1.php" hash="7825b58ac73156af8951af3995dfef02"/><file name="mysql4-upgrade-1.4.0.1-1.4.0.2.php" hash="9a8736e8e0e09d2cbe2495ac4d0146ff"/><file name="mysql4-upgrade-1.4.0.2-1.4.0.3.php" hash="a2414a36022f0f45523c5609e97dacac"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="34f2b29b89a18d245905516250292318"/><file name="mysql4-upgrade-1.6.0.0.1-1.6.0.0.2.php" hash="0704160c20e0de302e7847a9edff75ad"/><file name="upgrade-1.6.0.0-1.6.0.0.1.php" hash="79c0faefeea54f1aaeb562c05489c584"/><file name="upgrade-1.6.0.0.1-1.6.0.0.2.php" hash="540f11c1af76a687b147dd5b6e91f986"/><file name="upgrade-1.6.0.0.2-1.6.0.0.3.php" hash="3887541a51fb2560ffce3c3132f5ce76"/></dir></dir></dir><dir name="Eav"><dir name="Block"><dir name="Adminhtml"><dir name="Attribute"><dir name="Edit"><file name="Js.php" hash="76a9d04618fece6a5c7a56b0ff823b07"/><dir name="Main"><file name="Abstract.php" hash="d65003f51d01d39fe1509a30073e922a"/></dir><dir name="Options"><file name="Abstract.php" hash="460fd5dfc5de88544c7975ec2e34e27f"/></dir></dir><dir name="Grid"><file name="Abstract.php" hash="e6c5b5368108405afff2f0b9217b0ddf"/></dir></dir></dir></dir><file name="Exception.php" hash="0641af2a86f332e1386f6693f008086a"/><dir name="Helper"><file name="Data.php" hash="c5432d5aab78f9905451c8aa8440d75b"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Source"><dir name="Inputtype"><file name="Validator.php" hash="a79c5cb074642fb8625491737e814266"/></dir><file name="Inputtype.php" hash="e43dd8ec548fe9f6b0229185e0b6cb0a"/></dir></dir></dir></dir><dir name="Attribute"><dir name="Data"><file name="Abstract.php" hash="4ce6313b746673f0d5b763cc2dccc384"/><file name="Boolean.php" hash="c26954c81573f845ae60285ab9b1b2f9"/><file name="Date.php" hash="1e012219855b5fa9f9ae5b58a1516a3f"/><file name="Datetime.php" hash="bf368d67a5d1f914dd279bbe6f73fa0a"/><file name="File.php" hash="5a70c867df2671b8d1c5f70f32383b5a"/><file name="Hidden.php" hash="1f5cdac56967998115ca00161c84eeb2"/><file name="Image.php" hash="97c7de0fa47b44f24d3142d90179dcfd"/><file name="Multiline.php" hash="0e5e8d7a805bab2ff6e17884ee51b377"/><file name="Multiselect.php" hash="9623ffb47b3e1c7ce71fb4bbaf4e27f3"/><file name="Select.php" hash="3431a4994c8b3374dc3c187ae26de33b"/><file name="Text.php" hash="732cd418b9c743b1bf71f1d781f0a2bf"/><file name="Textarea.php" hash="9538125fb3ba6bf6f4ae054300348f6e"/></dir><file name="Data.php" hash="00c615fcd2d67e2744b43d745ea3849d"/></dir><file name="Attribute.php" hash="adfc8ad9a0686925eb0861c360331537"/><file name="Config.php" hash="2486546f2a2e4191e6c3e3cfbfa3d1c2"/><dir name="Convert"><dir name="Adapter"><file name="Entity.php" hash="8af9af9cc6e7c6f6e4e555911c97f3e1"/><file name="Grid.php" hash="11516ac20dc12f8e677f195108e364fa"/></dir><dir name="Parser"><file name="Abstract.php" hash="0604c7ed305525ae9d81848f2b9a1b98"/></dir></dir><dir name="Entity"><file name="Abstract.php" hash="984170b2a8518fb1c5e8261dd41b4007"/><dir name="Attribute"><file name="Abstract.php" hash="297ed4642ce31d785cbd31ff8d6c3a11"/><dir name="Backend"><file name="Abstract.php" hash="70be013552d8c7c33e3051561f45b321"/><file name="Array.php" hash="25a71b55a3184e652f64d2756e46b24c"/><file name="Datetime.php" hash="44c3fa95099cb5317790305ca58310d5"/><file name="Default.php" hash="410e85e64c32085f147eda397bbdc692"/><file name="Increment.php" hash="69578bd86ad7cc788ab47c31f2c4d2fb"/><file name="Interface.php" hash="41097f25651a3faefe054b3a7e183c11"/><file name="Serialized.php" hash="f6dbd98ea2643317ce32eb8b89a04d0a"/><file name="Store.php" hash="01edda1a78495d0854978b05d23198dc"/><dir name="Time"><file name="Created.php" hash="8a340cc06767f6e337dae1d979ccb689"/><file name="Updated.php" hash="b1b554a1c03ba16781a79e587629c40c"/></dir></dir><file name="Exception.php" hash="abc42003ac62cf10f1c47a8aaa589ea5"/><dir name="Frontend"><file name="Abstract.php" hash="fdfdffe846bcacfd22d448174d2cc645"/><file name="Datetime.php" hash="5cd584d2fdf76e195c76bca5e994327e"/><file name="Default.php" hash="31bb8bc9f506d826364db720ef0b3cb4"/><file name="Interface.php" hash="f0fb5394dc3398c7cff693648c62c1b9"/></dir><file name="Group.php" hash="44982468cc5be1181c5b64ab7faa856c"/><file name="Interface.php" hash="9c6d1484d583d9970cb77b3d3e6fb6ee"/><file name="Option.php" hash="c4f375b24d469faa8233dd905daf1455"/><file name="Set.php" hash="060fee5055d424b6e3efff99389f845b"/><dir name="Source"><file name="Abstract.php" hash="db30a8e44b3cb508baba0f36872754ba"/><file name="Boolean.php" hash="e4582a62d9159a4b7648cb4eb3e2caa7"/><file name="Config.php" hash="3b0ee8512dc7b6dd5ac8dad9781db55b"/><file name="Interface.php" hash="629ae9ef9d6d0232d647a536b0792331"/><file name="Store.php" hash="e303f48da099b366d0c41d44249624f0"/><file name="Table.php" hash="eace4965b17821cc095761d1e37a6fee"/></dir></dir><file name="Attribute.php" hash="d43198173e548682b76fa1278b0c2d41"/><dir name="Collection"><file name="Abstract.php" hash="7f60905ac1b3094dba0d800095a3b682"/></dir><file name="Collection.php" hash="85f80d08170392a2868e5eb5b3186218"/><dir name="Increment"><file name="Abstract.php" hash="2888867d0a8ed162656cf340c0618dd7"/><file name="Alphanum.php" hash="860dcaee5fb974ae5b3fde7ded0495b9"/><file name="Interface.php" hash="579718f1c5f00d86de5f2cd6c86f9900"/><file name="Numeric.php" hash="ac9694098c66d6915599f7ac2156017b"/></dir><file name="Interface.php" hash="d16dc535ac2260f768d9c6f2969efdf0"/><file name="Setup.php" hash="bc9575a290ac0bbce793b7743cb3fe17"/><file name="Store.php" hash="0b577726b3c683de678502177834f122"/><file name="Type.php" hash="754b8eca697af02342e9af40ee5657dc"/></dir><file name="Entity.php" hash="136a4a48687f5f555cc85635b4006e45"/><dir name="Form"><file name="Element.php" hash="337a2fcf7c3b197dd70598dae6d8c340"/><file name="Fieldset.php" hash="b815b9e4cba0661813b9402f2893adac"/><file name="Type.php" hash="ebd19351b9b4e8db07aec320187fe0f7"/></dir><file name="Form.php" hash="215128f79657713d4df1f7ab56f771cb"/><dir name="Mysql4"><file name="Config.php" hash="2c70bf309223ff222b794e0268ce6d94"/><dir name="Entity"><dir name="Attribute"><file name="Collection.php" hash="ea0d24b4433898f853be14f37f3b0ce3"/><dir name="Group"><file name="Collection.php" hash="b1f663cd69ca7195299b0d4226ff9f15"/></dir><file name="Group.php" hash="918798aea17c6f1797d6bbe5c7ece33c"/><dir name="Option"><file name="Collection.php" hash="53051a0f2e0c0a97c20c949f1a6d8145"/></dir><file name="Option.php" hash="229c97a12c8fbbc0a9b1c5486693fe9d"/><dir name="Set"><file name="Collection.php" hash="0fa368469dba3ad44790f892c3c894ea"/></dir><file name="Set.php" hash="d64928af617ebf66e443c310361fc09b"/></dir><file name="Attribute.php" hash="6922c29a0ccf56634f2a1ea71022bb6f"/><file name="Store.php" hash="91dac98040dd3993dd92eae8b4e403ce"/><dir name="Type"><file name="Collection.php" hash="a0194188e88174876b6178c3d1ace5a7"/></dir><file name="Type.php" hash="f0d84ba44ef5bdd32c024fed77604944"/></dir><dir name="Form"><dir name="Element"><file name="Collection.php" hash="73bf00347f1430684129d0796c2e79c2"/></dir><file name="Element.php" hash="45408edaab72d3012b0e3e7b9fc5e777"/><dir name="Fieldset"><file name="Collection.php" hash="aa3bc9586d55fcf814867b94e98c0fcc"/></dir><file name="Fieldset.php" hash="2ec1a2743fa322af7a4632f1ca61e3fd"/><dir name="Type"><file name="Collection.php" hash="85a3ccaf53b1fbff9fdca14d242ad072"/></dir><file name="Type.php" hash="0bd8c782878c8223226bd9d8bfbac4d7"/></dir></dir><dir name="Resource"><dir name="Attribute"><file name="Collection.php" hash="f80f5f6af8fedad29bd1a8bd09dc976b"/></dir><file name="Attribute.php" hash="971e713c98d7c5ea3a11776ac80d38ef"/><file name="Config.php" hash="266c18abd1cbfcb3f3c1edeb6cefb7aa"/><dir name="Entity"><dir name="Attribute"><file name="Collection.php" hash="9bbbefb45886601bce6ed592a8d8f73a"/><dir name="Group"><file name="Collection.php" hash="78ba0874bd6d3bd571e84e01908e26ea"/></dir><file name="Group.php" hash="ea6b9ac59278d659ef9b0d050219178c"/><dir name="Option"><file name="Collection.php" hash="68c28362189535c99c931f619fadad01"/></dir><file name="Option.php" hash="9d2b310b493a6e2dfc32ce9b06162977"/><dir name="Set"><file name="Collection.php" hash="dd07d151084deddf0b56d9bdb7006a21"/></dir><file name="Set.php" hash="eeb9c645eaf56f73741d0a60386c6b2f"/></dir><file name="Attribute.php" hash="15654e6c59dd1d58ed9dd767200e3a43"/><file name="Store.php" hash="beba844583f5400064864e040233da48"/><dir name="Type"><file name="Collection.php" hash="44235e7ca4dd3f77ea89d4ab8be0c82f"/></dir><file name="Type.php" hash="83a1a2b191f33f9a9e0dff4c5e93961d"/></dir><dir name="Form"><dir name="Attribute"><file name="Collection.php" hash="cb1f62b0b621db7d0eb27c3820849c39"/></dir><file name="Attribute.php" hash="b89d6dcb7d57698b0b2e393df3abdca8"/><dir name="Element"><file name="Collection.php" hash="736be5236a8285b6fa302c99da11c8c4"/></dir><file name="Element.php" hash="4688cecadc8df666e912d14a3258aedd"/><dir name="Fieldset"><file name="Collection.php" hash="25357b8097755c3973474340097b2ce3"/></dir><file name="Fieldset.php" hash="08d7abb063b6077f1d588645b79b289a"/><dir name="Type"><file name="Collection.php" hash="ae392ea4c078f226cf1da81e240f2279"/></dir><file name="Type.php" hash="eeb3c28b0cef7362c6c693c0f1ffcc52"/></dir><dir name="Helper"><file name="Mysql4.php" hash="247ebd95acc61ee421b3cb6362af18eb"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="098b2f79a17d6ed050fd839cc6fd874b"/></dir><dir name="sql"><dir name="eav_setup"><file name="install-1.6.0.0.php" hash="e9f0004ee2482d0f1c51814aced44076"/><file name="mysql4-install-0.7.0.php" hash="2a19f8adf9e922105a282606a65a3cea"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="9af1cc7c6346405c07794a5d120e5a94"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="681c496e8b957651551104ac7dcf5edf"/><file name="mysql4-upgrade-0.7.10-0.7.11.php" hash="4880b73f4ab3b2ffdef24e051b8ea659"/><file name="mysql4-upgrade-0.7.11-0.7.12.php" hash="9b51e19f1558aa72e479e9d0bf46377c"/><file name="mysql4-upgrade-0.7.12-0.7.13.php" hash="d4baa1ae2581f30ac4c2609ef72b570d"/><file name="mysql4-upgrade-0.7.13-0.7.14.php" hash="4687ead62851c02ef3e3165bd69ed7ba"/><file name="mysql4-upgrade-0.7.14-0.7.15.php" hash="8c620c539d07f9cf7035a9c338650bfc"/><file name="mysql4-upgrade-0.7.15-0.7.16.php" hash="650033cdf0d1a3b822827c281e7f2a1b"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="154e0892c90540a1fe4d3a0a36aefac6"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="f58877d02c4887a4d35a6933dc181af8"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="abadd9f1c7c93f105c3b00f847dc93e9"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="e62460b26496c2faea8894e0cb1a739d"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="323cf145a26acd0c55c5757cfd3f4315"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="d9a688efeac2bec4db158e1507e7f38f"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="245da9e0c322b928bf58037735f257e9"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="47a6d832bdc3e6313b0af9f23039b468"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="99c24f3347ca435b6401548c2c0dc14d"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="05bb8b40f5ed919459bf25accd6249a6"/></dir></dir></dir><dir name="GiftMessage"><dir name="Block"><dir name="Adminhtml"><dir name="Product"><dir name="Helper"><dir name="Form"><file name="Config.php" hash="e71f2e04e4435423481ea322c3577517"/></dir></dir></dir><dir name="Sales"><dir name="Order"><dir name="Create"><file name="Form.php" hash="0f4ff9f0f21d09351422ab01b835b22d"/><file name="Giftoptions.php" hash="3232e441e4d680a8ecee0decb81345c9"/><file name="Items.php" hash="d78fbf3af42cfd6967becbe11128a699"/></dir><dir name="View"><file name="Form.php" hash="9b50cb2c6e9d4f9b965f4d80b6ea873c"/><file name="Giftoptions.php" hash="3d08ae4a4ab9f780298f359c6c96607b"/><file name="Items.php" hash="b5f8879e95e1ec40478c779d93110e45"/></dir></dir></dir></dir><dir name="Message"><file name="Form.php" hash="6522fa4219475cf2c82015127e67fee7"/><file name="Helper.php" hash="633539513329d9ad7533b0296328f2a9"/><file name="Inline.php" hash="7c337341633b17fa8d8dc01ad4584526"/></dir></dir><dir name="Helper"><file name="Data.php" hash="1c4851cf5ca35fcb72683eeb417a97ee"/><file name="Message.php" hash="01c630fee1c4a874bb27f19a20e98af8"/><file name="Url.php" hash="34a66962d449bc84a752425779ef4bcc"/></dir><dir name="Model"><dir name="Api"><file name="V2.php" hash="425812d0c57c35dfb0dd43119e020240"/></dir><file name="Api.php" hash="0dc93eb3747f94245124ad822c2eaef0"/><dir name="Entity"><dir name="Attribute"><dir name="Backend"><dir name="Boolean"><file name="Config.php" hash="36b274f046bfb9b319176607356b6143"/></dir></dir><dir name="Source"><dir name="Boolean"><file name="Config.php" hash="ec2e57b5e26893ed338a99fefbe45e5d"/></dir></dir></dir></dir><file name="Message.php" hash="c9a2fba0ec16be13039fda703613c02a"/><dir name="Mysql4"><dir name="Message"><file name="Collection.php" hash="fe8df3daf9574cc194c03bf124e55660"/></dir><file name="Message.php" hash="410f8523e4dcad503a0ee3af64b8ff94"/><file name="Setup.php" hash="527fc0ae71838098211a6520cd832aae"/></dir><file name="Observer.php" hash="aa755924aa16458d401690baeb938855"/><dir name="Resource"><dir name="Message"><file name="Collection.php" hash="80b5e1f03de5dc20c607c4dbdc761c69"/></dir><file name="Message.php" hash="79c5c51500ab7effbaf9a99686d415b6"/><file name="Setup.php" hash="a6005fad51da9c18a83eb84e99db8d01"/></dir></dir><dir name="controllers"><file name="IndexController.php" hash="88d7e7c90ac99f80030c1f5be3c720f1"/></dir><dir name="etc"><file name="api.xml" hash="888db708fb445ab49d51ab4fda3fe516"/><file name="config.xml" hash="27fa6377d2e16d638d82d01b484a48c1"/><file name="system.xml" hash="46692861e2deab8d6bfb535cdb196dd5"/><file name="wsdl.xml" hash="b99aaaac0126c6e09a7ba59fa4dbcf30"/><file name="wsi.xml" hash="ab77c7cfecb0f5d6cb7b07c0b5abc1d1"/></dir><dir name="sql"><dir name="giftmessage_setup"><file name="install-1.6.0.0.php" hash="36402fec00264f941ef4642b0ae17f13"/><file name="mysql4-install-0.7.0.php" hash="2ac19d879e241289b72b8e432db7e6ac"/><file name="mysql4-upgrade-0.1.3-0.7.0.php" hash="650f9811d600721a9f1787c7fc3964c8"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="5c3fb419447e54794cecab192cd54b4c"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="778cdc4f68a01902bd9342de1371f1e1"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="e939d659a0424363d764e142e917df6e"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="7f78f03378a984b9263a1a345b3c7d56"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="2631230eca6a451392038dfb838c9a01"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="649670744ac9d43328ccb66a003b2264"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="1779217817376cb22d561d4dfe636f86"/></dir></dir></dir><dir name="GoogleAnalytics"><dir name="Block"><file name="Ga.php" hash="3148322407646e182554ccdaf8ccc45d"/></dir><dir name="Helper"><file name="Data.php" hash="04fdb8a7157cf81df10883c9a0ce7b28"/></dir><dir name="Model"><file name="Observer.php" hash="dc24aa1b34905724a135cff31a509c71"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Type.php" hash="b1a9154aec1ad478622cb67c8e019236"/></dir></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="c155b0d0a90476653938711908cf57f6"/><file name="config.xml" hash="81df5ac1b5d262aee2989083a203419b"/><file name="system.xml" hash="62c1fd94ac8c60034212ff68faec8e06"/></dir><dir name="sql"><dir name="googleanalytics_setup"><file name="install-1.6.0.0.php" hash="7bba830fc3217cd1f73a2f80d2b83f8b"/></dir></dir></dir><dir name="GoogleBase"><dir name="Block"><dir name="Adminhtml"><file name="Captcha.php" hash="90ff64fec37f0b7893ee21ee719d1e69"/><dir name="Items"><file name="Item.php" hash="6d99c34d1dd6ec6c6019eb6297c0081b"/><file name="Product.php" hash="947028d77ec8f996c14aaaa9c9407275"/><dir name="Renderer"><file name="Id.php" hash="f0727df9056dace8587859a8a33b1af2"/></dir></dir><file name="Items.php" hash="d525d39493b7fffdd2fb4670e9bfbe74"/><dir name="Store"><file name="Switcher.php" hash="76478739b7d10298fa193d9a12d14420"/></dir><dir name="Types"><dir name="Edit"><file name="Attributes.php" hash="a7d12c39a051102057d4fe824d4349fa"/><file name="Form.php" hash="72ea980f9aae32dc7ad1ad60cb9e4809"/></dir><file name="Edit.php" hash="18293aa040bb66feb4498b7a64dce501"/><file name="Grid.php" hash="e30a7efef2fe7568caa966afe81bb828"/><dir name="Renderer"><file name="Country.php" hash="ea232b928ace2757bdf2b0c37e850771"/></dir></dir><file name="Types.php" hash="13966d79b28bd855808419902509f31a"/></dir></dir><dir name="Helper"><file name="Data.php" hash="e257389dbf828cce28e64b87fc695fb9"/></dir><dir name="Model"><file name="Attribute.php" hash="d2a7215c38c74ac923ce9735d89ef28f"/><file name="Config.php" hash="836458d8264fef80fc0cf315cdf2ee63"/><file name="Item.php" hash="591a9671462cbd4aeeb96ddcdb7638b1"/><dir name="Mysql4"><dir name="Attribute"><file name="Collection.php" hash="06759e3cfec97b909585d906f7d3eb9f"/></dir><file name="Attribute.php" hash="4c728a47b333e31c25bb8d4d12232ec8"/><dir name="Item"><file name="Collection.php" hash="a813f8532f8f7829cd2c32a24c0aaa1c"/></dir><file name="Item.php" hash="28d9123d1da5a9cf7ac0563339e20d89"/><dir name="Type"><file name="Collection.php" hash="e5aadc72c6d629ae56c715fda9edbc30"/></dir><file name="Type.php" hash="56449cad35d34524c04cfa68c693bb41"/></dir><file name="Observer.php" hash="6c7a7527c4dfa444af5ba8f7db00ecda"/><dir name="Resource"><dir name="Attribute"><file name="Collection.php" hash="62b3e3c64888ab3869b09694504cf2f2"/></dir><file name="Attribute.php" hash="516c058fc8aa2072c6ea8fcfaf556c83"/><dir name="Item"><file name="Collection.php" hash="40d9819d8d6a5f7bcb825e8f232eef5e"/></dir><file name="Item.php" hash="a13e5622f56537b8ba0254da3fcc0a87"/><dir name="Type"><file name="Collection.php" hash="4c7917040926f5a05b39144f3d403b36"/></dir><file name="Type.php" hash="193c5d60ca3b742a85df5a1505861d74"/></dir><dir name="Service"><file name="Feed.php" hash="5d89c71e6c0de63ccbd1a254d9a48589"/><file name="Item.php" hash="b95af2ff6782b4827ae4a65a6c0fbc17"/></dir><file name="Service.php" hash="f62afc225bb3b3da18b1140f0016a270"/><dir name="Source"><file name="Accounttype.php" hash="89d4467103c6fc59b2c6b2be4f4c40b5"/><file name="Authtype.php" hash="605022851691e4b33931d101ba4f3f65"/><file name="Country.php" hash="d3078ff19116e32944f267686e147f15"/><file name="Statuses.php" hash="828a3352d9a3a818a40924f8a7274dab"/></dir><file name="Type.php" hash="cb9750a2d515fde890a7cfc6436ea0f0"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Googlebase"><file name="ItemsController.php" hash="c696d03d62662dc9ada15c1d06300923"/><file name="SelectionController.php" hash="3b6f44c81d8c9eb195f576a4363fb920"/><file name="TypesController.php" hash="525cbe0fa8c34f894af502c1f52279f7"/></dir></dir><file name="ItemsController.php" hash="68b04d48b14fd5427138af535c908398"/><file name="SelectionController.php" hash="33ed88d739b01c81177031ba08ab4103"/><file name="TypesController.php" hash="e96c32e59a0c3fc973a4e4fb1b8dcc5d"/></dir><dir name="etc"><file name="adminhtml.xml" hash="4e11c32c225957c0c8f8798d82a7e528"/><file name="config.xml" hash="cfe395c9828af3b7849193b55b34697e"/><file name="system.xml" hash="6319e314f403f9e23097e1ac47c62c38"/></dir><dir name="sql"><dir name="googlebase_setup"><file name="install-1.6.0.0.php" hash="169ffe03e43161146b9b41655824829c"/><file name="mysql4-install-0.1.0.php" hash="e24ec4fc9fece30ccf9afe11413ec51a"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="06d9ca8e476fb0bbe09e767ceff499d8"/><file name="mysql4-upgrade-0.1.1-0.1.2.php" hash="3ce5464a7bf542af3d8302d5dea3c50b"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="f29793e6f271898ef8aba120e3ac7953"/></dir></dir></dir><dir name="GoogleCheckout"><dir name="Model"><file name="Payment.php" hash="6c1ae663fd5ee1d044bb36fe05fa5042"/></dir><dir name="etc"><file name="config.xml" hash="5512b847eb250040ba373fd75d4ef468"/></dir></dir><dir name="ImportExport"><dir name="Block"><dir name="Adminhtml"><dir name="Export"><dir name="Edit"><file name="Form.php" hash="8c0a90aef430dff392c4f6c7535a298e"/></dir><file name="Edit.php" hash="42ad5e1f5eb593b34ebdaf1ac0fa58fe"/><file name="Filter.php" hash="a680e942e4aef9a3b973ca2246f6bf4d"/></dir><dir name="Import"><dir name="Edit"><file name="Form.php" hash="6005dde9dc29a61b9d922f5979c53de8"/></dir><file name="Edit.php" hash="1d6b68a203c0decb63d50d8bef85b091"/><dir name="Frame"><file name="Result.php" hash="6be7e32acf5f6eb8735339bfba41f425"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="23ccef7c01439576ad355a83bfd7fc33"/></dir><dir name="Model"><file name="Abstract.php" hash="da532014ec8c1da0ab7812048255d988"/><file name="Config.php" hash="acff4a07ddcb7287cef69349895c4dc6"/><dir name="Export"><dir name="Adapter"><file name="Abstract.php" hash="3f02a932eb9a60e09077435d1dc39253"/><file name="Csv.php" hash="3c8efb64063cb74f86c43f6279a68814"/></dir><dir name="Entity"><file name="Abstract.php" hash="ce8cfdade201dca6a72e07b5520cc534"/><file name="Customer.php" hash="6b895a709db0f7d6b113f71cfb49eaa4"/><dir name="Product"><dir name="Type"><file name="Abstract.php" hash="0279244c65f5a569ab570786397f899a"/><file name="Configurable.php" hash="d6265cc14bf5dd82713c95e159a31aea"/><file name="Grouped.php" hash="4fc08bfd8997f4c67c980ff52b274285"/><file name="Simple.php" hash="ff9841cf5cf96961045a24887a4b3d61"/></dir></dir><file name="Product.php" hash="2251e76ec3bb2c26ca01032901fb73f5"/></dir></dir><file name="Export.php" hash="ecb1980aea6d70e9b5cb2194f9b5f4b9"/><dir name="Import"><dir name="Adapter"><file name="Abstract.php" hash="a0281e645a59766bcaa33f48019c868d"/><file name="Csv.php" hash="1485b97f96a3c37380b9f3ffc188e387"/></dir><file name="Adapter.php" hash="a6b4e8b8a815f874c0c50355ef10f67e"/><dir name="Entity"><file name="Abstract.php" hash="66d5255e757c039ae9c475f4cd203a25"/><dir name="Customer"><file name="Address.php" hash="027950a36dad71a367347fe86dbae1c5"/></dir><file name="Customer.php" hash="de0eac5696fcb79503e2077bf05c0289"/><dir name="Product"><dir name="Type"><file name="Abstract.php" hash="c2af099c3d104994c64b821638b347d7"/><file name="Configurable.php" hash="ae58a371b226560ea8396eb790686d78"/><file name="Grouped.php" hash="66f7fc872086bff458180ed71faf463d"/><file name="Simple.php" hash="7aab97fad42f1911c7594d52d12331f1"/></dir></dir><file name="Product.php" hash="362f4e0134026c123871d670208dfb99"/></dir><dir name="Proxy"><dir name="Product"><file name="Resource.php" hash="4f48a6772f3d37695949011744edce4d"/></dir><file name="Product.php" hash="546f152c0e20030a6d849bfd4faa3124"/></dir><file name="Uploader.php" hash="4f5ad1a1704839935b3bfe976bad6ebe"/></dir><file name="Import.php" hash="6b7d74d101280209f402ec3db6b75f6e"/><dir name="Mysql4"><dir name="Import"><file name="Data.php" hash="a49fb8aafb9050ae578115c21e829888"/></dir><file name="Setup.php" hash="febd1871bbe88278134887274d9e1394"/></dir><dir name="Product"><dir name="Attribute"><dir name="Backend"><file name="Urlkey.php" hash="dcdf48b3f12bfb824df47d49a1bf87fa"/></dir></dir></dir><dir name="Resource"><dir name="Helper"><file name="Mysql4.php" hash="1da742e4cc124c54413dcea86cca91a4"/></dir><dir name="Import"><file name="Data.php" hash="6684f138f53d2f21bbec021834d32178"/></dir><file name="Setup.php" hash="5486ea84fba5e15d8a95bfb1e4e37464"/></dir><dir name="Source"><dir name="Export"><file name="Entity.php" hash="b3e8f29c401d0b51149c7a335d723333"/><file name="Format.php" hash="755c5944f6cf76a73410670b5ca82e71"/></dir><dir name="Import"><file name="Behavior.php" hash="dae5c8358bdcfdba82126628fc0749a5"/><file name="Entity.php" hash="55b550eb1bc4f6d62991e3c984d3b213"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="ExportController.php" hash="ac53bc75b82d0758f5d41c6f32c93c50"/><file name="ImportController.php" hash="c262b652812db581fab1c19eab947e80"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="cffe27dd5f4445f2a075c6db18ec068d"/><file name="config.xml" hash="69acc517b147579559fa30ac2429e03b"/><file name="system.xml" hash="52728a6afa67432259b07510a4857aa8"/></dir><dir name="sql"><dir name="importexport_setup"><file name="install-1.6.0.0.php" hash="7b243fdb587af327b86df6561d6f4ff3"/><file name="mysql4-install-0.1.0.php" hash="a669634907c6393797a7fc9f57914a3d"/><file name="mysql4-upgrade-1.6.0.1-1.6.0.2.php" hash="2ef4e95819de7a6f825f217dd2c13c56"/></dir></dir></dir><dir name="Index"><dir name="Block"><dir name="Adminhtml"><file name="Notifications.php" hash="0502428a04f868b969977e8cbe9ca68c"/><dir name="Process"><dir name="Edit"><file name="Form.php" hash="7138d95f471b73cd1db8c50048dbfa59"/><dir name="Tab"><file name="Main.php" hash="70e7ed7e545def02e2fbbd3501b648a3"/></dir><file name="Tabs.php" hash="77bed81cf36df06a6e5c85c525afd393"/></dir><file name="Edit.php" hash="4e7e3d405a775d0412bd2c59bfa48348"/><dir name="Grid"><file name="Massaction.php" hash="94b8d97b7a62191439ed0533278ee246"/></dir><file name="Grid.php" hash="a6763a508c9608587c554b655ba6cd4b"/></dir><file name="Process.php" hash="6a34dee446d98c1a021b45403b807e43"/></dir></dir><file name="Exception.php" hash="2abd7e24d0e5f42ec2e94fbaf7f83713"/><dir name="Helper"><file name="Data.php" hash="ddc60c6babe27a91d185aa9eb65bf1a9"/></dir><dir name="Model"><file name="Event.php" hash="9d541285ef6dec4776e8a99a962bd8e5"/><dir name="Indexer"><file name="Abstract.php" hash="17a2d6175c88b0b6314e5f4fd9f82c9d"/></dir><file name="Indexer.php" hash="036771069dfa406996ae0146c3fc2efb"/><dir name="Lock"><dir name="Storage"><file name="Db.php" hash="8b2746a15e7e92f0e44ee2462067e434"/><file name="Interface.php" hash="8e3de0b1cc4acbf532be5244a21105bc"/></dir></dir><file name="Lock.php" hash="571bb826223b080017bebc8a36abda92"/><dir name="Mysql4"><file name="Abstract.php" hash="c91d020895e5bba42395d8d81254fa40"/><dir name="Event"><file name="Collection.php" hash="ca52f306157be7b688a47d8a148cd12c"/></dir><file name="Event.php" hash="da1a734fdfc309952d3a9c98589b3359"/><dir name="Process"><file name="Collection.php" hash="62f31af83a5fda6963e6c4a4146f8f93"/></dir><file name="Process.php" hash="a6a69af2c162b57f704955853896c050"/><file name="Setup.php" hash="730e01929ea0e3af40d5fc31413f3811"/></dir><file name="Observer.php" hash="009367d6b0bfb2426cc2dd65b7fa99fc"/><file name="Process.php" hash="93081ed310abcb1e7a656202b9011a34"/><dir name="Resource"><file name="Abstract.php" hash="c2eca7b501fb4229c95e10e1083e0167"/><dir name="Event"><file name="Collection.php" hash="aa7f8135cd9543988d78363b5264e00b"/></dir><file name="Event.php" hash="38a7f4231adc01251fa8d4de3cef2258"/><dir name="Helper"><dir name="Lock"><file name="Interface.php" hash="0683f031e83e0d0d08623d37470fa9f2"/></dir><file name="Mysql4.php" hash="e3ebcf77c8f5bc9adcebf7f7d1add03c"/></dir><dir name="Lock"><file name="Resource.php" hash="5745201b6fcf0e8c9e1f72f15111d6ad"/></dir><dir name="Process"><file name="Collection.php" hash="a97368a80473465782fc276e0c4e6e4a"/></dir><file name="Process.php" hash="4f698ade97452f2c5f7df154f8d8fec6"/><file name="Setup.php" hash="ae8759b256c26d361606070814b62bae"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="ProcessController.php" hash="ecbb2ba955cff030e762d9bd17ad36e6"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="73774f3cb6b8a9ecabe2a34825863cc2"/><file name="config.xml" hash="ef73494843fdd261b72c8dfcb2265e4f"/></dir><dir name="sql"><dir name="index_setup"><file name="install-1.6.0.0.php" hash="c9abd384d75bd9ae6c1eef9a72474506"/><file name="mysql4-install-1.4.0.0.php" hash="064e9f0e1403436d6802523e9dbc825f"/><file name="mysql4-upgrade-1.4.0.0-1.4.0.1.php" hash="9c5b0567a6070eb64728519ba631eccf"/><file name="mysql4-upgrade-1.4.0.1-1.4.0.2.php" hash="d50af25db7c40f134c0454db38409866"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="370153229feabc0ae76027266c9245a8"/></dir></dir></dir><dir name="Install"><dir name="Block"><file name="Abstract.php" hash="ca03b54314c4fad54b1d80a88cd966c1"/><file name="Admin.php" hash="94bbdac89b39c44885fec8abacaebced"/><file name="Begin.php" hash="4cda74306ad4bdeaa41bf0934b0b6bba"/><file name="Config.php" hash="0f50fa4ee04f7042fed47947cd2cdc5f"/><dir name="Db"><file name="Main.php" hash="13343e3f0097e095e19d2f36458e5a25"/><dir name="Type"><file name="Mysql4.php" hash="733faabc64a68d2e8bb23ea2345e7a3e"/></dir><file name="Type.php" hash="f489d8450f382ae541288464f3ef1e5f"/></dir><file name="Download.php" hash="4710dd31557c53b09fdf15abee245906"/><file name="End.php" hash="7764ff5608344fc6f705b0eed702355c"/><file name="Locale.php" hash="1096108913896157368789eb7be68b38"/><file name="State.php" hash="53f3de195337567ad91bf0f8a814991a"/></dir><dir name="Controller"><file name="Action.php" hash="84731263011f3251f47bcb9256e57277"/><dir name="Router"><file name="Install.php" hash="bbcd341a81cfda360877355aae659f22"/></dir></dir><dir name="Helper"><file name="Data.php" hash="1cef380829a4f6322a102f8ca55acb02"/></dir><dir name="Model"><file name="Config.php" hash="4d8084f912d33f4af9f23340bf8fbadb"/><dir name="Installer"><file name="Abstract.php" hash="369ea7aca230b883a76e9f595c73b608"/><file name="Config.php" hash="3dc50e732fabf3c49f50255be5476cf8"/><file name="Console.php" hash="b2b1744e38de05f532de3854611c6fba"/><file name="Data.php" hash="92e0782d07009cde613c52a6664d4edb"/><dir name="Db"><file name="Abstract.php" hash="55770957bbfe3065b56fddf03df8eb0f"/><file name="Mysql4.php" hash="0ab2d6c06304f53798ba6df2c0dbdafa"/></dir><file name="Db.php" hash="d553f0ae56ff856ab5589ace6d299028"/><file name="Env.php" hash="28341cd7cb8623e86a5430e7822dfc04"/><file name="Filesystem.php" hash="eda0f45009142a40fe81ce8b6430d8d1"/><file name="Pear.php" hash="5204107313d23dccc88a2c3334f091c8"/></dir><file name="Installer.php" hash="72d72d93692b073c644c55414b776b88"/><file name="Observer.php" hash="6afe735d213f59504a041eacb2bd26a5"/><file name="Session.php" hash="2ab7246cd2d3becbb96792f64f2193b6"/><file name="Wizard.php" hash="1a368631d270e8f2b0660de98b4624e1"/></dir><dir name="controllers"><file name="IndexController.php" hash="3ab953dafd6000928bae8bf53d3177fa"/><file name="WizardController.php" hash="7a5d5cb369c7b21372365ad4077e1fcb"/></dir><dir name="etc"><file name="config.xml" hash="17a0d6f4472fe496b4cdaaca7586b7ea"/><file name="install.xml" hash="ba054cb8eeb96e195778500ba99923d0"/></dir></dir><dir name="Log"><dir name="Helper"><file name="Data.php" hash="8a0325ed14a7bb3a523488c9217d8f56"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Source"><file name="Loglevel.php" hash="d28f40ec66bb0d887d63b895767df47b"/></dir></dir></dir></dir><file name="Aggregation.php" hash="d0db269470bec4d97162fe39307d9d95"/><file name="Cron.php" hash="aa69d2f341ae137e478333b890304695"/><file name="Customer.php" hash="f10b6b88fccf821375d0dd8e15079b57"/><file name="Log.php" hash="1d7a29c78da548b24096aaaa674b01e1"/><dir name="Mysql4"><file name="Aggregation.php" hash="befc68bb34bb3781e3e203324edecca8"/><file name="Customer.php" hash="2bc896862a996728066c8093d023879e"/><file name="Log.php" hash="16760341353457edcdac0abb6acdea60"/><dir name="Visitor"><file name="Collection.php" hash="97e0d353e927b67961baeabb002f8ca8"/><dir name="Online"><file name="Collection.php" hash="31ef43622058d9408334d075c537abc0"/></dir><file name="Online.php" hash="990d2fd509874f9960767c23fc61f92f"/></dir><file name="Visitor.php" hash="33eece4b2d319675ae96a868e219b828"/></dir><dir name="Resource"><file name="Aggregation.php" hash="065f18fb7ad3ba1f9fc2e076c45835ee"/><file name="Customer.php" hash="7ca21af42caddc5b33b58ce8294be65f"/><file name="Log.php" hash="fadc7f5e01b580ac241d164b2f849335"/><dir name="Visitor"><file name="Collection.php" hash="aac8c82a4ab29539278d5db8f90afec2"/><dir name="Online"><file name="Collection.php" hash="c3b633da19a3cd3b23758779042a16c3"/></dir><file name="Online.php" hash="e6b52cc97bd8728d118d7444c7fb9622"/></dir><file name="Visitor.php" hash="c4d6976141b8d93935f12c76b07ea100"/></dir><dir name="Visitor"><file name="Online.php" hash="770284f9f8fe6ce975faf50b82b65598"/></dir><file name="Visitor.php" hash="632017210c729948a32355bc02873e6f"/></dir><dir name="data"><dir name="log_setup"><file name="data-install-1.6.0.0.php" hash="20b4e578d26ddbcd1c85dc29cba07a56"/></dir></dir><dir name="etc"><file name="config.xml" hash="d2597554e1238297fd72f85d34de55ee"/><file name="system.xml" hash="32348c1e64534363d08d63bc6128a26c"/></dir><dir name="sql"><dir name="log_setup"><file name="install-1.6.0.0.php" hash="642fa050d97e47739a594074459321bd"/><file name="mysql4-install-0.7.0.php" hash="e7c5af70b26609ce168c5c8a34a8c4f8"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="0fa3790c5b1f31fec3cdca25576bba13"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="c1d51bbae35b2722dd39c79062e4eabb"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="cf4cf002bbeb5ec86d6087d980244b3d"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="038f6b84cee27c3df17407c0fe179541"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="b251796e95da3a9bfbbce375ddff8731"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="da65b0a560db302bd8bebe40d136914a"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="2df887c02ecbcf996b7e1f44ab610f38"/><file name="mysql4-upgrade-1.6.0.0-1.6.1.0.php" hash="afe7b3adab3a1bc4d094db7913b455f4"/><file name="mysql4-upgrade-1.6.1.0-1.6.1.1.php" hash="7fa22a9b4db88b9a6f0f8f4d04ca8d3f"/></dir></dir></dir><dir name="Media"><dir name="Helper"><file name="Data.php" hash="59877530e180bccec76efb3e20409751"/></dir><dir name="Model"><dir name="File"><file name="Image.php" hash="170170d6bc9c26cf246696592ffbb59d"/></dir><dir name="Image"><dir name="Config"><file name="Interface.php" hash="364f837bf1fbf25107ba7c8d1face188"/></dir></dir><file name="Image.php" hash="4ea65115b0a4ae3cfe3fed0aff0e3d00"/></dir><dir name="etc"><file name="config.xml" hash="c60ba7f82d63de51e0a0d4a1d1adcd29"/></dir></dir><dir name="Newsletter"><dir name="Block"><file name="Subscribe.php" hash="001313ea7cad90c6d0c583bbe271f577"/></dir><dir name="Helper"><file name="Data.php" hash="3bf5afa684ab87ccbbd8ffea14667c82"/></dir><dir name="Model"><file name="Message.php" hash="04c45f03d227d377136f7bfb8a9c2060"/><dir name="Mysql4"><dir name="Problem"><file name="Collection.php" hash="a621e853213fef78b97d092f22f4b6cf"/></dir><file name="Problem.php" hash="1af0aaf83dd64970dbec2315846767f3"/><dir name="Queue"><file name="Collection.php" hash="63bf3582e463cfead41f06170f12ccb6"/></dir><file name="Queue.php" hash="20f7e8925518a5c2be1da31a653c537e"/><dir name="Subscriber"><file name="Collection.php" hash="2435451ef565788c5db52ed04b73173a"/></dir><file name="Subscriber.php" hash="b1af8c88da9b34d6b347eb1e90b7c9b2"/><dir name="Template"><file name="Collection.php" hash="7d7b251f328c367f4b5ab980f5835df9"/></dir><file name="Template.php" hash="e31a772f50c21b6c6779a168a363ef29"/></dir><file name="Observer.php" hash="7144a9695e8337210a846fd479ef3104"/><file name="Problem.php" hash="90a8edbda50aba746bb0b8cc84c81c10"/><file name="Queue.php" hash="f0a21e1f019200e3a0d5f260fbba8898"/><dir name="Resource"><dir name="Problem"><file name="Collection.php" hash="c0c91fa3da32f63211d446d50ca616ae"/></dir><file name="Problem.php" hash="6846ee74581878cc1573b546c720ccc9"/><dir name="Queue"><file name="Collection.php" hash="143911e1b419cf4de343ba133e42cbc8"/></dir><file name="Queue.php" hash="24428d90f8bad535d69e2d6969dfc007"/><dir name="Subscriber"><file name="Collection.php" hash="d0aba05515f102eb1a3a233241aeb973"/></dir><file name="Subscriber.php" hash="eb4415875435b356b0e936b44b1994fd"/><dir name="Template"><file name="Collection.php" hash="b4f3f8b0d2fa733f07da322ee83b9465"/></dir><file name="Template.php" hash="b8a9e7f12cbcaae5d74a8281fb8701e6"/></dir><file name="Session.php" hash="0f6118a9d3bdda33759a08d538a42b1e"/><file name="Subscriber.php" hash="f39a6a7deb2530e53a7b2adb7dfd916d"/><dir name="Template"><file name="Filter.php" hash="694a7adefb521667830b6c8622fb922f"/></dir><file name="Template.php" hash="b23eeb2b2576b5ce84367d842454f465"/></dir><dir name="controllers"><file name="ManageController.php" hash="e023f87aa2fbc1681bdc71e1fafff6a5"/><file name="SubscriberController.php" hash="44f5ae94ee1bd2433716a404d4c0c588"/></dir><dir name="data"><dir name="newsletter_setup"><file name="data-upgrade-1.6.0.0-1.6.0.1.php" hash="a6839702c558b5e316e9bb2e8d34e9e9"/><file name="data-upgrade-1.6.0.1-1.6.0.2.php" hash="bc41dfa900ae72dbd1f4bc9cffb8061c"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="a138f30d7540d1ae5aea45f497409e56"/><file name="config.xml" hash="4f5b07bedd42a9c0c04a46cd61c48f94"/><file name="system.xml" hash="061b10846b83f8d61b9da7f4e49a42a9"/></dir><dir name="sql"><dir name="newsletter_setup"><file name="install-1.6.0.0.php" hash="0041ea9db1cfaf73d997d0db7c0f15f1"/><file name="mysql4-install-0.7.0.php" hash="864456494c3a7bf98bee7c063a99f968"/><file name="mysql4-install-0.8.0.php" hash="9ed900416bc1d897bb14b8dc7aa8d6c6"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="685e2c4b18639bc53a648d557b4d41b4"/><file name="mysql4-upgrade-0.8.0-0.8.1.php" hash="bd7699cb9b1d5bac800c402e15b70cb9"/><file name="mysql4-upgrade-0.8.1-0.8.2.php" hash="ce3fc3ca7c687838fa3c978c8b33a898"/><file name="mysql4-upgrade-0.8.2-0.8.3.php" hash="ff85d1f43997c605d063bd9a9c90d79d"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="a2927ab2911de988787206f2e9ba610c"/></dir></dir></dir><dir name="Oauth"><dir name="Block"><dir name="Adminhtml"><dir name="Oauth"><dir name="Admin"><dir name="Token"><file name="Grid.php" hash="d7ad6175b76249112fdeb036d335461d"/></dir><file name="Token.php" hash="8341bedc79dacc47d95c8862f7166fcb"/></dir><dir name="Authorize"><file name="Button.php" hash="4ff67d854c73f8cd745de2b104eee189"/></dir><file name="Authorize.php" hash="3292dc0ad49f627ce3ee3c756a44336d"/><dir name="AuthorizedTokens"><file name="Grid.php" hash="b487b3940c469bce7cd44f6bf5abc0df"/></dir><file name="AuthorizedTokens.php" hash="2436e4acbf44cbe2225185d21a59bb27"/><dir name="Consumer"><dir name="Edit"><file name="Form.php" hash="553b7b38651e1923a7d3ca4dc3051ee2"/></dir><file name="Edit.php" hash="3cf9750c84f9a0925f9ea76737ae46c8"/><file name="Grid.php" hash="b9b5225f9c184fce14efd2bf94c90d9a"/></dir><file name="Consumer.php" hash="a6796218280d28a9b4aa764e0fbe66cf"/></dir></dir><dir name="Authorize"><file name="Abstract.php" hash="67872cb70be20664180b8f2715c02247"/><file name="Button.php" hash="ee5ba47ae932fbd57a61e735714d9ee1"/><file name="ButtonBaseAbstract.php" hash="ce3cd8de0ca383fde819ab0222de6fcd"/></dir><file name="Authorize.php" hash="107980275153c2b9142bf9577f86647f"/><file name="AuthorizeBaseAbstract.php" hash="ca037d0d2df1d671741d7a7f7becb93d"/><dir name="Customer"><dir name="Token"><file name="List.php" hash="e1154a5aa51e493ccc59c6017a30cfc0"/></dir></dir></dir><file name="Exception.php" hash="bf992e72284e6d524c3c5cfb0fbdaf5a"/><dir name="Helper"><file name="Data.php" hash="4aa4712963e132d4398a551781c4cd6f"/></dir><dir name="Model"><dir name="Consumer"><dir name="Validator"><file name="KeyLength.php" hash="9ad199cfcb84fda61c1712b7e6f62e04"/></dir></dir><file name="Consumer.php" hash="d5cdcf8a24636f5128fe9714de8811a0"/><file name="Nonce.php" hash="af39ce6d03adf99e78fb605e40a8cd8c"/><file name="Observer.php" hash="2de5f25babecf6a3c8ddc0b450579200"/><dir name="Resource"><dir name="Consumer"><file name="Collection.php" hash="f2598ca728e610b5401482f4ae261dab"/></dir><file name="Consumer.php" hash="031f8162d9ddb8feccc6480822e74e17"/><dir name="Nonce"><file name="Collection.php" hash="84ec6dd23847cf83641c4693e59d140d"/></dir><file name="Nonce.php" hash="0e0c57b0fe53c2bc701b8c14c5be733e"/><file name="Setup.php" hash="f73d99109f2c624776ff6d437361007d"/><dir name="Token"><file name="Collection.php" hash="db4f41a6704364c432151f831689ad03"/></dir><file name="Token.php" hash="d39fd4df2cffce3eef1295aa1fb1043e"/></dir><file name="Server.php" hash="affda00d99f8e97a5f66eaa9d6d5abc8"/><file name="Token.php" hash="6888cc747cb8fd9ac26c97559775b46e"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Oauth"><dir name="Admin"><file name="TokenController.php" hash="3808752665df116a118330ee48a993ac"/></dir><file name="AuthorizeController.php" hash="9b94b9f0d5e97b2033633415f8fae483"/><file name="AuthorizedTokensController.php" hash="0bd734a21bc403a5bdf79200a57c8d19"/><file name="ConsumerController.php" hash="a7313fd6baf55eee9eb35a9207de02cf"/></dir></dir><file name="AuthorizeController.php" hash="69e315001d701bedcb9cefdf11d1b8d4"/><dir name="Customer"><file name="TokenController.php" hash="20b723ac1c7b628d9aaf0cc18d6a5539"/></dir><file name="InitiateController.php" hash="cb05ebe5c1907a17b7c3dfd260d8b31d"/><file name="TokenController.php" hash="f46650e9544b7e39898a71007eb0deb7"/></dir><dir name="etc"><file name="adminhtml.xml" hash="ccf2f251a3c6a7da0e267971268072ef"/><file name="config.xml" hash="2a569a46049a4fe51fd320a2120011f4"/><file name="system.xml" hash="cdb0c93c59b685d393941b692ef2c711"/></dir><dir name="sql"><dir name="oauth_setup"><file name="install-1.0.0.0.php" hash="706315e7e5959f345ebc31ec00d8139b"/></dir></dir></dir><dir name="Page"><dir name="Block"><dir name="Html"><file name="Breadcrumbs.php" hash="93e28b409d3a5b0f63b2689fba7e3ebe"/><file name="CookieNotice.php" hash="c06fc21ddfb2f44eeccd3bc9f341f08b"/><file name="Footer.php" hash="5f74dc2996e75f739ee64a2a9f251cbf"/><file name="Head.php" hash="cf1c00c6a6dcaf8708e93e079ddff208"/><file name="Header.php" hash="1348228a8d831522b6a92939bf4f881c"/><file name="Notices.php" hash="91d69e32e5509a58657508b0d18c3a72"/><file name="Pager.php" hash="1b44a7c48c5dd03e47abecaf0a133748"/><file name="Toplinks.php" hash="4a58e40613ac577a7487c5941c12352a"/><dir name="Topmenu"><file name="Renderer.php" hash="d9e62509655fb2d255e144a92c2e70a1"/></dir><file name="Topmenu.php" hash="e4c9a9a257738d14584ebc587b5d602d"/><file name="Welcome.php" hash="38d4c135aa6bc74a3f6c18d548bc8fb4"/><file name="Wrapper.php" hash="261d0533aeabbff798d731f0b9c050c9"/></dir><file name="Html.php" hash="54b3ed2528283d911fef2303bc6ccd55"/><dir name="Js"><file name="Cookie.php" hash="daa2c60da73eeaba950105c3c6888f90"/><file name="Translate.php" hash="f5b463fa97737a974fe828f701c4a434"/></dir><file name="Redirect.php" hash="83af10528b7bda2fe3c82391a5220382"/><file name="Switch.php" hash="51d834776dc6e0be52ded27c8552566a"/><dir name="Template"><file name="Container.php" hash="a80162d0a24bbd3109f11dfe830acbce"/><dir name="Links"><file name="Block.php" hash="1e3e7f7434f91922333cd826b5db69b7"/></dir><file name="Links.php" hash="a8c62ede972f85a933cccd1e9b581703"/></dir></dir><dir name="Helper"><file name="Data.php" hash="15f25e825046ba13e1d6b58f37d118c5"/><file name="Html.php" hash="de6bee855b74d76a22fc043566bfe867"/><file name="Layout.php" hash="d00d4f1b1af50f507c1cd1434b3e8626"/></dir><dir name="Model"><file name="Config.php" hash="dda5bf4a680db95ad29899fda27ed4fa"/><dir name="Source"><file name="Layout.php" hash="c7b53a3434ce4ef8ce6de81289195d25"/></dir></dir><dir name="etc"><file name="config.xml" hash="80e0a9431cd91a7b8b7e8ce0d15c45bd"/><file name="system.xml" hash="cf33658d2dad24b629e9a143bc06c092"/></dir></dir><dir name="PageCache"><dir name="Block"><dir name="Adminhtml"><dir name="Cache"><file name="Additional.php" hash="ffdc593bf1074652a6e54726fde56938"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="dbd9122cf85f1aec65ad0fed6f7f59a2"/></dir><dir name="Model"><dir name="Control"><file name="Interface.php" hash="e8f4d14631df668f14d1683d26be97d8"/><file name="Zend.php" hash="2b34fc0230e45e7973dabc442e533c8a"/></dir><file name="Observer.php" hash="84b6a38809a505c003c7a93f4d839f09"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Controls.php" hash="3047b1a853d32f1580f50206ad80fe10"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="PageCacheController.php" hash="78ae7c705ebbe98cd0934687adf645fd"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="567ab3520a74f946ccd70bdb62299275"/><file name="config.xml" hash="1480ca7d245a4aa9e6c02a08b91763a0"/><file name="system.xml" hash="d1af2a63d486ef54f9aa0e6e950fb35f"/></dir></dir><dir name="Paygate"><dir name="Block"><dir name="Authorizenet"><dir name="Form"><file name="Cc.php" hash="7da4933e03c5a66f5f923d2844154687"/></dir><dir name="Info"><file name="Cc.php" hash="bb3eda4d33ea69c96d58c3a8f99e1080"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="5b691fc135d1992204a1c11193c3735f"/></dir><dir name="Model"><dir name="Authorizenet"><file name="Cards.php" hash="22d2b8c2507d05a231721df9f93bc479"/><file name="Debug.php" hash="312171d4c03484ed2cfee33b6529a6e7"/><file name="Request.php" hash="62acd350f308b107fc73df8f816af07e"/><file name="Result.php" hash="1bbc3f8c1594a48d7dce1d37e7feb2e0"/><dir name="Source"><file name="Cctype.php" hash="878e7bb13c2f22aa287bef7aa636f118"/><file name="PaymentAction.php" hash="8597a947dd50a19b2a2d8630903bf422"/></dir></dir><file name="Authorizenet.php" hash="f77d1046c5ccfa1f286d249a7395c536"/><dir name="Mysql4"><dir name="Authorizenet"><dir name="Debug"><file name="Collection.php" hash="28786186721465a7d214616ff567a118"/></dir><file name="Debug.php" hash="0333884d2080bf6530ae9931e7a27d57"/></dir></dir><dir name="Resource"><dir name="Authorizenet"><dir name="Debug"><file name="Collection.php" hash="b878381b266f6231b16189772ba6947c"/></dir><file name="Debug.php" hash="3df93081e0c043058204412176253ed3"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Paygate"><dir name="Authorizenet"><file name="PaymentController.php" hash="d54d0d987ef05a77d91ff2b84415908b"/></dir></dir></dir><dir name="Authorizenet"><file name="PaymentController.php" hash="65644062e9003c97617f5df3ae959ad8"/></dir></dir><dir name="etc"><file name="config.xml" hash="3de2efa6cbc25168fcc78dff3c75d956"/><file name="system.xml" hash="43937ed87f594f3d5d44e22380d2b815"/></dir><dir name="sql"><dir name="paygate_setup"><file name="install-1.6.0.0.php" hash="3c82de7f761f2568603b3ea44f045937"/><file name="mysql4-data-upgrade-0.7.0-0.7.1.php" hash="008fda217c9664889741849a96919ea5"/><file name="mysql4-install-0.7.0.php" hash="e808b390c548a92017dfa85109f37afc"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="27de0cae75014bce4e7812430185397e"/></dir></dir></dir><dir name="Payment"><dir name="Block"><dir name="Catalog"><dir name="Product"><dir name="View"><file name="Profile.php" hash="400fb0c50e0ea4ed3c31a67901438c30"/></dir></dir></dir><dir name="Form"><file name="Banktransfer.php" hash="eb7a99ea502731e80ce00081556cea8d"/><file name="Cashondelivery.php" hash="7a3090b201a31646137cd9ac16107e6a"/><file name="Cc.php" hash="32e21ce2492807c174c21c33d85bbc55"/><file name="Ccsave.php" hash="9a73badc8aefca6f8e3764c29be36a6b"/><file name="Checkmo.php" hash="079eb1ec995b1f53311162df7f09c0e3"/><file name="Container.php" hash="78c3b538d465e5c0800018cd633f8cc4"/><file name="Purchaseorder.php" hash="0a38e5024f5445ccd7bd6727c7e856fe"/></dir><file name="Form.php" hash="797157be5f6c8afc42777bb1f0dbafb9"/><dir name="Info"><file name="Banktransfer.php" hash="e702c12a17fb8eae7ca0fa79558b875f"/><file name="Cc.php" hash="439edfb22a4b99b77e3f0d3d5ea39397"/><file name="Ccsave.php" hash="096cc6fda5538bc305f77a7c32e5447f"/><file name="Checkmo.php" hash="c379c97543229f1126d9f5d2d98d39b5"/><file name="Container.php" hash="07140ee36b9c5b88424530de2ea42c98"/><file name="Purchaseorder.php" hash="6cfa9189f9c5412d6567932d63caeb9a"/></dir><file name="Info.php" hash="3ea3a123e9845c709de46abd06851004"/></dir><file name="Exception.php" hash="32910bf105bee28695f0cc5c3efc682b"/><dir name="Helper"><file name="Data.php" hash="fac30d9d7659d7bfb27aa94d6b76ec08"/></dir><dir name="Model"><dir name="Billing"><dir name="Agreement"><file name="MethodInterface.php" hash="ebdb0ea122d412d09c92227a5b911a9a"/></dir><file name="AgreementAbstract.php" hash="7e726c5fa0066cf1ad5c734c47b2be32"/></dir><file name="Config.php" hash="d27b768958f62c3887ce3311f4f82d82"/><dir name="Info"><file name="Exception.php" hash="7d1565ac6743daf7a528c633f1cb9351"/></dir><file name="Info.php" hash="0524fc5de69c8c2f4d4c239708c2f1d5"/><dir name="Method"><file name="Abstract.php" hash="c407dd2eaccefeb158a0c6a4607abe9b"/><file name="Banktransfer.php" hash="88924c3aa18f916733b9a8d8bd391f70"/><file name="Cashondelivery.php" hash="f5cf8d57b76f676790a2e2bc8dab5688"/><file name="Cc.php" hash="32d47c4e0ca2a4351931c9dbe8aa9097"/><file name="Ccsave.php" hash="2dba3d79d5bb3d52a651b307a71c7916"/><file name="Checkmo.php" hash="b4bb1c0aec560df4430ac6ac4519d889"/><file name="Free.php" hash="5124e7dd6dfc5922e744330aee0b06da"/><file name="Purchaseorder.php" hash="f912adbe0be4ee6e253faf5235aeada6"/></dir><file name="Observer.php" hash="7eb7f453a05ec64df921edca6a943b99"/><dir name="Paygate"><file name="Request.php" hash="0b0ab286f578e34158e888a632be5eab"/><file name="Result.php" hash="ac430ec777d776e957bf5e0675e14067"/></dir><dir name="Recurring"><dir name="Profile"><file name="MethodInterface.php" hash="7a5c2be97a5a381c3985a8d8e4e5a001"/></dir><file name="Profile.php" hash="5eb791e3acb4b95f51fed05743fd3ee8"/></dir><dir name="Source"><file name="Cctype.php" hash="ba11e8b19f705ab4928683722ec3d1c6"/><file name="Invoice.php" hash="9dcd17eda0df7b4432eb878bd096a92a"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="333585cb2d2317233c01aa3fd498fe9d"/><file name="config.xml" hash="7a4b4476dd10e74950b6b60bc5769f93"/><file name="system.xml" hash="714ae80d767a27b993fdeea34cb13f06"/></dir></dir><dir name="Paypal"><dir name="Block"><dir name="Adminhtml"><dir name="Settlement"><dir name="Details"><file name="Form.php" hash="943fd1a6109bc15b18f19f6673ee368b"/></dir><file name="Details.php" hash="31f3c41cea1eae8ce5d3017f3ec08660"/><dir name="Report"><file name="Grid.php" hash="1bc2951104d9eb349d5c48f99eab10bf"/></dir><file name="Report.php" hash="52b24a25ae41bf008036d935b32fa9fa"/></dir><dir name="System"><dir name="Config"><file name="ApiWizard.php" hash="8864cda15d76c91bc199553bc93254bf"/><file name="BmlApiWizard.php" hash="43141332d0e47f6c899dc2a4ec84c459"/><dir name="Field"><file name="Country.php" hash="2ffab6c627e84d1d1cc7d32e7872bad8"/><file name="Hidden.php" hash="c40f5e71f2ab8eab783a47ac9fcd8235"/><file name="SolutionType.php" hash="40d3c97492923a4fadda2d04891c79bc"/></dir><dir name="Fieldset"><file name="Deprecated.php" hash="2b5fa55674bb53c7ff2ddd9510b38a28"/><file name="Expanded.php" hash="a6a591981f4849100acf12392dd115a1"/><file name="Global.php" hash="717a39f6f8403902306edf4277951864"/><file name="Group.php" hash="44b47e18e1db70b5a978df90b4a57dba"/><file name="Hint.php" hash="c5f825fab528b4a397bf307d9e3a78e6"/><file name="Location.php" hash="07de7b09618d77526c79efff936f1cf3"/><file name="PathDependent.php" hash="3ff75723b61567049b44b010d2ef7685"/><file name="Payment.php" hash="fce97c4954900e60b30733462dd6607d"/><file name="Store.php" hash="e399e625dc5588fef17ed2f241db3b3d"/></dir><dir name="Payflowlink"><file name="Advanced.php" hash="529de1707a1fdb01ad10dbe4d0683369"/><file name="Info.php" hash="657f8befdf7798c3615403c14cd06bc4"/></dir></dir></dir></dir><dir name="Bml"><file name="Banners.php" hash="f9760a8b10a2b8c1c200e32ee50ca0da"/><file name="Form.php" hash="399187c36c5355e76e57bc69f57139e7"/></dir><dir name="Express"><file name="Form.php" hash="4a7d8f578a58dca6a53b7c2087fa1d82"/><dir name="Review"><file name="Billing.php" hash="8317d350dfe6ef3fef169f359c80f623"/><file name="Details.php" hash="575c3382e55db9c3a31e6ed8554ac2ea"/><file name="Shipping.php" hash="defc7869be7f634d8228bd51e625278d"/></dir><file name="Review.php" hash="be9ecaddb367e9bfa889e93e9374a70b"/><file name="Shortcut.php" hash="0da5a135a12055bdb899d15e911093dc"/></dir><dir name="Hosted"><dir name="Pro"><file name="Form.php" hash="6b54945810ac593cf1e3f106109b8374"/><file name="Iframe.php" hash="e8742903bcb9e4825b28bd91d0a41f8c"/><file name="Info.php" hash="14e3192fb955c3f6d4b6303590d1d7b8"/></dir></dir><file name="Iframe.php" hash="7e68e970303d8018208ab794439af280"/><file name="Logo.php" hash="96c385824a71b8d7dab7a88acfdd2d56"/><dir name="Payflow"><dir name="Advanced"><file name="Form.php" hash="4b824bca36d5a89e291217282dc716e1"/><file name="Iframe.php" hash="c65848b435a4a734aaca4062fba9af3b"/><file name="Info.php" hash="27d34399d6e3b3d0a22f1d686018d951"/><file name="Review.php" hash="52fd78714986a6367133f38368519e62"/></dir><dir name="Link"><file name="Form.php" hash="f284cd98f12f4916ca7f7a1cf176a6dc"/><file name="Iframe.php" hash="ccd27737b93296e02fd2ef8b92547c27"/><file name="Info.php" hash="e1fb0c2e5e690007f4dde584c07e62b4"/><file name="Review.php" hash="76dfb1d8d1e97c602303cb065147a24b"/></dir></dir><dir name="Payment"><file name="Info.php" hash="f653755ab5d497405d60030cd38550b2"/></dir><dir name="Standard"><file name="Form.php" hash="9d7433a3ab3abd085827110fff1d323a"/><file name="Redirect.php" hash="9edb0937d0459a9d1cf30bfef9618051"/></dir></dir><dir name="Controller"><dir name="Express"><file name="Abstract.php" hash="d9f7906e11ab212b3b81fa5dc3f38dc3"/></dir></dir><file name="Exception.php" hash="42e83ea0a524e322ae29ffce6afff0a6"/><dir name="Helper"><file name="Checkout.php" hash="26db733a6331cb9b7da81bea1798c9df"/><file name="Data.php" hash="854aaa4dc2a886f395b220b4f8c98851"/><file name="Hss.php" hash="4c0e7a330baec9548dc6b051d2174db3"/></dir><dir name="Model"><dir name="Api"><file name="Abstract.php" hash="853cf7ffe16c382efad46fb290cf59c4"/><file name="Nvp.php" hash="9a1ee7b7e52006aa40b11c34645705c3"/><file name="ProcessableException.php" hash="1064f915485c3e5d7d449c0155979583"/><file name="Standard.php" hash="2a83ec089b13c9f6001151c3eadc17b9"/></dir><file name="Bml.php" hash="d62d2a41e8efbf9cb5e62fecc077e4e1"/><file name="Cart.php" hash="f3db65cf7e0e8144eea161e5d373970d"/><file name="Cert.php" hash="1b0788670cb85bfab85d7c9b734cf2f3"/><file name="Config.php" hash="15c04141ed3d32818c38a260ec19bfbd"/><file name="Direct.php" hash="a5257cfa4d5f3a8a37f1a0f41839a6c3"/><dir name="Express"><file name="Checkout.php" hash="3d670375fec8751c7fd0d5c51774b5b8"/></dir><file name="Express.php" hash="3ab66ca2f5c3eaa3d0ede96370ac8e73"/><dir name="Hostedpro"><file name="Request.php" hash="7803af9165f870a26fe55ed0e5304eca"/></dir><file name="Hostedpro.php" hash="32987cfd97eac02ec8427c33030bd7f5"/><file name="Info.php" hash="673aa7caf2e8ed45789f7a73f702512d"/><file name="Ipn.php" hash="6e41d2ec1abdcdae52de0f541f8ceb58"/><dir name="Method"><file name="Agreement.php" hash="37133725de519922babdc325eeca5c6f"/></dir><dir name="Mysql4"><file name="Cert.php" hash="3e50ad315820151832a91a7cc81e0283"/><dir name="Report"><dir name="Settlement"><dir name="Row"><file name="Collection.php" hash="220a8ae1369406bd42c0f539494338cd"/></dir><file name="Row.php" hash="69a7309359db488b67d07b1d4fe4b3c4"/></dir><file name="Settlement.php" hash="01355aa6b6fe1ccbb351801dea7c3259"/></dir><file name="Setup.php" hash="7f12d0cd81f3871df62837cd55e1412b"/></dir><file name="Observer.php" hash="a45ae1a8f93adec22fc360186222b5ab"/><dir name="Payflow"><file name="Request.php" hash="44a4b60d484872a42b57bbd80d18dcab"/></dir><file name="Payflowadvanced.php" hash="d35b51c8a16527be09a2d01c9d934fd0"/><file name="Payflowlink.php" hash="d666697ba0cbe6f9416e845959f8542e"/><file name="Payflowpro.php" hash="156c9a6f7aa845df2066ace07ef89c0f"/><dir name="Payment"><file name="Transaction.php" hash="f2f56d3a0cb7c6e9651876122f4fa4de"/></dir><file name="Pro.php" hash="c8e1d2b03360c7f72de2ea6f9d808594"/><dir name="Report"><dir name="Settlement"><file name="Row.php" hash="c42f00ca8183f901742b3a7777c4f1a3"/></dir><file name="Settlement.php" hash="a3c27c3ef2e4d6b5960a79da0beca709"/></dir><dir name="Resource"><file name="Cert.php" hash="b6dea9e13029a42bd3d49f2502a42269"/><dir name="Payment"><dir name="Transaction"><file name="Collection.php" hash="25c817d238602fab9d9327de023ddcfb"/></dir><file name="Transaction.php" hash="7525357211b299e0a8455adac883b886"/></dir><dir name="Report"><dir name="Settlement"><dir name="Row"><file name="Collection.php" hash="d5e957f951b99ac2dd4fd7b70be46008"/></dir><file name="Row.php" hash="6e3a32b786fbd22b2156643e96e66231"/></dir><file name="Settlement.php" hash="fb84007539707028d79eb6d7d5108c11"/></dir><file name="Setup.php" hash="c6cb9fd182492d7df0c0d067a39473db"/></dir><file name="Session.php" hash="25ca7d53d013f0b0f2bc69a6087a413d"/><file name="Standard.php" hash="eadbe724e3d47448b40bd48044bf886b"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cert.php" hash="9d128f09fe873cf0b1ea41f3f30f4bfc"/><file name="Cron.php" hash="d5f128f029d1c0ba2f334f5c549dbc75"/><file name="MerchantCountry.php" hash="7c9acac0ae45a6c57ec89726d8a7f394"/></dir><dir name="Source"><file name="AuthorizationAmounts.php" hash="afaa58d50abf29bd79274d7823b84543"/><file name="BmlPosition.php" hash="71b9471ae79adbcf6165119f56b1a314"/><file name="BmlSize.php" hash="c6794e9bd317969a391f18fba0a8a9d6"/><file name="BuyerCountry.php" hash="6f82dd2cb4e1a881459cf2f851f1512d"/><file name="FetchingSchedule.php" hash="6b80b1b53e5a7c2db35bdfa6c754df6d"/><file name="Logo.php" hash="3a58193ab5ed076ce6286179fc4ec80b"/><file name="MerchantCountry.php" hash="48bb537fa3023995b841e58686ebecb2"/><dir name="PaymentActions"><file name="Express.php" hash="e8d3100896ab6279bde84b9cc50fade5"/></dir><file name="PaymentActions.php" hash="94cc301d1ee998781bd21573c56d8b92"/><file name="RequireBillingAddress.php" hash="c9b32d3278f246c75e252c85b87c8975"/><file name="UrlMethod.php" hash="b7dec1e93e7d2c08fbf019391690b25a"/><file name="YesnoShortcut.php" hash="50835466524574e594a9f572a0637e5a"/></dir></dir></dir></dir><file name="UnavailableException.php" hash="3ec714e8f5d5027c32975ec6d16f110f"/><dir name="controllers"><dir name="Adminhtml"><dir name="Paypal"><file name="ReportsController.php" hash="10dc0d85d2087037e39e9bf380d763b0"/></dir></dir><file name="BmlController.php" hash="31ecd5f6b28d6a96a8c1b64a11bc84c6"/><file name="ExpressController.php" hash="95f3525ed328039f38291df86dae3c29"/><file name="HostedproController.php" hash="d7cd59e1fbd59a9702228a792bb02341"/><file name="IpnController.php" hash="1585633541488a4ff26be867e10b8102"/><file name="PayflowController.php" hash="eef2ada71c05c92234b044e1705091a8"/><file name="PayflowadvancedController.php" hash="f4dad4ab0e1b288cf8ac0481398b5f17"/><file name="StandardController.php" hash="40d81bd725bb66e2e4dd7944aed5d355"/></dir><dir name="data"><dir name="paypal_setup"><file name="data-install-1.6.0.5.php" hash="16d27f5072c11de73cf19438769d46e1"/><file name="data-upgrade-1.6.0.2-1.6.0.3.php" hash="1ddb866b5fda22aef57d9e6f27293e41"/><file name="data-upgrade-1.6.0.4-1.6.0.5.php" hash="6f06b0f0389f11480fd31e9fb85afd96"/><file name="data-upgrade-1.6.0.5-1.6.0.6.php" hash="9daed402dc30188c642561d5da250afa"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="27a136b11e33a71fc995b5e39283a223"/><file name="config.xml" hash="8a431563a9ff24fd00fe56597778e292"/><file name="system.xml" hash="e9573182c66efd1c0db47d44594b903c"/></dir><dir name="sql"><dir name="paypal_setup"><file name="install-1.6.0.0.php" hash="cf384731360aa321869c23ea8c6262bf"/><file name="mysql4-install-0.7.0.php" hash="fb088a2d9879d6717fe7d733b24a4535"/><file name="mysql4-install-1.4.0.0.php" hash="fb71462488ba2df5a684898d4ca755e1"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="a1ede75a2e0ec1580bb74edfcb864a6d"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="f9ac7626e645092c7d978880dd94b8d8"/><file name="mysql4-upgrade-1.4.0.0-1.4.0.1.php" hash="ace3769cd4317e84e9d67829835e3235"/><file name="mysql4-upgrade-1.4.0.1-1.4.0.2.php" hash="3b3def86d87adbda44acb5918924b1b2"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="8e7b965c1b036cebe91e03edf4cccfd3"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="f16c4e0ae70d3115275a0a9e37d5a87f"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="15a2caa712db43590b6146184b65d5e2"/><file name="upgrade-1.6.0.3-1.6.0.4.php" hash="aa71a5a0229015f44cac2fc6eadb7f70"/></dir></dir></dir><dir name="PaypalUk"><dir name="Block"><dir name="Bml"><file name="Form.php" hash="1f9333136682dc8a31339858005ec546"/></dir><dir name="Express"><file name="Form.php" hash="88a4955df3a5475d0606d8031097e093"/><file name="Shortcut.php" hash="7233a1c4e03ac8410d52d99b06ccebb8"/></dir></dir><dir name="Helper"><file name="Data.php" hash="d5fbb6590a6bc2c779d083574373aa55"/></dir><dir name="Model"><dir name="Api"><dir name="Express"><file name="Nvp.php" hash="d8b04d57dc25cf8b6665f03d2a1be06c"/></dir><file name="Nvp.php" hash="38db2b5abaee5b221bab3db7ef771299"/></dir><file name="Bml.php" hash="679a28c0dbb409617820ffdd18f7cd64"/><file name="Direct.php" hash="9957d2d79c133cd123b3be3e78989138"/><dir name="Express"><file name="Checkout.php" hash="83102d7294cbc2c07b2689125793b1ba"/><file name="Pro.php" hash="8ae7abbeed2c6ec78ad6f3389c2e999b"/></dir><file name="Express.php" hash="5b2718de3bf92a445c01c9f8046e88db"/><file name="Pro.php" hash="9af4a3524ab19d522cc4a16c7aebd889"/><file name="Session.php" hash="e9588933e26fc8c80e51476e889ab6b0"/></dir><dir name="controllers"><file name="BmlController.php" hash="deb635b1c700214db52fe4fda7e319c2"/><file name="ExpressController.php" hash="e3d9b7ac163b37cdaee7521bc6a53085"/></dir><dir name="etc"><file name="config.xml" hash="a03e54b4588f8c5fea00138d1e42f354"/></dir><dir name="sql"><dir name="paypaluk_setup"><file name="install-1.6.0.0.php" hash="b93205d0a10e1908eb6dc2ec5e6f2742"/><file name="mysql4-install-0.7.0.php" hash="504f997c41748c227273773bec0c3e67"/></dir></dir></dir><dir name="Persistent"><dir name="Block"><dir name="Form"><file name="Remember.php" hash="94f49b0d45c5e369d5d30b77c33ed683"/></dir><dir name="Header"><file name="Additional.php" hash="546b107bb5c0b5b1a3fa673e11caee9b"/></dir></dir><dir name="Helper"><file name="Data.php" hash="8bd90637e4e896351fa58084135016d7"/><file name="Session.php" hash="88fca3bb462e6d785c66d3ae2dde9a84"/></dir><dir name="Model"><dir name="Observer"><file name="Session.php" hash="ccb74d67b42504aa95ef599053ca91dc"/></dir><file name="Observer.php" hash="839c67becc6407533e0da7a95ad3f965"/><dir name="Persistent"><file name="Config.php" hash="7126ed3ceef9579a2dc1e28299e4a247"/></dir><dir name="Resource"><file name="Session.php" hash="a2a2d5e75095da58c9c81e07b2c949a2"/></dir><file name="Session.php" hash="0b2d41e85d7549aa28d551d691e32ce4"/></dir><dir name="controllers"><file name="IndexController.php" hash="372173d8b96a211f01f8ed64c61349bc"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6f8b408461a312be90b93e7961042c2d"/><file name="config.xml" hash="bd0b27ed57da2ae34280ef3037076d4d"/><file name="persistent.xml" hash="a0e87bf517504b97eb701e32c17471cf"/><file name="system.xml" hash="076afa82bd518ad235c0dab39ea17310"/></dir><dir name="sql"><dir name="persistent_setup"><file name="install-1.0.0.0.php" hash="e5656fdbdacf94b68b51e39e9636fc70"/></dir></dir></dir><dir name="Poll"><dir name="Block"><file name="ActivePoll.php" hash="254e4c67b627e429206f588e89cd7993"/><file name="Poll.php" hash="14ef393cbb51b21c0da136c249a2f06d"/></dir><dir name="Helper"><file name="Data.php" hash="28ad5ee2e890add5454670357cfb1f4d"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Poll"><dir name="Answer"><file name="Collection.php" hash="896656db7f0ceebf41866847db845dff"/></dir><file name="Answer.php" hash="cb3a15c456156ceae68b7a6bf4d34e5f"/><file name="Collection.php" hash="a8c7446cefbbdfcc724780f91976da85"/><file name="Vote.php" hash="b0b9d43bb5b721cd34732920e93c14b2"/></dir><file name="Poll.php" hash="ba6549fb378c210139cbae5511e05171"/></dir><dir name="Poll"><file name="Answer.php" hash="8b2deff169e661a9acf8e82698400515"/><file name="Vote.php" hash="ba7582e4b60d332d54a9888c68b79c35"/></dir><file name="Poll.php" hash="0f646670b02e0a28e9d33fd4ee0c547c"/><dir name="Resource"><dir name="Poll"><dir name="Answer"><file name="Collection.php" hash="ec17b425f80443f0a1de9ff678d487d0"/></dir><file name="Answer.php" hash="ad9fe830786ea59a04bb21144f05c3ab"/><file name="Collection.php" hash="a375e13a62d37f90b418b0781180e4cd"/><file name="Vote.php" hash="b07328698520b5fa6b04086948365f60"/></dir><file name="Poll.php" hash="a6e7382a68703fd3818de79a25035a79"/></dir></dir><dir name="controllers"><file name="VoteController.php" hash="808b67d06bffe3532ae85d8351fee8c4"/></dir><dir name="data"><dir name="poll_setup"><file name="data-install-1.6.0.0.php" hash="a49d377281c50ee4e343c08050b09a17"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="506e81b1176a12e8954cbccf238b69a9"/><file name="config.xml" hash="d5169d78910aa37b8549ce35eef7963a"/><file name="system.xml" hash="6165fc5ad861d8348ae7a2d22bb67823"/></dir><dir name="sql"><dir name="poll_setup"><file name="install-1.6.0.0.php" hash="0290aac27bab616ccee4e881d245743d"/><file name="mysql4-install-0.7.0.php" hash="dd6baa3e698e92912a842dd48dd52a59"/><file name="mysql4-upgrade-0.6.0-0.6.1.php" hash="2c2ac1b2ed8159e887df907e40578908"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="39a968ab7cf9c54ce43b5fd076b1f17f"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="f68feeafc6b066c87f3b3f82e0f5f2dc"/><file name="mysql4-upgrade-1.6.0.0-1.6.0.1.php" hash="58f6256165abb574299497e6bef09626"/></dir></dir></dir><dir name="ProductAlert"><dir name="Block"><dir name="Email"><file name="Abstract.php" hash="180466a4e42fa7b00ec4c167ab84cb71"/><file name="Price.php" hash="199022e844eec73d620c776d411f141f"/><file name="Stock.php" hash="a2a8f094f28e0546d5eea0ce746b29bc"/></dir><file name="Price.php" hash="d2ea30eee3cf0a3e5c4084ecf836102a"/><dir name="Product"><file name="View.php" hash="30d336f7b5fbe5a6e071f452d03c7629"/></dir><file name="Stock.php" hash="f88befba6f33ddf8b9479b927e030236"/></dir><dir name="Helper"><file name="Data.php" hash="afc9d024257d6e19e97adef35d1bfd6f"/></dir><dir name="Model"><file name="Email.php" hash="77d9e1f754c75e0f78468f996ce57d2b"/><dir name="Mysql4"><dir name="Price"><file name="Collection.php" hash="6964afdff4afd3066bc4a6732b52df90"/><dir name="Customer"><file name="Collection.php" hash="29c4afe926176cbd533ca9ee2bd02c13"/></dir></dir><file name="Price.php" hash="1bda8f4a3da6e4329ace884601c9741c"/><dir name="Stock"><file name="Collection.php" hash="593885fb2c4ea2d387394235036d1e4a"/><dir name="Customer"><file name="Collection.php" hash="64ffcce0a6aabc0a63746d06c9e17779"/></dir></dir><file name="Stock.php" hash="67e8dec9681a786c174aa18a0491a613"/></dir><file name="Observer.php" hash="b5366037ff21258e7e3946a1c6ddeb5b"/><file name="Price.php" hash="816eed25a1634ff354596aace36e3bc4"/><dir name="Resource"><file name="Abstract.php" hash="40974792395eb8b961d3b43bd1e0ddd0"/><dir name="Price"><file name="Collection.php" hash="f5bd6c2e575b884086c1d919b9f630e2"/><dir name="Customer"><file name="Collection.php" hash="993462038beef968c4e6a139c9a15083"/></dir></dir><file name="Price.php" hash="c34070d8f2e470cd8a36b3c237f0fa3b"/><dir name="Stock"><file name="Collection.php" hash="109d708f7f86755bcded9afa0cf63f25"/><dir name="Customer"><file name="Collection.php" hash="22db201e6257823f0a7e0d593e3bb086"/></dir></dir><file name="Stock.php" hash="b02fee2a39793c4f5f7b5b7db06b6967"/></dir><file name="Stock.php" hash="033eb55739192ccd341f8be23ce6490f"/></dir><dir name="controllers"><file name="AddController.php" hash="2eb24a257ad8497186b4d15bd1e4010f"/><file name="UnsubscribeController.php" hash="1afd4a2b49a7fc13ab2f8db53b4f2bb7"/></dir><dir name="etc"><file name="config.xml" hash="4cbd97dee3ea55e81c26af8dba7c062f"/><file name="system.xml" hash="8d41f470b63e3bbc9a69edebe21c245f"/></dir><dir name="sql"><dir name="productalert_setup"><file name="install-1.6.0.0.php" hash="f05a601521ddd5347019c0efae234404"/><file name="mysql4-install-0.7.0.php" hash="472fb607fe6444d41fb471d6f82198c7"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="97c9dc1b38d237b6bfaa354401b2db7f"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="9862ccaea6d1d41918d658cd689315ba"/></dir></dir></dir><dir name="Rating"><dir name="Block"><dir name="Entity"><file name="Detailed.php" hash="9808da6eb9e27b1ab3132a553df6be5f"/></dir></dir><dir name="Helper"><file name="Data.php" hash="4a42d0d980c4f23e0e9f293f5e370e52"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Rating"><file name="Collection.php" hash="fe89e510b4a91085104b57ba5e28868e"/><file name="Entity.php" hash="9e29aa9791199f8f73be37231a99de5c"/><dir name="Option"><file name="Collection.php" hash="39f52caa8737126f96cd3407972fe53a"/><dir name="Vote"><file name="Collection.php" hash="663731196577b76086678dbcbd6cee54"/></dir><file name="Vote.php" hash="5744e29099fe9f8323be25ab15f55904"/></dir><file name="Option.php" hash="08c0fd436f320fabdb961a60ebf425f8"/></dir><file name="Rating.php" hash="5e40ad3d9114673e8824e212a7b5982c"/></dir><file name="Observer.php" hash="abd07f006140cc5ec6c59cbd274a8460"/><dir name="Rating"><file name="Entity.php" hash="4412fc6a356e54e433ac0786abea94a5"/><dir name="Option"><file name="Vote.php" hash="2a6eb28fd1017fe0aa15a6a96ebc7787"/></dir><file name="Option.php" hash="d4bf99a32d4732da56a781659586d0fa"/></dir><file name="Rating.php" hash="0564cdbcd61e92649cebdd1c49d80893"/><dir name="Resource"><dir name="Rating"><file name="Collection.php" hash="011f863b98c153de1f941f51ab6a447b"/><file name="Entity.php" hash="685f1ff9b51d0ab69ec43d6d87fdadce"/><dir name="Option"><file name="Collection.php" hash="87e167b305f17900c865da5a9e387492"/><dir name="Vote"><file name="Collection.php" hash="8b51efd07ce00578ee6086d7dcac0de4"/></dir><file name="Vote.php" hash="c48b18e451922310aee15a2c7ba35ccc"/></dir><file name="Option.php" hash="807c82864579de3ec167cee2ce262114"/></dir><file name="Rating.php" hash="3e26013cc1074178421b936a6189c582"/></dir></dir><dir name="data"><dir name="rating_setup"><file name="data-install-1.6.0.0.php" hash="8a98ae770970c8d7dd21c231a154c39b"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="3f7fce2cf5ad8f0fe05a391983f3dd36"/><file name="config.xml" hash="71a51d65f89a44fcb50996df3fbfd78c"/></dir><dir name="sql"><dir name="rating_setup"><file name="install-1.6.0.0.php" hash="b18a5da3ca872ed6b85c27666d28ed15"/><file name="mysql4-install-0.7.0.php" hash="a13b20061c25638ca42d7e0853de62f7"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="3b33707e3f24362cf58962779fc72c93"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="8e1ffbea5a4c7d90120295935b1ce914"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="3cf83182ef097d07619d7751e5f37add"/><file name="mysql4-upgrade-1.6.0.0-1.6.0.1.php" hash="77f60eacd24bc10f17116eafab1a155f"/></dir></dir></dir><dir name="Reports"><dir name="Block"><dir name="Product"><file name="Abstract.php" hash="fbbb106c64faebf13fb51659041a6d34"/><file name="Compared.php" hash="0a39af19b20bc600864888aa77fbe09b"/><file name="Viewed.php" hash="436427d1849c3cf97761c805f33ca66c"/><dir name="Widget"><file name="Compared.php" hash="d8f42dd14dd3d002c33f630195fa9ece"/><file name="Viewed.php" hash="24beb247253ee60d03647e1d324051bd"/></dir></dir></dir><file name="Exception.php" hash="da8b99dfb486b75b46a9743a2732fb27"/><dir name="Helper"><file name="Data.php" hash="3eb61f32253af1804fda358dc1f227d3"/></dir><dir name="Model"><file name="Config.php" hash="cc663fe325525f348d7574a5b5c0c7d2"/><dir name="Event"><file name="Observer.php" hash="61bd0e764cd02c42faed676992821589"/><file name="Type.php" hash="5f73ac0e09697a704c3e6e9f5be95e25"/></dir><file name="Event.php" hash="092ed40e2e6f018544afd1d733d83d12"/><file name="Flag.php" hash="d4643e512bfba12c98a4f9603caa81fc"/><dir name="Grouped"><file name="Collection.php" hash="97d1d5b0f8d7da4a9edcfea6113604bc"/></dir><dir name="Mysql4"><dir name="Accounts"><file name="Collection.php" hash="1c1875d2c084f77c78fe97ca52b79fdd"/></dir><dir name="Coupons"><file name="Collection.php" hash="9c3b6b829a75ad8813b4132255f61456"/></dir><dir name="Customer"><file name="Collection.php" hash="b5c9669ce74a8877ab4a593d2b82919a"/><dir name="Orders"><file name="Collection.php" hash="7f47371908db9f5b77eadf7e988cc824"/></dir><dir name="Totals"><file name="Collection.php" hash="fade9685c8351201c224e4c6fe701bc6"/></dir></dir><dir name="Entity"><dir name="Summary"><dir name="Collection"><file name="Abstract.php" hash="83b5ed1349035ef06e10d4b5e92965f4"/></dir></dir></dir><dir name="Event"><file name="Collection.php" hash="71a5338b1dd71ab110e180693457c8b4"/><dir name="Type"><file name="Collection.php" hash="b7f8318c3d8d5b504e55c2b98710eb6c"/></dir><file name="Type.php" hash="1f79da768c9c15a678f4049e011a646f"/></dir><file name="Event.php" hash="371242c785456ee36d6b5f49c08cd58a"/><dir name="Invoiced"><file name="Collection.php" hash="8664915953e0e451e5681acd1d6acc7c"/></dir><dir name="Order"><file name="Collection.php" hash="90dca9d9d48aaa82609643d712f4cda5"/></dir><dir name="Product"><file name="Collection.php" hash="fe950d67d51a6ad03681a89f1234a96c"/><dir name="Downloads"><file name="Collection.php" hash="3cba0533eb82c653654c5221d669447e"/></dir><dir name="Index"><file name="Abstract.php" hash="20710b44e6b9037a8bb1921f2b1b0c18"/><dir name="Collection"><file name="Abstract.php" hash="7437c80fbaaeb146ac119e9c414bdb69"/></dir><dir name="Compared"><file name="Collection.php" hash="38e9a0bdc91f9ee787009c28391ac670"/></dir><file name="Compared.php" hash="cb8512a55702be7c5b8c57222d8368ca"/><dir name="Viewed"><file name="Collection.php" hash="a33c636144939f7a0d6f2f4c99c9902b"/></dir><file name="Viewed.php" hash="1e7df154169d1c5275f7c270e22eb968"/></dir><dir name="Lowstock"><file name="Collection.php" hash="87bbd2c5813d078ccba23ee95e0b3bf0"/></dir><dir name="Ordered"><file name="Collection.php" hash="a32ab0e3766f913c96bb31e23c886849"/></dir><dir name="Sold"><file name="Collection.php" hash="007ede980f1829d022fb7b82124bf1ca"/></dir><dir name="Viewed"><file name="Collection.php" hash="d8eafef620e8eaef0a92b09c1056263e"/></dir></dir><dir name="Quote"><file name="Collection.php" hash="34ed9230ae3905a50f828367e8556e6d"/></dir><dir name="Refunded"><file name="Collection.php" hash="5b03550cb6210c7194e329e5ed6afd79"/></dir><dir name="Report"><file name="Abstract.php" hash="fe9ea104135ee784228e9e1d7041a4f8"/><file name="Collection.php" hash="e5f5c13c0665830c9f412d49191051a3"/></dir><dir name="Review"><file name="Collection.php" hash="2a552c29e05091838ab8b10c866ee950"/><dir name="Customer"><file name="Collection.php" hash="5db13577519aa4fc48efff97693dd14b"/></dir><dir name="Product"><file name="Collection.php" hash="91776a3d21d06a39eaad123c14f2a249"/></dir></dir><dir name="Shipping"><file name="Collection.php" hash="33a1cd3f1acb06fe961e76ea73a5de35"/></dir><dir name="Shopcart"><dir name="Product"><file name="Collection.php" hash="a406d4470313dc54bcbef3ac4bc57b06"/></dir></dir><dir name="Tag"><file name="Collection.php" hash="6133ccd408135a10c3dea03daaf3dd87"/><dir name="Customer"><file name="Collection.php" hash="152b9938b82326f039cedb958e2ee381"/></dir><dir name="Product"><file name="Collection.php" hash="cba584af6f7be500dac1e2ae9342d7f8"/></dir></dir><dir name="Tax"><file name="Collection.php" hash="0acbb61867ed4cd612efc2cf9c503ead"/></dir><dir name="Wishlist"><file name="Collection.php" hash="4956fe36f4ef4c15b221b28f581091df"/><dir name="Product"><file name="Collection.php" hash="6a984971a61d099a863e5da9a7a8d565"/></dir></dir></dir><dir name="Product"><dir name="Index"><file name="Abstract.php" hash="27e75129a3b08c2b5fca26666b6ab7f8"/><file name="Compared.php" hash="04b1522deb834562fc24a6016072bb58"/><file name="Viewed.php" hash="eb9059d85ba6a2d3ea80d2eba29f6755"/></dir></dir><file name="Report.php" hash="60dfd019b4ea4d0acdddb64f0694c059"/><dir name="Resource"><dir name="Accounts"><file name="Collection.php" hash="4982e3152643b7c968d623b713313041"/></dir><dir name="Coupons"><file name="Collection.php" hash="6f3bae38a02e87ea23e061dcee5a2c43"/></dir><dir name="Customer"><file name="Collection.php" hash="dab25524552120e7ab10aa75c0f93b78"/><dir name="Orders"><file name="Collection.php" hash="98831d00cb9641e2a27eba2f2e9079fa"/></dir><dir name="Totals"><file name="Collection.php" hash="d01b30ec7be167f0cc9a9a48df09e279"/></dir></dir><dir name="Entity"><dir name="Summary"><dir name="Collection"><file name="Abstract.php" hash="466eff8822604dea2fa565d96c344ae8"/></dir></dir></dir><dir name="Event"><file name="Collection.php" hash="6da3c7f128649b505ff190ce398246b8"/><dir name="Type"><file name="Collection.php" hash="a35b69401fb0af2d7b2257b4233bd3ae"/></dir><file name="Type.php" hash="054341a8a2e76ba1458ba6e8ee1be69e"/></dir><file name="Event.php" hash="018c31f9f8943753a0d1ce63172d15f2"/><dir name="Helper"><file name="Interface.php" hash="3bd31b382726e0392b885a5f322447e3"/><file name="Mysql4.php" hash="253638c6aafcd69c441cf0c2f84773aa"/></dir><dir name="Invoiced"><file name="Collection.php" hash="5ee6a60eda1b71c8a5c78b44cef74637"/></dir><dir name="Order"><file name="Collection.php" hash="6ba25321a9f092a59bac1c5e3561a29f"/></dir><dir name="Product"><file name="Collection.php" hash="443cc87b3f1908bcc0a944240cc0c725"/><dir name="Downloads"><file name="Collection.php" hash="a758bc6f4fa03f158d479aad4dc7b8c2"/></dir><dir name="Index"><file name="Abstract.php" hash="0d323595b3c30649935dd0dd17b59e68"/><dir name="Collection"><file name="Abstract.php" hash="2ebf8565c843986fe327e6d404d27377"/></dir><dir name="Compared"><file name="Collection.php" hash="48160635cb831066a1dc4574fc7ab492"/></dir><file name="Compared.php" hash="55b2a8f1176cb40917bfc6638c175433"/><dir name="Viewed"><file name="Collection.php" hash="6ffb976b877d1a1a0be24b20fd0c61e4"/></dir><file name="Viewed.php" hash="630aa8cf7c3ca68768d580e8df4204cf"/></dir><dir name="Lowstock"><file name="Collection.php" hash="902074235d9a9a3d6561bb22f0c4a4ac"/></dir><dir name="Ordered"><file name="Collection.php" hash="6fa111930e34d63d7ceecc66fe82339f"/></dir><dir name="Sold"><file name="Collection.php" hash="54b0599ac7620ea644086362f3651504"/></dir><dir name="Viewed"><file name="Collection.php" hash="e9a68efb6044904da6e559be2066fc8e"/></dir></dir><dir name="Quote"><file name="Collection.php" hash="b17fdfa1934eec92cd8f6aabd116fffa"/></dir><dir name="Refunded"><file name="Collection.php" hash="ecf346d633194f286366e42fc77dbce0"/></dir><dir name="Report"><file name="Abstract.php" hash="4cde830115d9a4118205ef7a18678615"/><dir name="Collection"><file name="Abstract.php" hash="4295a90f9668e10c8323c4e9faf21b01"/></dir><file name="Collection.php" hash="e4611e41c7bc8482ade61c297665934b"/><dir name="Product"><dir name="Viewed"><file name="Collection.php" hash="ec638f6e6e535da277be4a3dfe00e5fa"/></dir><file name="Viewed.php" hash="b28454c797ed92051c70c2ae1a285049"/></dir></dir><dir name="Review"><file name="Collection.php" hash="0ca229c34293ed9c055d89af7ee5769a"/><dir name="Customer"><file name="Collection.php" hash="e228155ddc14b37135978c74110d4bf6"/></dir><dir name="Product"><file name="Collection.php" hash="d28988f84e60eb66f80a9116505f18f7"/></dir></dir><dir name="Shipping"><file name="Collection.php" hash="101977b37120e847295271c403fb54a1"/></dir><dir name="Shopcart"><dir name="Product"><file name="Collection.php" hash="c862f140f24a96f9e985bbf489acbeea"/></dir></dir><dir name="Tag"><file name="Collection.php" hash="6970cb166f35a637027099c8c12e5ca4"/><dir name="Customer"><file name="Collection.php" hash="1579b71d00b8f73a7ffc536d58cdcb0f"/></dir><dir name="Product"><file name="Collection.php" hash="50b41f26ed827217c356a073fb6202f8"/></dir></dir><dir name="Tax"><file name="Collection.php" hash="2e6ff63106cd7a4c785bcd554bfaa885"/></dir><dir name="Wishlist"><file name="Collection.php" hash="f777eae8af507917bcf75527b4c49b3a"/><dir name="Product"><file name="Collection.php" hash="a33471d2b24111d033b6af5872709f6f"/></dir></dir></dir><file name="Session.php" hash="fb5495f724e51d25697d8a0ba415a609"/><file name="Test.php" hash="87799b1b2bb7b6e35c6a40bdd12184b2"/><file name="Totals.php" hash="ceb6c34be077bc4b4c05054260649a28"/></dir><dir name="data"><dir name="reports_setup"><file name="data-install-1.6.0.0.php" hash="e81bcea0ffb79eb52fc86390c70e3979"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="ebd93caf512ee24432a0b0128c51b359"/><file name="config.xml" hash="3b4dfb231a0c6f6247718dc9a51de887"/><file name="system.xml" hash="debcc50171828ac2ad584cd3eb7e2580"/><file name="widget.xml" hash="daa76297cac646560c81c96edfdecaac"/></dir><dir name="sql"><dir name="reports_setup"><file name="install-1.6.0.0.php" hash="acb1917838f06ffe0cde8a4fcbc4c7f2"/><file name="mysql4-install-0.7.1.php" hash="f54c4c6a2cc2533c99f289b292110f10"/><file name="mysql4-install-1.5.0.0.php" hash="a878056ebb99e1d43bacc6e603579d00"/><file name="mysql4-install-1.6.0.0.php" hash="cdfbd790576b26ee8eaba4d9532e737f"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="7429a8261bf298645c9a5c0b47a607ee"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="dc72f48bd7ea4ef83542b53f35c42183"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="f6275eb1825bf13bae28ad8503f35a51"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="9c0b5b8aeda472848a66affdbd8a7eef"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="819ab599a4fe00b60962ee72e3fa30bc"/><file name="mysql4-upgrade-0.7.5-0.7.7.php" hash="c0b72c3aa67011f1a473c269f5210ac9"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="deeb78c94d0c4b97e51422331e2b46e7"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="f205868e82f73bca1ece7da016a05f12"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="45e56a55e8e221eb55a2d01260df08d2"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="4e59fb21fce5202b290c7f240edb674c"/><file name="upgrade-1.6.0.0-1.6.0.0.1.php" hash="e52873b0b0819e87f795046d2f6bdb19"/></dir></dir></dir><dir name="Review"><dir name="Block"><dir name="Customer"><file name="List.php" hash="fbdb9d239a7106325585c41a74b6b162"/><file name="Recent.php" hash="46793e36c3284f03036eb5c5cf5cd893"/><file name="View.php" hash="5bfa491bc2f17965b52b5fcd0082ec26"/></dir><file name="Form.php" hash="2e1a0e92226543cff0e99f886c6ab246"/><file name="Helper.php" hash="936c3ef7c2f6f9370ae75839be4c6f13"/><dir name="Product"><dir name="View"><file name="List.php" hash="af0e35e47b2c2f7fe4f4fa6049515f31"/></dir><file name="View.php" hash="ab25fd0e915cba28e5741aca2e4156fe"/></dir><file name="View.php" hash="7a07751a6aab8883f2fc629f4b3f0788"/></dir><dir name="Helper"><file name="Data.php" hash="c48d607399b2fbe23300301537b036f6"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Review"><file name="Collection.php" hash="83fe47bc9aa743e7374c1f051761004d"/><dir name="Product"><file name="Collection.php" hash="362ed01cd5a138ce481b00d0d0bae334"/></dir><dir name="Status"><file name="Collection.php" hash="f3d2dd3f3ae991c24670a6dee1968d8d"/></dir><dir name="Summary"><file name="Collection.php" hash="68d20fe99fb3f1158fc8dbef9e2ae21d"/></dir><file name="Summary.php" hash="fcddf4ec146f87d2f26a4ed66a58ae08"/></dir><file name="Review.php" hash="d6f58d2b1655e562b862578b045a3875"/></dir><file name="Observer.php" hash="540ca94b28cc4bd83f937ddbbde2b877"/><dir name="Resource"><dir name="Review"><file name="Collection.php" hash="e4a0bfb512fe55880670601532038b23"/><dir name="Product"><file name="Collection.php" hash="73d9da7ea7b6bb576dae492be4393419"/></dir><dir name="Status"><file name="Collection.php" hash="4fafa6b5c658d5beb8d6fb83e6edd38b"/></dir><file name="Status.php" hash="6c53ef509976ae173668d45fd7298f2e"/><dir name="Summary"><file name="Collection.php" hash="302a40923a6a3b65c27cf423760745dc"/></dir><file name="Summary.php" hash="6ec41019b27f5792b49fbecd7b7b16bd"/></dir><file name="Review.php" hash="1f363f6caa57bc0278dc95b0ce221e3c"/></dir><dir name="Review"><file name="Status.php" hash="377f94d597fea31818fb6dd80e735df2"/><file name="Summary.php" hash="09cc58b2f12f0b5baab54d06ce733749"/></dir><file name="Review.php" hash="5ec371c195aea1144276d247dca962f8"/><file name="Session.php" hash="cc0c43877594696daf90b8b5e97f4a24"/></dir><dir name="controllers"><file name="CustomerController.php" hash="397d011785901f734bad8514355b0edc"/><file name="ProductController.php" hash="dd45d26a559def55cace32cf14d34797"/></dir><dir name="data"><dir name="review_setup"><file name="data-install-1.6.0.0.php" hash="3e9cfb48530b5fd59a198fce28b7e838"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="c362ef135c844d96627451e2b2e239e1"/><file name="config.xml" hash="03265cae6f1cdb0459a182811e8774f2"/><file name="system.xml" hash="3ca3f96c86a2a3fcccbeb7eb60248efe"/></dir><dir name="sql"><dir name="review_setup"><file name="install-1.6.0.0.php" hash="fa1f25ad347fcd68907bb48a92ce24b7"/><file name="mysql4-install-0.7.0.php" hash="4b4614355d2343e0622cf6b55ccbbcae"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="fc12775106751910bd71ff087dddf6c7"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="ac880ce89f9ba0fd3816681b3278f62e"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="8360492e50256404cbc5da964faeba53"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="bfdddd2ff4f353170095057eee6cfa8d"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="15faaea195ac780122bd8ea85d033180"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="ce99463545afcfd88550b33b3b874e87"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="c3130ca1398a1ac8d861a7cd7e40a14e"/></dir></dir></dir><dir name="Rss"><dir name="Block"><file name="Abstract.php" hash="cc31ad5349b3d152a7e0cddebaec4e37"/><dir name="Catalog"><file name="Abstract.php" hash="726d7cd2819cd8857fd7e9dc78627580"/><file name="Category.php" hash="e65c816201051ab640729c896688d07d"/><file name="New.php" hash="9fc9d2b5b7045eebe1c94b5d4faad766"/><file name="NotifyStock.php" hash="e9e164c65bfa33bfe0a8ee95e01cfc9b"/><file name="Review.php" hash="ddef1dd1a1a39a2dd9efdfc6e24c95e3"/><file name="Salesrule.php" hash="3ebb9ab8e2d2023645a9c54e54b06ab2"/><file name="Special.php" hash="f5eff97f4abc268a148c86dbabf7bd50"/><file name="Tag.php" hash="3d94c336311e9c7970e8d9be474cbd03"/></dir><file name="List.php" hash="0af069c7b12c06842a4400ab4b14e801"/><dir name="Order"><file name="Details.php" hash="a6ae5526db72457dee64381f8c272a8f"/><file name="New.php" hash="0e319778fa757dee8617f46c2e023436"/><file name="Status.php" hash="ec489d0a6434e94b0f379ac5184b8286"/></dir><file name="Wishlist.php" hash="bd61443c31a553e1e38dd866801efe26"/></dir><dir name="Controller"><file name="Abstract.php" hash="c5eb27eba9246b2fed64bbe3691e83a6"/></dir><dir name="Helper"><file name="Catalog.php" hash="de6650cbfd706fee0cecf4ef2120c25b"/><file name="Data.php" hash="4872f95820294bb1d86ae9db79cc6287"/><file name="Order.php" hash="a22c1fdc9e43240630f9fda94b2b9c60"/></dir><dir name="Model"><dir name="Mysql4"><file name="Order.php" hash="56207b0bb0eff8d6bb37f6ad7d081e4d"/></dir><file name="Observer.php" hash="a983a9071c01591f5953a2d78bbfa9e1"/><dir name="Resource"><file name="Order.php" hash="d88b41a90424438643f951a9a802aa88"/></dir><file name="Rss.php" hash="0ee42d3600e0b51d1bed80d03fbe1c76"/><file name="Session.php" hash="7ee609d4fe89a08c16955c6eeb39f180"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Links.php" hash="0caf83f58b2b1fa4a2ea4813aae73fb6"/></dir></dir></dir></dir><dir name="controllers"><file name="CatalogController.php" hash="2b371c8110a407d423049a1d2836df67"/><file name="IndexController.php" hash="2b57ddcac1f5722ccad8b859e4be9f62"/><file name="OrderController.php" hash="2b452f0cddf06507899514543c6e03ae"/></dir><dir name="data"><dir name="rss_setup"><file name="data-install-1.6.0.0.php" hash="95316a42add6367a0afcc74b46116ade"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="ab2e6ccbbd51a80b25947d5db5af091e"/><file name="config.xml" hash="213cf7bc0350528c5fc63dbc2dc4e894"/><file name="system.xml" hash="a587557c11d778d767c04319ba09ed3f"/></dir></dir><dir name="Rule"><dir name="Block"><file name="Actions.php" hash="8527d1ca709d6c86d7cd35ecafcd2332"/><file name="Conditions.php" hash="dda8cd77e3b3528b8fc1bda8995e384f"/><file name="Editable.php" hash="57f08071e011d08ff49e64bd647a3cbc"/><file name="Newchild.php" hash="4fe32fbf0472a5cb15c2d3fc6e729731"/><file name="Rule.php" hash="1d58782b570adaa5c6e172c91f0f3dd1"/></dir><dir name="Helper"><file name="Data.php" hash="820eb25fd5b03ee2ac47a4d32da4ebd3"/></dir><dir name="Model"><file name="Abstract.php" hash="0e334f91ae2703ad7a3d5ecce656996a"/><dir name="Action"><file name="Abstract.php" hash="ed699ad6a37a404ce305cdcb35094c6b"/><file name="Collection.php" hash="ca0e77dc84ed99a2c00df39838d42ec5"/><file name="Interface.php" hash="fbf8148f637edeca14605e23d34cd933"/></dir><dir name="Condition"><file name="Abstract.php" hash="22b85203b9152db796aa82d5d623e123"/><file name="Combine.php" hash="00ba9531541416718fc898b374358e64"/><file name="Interface.php" hash="6bf7378dda343c6496e1a8d821dc912c"/><dir name="Product"><file name="Abstract.php" hash="11dea89ca226e9e27dcdbd3e2e5d0f6d"/></dir></dir><file name="Environment.php" hash="5ae41a6cd48afcf87f5849c9619ab378"/><dir name="Mysql4"><dir name="Rule"><file name="Collection.php" hash="67e0c3a73038663bc1ba468ab2773d58"/></dir><file name="Rule.php" hash="8d4f1dccc0b6920f3429d0c4db52705b"/></dir><dir name="Renderer"><file name="Actions.php" hash="687bff27756de727b12b416f7e835153"/><file name="Conditions.php" hash="c6a6865bf0d23a2bcbed83d67053bc22"/></dir><dir name="Resource"><file name="Abstract.php" hash="4a4ed5f7a3a74ce28115708eb46f8874"/><dir name="Rule"><dir name="Collection"><file name="Abstract.php" hash="4cb762737ddbe32872ed38bdf07dd6e8"/></dir><file name="Collection.php" hash="6079f3e5d38a6f9d476e5ad49aa14a78"/><dir name="Condition"><file name="SqlBuilder.php" hash="99e1da4401a45597c71e82b4420020a0"/></dir></dir><file name="Rule.php" hash="8d9116c0f91a9792e5d32c4c4cddeeb8"/></dir><file name="Rule.php" hash="a6793176072c406bd1bf82aa4168a305"/></dir><dir name="etc"><file name="config.xml" hash="71515fec86935cbdfc60e4bbeab032d4"/></dir></dir><dir name="Sales"><dir name="Block"><dir name="Adminhtml"><dir name="Billing"><dir name="Agreement"><file name="Grid.php" hash="731a6d4431089d673568fee25a1821c8"/><dir name="View"><file name="Form.php" hash="d55ed07a15a3a40c4e66c316070e56b7"/><dir name="Tab"><file name="Info.php" hash="751162977acc829a4c8239017fc9b445"/><file name="Orders.php" hash="bc2e902543efb90c0e8147513b683301"/></dir><file name="Tabs.php" hash="5dbf53911c137ffd1923856597f32080"/></dir><file name="View.php" hash="b1e643862e56043d27157df71a911427"/></dir><file name="Agreement.php" hash="678c4ca3fc6dcf8d2a910b44ed40ef9a"/></dir><dir name="Customer"><dir name="Edit"><dir name="Tab"><file name="Agreement.php" hash="18308f1ee681be8752ad64dfe687773f"/><dir name="Recurring"><file name="Profile.php" hash="f33d920bfe0ff8d41b87b524ffa90d6c"/></dir></dir></dir></dir><dir name="Recurring"><dir name="Profile"><dir name="Edit"><file name="Form.php" hash="54e253057108760b6c348e1ed5d2f9d1"/></dir><file name="Grid.php" hash="a0af24699ca5afd2ce23bd8fe683c9a7"/><dir name="View"><file name="Getawayinfo.php" hash="6d6904f661356956e5420e7a3a61f57e"/><file name="Info.php" hash="68a4ced850651d0619211358c71fd7ed"/><file name="Items.php" hash="45c9eea4d4d877e8c1621633dc88ca24"/><dir name="Tab"><file name="Info.php" hash="dd2030aadd0df31a58ffed0063ca8baf"/><file name="Orders.php" hash="66722b9e60959c911aa02ed582be90a6"/></dir></dir><file name="View.php" hash="65ce71535a6b4db9665d7c7cc1570cc0"/></dir><file name="Profile.php" hash="0884eb84dbd6b6aca480ea1a9af1e63f"/></dir><dir name="Report"><dir name="Filter"><dir name="Form"><file name="Coupon.php" hash="c868085bbec0d1c84b291b9c18390585"/><file name="Order.php" hash="dbbbab64d3f9266193b374c28a425412"/></dir><file name="Form.php" hash="b7d07bb6e94e68ac123678a2b85977bc"/></dir></dir></dir><dir name="Billing"><dir name="Agreement"><file name="View.php" hash="6b36d0ad7a47beabddc82f949a92e09d"/></dir><file name="Agreements.php" hash="7e78ea7b37c985cfe9bf2844ec3f5daf"/></dir><dir name="Guest"><file name="Links.php" hash="0899e8bb3c88457537d748acdf528896"/></dir><dir name="Items"><file name="Abstract.php" hash="dfabe87497fe5bf6dd80861e225adeef"/></dir><dir name="Order"><file name="Comments.php" hash="4aaa70b4d507cf69e9107230f39ed5c7"/><dir name="Creditmemo"><file name="Items.php" hash="7e786ba61574790c2d662a49ad33088e"/><file name="Totals.php" hash="6b2f159419d11a0e7a01a459ef9b8c91"/></dir><file name="Creditmemo.php" hash="6f1e6573c29b5742f4b1b0b83faa8e7b"/><file name="Details.php" hash="ae9b48d38abc9417ddc38bdd066bb38e"/><dir name="Email"><dir name="Creditmemo"><file name="Items.php" hash="e98c91a726a8cfc31a48058556b2c32f"/></dir><dir name="Invoice"><file name="Items.php" hash="4a459f1ac0d3f977416673b093e28d71"/></dir><dir name="Items"><file name="Default.php" hash="9d1ab96c68eae1aca379fd1d84049adc"/><dir name="Order"><file name="Default.php" hash="5b85990caed894dcf3db88284b230661"/><file name="Grouped.php" hash="7040147c2727c706b09b2aa288dbcd25"/></dir></dir><file name="Items.php" hash="d783506738f74da23e6adf93ab98b828"/><dir name="Shipment"><file name="Items.php" hash="0accfbbac76233b93d35c25ea69216a7"/></dir></dir><file name="History.php" hash="0e95c61fe0d84b3af13e20529942be72"/><dir name="Info"><file name="Buttons.php" hash="56f6c1a100d31d6c7859a7492aecfb83"/></dir><file name="Info.php" hash="262907ea31ba7fbc8985aee0f3005302"/><dir name="Invoice"><file name="Items.php" hash="ecf5652547ffdf624c3432ff1c78ce68"/><file name="Totals.php" hash="f49053546c5ec744d3cc2dbd5ad19883"/></dir><file name="Invoice.php" hash="6631f3550edde0d68b546cce8a9b203e"/><dir name="Item"><dir name="Renderer"><file name="Default.php" hash="0b70309d42e7278fa111f055dc01893d"/><file name="Grouped.php" hash="7adb3eca2aeb5171234ecb8418707aec"/></dir></dir><file name="Items.php" hash="7c5acad96992ab00488e157b557f4d3c"/><dir name="Print"><file name="Creditmemo.php" hash="7d1cb5fb5891168292dd28a5aa69d0ac"/><file name="Invoice.php" hash="e402b1b36280fd107c33a81a9a7b5cb5"/><file name="Shipment.php" hash="026470ae29503dcd21b09d427440f59e"/></dir><file name="Print.php" hash="bc4ea4880868c3ecddef053397f801ed"/><file name="Recent.php" hash="66e8882567122a953f642640d1a38a58"/><dir name="Shipment"><file name="Items.php" hash="ae4e4b77d96ef11241c071da7bb486f6"/></dir><file name="Shipment.php" hash="9cade979e6b84b18e2ff0727ddf2e8b9"/><file name="Tax.php" hash="50eff71972e3a8c0c83aa7fd801f6914"/><file name="Totals.php" hash="c8e155f695ba5ad9b4bf8498b61a2454"/><file name="View.php" hash="938f533f5a2baa8247a1e4dd896c57e5"/></dir><dir name="Payment"><dir name="Form"><dir name="Billing"><file name="Agreement.php" hash="8376c3e4025b7a2183bbcff925ff590d"/></dir></dir><dir name="Info"><dir name="Billing"><file name="Agreement.php" hash="2a6ae5346ecec19d6467d8fc3f049e6f"/></dir></dir></dir><dir name="Recurring"><dir name="Profile"><file name="View.php" hash="62fc9c5817b617f4c885de160fa77bd0"/></dir><file name="Profiles.php" hash="bc2e409f5c868e6308485540e2646371"/></dir><dir name="Reorder"><file name="Sidebar.php" hash="32f59b0b7e9d30ac235dfbc8ae6dd3eb"/></dir><dir name="Widget"><dir name="Guest"><file name="Form.php" hash="6955069b55666a18d7e8b8e33b4dd517"/></dir></dir></dir><dir name="Controller"><file name="Abstract.php" hash="fbef84194f2ccc32e3bbd73f44df8967"/></dir><file name="Exception.php" hash="7e81838388d96cc6968ee4b51bdcbd7d"/><dir name="Helper"><file name="Data.php" hash="3dc4037e0ee40d0341b5c7e79b37d91a"/><file name="Guest.php" hash="7430c8340b742c89f1b9df79ccfd6423"/><file name="Reorder.php" hash="64363e857d1d4f27c52b4a7c37633c9b"/></dir><dir name="Model"><file name="Abstract.php" hash="15c35a95af26282bc3415440d104c4c6"/><dir name="Api"><file name="Resource.php" hash="b6a6e3198dca54321c362e416c29bba2"/></dir><dir name="Api2"><dir name="Order"><dir name="Address"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="a9cd51c52b1fa29f93fd561c41ffb439"/></dir><dir name="Customer"><file name="V1.php" hash="ca81d1c423589c0ddb3f9f8c7a6a24a2"/></dir></dir><file name="Rest.php" hash="6497ac20229b978f7f23e89f53373c72"/></dir><file name="Address.php" hash="7a72bae899c9cd07e6add684ac29c342"/><dir name="Comment"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="a13ae1ad2c5747dcfbac1c8ece1b2c67"/></dir><dir name="Customer"><file name="V1.php" hash="92d399faa510a32aa3ddd63b15cb868a"/></dir></dir><file name="Rest.php" hash="b00787ff671d5cc7d9a05a35dc252c38"/></dir><file name="Comment.php" hash="0d883d8e594866d11f911e0f274aca7a"/><dir name="Item"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="8dd05e7819e578199076803c095ec4c0"/></dir><dir name="Customer"><file name="V1.php" hash="e142556d3204f557be2a06aec371ef50"/></dir></dir><file name="Rest.php" hash="7f6fa94e2ef5b8e4900c5f01c944c587"/></dir><file name="Item.php" hash="386e1c7c5366391e2583d359a3ed629e"/><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="56f48c0055845c6f30e52d196217972e"/></dir><dir name="Customer"><file name="V1.php" hash="5c610aaaf6a391086403970e0cdcbb6e"/></dir></dir><file name="Rest.php" hash="9559e10500e5ad5f961e1101617620a6"/></dir><file name="Order.php" hash="538a9c85f6469ab63c855a35528fde1b"/></dir><dir name="Billing"><file name="Agreement.php" hash="4e8ea0af2a7495649d8a95009f6e8a23"/></dir><dir name="Config"><file name="Ordered.php" hash="3a4be5b5224d6090674b2627d40b1e54"/></dir><file name="Config.php" hash="959cca427edc9c153e37659cb3997c60"/><dir name="Convert"><file name="Order.php" hash="1d901f03cf4b4334c6f7b72563f38ca8"/><file name="Quote.php" hash="58bb5963b286315939302ef204dadcfa"/></dir><dir name="Email"><file name="Template.php" hash="33194f93d26c4fa733d68d0757747191"/></dir><dir name="Entity"><dir name="Order"><dir name="Address"><file name="Collection.php" hash="a1d3de3d384ddb587c9d5a9deb499832"/></dir><file name="Address.php" hash="0c3d7bd2ac73e2782a5475ea661800e2"/><dir name="Attribute"><dir name="Backend"><file name="Billing.php" hash="3e96c95aa215a7f8c79206f914b40f3f"/><file name="Child.php" hash="2282d7a3861e84186b093889514898f2"/><file name="Parent.php" hash="74c3a37546150dee9e60e74228de60a2"/><file name="Shipping.php" hash="70b7e2e3b01a6de90da6c1430510dfc5"/></dir></dir><file name="Collection.php" hash="1936546dbd1330260f70a6569f0dabfb"/><dir name="Creditmemo"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="dde8b4f5973301eedcbf228dc900be9f"/><file name="Parent.php" hash="3d95b65278357577153c901a37068c57"/></dir></dir><file name="Collection.php" hash="f4b3e0be5100002c61eae38662e4ac3e"/><dir name="Comment"><file name="Collection.php" hash="83fec6b0ce33f8b056625d12b23b2594"/></dir><file name="Comment.php" hash="6fc6f75d606a8ffd015156a42243c193"/><dir name="Item"><file name="Collection.php" hash="abbbfad59483de496dedb3d52c7c7735"/></dir><file name="Item.php" hash="d19aaeee0f812bb6de3d2c7fe701d5e8"/></dir><file name="Creditmemo.php" hash="47ab866823475eaff8086191c9a5241b"/><dir name="Invoice"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="95787d5da966da7a7cd5041fcb9df4f3"/><file name="Item.php" hash="9dcf7d662960b24ab43285ad3d32a2f5"/><file name="Order.php" hash="0e46c7858e143f022b1f4748598ae5d1"/><file name="Parent.php" hash="9a90a6bb7825245279a525898d553e0e"/></dir></dir><file name="Collection.php" hash="5a9fe5f7b03afeac3e274c74501b7817"/><dir name="Comment"><file name="Collection.php" hash="276b1a9138d6b99254c387c4208fa64f"/></dir><file name="Comment.php" hash="ddf9374110059a4a7a998b2efeaca355"/><dir name="Item"><file name="Collection.php" hash="a855f2ec27dbd06377b90894c4f57213"/></dir><file name="Item.php" hash="ca9f19d5344bcec195a9dd7ee4b86c09"/></dir><file name="Invoice.php" hash="a910c4b305b4c703385579bb2111f827"/><dir name="Item"><file name="Collection.php" hash="4c5a4c63df1370502e8181e303daf2d9"/></dir><file name="Item.php" hash="3ab0874949eb9211dd6b12d8e52ef7b3"/><dir name="Payment"><file name="Collection.php" hash="4b303fa1527c0ffb64b1f1b8f1661a90"/></dir><file name="Payment.php" hash="d904e88dd89fc16b14c32731e04ea5bd"/><dir name="Shipment"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="f80aa21caab93911aafb8294bd6583b5"/><file name="Parent.php" hash="5b37ec538416fc102dab6135f6a69d63"/></dir></dir><file name="Collection.php" hash="5340c11df274aa920e2c00fba837905b"/><dir name="Comment"><file name="Collection.php" hash="795f343f4c93a7d1ab0b882afe0dc724"/></dir><file name="Comment.php" hash="0c0d15944721c2b917abec843911f60d"/><dir name="Item"><file name="Collection.php" hash="56978a6a80aaab02413ad45ac2c40c30"/></dir><file name="Item.php" hash="9e0cf544f51a2e9d06a567486f4aee9e"/><dir name="Track"><file name="Collection.php" hash="fc720726b0ec6cb32fa07f70273542d2"/></dir><file name="Track.php" hash="7f5171959b3c1f678eb5117d2ab8aaba"/></dir><file name="Shipment.php" hash="2e49e12ddbd605ba931aa388a6766287"/><dir name="Status"><dir name="History"><file name="Collection.php" hash="853b175b354164b46f87bf6717fa671d"/></dir><file name="History.php" hash="ee6ca00631be940e3c098df66237b4f5"/></dir></dir><file name="Order.php" hash="eb05b004590484129104413d04a3c601"/><dir name="Quote"><dir name="Address"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="9a2c760c600e33050ea97a2eedcf4cc8"/><file name="Parent.php" hash="d94644bd6198bf8f6436fe8291804e21"/><file name="Region.php" hash="8f13224e2a6251347aacb9903238ea8f"/></dir><file name="Backend.php" hash="8d4a77534dc423c6772697010523eaf8"/><dir name="Frontend"><file name="Custbalance.php" hash="9f1ebf6e9277a5fe2df3eac9c08126d1"/><file name="Discount.php" hash="473b55f052b6286a2bdbd5d96b0c56db"/><file name="Grand.php" hash="e44defdee69f52d289d91d0b82c844b4"/><file name="Shipping.php" hash="209f5ec87e9a49293b0d1ae6608720ed"/><file name="Subtotal.php" hash="07047c705f7a52fd7917852a58e4e92e"/><file name="Tax.php" hash="ee70db9daec07ee6ae8638b0e3f30507"/></dir><file name="Frontend.php" hash="45939010f0c761f6d4ae06e3ef58471d"/></dir><file name="Collection.php" hash="35deb968fc321e145a5c5eb83ce639c2"/><dir name="Item"><file name="Collection.php" hash="900b8a0389e7f419e03bdb713a533a4b"/></dir><file name="Item.php" hash="58776decc94a4edef4956e27b3ca6077"/><dir name="Rate"><file name="Collection.php" hash="6a17628c290dbc81c3027ddd715f644b"/></dir><file name="Rate.php" hash="8fc30443edbd5cfc340c95e71cbc9ceb"/></dir><file name="Address.php" hash="8639e86fe505ba92ef0185f4248e9621"/><file name="Collection.php" hash="3ff4299cdf7e767058119014c55b7a1a"/><dir name="Item"><file name="Collection.php" hash="4fb1440ad26709bdd75933d1eed92cb5"/></dir><file name="Item.php" hash="41ff5164f42c7b0be7c7ab04b28b4188"/><dir name="Payment"><file name="Collection.php" hash="bc6f8459aaede8d00b3ac69dba599d4a"/></dir><file name="Payment.php" hash="3f5564e9c0876ead6b73f51d2aa6f899"/></dir><file name="Quote.php" hash="010443001240db9f9a1afa57f99aa847"/><dir name="Sale"><file name="Collection.php" hash="7c6c98916e8304314ad26d6c12e5f102"/></dir><file name="Setup.php" hash="7c18b9ba2558d9f974b2a7bb3d061646"/></dir><dir name="Mysql4"><file name="Abstract.php" hash="a718e6a40264a07ead20c11432c325c6"/><dir name="Billing"><dir name="Agreement"><file name="Collection.php" hash="d3b693b853558d3cf4039881358f9fb0"/></dir><file name="Agreement.php" hash="da7487a0059b3859c2bb7da9a9e81215"/></dir><dir name="Collection"><file name="Abstract.php" hash="490013f187634f6f4b71c1eb4a5a4db9"/></dir><dir name="Order"><file name="Abstract.php" hash="9db4faf82f4c663fcdad7694a26fdc37"/><dir name="Address"><file name="Collection.php" hash="fb7641f9428d0a48766a7f1a8dfc56f9"/></dir><file name="Address.php" hash="7b8718fe6db3696c2cb605c1f512f7e0"/><dir name="Attribute"><dir name="Backend"><file name="Billing.php" hash="4a8a16eb96bbf7aaad8d8188fba60636"/><file name="Child.php" hash="14a2ce8c5af928d659a8e5cf34c83a1f"/><file name="Parent.php" hash="640243255577f17bb262a1bfb6eade84"/><file name="Shipping.php" hash="a4e69f8319ba726ae9791fdaac7a6958"/></dir></dir><dir name="Collection"><file name="Abstract.php" hash="9160a40971710f1adda20239693697aa"/></dir><file name="Collection.php" hash="9996c78cbe27e353bbcb1275e517d402"/><dir name="Comment"><dir name="Collection"><file name="Abstract.php" hash="1d8520f9dc78e945b7f962f5fac9a24e"/></dir></dir><dir name="Creditmemo"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="ef8475ab1d19ee8d8fa315d0aa295386"/><file name="Parent.php" hash="683bd8ae826a8f5383e5146eee4720cf"/></dir></dir><file name="Collection.php" hash="41214d1ae0247e6e3c5f33cfc6b6023f"/><dir name="Comment"><file name="Collection.php" hash="b29dc3ac5eef35d26b869843fff269c7"/></dir><file name="Comment.php" hash="7b7d0c8644dd21343adf7d7bf2cc127f"/><dir name="Grid"><file name="Collection.php" hash="a3d13012f105f22fe2aa00a6f151f030"/></dir><dir name="Item"><file name="Collection.php" hash="4148ad8bd82a520850a2d8712abab0c3"/></dir><file name="Item.php" hash="7984f74e36b28c8c11aaa6943f4473fc"/></dir><file name="Creditmemo.php" hash="988378bfee2b037626163ee5902078dd"/><dir name="Grid"><file name="Collection.php" hash="df27b27ef5085309a2c1fb1e8b168bd3"/></dir><dir name="Invoice"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="317af04acf0b7e69b1cbdd9e3d2faf32"/><file name="Item.php" hash="d0311aff201be97cb557d24fd3754750"/><file name="Order.php" hash="72d3835281c696b3b26928cd7dd278b5"/><file name="Parent.php" hash="a3ac62eeed1dd2f9fc631d07526d6c8d"/></dir></dir><file name="Collection.php" hash="db6d9a454f8f7538ecf7890ea7c2a047"/><dir name="Comment"><file name="Collection.php" hash="a53f5d21071a1b1e74d07d1a49cda0c0"/></dir><file name="Comment.php" hash="3b1e3baef7109740d614b7856dfe841c"/><dir name="Grid"><file name="Collection.php" hash="c351999b5b6c93d8bd1558ebe68e1928"/></dir><dir name="Item"><file name="Collection.php" hash="93d2e9d840b54dba20a78dd3ed9b77a9"/></dir><file name="Item.php" hash="a711548629d54d07e7ff3b9562337cc1"/></dir><file name="Invoice.php" hash="d6337f07169332724c590e12dc000241"/><dir name="Item"><file name="Collection.php" hash="57766f358cae02614da06a56ebf68048"/></dir><file name="Item.php" hash="60c8f04859713c5cfb7330578bf336f3"/><dir name="Payment"><file name="Collection.php" hash="9eab37574da534db4ef22f6345294a23"/><dir name="Transaction"><file name="Collection.php" hash="ccc0e97c4316f95129bd90ebea9ac26f"/></dir><file name="Transaction.php" hash="83fa21cd606358176616b33110b0e13c"/></dir><file name="Payment.php" hash="a64998298c43c70957e56b69e91b4612"/><dir name="Shipment"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="1df7fbf2a3e04ae36b78b142b50477e0"/><file name="Parent.php" hash="d6e321521a5c1996422d9dee59a1a4a1"/></dir></dir><file name="Collection.php" hash="6fd5cd93f34127991c097b70138f4057"/><dir name="Comment"><file name="Collection.php" hash="ec5ea997e5321b3c38d53fb5f051c8e0"/></dir><file name="Comment.php" hash="e5a5ae0ce325a6d8e4dab0dda6a372c4"/><dir name="Grid"><file name="Collection.php" hash="a3a041b5fed571c96c3d5dbc6460bcf2"/></dir><dir name="Item"><file name="Collection.php" hash="810e3353b31c8f6771a709dc66142ac2"/></dir><file name="Item.php" hash="8eaf8b193c2150db1f8311da4a9b6ee3"/><dir name="Track"><file name="Collection.php" hash="aa21f2acdeb0ef781a69301b10833ba3"/></dir><file name="Track.php" hash="ee0457dbf45560ac5911dce55c2fe3b7"/></dir><file name="Shipment.php" hash="4691e9adcb7a03ee4a464d8668bd56f2"/><dir name="Status"><file name="Collection.php" hash="a485ee0868fa12033f24c47639f51d14"/><dir name="History"><file name="Collection.php" hash="dec595caafb8eea44138c6864159b016"/></dir><file name="History.php" hash="134f002dfb8d6b14a26f6b70447de8d2"/></dir><file name="Status.php" hash="6b89b67664dea7f569d37a86d5139ee0"/><dir name="Tax"><file name="Collection.php" hash="6f6bf9dc4458315260ded0ceffa66c74"/></dir><file name="Tax.php" hash="8ac6240b20b5c08e5368d781f319eb3f"/></dir><file name="Order.php" hash="47d2e1636d6a54df38885b7844615353"/><dir name="Quote"><dir name="Address"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="be26c808511a087089aa7e08962791e4"/><file name="Parent.php" hash="fa97e68427448811aaa32d82881109e8"/><file name="Region.php" hash="7482ea51890c4587a1cc93e7ba56b10d"/></dir><file name="Backend.php" hash="805b81cf251ad652e2d208f0e0f7fbd5"/><dir name="Frontend"><file name="Custbalance.php" hash="dfb08b9d0680bddf40a784b1c3652707"/><file name="Discount.php" hash="7fb276ce85e37b894b9ed71e11537d17"/><file name="Grand.php" hash="e79b6a2c4ae1da1fb6f9a0a6a73fc230"/><file name="Shipping.php" hash="58035703127f091113e635f2747fdcb3"/><file name="Subtotal.php" hash="031a748026b4062777afab89a61382ec"/><file name="Tax.php" hash="267aff76937222e3ca525f978325802c"/></dir><file name="Frontend.php" hash="c4de050c924aa561b203f49c9aa77f52"/></dir><file name="Collection.php" hash="cf9a075a8d879ccb813fde325b8ea878"/><dir name="Item"><file name="Collection.php" hash="1764986d570000e1ed051efd4563ae65"/></dir><file name="Item.php" hash="17690376ee9c7581761bb0e83e403420"/><dir name="Rate"><file name="Collection.php" hash="2fccbac4a69ea4a863b06f167b30a5ba"/></dir><file name="Rate.php" hash="355a5a7fa205cd5162938ccd02fe3660"/></dir><file name="Address.php" hash="02074bc356903b060b5ca500a5ed0615"/><file name="Collection.php" hash="8406cd2fe85cf92d99e7b86f77c01649"/><dir name="Item"><file name="Collection.php" hash="1b7cd1e44d6b7e792cc46971f6720cf4"/><dir name="Option"><file name="Collection.php" hash="e772bd35040257d9dedbfcd11a1feaeb"/></dir><file name="Option.php" hash="c23b184da316d5b7f20ef415f260a119"/></dir><file name="Item.php" hash="664390b7e549e0d6f8e19e6e81efef93"/><dir name="Payment"><file name="Collection.php" hash="3f1b159c957342544faf1b8ae0467883"/></dir><file name="Payment.php" hash="a41b3fa7a10728fd2f806dc2abccb3d4"/></dir><file name="Quote.php" hash="543e27fcc1e4d03903360027278032fa"/><dir name="Recurring"><dir name="Profile"><file name="Collection.php" hash="d1395a052ccb3c15218299cc30c1a922"/></dir><file name="Profile.php" hash="34d2a525e68e791028f0c886ad66653a"/></dir><dir name="Report"><file name="Abstract.php" hash="264e7a22582d19fe012b339d82fb28af"/><dir name="Bestsellers"><file name="Collection.php" hash="b9f067c6b59bacda74a3a9edba6f6564"/></dir><file name="Bestsellers.php" hash="fe867b3b2efa3697ccfe9594f28770c4"/><dir name="Collection"><file name="Abstract.php" hash="b3fb0dc1c6a8bd85b9ffb5ccb4c0f13e"/></dir><dir name="Invoiced"><dir name="Collection"><file name="Invoiced.php" hash="cb31bd6a8718c3d9b9e30f7f6ffbdcd0"/><file name="Order.php" hash="c4ea26ba47b4abad683809bdd8fe6e20"/></dir></dir><file name="Invoiced.php" hash="3838e450140aabdaa9a84d18a5680321"/><dir name="Order"><file name="Collection.php" hash="76c2d00b49ecc6479d5272ed520d6ef6"/><dir name="Updatedat"><file name="Collection.php" hash="5ea2acf2e43881c261c371e7d03492d3"/></dir></dir><file name="Order.php" hash="cee72fd4fac73ab28c735b182d3830a0"/><dir name="Refunded"><dir name="Collection"><file name="Order.php" hash="45cdb9a7f4b2aea0a5e92d95906f3f7b"/><file name="Refunded.php" hash="58a714e1193b56714058ebd306415ad9"/></dir></dir><file name="Refunded.php" hash="4cd043f5734d21bf6e650887a23ee1eb"/><dir name="Shipping"><dir name="Collection"><file name="Order.php" hash="c243edc0a166c78c2005e5e0ecebeacb"/><file name="Shipment.php" hash="945e5b66fcde6ebabf1d5d379486980f"/></dir></dir><file name="Shipping.php" hash="8e1b13cacd6ea502187bc5e6660632ab"/></dir><file name="Report.php" hash="ee15aad82166a514b2af7905bb00a4e8"/><dir name="Sale"><file name="Collection.php" hash="f219ebe08f9a11d9dc1304b0ee8b483e"/></dir><file name="Setup.php" hash="2c52c0bb23917998f6e96b0851420280"/></dir><file name="Observer.php" hash="6b3ae0486bb0d6ff4cd6a6d27ce4951d"/><dir name="Order"><file name="Address.php" hash="a3615a36e6213aa81e9faa6bde9780c3"/><dir name="Api"><file name="V2.php" hash="7067acd424538ad5c7bcf2ddaf57a4ff"/></dir><file name="Api.php" hash="3674caa8e6636a7b7e5a8d6607304e37"/><file name="Config.php" hash="16189fa4292a0135999f2e271662e2e6"/><dir name="Creditmemo"><dir name="Api"><file name="V2.php" hash="14079d353e770eb86bca26f4bb3a9fbd"/></dir><file name="Api.php" hash="30c77953cf52796be8085711545505fa"/><file name="Comment.php" hash="51864ddc190da192e6740764b3d8f822"/><file name="Config.php" hash="6c3f23705e98e04c13f8b7e7716f5e1b"/><file name="Item.php" hash="87edae9659a545c3b11a5e04a2722ff5"/><dir name="Total"><file name="Abstract.php" hash="1b6bb665ef2a88693e37dc6dfa63348a"/><file name="Cost.php" hash="f4147f87113140b1e8110dc86f430238"/><file name="Discount.php" hash="05013434cb347a8f1191d6ba4f220ff7"/><file name="Grand.php" hash="7e4e3d77d2f4d9e3c4c85d77aeaa1f5a"/><file name="Shipping.php" hash="8ea84819c3f7f28a563081f7c30a5bbe"/><file name="Subtotal.php" hash="096dca410a51133e58b75f74a7306921"/><file name="Tax.php" hash="10f4834b7f38602b19dcee614abe352c"/></dir></dir><file name="Creditmemo.php" hash="518a9596065ddb64fa63ceb9a4fada41"/><dir name="Invoice"><dir name="Api"><file name="V2.php" hash="1c5cb7dbfad894ecdd710a6501ab00fe"/></dir><file name="Api.php" hash="4d76d08b8d4312bc478d20c916b21b2d"/><file name="Comment.php" hash="d0bf13150f6a0c5c7a61c9ad733c9be0"/><file name="Config.php" hash="db8b79964525f16c624bb1d5dc81df8e"/><file name="Item.php" hash="c2d7a19f2ddbcbf008ff05d331bc4374"/><dir name="Total"><file name="Abstract.php" hash="847070d3c4113d54c8cc999a970ecc55"/><file name="Cost.php" hash="a6b23caa4c456d8ce1ac713a0cce01d2"/><file name="Discount.php" hash="75da9a43578e469699733717dd6dcf94"/><file name="Grand.php" hash="297500b958462e1e22d42c24030425cb"/><file name="Shipping.php" hash="5212cea8bca9d2a48fbe66b8d1730586"/><file name="Subtotal.php" hash="22646f1812eeec3618a243a6747ab2a1"/><file name="Tax.php" hash="22456b1b16cced9d3eafa22f2d36af07"/></dir></dir><file name="Invoice.php" hash="787438946107a4c47ad0b722ac1d65a8"/><file name="Item.php" hash="abe38e10e46622284a2cf35a253fcf14"/><dir name="Payment"><file name="Transaction.php" hash="d7dac2a25750236c45b9beeedcd5fd5c"/></dir><file name="Payment.php" hash="fee69051078badb383ed6b4d4595fcfb"/><dir name="Pdf"><file name="Abstract.php" hash="17bcf72dc9d0998a8d429ddfd95b7c47"/><file name="Creditmemo.php" hash="b5e722b76b6e332feea56e8c1a0ef544"/><file name="Invoice.php" hash="46ded5d0e47f6b11e8256afba29780d4"/><dir name="Items"><file name="Abstract.php" hash="45e20ce44c7806ae65d6959c4d3fdbe2"/><dir name="Creditmemo"><file name="Default.php" hash="dd08cb764624df49c7f939250e539226"/><file name="Grouped.php" hash="d37384547040e88d0132c153400fa61d"/></dir><dir name="Invoice"><file name="Default.php" hash="8ada82c1dbc31d52701480f1902bc047"/><file name="Grouped.php" hash="5bf317fef6242a6e40c7e49c07eddb8b"/></dir><dir name="Shipment"><file name="Default.php" hash="ff3d1db3a86a1bb42544f7b7ef08e3ad"/></dir></dir><dir name="Shipment"><file name="Packaging.php" hash="d94bb45890c005d3e90f10913956f106"/></dir><file name="Shipment.php" hash="6ddbd07c34c77d647875d27c66a9ad4c"/><dir name="Total"><file name="Default.php" hash="388395eaacb6714fbd399787e2115c7b"/></dir></dir><dir name="Shipment"><dir name="Api"><file name="V2.php" hash="6c7aa70683a5b5016a33cb45f07c5f83"/></dir><file name="Api.php" hash="8bfc4007476bf40b7f151ec05b3f2277"/><file name="Comment.php" hash="a4082edca5b999c0c78665790de02cdd"/><file name="Item.php" hash="e6aa9931492b3f5cdf178124ab82b59c"/><file name="Track.php" hash="56f2f0f84f1a3ed8dbd51d86ff103a32"/></dir><file name="Shipment.php" hash="5115b7c8b6f3971d5bf7a9dea5b75190"/><dir name="Status"><file name="History.php" hash="f83b695ff16adaee53b44a4c72cae947"/></dir><file name="Status.php" hash="52f4b3481ea4a178eeb3217f2b0217e5"/><file name="Tax.php" hash="5ec3e6df4cc355e634c88b1fa43ba4bf"/><dir name="Total"><file name="Abstract.php" hash="ab08d63eea14f655d3c0b19c5ec903f5"/><dir name="Config"><file name="Base.php" hash="8c43c43eb05255b24fdc8e31b31efecd"/></dir></dir><file name="Total.php" hash="b205b779b9242f6b19a21afbb733c162"/></dir><file name="Order.php" hash="346d2b0fd980510f97f0498bee35f308"/><dir name="Payment"><dir name="Method"><dir name="Billing"><file name="AgreementAbstract.php" hash="9725b084bbd355e8c221dcc613df41a5"/></dir></dir></dir><dir name="Quote"><dir name="Address"><file name="Item.php" hash="3ae1834f6fe626cbf63410aec2940627"/><file name="Rate.php" hash="14fc3c2112712db9717b4a0a13d15ec3"/><dir name="Total"><file name="Abstract.php" hash="a7f2fe7c03af2c89584b5ae257ec28aa"/><file name="Collector.php" hash="543475b79a9578f126f56ccd52cd6cb0"/><file name="Custbalance.php" hash="9aff8cf0f8e6d563fe89a5e16318aaf0"/><file name="Discount.php" hash="3919a311503fe2bc6f40f27e5fc460cc"/><file name="Grand.php" hash="be1eeabe2ea7af11b4792df4097959a2"/><file name="Msrp.php" hash="47068f636822c3abbc0829fcf421e448"/><dir name="Nominal"><file name="Collector.php" hash="279e887182cf75fc0d02d326e5107dbf"/><dir name="Recurring"><file name="Initial.php" hash="1cac1579ed7eace68b6f3ccd6dd0f6db"/><file name="Trial.php" hash="9bd24e561b17ac910035f1c94e0a66d3"/></dir><file name="RecurringAbstract.php" hash="df3faa2c787706c968e5e040997149f2"/><file name="Shipping.php" hash="024dcf97a900fd8b617ee378c35e0161"/><file name="Subtotal.php" hash="9fd604d4f422ca811a5a4f0eb82a85f7"/></dir><file name="Nominal.php" hash="9d7397526d4aed1fa40791a2dae842d3"/><file name="Shipping.php" hash="90240c3a38456d95cfe14477ff9a0aca"/><file name="Subtotal.php" hash="e45ab96ba686d0f7797c15738bdaf3a8"/><file name="Tax.php" hash="eaad017972debd4ee4b0e84f35528829"/></dir><file name="Total.php" hash="c1c66f97471c41ecc5200162001b30a0"/></dir><file name="Address.php" hash="b302cdb6dd5a26d0653c77426b458eaf"/><file name="Config.php" hash="1a405048ffab0aa9286ef1a9152e4cf4"/><dir name="Item"><file name="Abstract.php" hash="404b546babd7fbca3f4102938c5b10b6"/><file name="Option.php" hash="2354c151737bfa46a68d12fe173690db"/></dir><file name="Item.php" hash="f93885569fb2cd0a3236f43519f4ad97"/><file name="Payment.php" hash="4f48c4140768f66179ecd6384bf3a296"/></dir><file name="Quote.php" hash="976835f2ad40d36b95f16f05397c28ab"/><dir name="Recurring"><file name="Profile.php" hash="2efabc2b8df13eb5fa66c1de41d66afd"/></dir><dir name="Resource"><file name="Abstract.php" hash="ea490ac031b524bea4ba05969fc96e6d"/><dir name="Billing"><dir name="Agreement"><file name="Collection.php" hash="bdb4107917da11c3c6c1af73ba11886c"/></dir><file name="Agreement.php" hash="cd36bc5506d7c761a1b9e7391524d86c"/></dir><dir name="Collection"><file name="Abstract.php" hash="51b42b98ea4c98c529aa08f8315ffc74"/></dir><dir name="Helper"><file name="Interface.php" hash="f76607969a2cfd69a53dfbf05bb925de"/><file name="Mysql4.php" hash="1875b015b52c3560592b6d02db6666a7"/></dir><dir name="Order"><file name="Abstract.php" hash="20dbcdeae97c722938469bbea6438fea"/><dir name="Address"><file name="Collection.php" hash="4a1787b25f7c6e726ba31a2e4f589570"/></dir><file name="Address.php" hash="e46b64d38f40223036f1de1a9c108102"/><dir name="Attribute"><dir name="Backend"><file name="Billing.php" hash="c131e65596d6eebe16994c6448dedfff"/><file name="Child.php" hash="62a4cc6f57097793e50ce0ac88d8ff11"/><file name="Parent.php" hash="0d434c37560203b7ab50bb1302bc8f0e"/><file name="Shipping.php" hash="1e5a30a9c5598387a3e1d737bd4df4f5"/></dir></dir><dir name="Collection"><file name="Abstract.php" hash="dd4c06db4cbd8ed33a0c26207e393c92"/></dir><file name="Collection.php" hash="43dc36f6936b91fc113bff644dbf520a"/><dir name="Comment"><dir name="Collection"><file name="Abstract.php" hash="bb99fec3c7900d0e1eacf7bb13fc437e"/></dir></dir><dir name="Creditmemo"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="85ee4c6d66f60cfe7e35898f90109ca3"/><file name="Parent.php" hash="ce51a4256150044320202e1f6790f6c4"/></dir></dir><file name="Collection.php" hash="8936337edd51b5ff9a117ceffd9486c8"/><dir name="Comment"><file name="Collection.php" hash="2a074d811df831ed3e63db2de9802204"/></dir><file name="Comment.php" hash="24902dcb883850b0addef5b87380c7ae"/><dir name="Grid"><file name="Collection.php" hash="831f3834ab51086b38dce2dc846c61ed"/></dir><dir name="Item"><file name="Collection.php" hash="23cfedfa19cd81c21a08a937696f3ab8"/></dir><file name="Item.php" hash="ce67ef24a2ad12d75764b8c61ff10dd1"/></dir><file name="Creditmemo.php" hash="daa34995c168670ffd3ea174c46613b4"/><dir name="Grid"><file name="Collection.php" hash="6dd70bd3305b924da5c44675c5894f93"/></dir><dir name="Invoice"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="cbb0693ffaf5fa22757eb232b7fbc70c"/><file name="Item.php" hash="413b22e9354b3a07fc7b257670782cef"/><file name="Order.php" hash="1e2fdac3e2c21b76b4f42c9c53dcfda0"/><file name="Parent.php" hash="7fa160f57f4714cb4a18fe33a7388f5b"/></dir></dir><file name="Collection.php" hash="12aac698234ab6fc10ff17034ce8df45"/><dir name="Comment"><file name="Collection.php" hash="0d06272d5576f2b18e7b798c39c7f7e3"/></dir><file name="Comment.php" hash="6915c732d89bde5dc4e4e24cc44472ba"/><dir name="Grid"><file name="Collection.php" hash="c5624a52729803e5c8620337aca171a9"/></dir><dir name="Item"><file name="Collection.php" hash="525b58c10c6c1037ee34c4a79dbe7ad0"/></dir><file name="Item.php" hash="c6585be8f7b1db0e62e2cf8ab6b7874f"/></dir><file name="Invoice.php" hash="8a1a7b0ef68669c7b34fc48c4f0dcddb"/><dir name="Item"><file name="Collection.php" hash="176f717ac739052b6916463790441b8f"/></dir><file name="Item.php" hash="dce1a127f66a9e6428e9f808fdc769c3"/><dir name="Payment"><file name="Collection.php" hash="a8d7e7f56e811a9c36ac0c789dcbed12"/><dir name="Transaction"><file name="Collection.php" hash="0ac39e0c1c389727de0c11879639ba87"/></dir><file name="Transaction.php" hash="298b33cceb85b5a757ff9e2c5e4f5afc"/></dir><file name="Payment.php" hash="118414190d11cc9baaf63cb49828b5b0"/><dir name="Shipment"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="3fa9311faa46ac5f9797131e05db7395"/><file name="Parent.php" hash="42928c2eeb53a7b52a2a07df26985119"/></dir></dir><file name="Collection.php" hash="e12bb87e81e655b5767cc7f93ecaaa93"/><dir name="Comment"><file name="Collection.php" hash="970946b0c0af5604a1206113378e0ebc"/></dir><file name="Comment.php" hash="26b0f55b0d8c8857f8cbee190f2b1d3d"/><dir name="Grid"><file name="Collection.php" hash="e3ac9bc8545d2797a7a05bc299fb3e80"/></dir><dir name="Item"><file name="Collection.php" hash="90ce90a50a2bc64c9c5eda09b87a7f4b"/></dir><file name="Item.php" hash="60b087d1d6af44919efd905e49c3c62e"/><dir name="Track"><file name="Collection.php" hash="b99b08006f31786e0ecbbda2e4caca83"/></dir><file name="Track.php" hash="432355e34939bd400d1b1cbb3b74a32f"/></dir><file name="Shipment.php" hash="68a9a03dd12e76fb449de0967d195efb"/><dir name="Status"><file name="Collection.php" hash="3278d85b3e345f9cb952d62d1de47692"/><dir name="History"><file name="Collection.php" hash="bdef52f9fabb1f71e3edd6b89219ffe8"/></dir><file name="History.php" hash="1b458a7d3e5d271bddd96ef479f132db"/></dir><file name="Status.php" hash="4288eb12408bf67290826cff7df4aa7a"/><dir name="Tax"><file name="Collection.php" hash="fa155762b727314be328312941189d00"/></dir><file name="Tax.php" hash="6129f98bc5b2984e5283b1b650624d8d"/></dir><file name="Order.php" hash="904377587c7a8bd27354b41b23a53d23"/><dir name="Quote"><dir name="Address"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="369543a2fa39d232fd4f6646b63e8ec1"/><file name="Parent.php" hash="eda07b62dd8c0a1635029d13a585abbd"/><file name="Region.php" hash="530d94dace10e60b341d1fe7cd6422e5"/></dir><file name="Backend.php" hash="5be4ed862760bc33b3e54a30e996a1d1"/><dir name="Frontend"><file name="Custbalance.php" hash="9be96592493a3ae7b3fda82f209156a5"/><file name="Discount.php" hash="97b4061b4fe3cb688dceb3257666004f"/><file name="Grand.php" hash="2106653f49bda21734a52abe74be249d"/><file name="Shipping.php" hash="4fb2173a120e98fa933552caaf2a6bf3"/><file name="Subtotal.php" hash="e8df507e5e9792d758d839ea9b3bae8f"/><file name="Tax.php" hash="6dcf8738025d2f06effdd58e6dfef27a"/></dir><file name="Frontend.php" hash="2a5b816c2bce98c2b576fa3259354403"/></dir><file name="Collection.php" hash="451ce58ddc5b65f7889fc191b9c4a536"/><dir name="Item"><file name="Collection.php" hash="9e0c3063b4e137a251a66c5c14431343"/></dir><file name="Item.php" hash="20e10524e121cd1bac70064c4c72fd8a"/><dir name="Rate"><file name="Collection.php" hash="b34a0efa65709981133d8399dddcdf28"/></dir><file name="Rate.php" hash="3e61ffad4f72a78e0888a985d8fef8f6"/></dir><file name="Address.php" hash="2cb48cc23d5e5206958745da72d13686"/><file name="Collection.php" hash="01999f2337a532357698782f263fac5c"/><dir name="Item"><file name="Collection.php" hash="68b08b5a129e431b188bdd455d4a5b98"/><dir name="Option"><file name="Collection.php" hash="48e63e2fbba4c374c074e14c06d56338"/></dir><file name="Option.php" hash="4fefd261aebbe023fc107fcac6f0c305"/></dir><file name="Item.php" hash="292c094548d77a4455cf83faf93f0710"/><dir name="Payment"><file name="Collection.php" hash="2e43057411cbc115b82f2c0d303cf97a"/></dir><file name="Payment.php" hash="0130e600e213853660d996f1f1b32ae2"/></dir><file name="Quote.php" hash="486b3ac1533e640724b9afc471b05c1e"/><dir name="Recurring"><dir name="Profile"><file name="Collection.php" hash="e62415bf7f7b0dd9a450713e6c4ac4d4"/></dir><file name="Profile.php" hash="3f70af49f45077f9dd1582119f0eb91d"/></dir><dir name="Report"><file name="Abstract.php" hash="38c9b8c1083e50c351426d3e3031949f"/><dir name="Bestsellers"><file name="Collection.php" hash="c9cde9d55954ba6b9ee7f6f108425446"/></dir><file name="Bestsellers.php" hash="4967fc6ee92b497de0388a1460aacdef"/><dir name="Collection"><file name="Abstract.php" hash="f595f30f74245c975150764709f08d73"/></dir><dir name="Invoiced"><dir name="Collection"><file name="Invoiced.php" hash="4b36243994f78b1b24e3e978d069f9e8"/><file name="Order.php" hash="ffa266b09fa0d97557988e7a03bc07e9"/></dir></dir><file name="Invoiced.php" hash="11e111fce08ce735e56a54c3f8aa6d41"/><dir name="Order"><file name="Collection.php" hash="b2cec0c1f9c36f7a408030e60a01307e"/><file name="Createdat.php" hash="6e1c7e18f82ebd8908e73b2c004cb476"/><dir name="Updatedat"><file name="Collection.php" hash="3fa1df8ad8b1848a097d543b003a85f8"/></dir><file name="Updatedat.php" hash="e58e612a18b802c0b557d7e434e633e8"/></dir><file name="Order.php" hash="7c33ab34a6d11ddc78e61bc683816259"/><dir name="Refunded"><dir name="Collection"><file name="Order.php" hash="13a060a38654076459217de14071fc1c"/><file name="Refunded.php" hash="c54996f3bfa443eef148d392030683ab"/></dir></dir><file name="Refunded.php" hash="ff9b24303743367136d0c2e86d9cfa33"/><dir name="Shipping"><dir name="Collection"><file name="Order.php" hash="4ee344e59e240ffc3e48e2df4e78a9a0"/><file name="Shipment.php" hash="b9dde12fc18d59c1575a4322ef3e7544"/></dir></dir><file name="Shipping.php" hash="e1c416b2401864dd2c0463e2b9fed0f9"/></dir><file name="Report.php" hash="8783521c829f4045b6969502894d544c"/><dir name="Sale"><file name="Collection.php" hash="04f2c47481d7d51db1b1da3b1ac4b4a4"/></dir><file name="Setup.php" hash="3a4b62fef594c0d114153e2855ba1669"/></dir><dir name="Service"><file name="Order.php" hash="f8a7159d6427c7a3680e774aaa009741"/><file name="Quote.php" hash="0be73db6503e7bbd239d719e1b3cab1d"/></dir><dir name="Status"><file name="List.php" hash="aa25608d8612ba8971bd501d0fa94d4d"/></dir></dir><dir name="controllers"><dir name="Billing"><file name="AgreementController.php" hash="97322684834e02e16d64f0c11bfd1fe6"/></dir><file name="DownloadController.php" hash="cee6dfef90a6b58bcca8a764bdc627ae"/><file name="GuestController.php" hash="3bedc09dada50e06d5629f01bb790092"/><file name="OrderController.php" hash="c79c2f10bc284936c4f192d11c762f4a"/><dir name="Recurring"><file name="ProfileController.php" hash="9054131ddbe14d510745b9204c43c0e2"/></dir></dir><dir name="data"><dir name="sales_setup"><file name="data-install-1.6.0.0.php" hash="02cefc47dd017845278948de5b307e6e"/><file name="data-upgrade-1.6.0.4-1.6.0.5.php" hash="46ce4a49f4522436e675252ede79b2bf"/></dir></dir><dir name="doc"><file name="invoice.txt" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="order.txt" hash="5dce876530c94ebbedbba7a234c23846"/><file name="order_actions.HTM" hash="b955e61bff753ea0534f907ef6ba9bb6"/><file name="quote.txt" hash="55ecfbdd576958ff1b1fbf16957ba9df"/><file name="test.php" hash="66d29b9e2fd667710fa7f1b03e588cd2"/></dir><dir name="etc"><file name="adminhtml.xml" hash="b10c4287ee15479510f28a499304ad1f"/><file name="api.xml" hash="dafc425001905db65660a077d77a8082"/><file name="api2.xml" hash="909f2d2b94d1a746ddeee52cca26fb8d"/><file name="config.xml" hash="2756bfd91a55eeb26a9a3d601501d52b"/><file name="system.xml" hash="51b69bdf518a615fe6971d7e32e05438"/><file name="widget.xml" hash="a00f4406f3f567e77f360d82a93c1932"/><file name="wsdl.xml" hash="ed13de1dde6408ab508892374ef57b81"/><file name="wsi.xml" hash="6aba2f44765955ec8bcd1afcebfb0800"/></dir><dir name="sql"><dir name="sales_setup"><file name="install-1.6.0.0.php" hash="0bb0f98e83cc59f0a96a245b688876bd"/><file name="mysql4-install-0.7.0.php" hash="462ef3674fe632dded10934e350e132c"/><file name="mysql4-install-0.8.11.php" hash="33eb92bab72ace62f913a1f6a49b10e2"/><file name="mysql4-install-0.9.0.php" hash="aeea2ae2bf3921fb861663ac43890821"/><file name="mysql4-install-1.4.0.0.php" hash="b8e163bec9787ec195214817ccd25aeb"/><file name="mysql4-upgrade-0.6.2-0.7.0.php" hash="b01396fa2d364bf24f31111fbc7480fb"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="7184eaf5301bf86734e27d35af77ec2a"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="3f7c0e697c9156d795a9171ebd2cc6b2"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="60fec48ecd973b0880a7ba0c1601f745"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="e3fb495eeae476ed6ed936d2da080d6a"/><file name="mysql4-upgrade-0.8.0-0.8.1.php" hash="a382796307c879e9978b6e919e06a0ee"/><file name="mysql4-upgrade-0.8.1-0.8.2.php" hash="cb97a875a9de942193d08787e4b5d0ad"/><file name="mysql4-upgrade-0.8.11-0.8.12.php" hash="77aa2ddafb2e56c2810037573704355d"/><file name="mysql4-upgrade-0.8.12-0.8.13.php" hash="9148158224e988cc0cda3c0f9447a676"/><file name="mysql4-upgrade-0.8.13-0.8.14.php" hash="b744d677ef8a3c4d8e7aac727faca09d"/><file name="mysql4-upgrade-0.8.14-0.8.15.php" hash="30f29aab40ee4b16f96137f021959739"/><file name="mysql4-upgrade-0.8.15-0.8.16.php" hash="e9511a88e249699f67b4f299190ffa29"/><file name="mysql4-upgrade-0.8.16-0.8.17.php" hash="923e0d6ffbb167057c5dce8ea0cf9cf6"/><file name="mysql4-upgrade-0.8.17-0.8.18.php" hash="00c5ac7a53fd59f7b1d22984e2961670"/><file name="mysql4-upgrade-0.8.18-0.8.19.php" hash="2a9d7aa03f976fdc19635631a19fb20f"/><file name="mysql4-upgrade-0.8.19-0.8.20.php" hash="4f97ee809943e787c96b4d8face8782e"/><file name="mysql4-upgrade-0.8.2-0.8.3.php" hash="478988a292e5263b88d39701fa246579"/><file name="mysql4-upgrade-0.8.20-0.8.21.php" hash="e57d49e1848d77d691b3eabb8d1cac4e"/><file name="mysql4-upgrade-0.8.21-0.8.22.php" hash="2e95a587381666c511af8e33cc29add9"/><file name="mysql4-upgrade-0.8.22-0.8.23.php" hash="09820b143bd2c14e0f755186ff6dd099"/><file name="mysql4-upgrade-0.8.23-0.8.24.php" hash="e3d5bf92a6338fb36b651729dbf6b5e2"/><file name="mysql4-upgrade-0.8.24-0.8.25.php" hash="3bc697c07cb99afcbcd547421d32a029"/><file name="mysql4-upgrade-0.8.25-0.8.26.php" hash="a2dec68bf46c62e4135a15adc4054a01"/><file name="mysql4-upgrade-0.8.26-0.8.27.php" hash="b659a882629e65e957b070eea0b64e92"/><file name="mysql4-upgrade-0.8.27-0.8.28.php" hash="cee327efb851c3d4c6755a6eb5ebb486"/><file name="mysql4-upgrade-0.8.28-0.8.29.php" hash="3f7df5f348dfd2cd8b5dcca8c7c327eb"/><file name="mysql4-upgrade-0.8.29-0.9.0.php" hash="f908b74ec1d3ca439b68f3e53da73d32"/><file name="mysql4-upgrade-0.8.3-0.8.4.php" hash="5f3bd96bad7a59e1fc5bed3c6a981e18"/><file name="mysql4-upgrade-0.8.6-0.8.7.php" hash="478988a292e5263b88d39701fa246579"/><file name="mysql4-upgrade-0.8.7-0.8.8.php" hash="359d1844bcced0a4990109d5a3e42f0c"/><file name="mysql4-upgrade-0.8.8-0.8.9.php" hash="999bd5a25ecddb2d761b305bb4d72a3c"/><file name="mysql4-upgrade-0.9.0-0.9.1.php" hash="37da657ede40afb7a5182183d5e34c78"/><file name="mysql4-upgrade-0.9.1-0.9.2.php" hash="e38c9cab4a09c709fd753f8dd10172c6"/><file name="mysql4-upgrade-0.9.10-0.9.11.php" hash="f19b6d1077b4a43fdd8242190b9014a1"/><file name="mysql4-upgrade-0.9.11-0.9.12.php" hash="c2f730a54671a4a8d0aff9b20b001bc5"/><file name="mysql4-upgrade-0.9.12-0.9.13.php" hash="7941dce96df5b27e0091a30f7e641384"/><file name="mysql4-upgrade-0.9.13-0.9.14.php" hash="c692b5c3a033952e280c5a3f3ac250d0"/><file name="mysql4-upgrade-0.9.14-0.9.15.php" hash="75c7659a026b12105c775dca9b3a35d8"/><file name="mysql4-upgrade-0.9.15-0.9.16.php" hash="66fbe7eba8efa04618e47798d700cf22"/><file name="mysql4-upgrade-0.9.16-0.9.17.php" hash="b4ad0ba23383895098baf2595e7ed2e8"/><file name="mysql4-upgrade-0.9.17-0.9.18.php" hash="46d2aac6cdcdade35a6cd56470b675d8"/><file name="mysql4-upgrade-0.9.18-0.9.19.php" hash="95fc75c590ef109016d64a7e046c6a0a"/><file name="mysql4-upgrade-0.9.19-0.9.20.php" hash="a3e4c82a24ea923c4172fbf7953c191d"/><file name="mysql4-upgrade-0.9.2-0.9.3.php" hash="6626c9dcd59254a9f7d95f6849974dbc"/><file name="mysql4-upgrade-0.9.20-0.9.21.php" hash="9153e34efed12b4c6c3b7fbd0c835c8e"/><file name="mysql4-upgrade-0.9.21-0.9.22.php" hash="2faf29b7392840fa59e0fc03d96d61ce"/><file name="mysql4-upgrade-0.9.22-0.9.23.php" hash="1eb3ec821367d5f48fd0abbe60fc519d"/><file name="mysql4-upgrade-0.9.23-0.9.24.php" hash="027e9756bc75cf23b6bac1b7332bf4cc"/><file name="mysql4-upgrade-0.9.24-0.9.25.php" hash="fb956ea2ecc81ac02957d988b377cf0a"/><file name="mysql4-upgrade-0.9.25-0.9.26.php" hash="f210bac7762c0e7fdc66f62fb6cbe6b4"/><file name="mysql4-upgrade-0.9.26-0.9.27.php" hash="5253aa7faf062641bf7e556871df8e25"/><file name="mysql4-upgrade-0.9.27-0.9.28.php" hash="c708bfd6a507ecad7fc6c355fd1e4930"/><file name="mysql4-upgrade-0.9.28-0.9.29.php" hash="0a0dc5d23a7e036d936752a62404d4f9"/><file name="mysql4-upgrade-0.9.29-0.9.30.php" hash="38c3ff2b635d8ec6517e9c7dcc5de6f4"/><file name="mysql4-upgrade-0.9.3-0.9.4.php" hash="aafe70d96984e181507705441823d7c0"/><file name="mysql4-upgrade-0.9.30-0.9.31.php" hash="c777f32ef312bdf861b79622e9612bf7"/><file name="mysql4-upgrade-0.9.31-0.9.32.php" hash="76847f4d1f0e1357a895fdd4d0c30e1e"/><file name="mysql4-upgrade-0.9.32-0.9.33.php" hash="dc2296114158ee945deb60843962cde9"/><file name="mysql4-upgrade-0.9.33-0.9.34.php" hash="4114bf6b67bc92d34bfd18ec0810b0d5"/><file name="mysql4-upgrade-0.9.34-0.9.35.php" hash="ab41ec52694af14a35e17dbe43c55c9f"/><file name="mysql4-upgrade-0.9.35-0.9.36.php" hash="8364015ecfe1d5e347c17a5a097d78d8"/><file name="mysql4-upgrade-0.9.36-0.9.37.php" hash="b27b346cef4e4d0b58df197b0a238c2b"/><file name="mysql4-upgrade-0.9.37-0.9.38.php" hash="dbd05460732dc1e06cdc3d1d37907f88"/><file name="mysql4-upgrade-0.9.38-0.9.39.php" hash="0edb44ca7a54e5bcd369d8f314b59ea1"/><file name="mysql4-upgrade-0.9.39-0.9.40.php" hash="f72dcfb2c0753d75a80244c654142391"/><file name="mysql4-upgrade-0.9.4-0.9.5.php" hash="e983567d4a31a6a7774161040ced0632"/><file name="mysql4-upgrade-0.9.40-0.9.41.php" hash="4794a4e83d55fb940f587b4a297dae64"/><file name="mysql4-upgrade-0.9.41-0.9.42.php" hash="5c988af33e6155f36b1a9894f53f98e6"/><file name="mysql4-upgrade-0.9.42-0.9.43.php" hash="df12068b0a9af6431ab71c4c4d7baa9a"/><file name="mysql4-upgrade-0.9.43-0.9.44.php" hash="e2fc0e2fb187f525c3c278e1364294de"/><file name="mysql4-upgrade-0.9.44-0.9.45.php" hash="99a088be09d24560c7680d04eebecb40"/><file name="mysql4-upgrade-0.9.45-0.9.46.php" hash="2e1808631633138ef84167c35087871b"/><file name="mysql4-upgrade-0.9.46-0.9.47.php" hash="a1fbab58b6281d7c73e249b1172fe346"/><file name="mysql4-upgrade-0.9.47-0.9.48.php" hash="160448e66de783cbfa64c13483ea793f"/><file name="mysql4-upgrade-0.9.48-0.9.49.php" hash="5657862f11b8a2ccf05decf6bf651495"/><file name="mysql4-upgrade-0.9.49-0.9.50.php" hash="33e922d769595a4a22257df3288d0b23"/><file name="mysql4-upgrade-0.9.5-0.9.6.php" hash="7534168cbeafd219b913fad70ef0b604"/><file name="mysql4-upgrade-0.9.50-0.9.51.php" hash="727555136eb0ca74c78c0ae605bbcca5"/><file name="mysql4-upgrade-0.9.51-0.9.52.php" hash="fbf3075eb1122eb16a78ab1da6c87280"/><file name="mysql4-upgrade-0.9.52-0.9.53.php" hash="b95803e85855ad53a32036b4e2e422ce"/><file name="mysql4-upgrade-0.9.53-0.9.54.php" hash="ff3d7c4ff6666e38c8694403987358ce"/><file name="mysql4-upgrade-0.9.54-0.9.55.php" hash="221e4d19ff8a3b168ad2a77adb403947"/><file name="mysql4-upgrade-0.9.55-0.9.56.php" hash="0e5d2a62541e8d6f0150515bc95b6e21"/><file name="mysql4-upgrade-0.9.6-0.9.7.php" hash="bb9fe9fc17135267b8dceda66ba573df"/><file name="mysql4-upgrade-0.9.7-0.9.8.php" hash="51f542d4e4dc2eb4d151fa1d199e76c7"/><file name="mysql4-upgrade-0.9.8-0.9.9.php" hash="1ef9eb2e04ff17094c9fbe4dd04dbb43"/><file name="mysql4-upgrade-0.9.9-0.9.10.php" hash="e4c2fd4e25264a59dc4d2c2fed009b55"/><file name="mysql4-upgrade-1.3.99-1.4.0.0.php" hash="064bd9a3a66afbcec73dc6eba2d91aab"/><file name="mysql4-upgrade-1.4.0.0-1.4.0.1.php" hash="58cd3b1e53113ccf8da37272261f5420"/><file name="mysql4-upgrade-1.4.0.1-1.4.0.2.php" hash="abb82596cd80405e68ead6c3f9b118d6"/><file name="mysql4-upgrade-1.4.0.15-1.4.0.16.php" hash="8703f8f8f23ae434e029dc49d28f6724"/><file name="mysql4-upgrade-1.4.0.16-1.4.0.17.php" hash="02a61839f64351389226749ee95f2ac2"/><file name="mysql4-upgrade-1.4.0.17-1.4.0.18.php" hash="bd0e06542f412eb829d14f3a5fe389ba"/><file name="mysql4-upgrade-1.4.0.18-1.4.0.19.php" hash="8a67dcba5b4af5ce97eb6a5960dc37d6"/><file name="mysql4-upgrade-1.4.0.19-1.4.0.20.php" hash="f94a7026618758fcc4410f9cbf395513"/><file name="mysql4-upgrade-1.4.0.2-1.4.0.3.php" hash="7c8baf053e8f385017e5e6d7c9e4fadd"/><file name="mysql4-upgrade-1.4.0.20-1.4.0.21.php" hash="fd6098e114e8c077781ae9a109900e75"/><file name="mysql4-upgrade-1.4.0.21-1.4.0.22.php" hash="eec8bca856f155321127aa16554b6ff5"/><file name="mysql4-upgrade-1.4.0.22-1.4.0.23.php" hash="7dae40e457321e05723eddd332b3f777"/><file name="mysql4-upgrade-1.4.0.23-1.4.0.24.php" hash="ec6aca579e3d8bcdab92be6f0101edd7"/><file name="mysql4-upgrade-1.4.0.24-1.4.0.25.php" hash="90c7bdaa5340eadab0af599d27c26ad7"/><file name="mysql4-upgrade-1.4.0.3-1.4.0.4.php" hash="30ba90e80302ad78fe6ca46966b4ebe0"/><file name="mysql4-upgrade-1.4.0.4-1.4.0.5.php" hash="4d5b5a1832ff24134b7bee78a6347cbb"/><file name="mysql4-upgrade-1.4.0.5-1.4.0.6.php" hash="2eb2af257f342358fe654bc2ed203be0"/><file name="mysql4-upgrade-1.4.0.6-1.4.0.7.php" hash="1092e380e4d97fec73b574f5ca1210d1"/><file name="mysql4-upgrade-1.4.0.7-1.4.0.8.php" hash="321d6f3cac598aebb3a6d5690783bb8d"/><file name="mysql4-upgrade-1.4.0.8-1.4.0.15.php" hash="2605e1f309aaaa83e66e19952de196f1"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="fbb6d6a9211af940a9d09ea7ce124acf"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="1702e52d9327642cf39c787272e00088"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="51a01243c80475b335461fab5b124919"/><file name="upgrade-1.6.0.2-1.6.0.3.php" hash="0c3fc39d972a310d1802bd45d1086478"/><file name="upgrade-1.6.0.3-1.6.0.4.php" hash="d8f56295b53d69f61389f839001c7ead"/><file name="upgrade-1.6.0.4-1.6.0.5.php" hash="3d7df8adc7319e6568f7367e95f7f32e"/><file name="upgrade-1.6.0.5-1.6.0.6.php" hash="b99799afe881cb0c2c31534a4e4ddb51"/><file name="upgrade-1.6.0.6-1.6.0.7.php" hash="d874572b66f8d5893b1d58004cf2093f"/><file name="upgrade-1.6.0.7-1.6.0.8.php" hash="312c728e68f607a869e50e27edc81df8"/><file name="upgrade-1.6.0.8-1.6.0.9.php" hash="5e1ea6e5d77dc8c7ff9776d54007d8e7"/><file name="upgrade-1.6.0.9-1.6.0.10.php" hash="9f3b171078b5bf448639865bb8e759ba"/></dir></dir></dir><dir name="SalesRule"><file name="Exception.php" hash="c684bcb6cf5c1b0a6b652d34be1ef4d8"/><dir name="Helper"><file name="Coupon.php" hash="bec5fdde7197a727a2e2ad2a01d10e95"/><file name="Data.php" hash="56c45ee011ec0f06c7df0e3a88e33764"/></dir><dir name="Model"><dir name="Coupon"><file name="Codegenerator.php" hash="a9137a826ac5b0d94739a4f494616755"/><file name="CodegeneratorInterface.php" hash="50d019dcd547e2d36656037f6e4867e8"/><file name="Massgenerator.php" hash="91159302a81f191f9ecb9aefc6935cfe"/></dir><file name="Coupon.php" hash="d1acd813c8dd00fad47929b2a66964cf"/><dir name="Mysql4"><dir name="Coupon"><file name="Collection.php" hash="3631489bee3c9db6bed33f50dd87188e"/><file name="Usage.php" hash="abef6dd5e2675044255c4847b5ebfa75"/></dir><file name="Coupon.php" hash="481513e97ecba9c1dcbf58c988618dfa"/><dir name="Report"><file name="Collection.php" hash="0e5028d770ba6502e017a548ae3eb9f2"/><file name="Rule.php" hash="10834499b347164af794cbe10e8e5c8a"/><dir name="Updatedat"><file name="Collection.php" hash="ff414b6c919389d524727f245274259d"/></dir></dir><dir name="Rule"><file name="Collection.php" hash="a97146dfb96259d4a80983c9ce8248cb"/><dir name="Customer"><file name="Collection.php" hash="9cc9dfff6b46c35ead43b3fb3f3cec14"/></dir><file name="Customer.php" hash="dceb0116dbcaaac015b52649f87374eb"/><dir name="Product"><file name="Collection.php" hash="fa0176fee491bf06424fd7c97c859f53"/></dir><file name="Product.php" hash="d5fe431e624eb4b1befba2a65e371026"/></dir><file name="Rule.php" hash="94993e080ff63622f8ecd433fde71796"/></dir><file name="Observer.php" hash="de6d39e558f4b7e39ac387733349ec6f"/><dir name="Quote"><file name="Discount.php" hash="905eccf34b5449fbf29d140c99953b23"/><file name="Freeshipping.php" hash="5ddbf5e58d137e2fe770b706a0956a55"/><dir name="Nominal"><file name="Discount.php" hash="341b490273fd5ab1498f7cfc3d15ff0e"/></dir></dir><dir name="Resource"><dir name="Coupon"><file name="Collection.php" hash="5030636a7a7dcc83f9f1c6f94b5cac62"/><file name="Usage.php" hash="7cee04feb2a624612e2cafc0dc192cf1"/></dir><file name="Coupon.php" hash="5f5f7751ea0c29d52981b02e55b07894"/><dir name="Report"><file name="Collection.php" hash="50122478a87fdec2b8a65f2d9aef282e"/><dir name="Rule"><file name="Createdat.php" hash="02466900b021fb1018ea89937fd34943"/><file name="Updatedat.php" hash="fe7b776559cb3dd2c3ca59b4e7043b08"/></dir><file name="Rule.php" hash="45f3ebecfe6f000328bce7c6ec3adebf"/><dir name="Updatedat"><file name="Collection.php" hash="85b1b702a0c934bda4efcb5c8380a830"/></dir></dir><dir name="Rule"><file name="Collection.php" hash="9a70dcc2c97f85fdf47aae7894e0e5c2"/><dir name="Customer"><file name="Collection.php" hash="c119ca2272ba918b13b47d4e96e06f86"/></dir><file name="Customer.php" hash="712cd6ec527d506c00baecd09da49b81"/><dir name="Product"><file name="Collection.php" hash="819f0f9ecc77b8e7f20c4dd9b319f84d"/></dir><file name="Product.php" hash="14853418a21d59e0f8129c80bb88c032"/></dir><file name="Rule.php" hash="91b0b65b1443be890b430e282634d8d0"/></dir><dir name="Rule"><dir name="Action"><file name="Collection.php" hash="6836dfb390954debd9dbd1afe7df7721"/><file name="Product.php" hash="939d551e4e2ee92a5e5a9fbf0dd4c1a0"/></dir><dir name="Condition"><file name="Address.php" hash="32a9e7fd2ebd47d262832981f1317f1e"/><file name="Combine.php" hash="204f588c6cb09327b87267cb5c268577"/><dir name="Product"><dir name="Attribute"><file name="Assigned.php" hash="cea0241d92d0cad9c8d0f173e2f27a8a"/></dir><file name="Combine.php" hash="349d3f8a0f993e734112faf9f4593cca"/><file name="Found.php" hash="869319a13c49152426cd3ffabcf41865"/><file name="Subselect.php" hash="b53651f2371343ecaad1d22c5360b62b"/></dir><file name="Product.php" hash="da818046bf8cb6d85384970da1c4da16"/></dir><file name="Customer.php" hash="c91b48167015da5c26d161bd01d418a1"/><file name="Product.php" hash="be5aa814892976919f2841ad4f593720"/></dir><file name="Rule.php" hash="9ec22daa35075a786027eb387586ea64"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Coupon"><file name="Format.php" hash="453554268efa272468d5feef8f886a7b"/></dir></dir></dir></dir><file name="Validator.php" hash="5d85e113e95fc4326cbddc640ce17a52"/></dir><dir name="etc"><file name="adminhtml.xml" hash="caca53de6786b3be6da03586579fc893"/><file name="config.xml" hash="628ed6fd7df6d252288d15ce9785f6cf"/><file name="system.xml" hash="cc5d6bd5257f149325ea0feb73521cc1"/></dir><dir name="sql"><dir name="salesrule_setup"><file name="install-1.6.0.0.php" hash="9ab8955322ab4339661c69e0cb9802c6"/><file name="mysql4-install-0.7.0.php" hash="275f88f7f61f6664e0ae6e5d80b0c240"/><file name="mysql4-install-1.4.0.0.0.php" hash="323c4b2e46b3132092bd9b318367fb86"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="739a8b7fa21395aac36a605a553fb93b"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="6b4cb8acdbbc2b2a4d187190c4ea0a91"/><file name="mysql4-upgrade-0.7.10-0.7.11.php" hash="6ad55cf361a23b17b9f36ae3abd0a984"/><file name="mysql4-upgrade-0.7.11-0.7.12.php" hash="d36a365e98e923ba45dcc74ffba18dcf"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="041f91b8c7c1be504f47125fa5ca0bf2"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="14a660771d58b2d182edabef3d38db02"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="c0c8bc7581f4a4eee50d6dde49977897"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="5f666558669daa62735513080fcfffb7"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="cc7329eb9f61f5f6c0d5d2fc098b39aa"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="6cf794be9adc22351a7f6493f6665b1f"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="c4abbb799e56777dbb013727160a89af"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="4ae0398464264e326ce321c2eb7e0ca8"/><file name="mysql4-upgrade-1.4.0.0.0-1.4.0.0.1.php" hash="6536ffb5f313b156479a470894e7d473"/><file name="mysql4-upgrade-1.4.0.0.1-1.4.0.0.2.php" hash="dba49c9eab9fdb487d5ea4b2a9b19a61"/><file name="mysql4-upgrade-1.4.0.0.2-1.4.0.0.3.php" hash="2b430a6577e1e771b493d18b49b05817"/><file name="mysql4-upgrade-1.4.0.0.3-1.4.0.0.4.php" hash="54953e3953f5d0e8b4cdb02a70064e57"/><file name="mysql4-upgrade-1.4.0.0.4-1.4.0.0.5.php" hash="382240c00c8ef6e6da763a9e8cbf9ab6"/><file name="mysql4-upgrade-1.4.0.0.5-1.4.0.0.6.php" hash="9d7c0dfceb59c78a1b6809c69b119ad0"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="622e976224bd8234da9c026118f55849"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="e9c25f97809f2312d577e99eefdd1a43"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="70824ec16e4e39d26578e29917625f0d"/><file name="upgrade-1.6.0.2-1.6.0.3.php" hash="81b3f1ab912631abc90bf4d5ed5596b0"/></dir></dir></dir><dir name="Sendfriend"><dir name="Block"><file name="Send.php" hash="7206a02e6d5847bac52ebfb18cf3c990"/></dir><dir name="Helper"><file name="Data.php" hash="0d275b6d1e3607b79ec9a367c64c3128"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Sendfriend"><file name="Collection.php" hash="7c248d260e46c38da0961c6a1ab619a0"/></dir><file name="Sendfriend.php" hash="04962b095cc694d104d063772025ab33"/><file name="Setup.php" hash="2bf3e91ecbc58c463c17d58f2c03cacf"/></dir><file name="Observer.php" hash="6c5e9d18af2beaef0197aa284fe16ef6"/><dir name="Resource"><dir name="Sendfriend"><file name="Collection.php" hash="394927238d33f913906cc2ace443cbcd"/></dir><file name="Sendfriend.php" hash="e125543a8af18a8d4b244f3d2b824aa2"/><file name="Setup.php" hash="151a112174b9d83dcc6afc91683f54f2"/></dir><file name="Sendfriend.php" hash="aad537b2bd08139afca049186b0d0af6"/></dir><dir name="controllers"><file name="ProductController.php" hash="90cf4742e2b768696b28a05c9a3c32ae"/></dir><dir name="etc"><file name="config.xml" hash="546188e9ad02740203f9ddc35b58797f"/><file name="system.xml" hash="952f5059081dd3f114048a659b111f59"/></dir><dir name="sql"><dir name="sendfriend_setup"><file name="install-1.6.0.0.php" hash="5b1ae683858942384de97a4cabecb1eb"/><file name="mysql4-install-0.7.0.php" hash="bc16be0aaca8a2b6c50a7e87e9cbff12"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="da7a15eeb941d568818815dfbcaf9162"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="af38b95ee3b76f5acd3269170d93ce1d"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="a7013b2917b9e69fd6ca03c1bb8082db"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="db6d0a1eb02d805f42dcd3756381800c"/><file name="mysql4-upgrade-1.6.0.0-1.6.0.1.php" hash="8b493ea7ab72b583e910a22190295371"/></dir></dir></dir><dir name="Shipping"><dir name="Block"><dir name="Tracking"><file name="Ajax.php" hash="09df05bd55e577bb5260daa3e6caf5c2"/><file name="Popup.php" hash="f1a041dc4a7b17409b1cb343a49e038b"/></dir></dir><file name="Exception.php" hash="7817d908c16effb37641b413e3f07687"/><dir name="Helper"><file name="Data.php" hash="b454fdb55ec1039f9f7b692a0214b491"/></dir><dir name="Model"><dir name="Carrier"><file name="Abstract.php" hash="075f2afd6211b8607f8c66fa6f06bc0f"/><file name="Flatrate.php" hash="7ba5c4ae0a7bed25474d2803754270f1"/><file name="Freeshipping.php" hash="b41e034f705bd5806f356002421b8e16"/><file name="Interface.php" hash="8ee86ddab84fee146bba67f2f9ad4958"/><file name="Pickup.php" hash="574b87b25e9fcc7b11eb6a302edbc531"/><file name="Tablerate.php" hash="57a55677ba65ee9b31942a7d9ab789e1"/></dir><file name="Config.php" hash="d31ab0d1a4b74c009b08f54112d6b024"/><file name="Info.php" hash="9b396c342b5726b53a74a285bd50dfd8"/><dir name="Mysql4"><dir name="Carrier"><dir name="Tablerate"><file name="Collection.php" hash="6078fa27a483e4a499897fd930d8d6a0"/></dir><file name="Tablerate.php" hash="0e1157a910db560e02c468c292edf81d"/></dir></dir><dir name="Rate"><file name="Abstract.php" hash="61509b986aea96d297a7ad3d86c25f35"/><file name="Request.php" hash="4192d1bb68ec2e6b4ed2335d8ca4fd4f"/><dir name="Result"><file name="Abstract.php" hash="89ce290aa89085499fd46d9548ae1226"/><file name="Error.php" hash="e1576e0070daad2b4ae989afc9f60491"/><file name="Method.php" hash="5130215a38bde7a264574e6bb20d2f7f"/></dir><file name="Result.php" hash="b42c6afee8ed678f56823a4acbfd7c8c"/></dir><dir name="Resource"><dir name="Carrier"><dir name="Tablerate"><file name="Collection.php" hash="3f948b246a012a0014f5105eb4f673db"/></dir><file name="Tablerate.php" hash="dfcbfab619a7d316d2e76ec48621e1ea"/></dir></dir><dir name="Shipment"><file name="Request.php" hash="cd106fae6188411ac722b49ed9514308"/><file name="Return.php" hash="2d0ed8f59eaf9efe0cef5bf1092b8e54"/></dir><file name="Shipping.php" hash="3def0a3b57d1a80b7601bf172b730587"/><dir name="Source"><file name="HandlingAction.php" hash="996710c24691253907f5551fbe640ec2"/><file name="HandlingType.php" hash="b0e707f62445bfdfcd20114b182571a4"/></dir><dir name="Tracking"><dir name="Result"><file name="Abstract.php" hash="caefbcf638339cb3a8a3b029e1283e55"/><file name="Error.php" hash="2e8326379ef3d1065ce37b7e76ec32ee"/><file name="Status.php" hash="2aecb82f4a61a323341a9a52439892dc"/></dir><file name="Result.php" hash="54852fbada70b39109d974281decaaf1"/></dir></dir><dir name="controllers"><file name="ShippingController.php" hash="a5b8bef3ebea80cf2436f69ac91376cb"/><file name="TrackingController.php" hash="914ed8c271764e76146cdf6dba2ae138"/></dir><dir name="etc"><file name="adminhtml.xml" hash="ee7864ea693423dbebbf2117258f4fab"/><file name="config.xml" hash="9c151220072be650f02113efe448bd03"/><file name="system.xml" hash="1b06754dd005ef11249090a54f806217"/></dir><dir name="sql"><dir name="shipping_setup"><file name="install-1.6.0.0.php" hash="fcfb648931efb9d39587d3fc1cc16aa8"/><file name="mysql4-install-0.7.0.php" hash="3ba11142c239180345b133929dd7fe13"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="cd7f1e9d351ef3afeae5d984c906a86b"/></dir></dir></dir><dir name="Sitemap"><dir name="Helper"><file name="Data.php" hash="c270138e049bbb86acc9e1c2035d9ed4"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Catalog"><file name="Category.php" hash="0d61e1bd297c0f0828c8c48c54bc6694"/><file name="Product.php" hash="53b4f1d7a3f61d354d94e13239e0014b"/></dir><dir name="Cms"><file name="Page.php" hash="801f82576eb1b96075c0bd6b3e478ff1"/></dir><dir name="Sitemap"><file name="Collection.php" hash="595975e9005b823585ae7005b8f7dfcf"/></dir><file name="Sitemap.php" hash="4af5f75017fe5bb77b533531604a539b"/></dir><file name="Observer.php" hash="036f0b83fdaedf9286941d553598cba5"/><dir name="Resource"><dir name="Catalog"><file name="Abstract.php" hash="1cd8a377251d312570c5eb3657afd0d5"/><file name="Category.php" hash="05fb05a039d929cf962d7cf5f500e1d1"/><file name="Product.php" hash="134cd9d49b0512786085d262450a6a56"/></dir><dir name="Cms"><file name="Page.php" hash="4c639ea1f9d626b9cdd9e4ac6d0ef9f4"/></dir><dir name="Sitemap"><file name="Collection.php" hash="96b6d4e3e41b9e5fa00fdda474b3d8c2"/></dir><file name="Sitemap.php" hash="cf58c50c4d3f7b2f3c2e3f96e0466066"/></dir><file name="Sitemap.php" hash="500f0f29c85e257c0f38018a5a24e553"/></dir><dir name="etc"><file name="adminhtml.xml" hash="75878bb50b464dc4369ec0eb591bc2da"/><file name="config.xml" hash="0e5e5ea7c4939d57463ebad190b1e983"/><file name="system.xml" hash="dfe986e50cd5a136827d3769400a0d2a"/></dir><dir name="sql"><dir name="sitemap_setup"><file name="install-1.6.0.0.php" hash="37b9bd783871c32a2685a22f2685229a"/><file name="mysql4-install-0.7.0.php" hash="1ff0248cb18bdc7dfc43b148d4aeeeb4"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="387f9d64e5c70357758cfd41f7d2d984"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="add73e139487436a15eaf78041a62eea"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="339be126cf5fecb42ba94c091b6bfaf8"/></dir></dir></dir><dir name="Tag"><dir name="Block"><file name="All.php" hash="2b10c43d0259b15611d361d5aa5f2220"/><dir name="Customer"><file name="Edit.php" hash="38335c42cf669e79300863f2a0ff9a11"/><file name="Recent.php" hash="dc47c04c147be4edf19b470eb9c88002"/><file name="Tags.php" hash="c18cfe297d463576d3e89b3a70317a58"/><file name="View.php" hash="58b6780632baaae5ae284e4993943356"/></dir><file name="Popular.php" hash="c7b7bd0d09459ae8d9e407ee55af6e3c"/><dir name="Product"><file name="List.php" hash="2f468bd086810c64c3fc000e6fa60190"/><file name="Result.php" hash="176d0d0503b3f2b51410666a5e4ec23e"/></dir></dir><dir name="Helper"><file name="Data.php" hash="fd848bd0f6c212495ceb27036e026771"/></dir><dir name="Model"><dir name="Api"><file name="V2.php" hash="08c1314720e17a9d69840bb97e08a3d7"/></dir><file name="Api.php" hash="6f2ae203c0613724468d6547fe53315d"/><dir name="Entity"><dir name="Customer"><file name="Collection.php" hash="13a8174f56f60852e5a244c7b0654e80"/></dir></dir><dir name="Indexer"><file name="Summary.php" hash="055e6136d402a80a304b556582ce4af8"/></dir><dir name="Mysql4"><dir name="Customer"><file name="Collection.php" hash="fcb051b22d3f11807a2d0a265b7fe219"/></dir><dir name="Indexer"><file name="Summary.php" hash="e5eae61043e224555d060352f291dd42"/></dir><dir name="Popular"><file name="Collection.php" hash="925799b24790135bcd9448e551b8e197"/></dir><dir name="Product"><file name="Collection.php" hash="d33a5409c13eb26f009e1374e7cf7efb"/></dir><dir name="Tag"><file name="Collection.php" hash="ae317625d040ce3b88feef9861fef446"/><file name="Relation.php" hash="1686029b634873343ea27813f44cad5a"/></dir><file name="Tag.php" hash="1ae7f46144e78b9e7a03babd7c8b1aec"/></dir><dir name="Resource"><dir name="Customer"><file name="Collection.php" hash="7ee5e5cf14204c1de84f09d17d12b7b9"/></dir><dir name="Indexer"><file name="Summary.php" hash="98d1e87f795799942bc9a38b148cc1a1"/></dir><dir name="Popular"><file name="Collection.php" hash="955c61e8c737b5a7fdf0cdff51f8ad7e"/></dir><dir name="Product"><file name="Collection.php" hash="42d899ed5fd34b4e9c360c8360ebd553"/></dir><dir name="Tag"><file name="Collection.php" hash="01ec18be96cc21e359c20132e8b8c207"/><file name="Relation.php" hash="7656c42494af35d1d5aab8897e5b68b9"/></dir><file name="Tag.php" hash="809e9c5a59411c7d7724945a7d29628f"/></dir><file name="Session.php" hash="8232aef267200f52ca854f23da795d77"/><dir name="Tag"><file name="Relation.php" hash="d9271123737d3597f53ab950f1456642"/></dir><file name="Tag.php" hash="0db7c73371824a990e1e98e3300a905d"/></dir><dir name="controllers"><file name="CustomerController.php" hash="19a82c81c2a407c54baa8c42c6f781af"/><file name="IndexController.php" hash="ed3e6346fc9d9a3d1a4896caf7a6903f"/><file name="ListController.php" hash="59a042865c7156a76625012ed805c15a"/><file name="ProductController.php" hash="d6cac64124e81c6039f8d87b147bf278"/></dir><dir name="etc"><file name="adminhtml.xml" hash="3a5e2d7833e12167bff5538dccb62117"/><file name="api.xml" hash="5ba5cc7e306de8c6f373bb35da19dfa0"/><file name="config.xml" hash="8ba316a8a0494ee3fc5f0967dcbdc59d"/><file name="wsdl.xml" hash="e87343a710e0068dcc555ffc4b302a9b"/><file name="wsi.xml" hash="1d31787826a686590acf89ec2703b76e"/></dir><dir name="sql"><dir name="tag_setup"><file name="install-1.6.0.0.php" hash="b3505685d64341a0aa39e2d3540a113f"/><file name="mysql4-install-0.7.0.php" hash="c80119c3ca8931b21c6f83a4901493ee"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="d025d405e893633c7fa3d843970dbb61"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="62c19aaa204b99e514ac276b2e85a32e"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="9cd101ac643f0e4b411485cf1aed4511"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="e0fce96f5e2a1c7a68d6139a28430a2c"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="d064708fbb9959e46c76cea8577a2902"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="b55c990d52b55f9892b81aa95f603bf6"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="c51a489802c94bb97791a8418f0ef038"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="de16b58fbe072fd9da5ea5d77602daef"/></dir></dir></dir><dir name="Tax"><dir name="Block"><dir name="Adminhtml"><dir name="Frontend"><dir name="Region"><file name="Updater.php" hash="9c539994222b2ccba529ef7523502f66"/></dir></dir><file name="Notifications.php" hash="13e0fea969efa49c9722b8ab03bd3974"/></dir><dir name="Checkout"><file name="Discount.php" hash="127f3423153e2d7f67cfcbaa91766602"/><file name="Grandtotal.php" hash="9acd428450dcd0adbc40a47acbad0b25"/><file name="Shipping.php" hash="fd777c58967613bf5d324250a299becc"/><file name="Subtotal.php" hash="b13f24a02859e66afa218b17eaec243a"/><file name="Tax.php" hash="7f28709d44b0746918988441f8bbf131"/></dir><dir name="Sales"><dir name="Order"><file name="Tax.php" hash="109d897cef41288ec2fe93dec035aeb4"/></dir></dir></dir><file name="Exception.php" hash="137061427d20d97d4c9a9a6818df13a9"/><dir name="Helper"><file name="Data.php" hash="f7dce31baee4fc06401afb241fbc4779"/></dir><dir name="Model"><dir name="Calculation"><dir name="Rate"><file name="Title.php" hash="02bb922f55528ebef509d5e0e9ebae65"/></dir><file name="Rate.php" hash="bbd1308fe0489fb4556a0c806fbf08eb"/><file name="Rule.php" hash="988b1cc47f7d6d228fc6540c3424a8d5"/></dir><file name="Calculation.php" hash="472b71425220842f84ff584883642c65"/><dir name="Class"><dir name="Source"><file name="Customer.php" hash="63b7119885e4ad056e0e2ad057b72d50"/><file name="Product.php" hash="d290546c2bb67c752b99188a8da2f498"/></dir></dir><file name="Class.php" hash="9f2803f07a9ea115414e8a6393d01f0b"/><dir name="Config"><file name="Notification.php" hash="212b1d132571039ec1d5e4704186df67"/><dir name="Price"><file name="Include.php" hash="005b4273aa8924a1a544813baf0614f0"/></dir></dir><file name="Config.php" hash="0b48517dcfcdf7eefb7634085eeeb3df"/><dir name="Mysql4"><dir name="Calculation"><file name="Collection.php" hash="acee2081ff6130c31e803cf7357370fd"/><dir name="Rate"><file name="Collection.php" hash="6639d010cfd018b433d83f8e7a22c59a"/><dir name="Title"><file name="Collection.php" hash="91c99b4433579b91c71269feb6dbbefd"/></dir><file name="Title.php" hash="0e89072d83e4777442040a7574aa83d1"/></dir><file name="Rate.php" hash="313f71cfb3a2bafb2c32a1525826e198"/><dir name="Rule"><file name="Collection.php" hash="7012224a3a48324cd2a150813109886f"/></dir><file name="Rule.php" hash="2b6c704f4c2638a3437ef3a854fc25e8"/></dir><file name="Calculation.php" hash="3456ca2272f2b3cae2da6b6871f30c41"/><dir name="Class"><file name="Collection.php" hash="d7eb62ee3ec9a1c6646b0635d717ea51"/></dir><file name="Class.php" hash="0ed3a7f6a226f1a3a7153ca6edaaa0f0"/><dir name="Report"><file name="Collection.php" hash="7c4f76e0bbab563d0e9500ba29c7c84e"/><file name="Tax.php" hash="9d4663271b07a6ea06f6d2fe050d77a0"/><dir name="Updatedat"><file name="Collection.php" hash="f4e3a896c5ed84b877089aef1c4d80ab"/></dir></dir><dir name="Sales"><dir name="Order"><dir name="Tax"><file name="Collection.php" hash="4f54d51918aa5eb195e6afc8a1eb45a7"/></dir><file name="Tax.php" hash="9acb3b525dac90052b49438a62297eb0"/></dir></dir><file name="Setup.php" hash="e2b2c63fb65d21a63545b6350bcc9ba9"/></dir><file name="Observer.php" hash="435baf91ff86b4bbf951b8fe5c043366"/><dir name="Resource"><dir name="Calculation"><file name="Collection.php" hash="a656ca320a7a842e9e7345e5bf90fe1d"/><dir name="Rate"><file name="Collection.php" hash="a9dad3a3547763d54a6f2e8397ab8939"/><dir name="Title"><file name="Collection.php" hash="71e03bcc404205a2e00508af30059c68"/></dir><file name="Title.php" hash="1799ff0b83154a012e253fd791937746"/></dir><file name="Rate.php" hash="bf5436c06b9739b445ec524d4025b5ea"/><dir name="Rule"><file name="Collection.php" hash="b4e8a702efc1c248a836ddcf2ccf04c6"/></dir><file name="Rule.php" hash="aff96159602561fed62afd38f9363d19"/></dir><file name="Calculation.php" hash="c39596cad029b8519bc8db6b8d00788f"/><dir name="Class"><file name="Collection.php" hash="b57891d2fa76e7723cec725c0d9adc89"/></dir><file name="Class.php" hash="6b774638de6d33f5379f12c22481493f"/><dir name="Report"><file name="Collection.php" hash="840ab6e77345d6637c666e7b9aa91e84"/><dir name="Tax"><file name="Createdat.php" hash="453488bd85f0c73489271c209560b862"/><file name="Updatedat.php" hash="438e8ec8a41bb88e05c77b6f465b0bba"/></dir><file name="Tax.php" hash="75c988eb5f91331aff24ea0bcb4bf856"/><dir name="Updatedat"><file name="Collection.php" hash="9df584cdf5b13ecd84a78f33d288f38f"/></dir></dir><dir name="Sales"><dir name="Order"><dir name="Tax"><file name="Collection.php" hash="e3c20cf620eef255710accd7b9da2ff1"/><dir name="Item"><file name="Collection.php" hash="f6522bc0d72f91c690fee45362cf3900"/></dir><file name="Item.php" hash="129e05491979b151ded3b8c07b1e973d"/></dir><file name="Tax.php" hash="ddd7f31e7e0ca5b52d46250c6ee3876d"/></dir></dir><file name="Setup.php" hash="04a2c38ee0899c7a021a9ff6bae13962"/></dir><dir name="Sales"><dir name="Order"><dir name="Tax"><file name="Item.php" hash="0eed1d9b7192bac284302d1a8e91b04d"/></dir><file name="Tax.php" hash="5e710edf3ec7da8ef92b2ce5e5c92c94"/></dir><dir name="Pdf"><file name="Grandtotal.php" hash="4ae9ecc456bf14ac11d1438157dbf141"/><file name="Shipping.php" hash="685e7f8e542622614f8c55107a275de8"/><file name="Subtotal.php" hash="9c4ad817f5ba7efeb4efb4bcbf7995c6"/><file name="Tax.php" hash="b30bf4ee2e5a561e02cbd8a09f60c58b"/></dir><dir name="Total"><dir name="Quote"><file name="Discount.php" hash="a9de231ca3a7f526a59c3d6d0fe2736f"/><dir name="Nominal"><file name="Subtotal.php" hash="b0700ee2ba5ddbaa32f1c52c70446cf4"/><file name="Tax.php" hash="ff57753e8f29c1e643116ee1f9a6be93"/></dir><file name="Shipping.php" hash="72d95e56b11c0894e2665f7c5ce51739"/><file name="Subtotal.php" hash="188127daf6d7caf4e0b19da5406b81b4"/><file name="Tax.php" hash="9ee64046fc7dbe93aa1ca28b78644654"/></dir></dir></dir><dir name="System"><dir name="Config"><dir name="Source"><file name="Algorithm.php" hash="3875a5df6548d2e26dd6094031eb21ba"/><file name="Apply.php" hash="24417cb46b72ae7d786a1287e65c355c"/><file name="PriceType.php" hash="3ad49e466e217f91b7a9cc0215087eae"/><dir name="Tax"><file name="Country.php" hash="4d339243a8b0ea86358c79794fe72f8a"/><dir name="Display"><file name="Type.php" hash="0d10ddfcde7846daf7a5b6289b38913a"/></dir><file name="Region.php" hash="612de787b3edcddda31cd92327f70c43"/></dir></dir></dir></dir></dir><dir name="data"><dir name="tax_setup"><file name="data-install-1.6.0.0.php" hash="72a45a706856b256b33b6a686d6770d5"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="25b715b70e89c7aad2f35837111f8f1c"/><file name="config.xml" hash="a37f7923d9572f694b345508f8f416e6"/><file name="system.xml" hash="9bfb94df858942a543d01e7bb3817b2c"/></dir><dir name="sql"><dir name="tax_setup"><file name="install-1.6.0.0.php" hash="47275f20fcb53b121a26bedd85acf189"/><file name="mysql4-install-0.7.0.php" hash="6af9a3a2032042f0a82061c648a38592"/><file name="mysql4-install-1.4.0.0.php" hash="99d14ce0508bea87cb7e7ff46d7b2ab2"/><file name="mysql4-upgrade-0.6.1-0.7.0.php" hash="65f0465b130ae72a2f5fdd17a9e19133"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="57ebc4d2cec035d195259bba5f2d7bd8"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="fc49129e268c5f491a72a61c06c8ca66"/><file name="mysql4-upgrade-0.7.10-0.7.11.php" hash="a15701c73f006ab7562fc604a7dcba31"/><file name="mysql4-upgrade-0.7.11-0.7.12.php" hash="942696dbd66e7ca015c2df2366f0383e"/><file name="mysql4-upgrade-0.7.12-0.7.13.php" hash="60cc70667b6dfdc8aa6f0a62317d447d"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="5ba42f67dbb39d056faa38e6f5293584"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="efc647f0b3a3e0edb39b5fb17b9726fd"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="73028dccf709d7589fc4fe14dd71b17c"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="5b21e927c01676fae722b6915029ab62"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="44d5d47c89504b2a6bb3bf0927983416"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="74207ee3337c8b8f2bb93c6ab56866b6"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="7a442df7deb26bcaa7398959db63a815"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="4569ddc62d6799b9888b7b5b9b11eef1"/><file name="mysql4-upgrade-1.3.9-1.4.0.php" hash="1c70836736ab8aa8f794e8738d105a25"/><file name="mysql4-upgrade-1.4.0.0-1.4.0.1.php" hash="568f0e58abf4abdd5a976fdf4cc1e33f"/><file name="mysql4-upgrade-1.4.0.1-1.4.0.2.php" hash="39d31a4422cb7a24d12d49c062e25afe"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="77a2a7d24823b1d9e785ebf88e6fefe1"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="e52eff98527c16c3450a4c686c34fae0"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="7c7ccbff4bfc4391c05576b237ba8b65"/><file name="upgrade-1.6.0.2-1.6.0.3.php" hash="32016166d8e4fa6b88503fb58974e90f"/><file name="upgrade-1.6.0.3-1.6.0.4.php" hash="32a7faab02716507b4354cce24265bc5"/></dir></dir></dir><dir name="Uploader"><dir name="Block"><file name="Abstract.php" hash="6e4944e5f0818e7c29fb03d61ef437f7"/><file name="Multiple.php" hash="1dc4aaa49b77b8887cf9262c4e7a823c"/><file name="Single.php" hash="611c3242ac6a31c23e6a83a96acba2fe"/></dir><dir name="Helper"><file name="Data.php" hash="119b14b7e390e1b73d38da8981f1d37f"/><file name="File.php" hash="48ec474f67f69b2deab0f4e3b025a312"/></dir><dir name="Model"><dir name="Config"><file name="Abstract.php" hash="598717f192c3feb8fc5e1c5fd396a853"/><file name="Browsebutton.php" hash="7a4de22abad5e523130109b0ef7e54d1"/><file name="Misc.php" hash="d6608560c74ab5350a3f76a27fa1aa60"/><file name="Uploader.php" hash="e9de9de6797368a7be14e07f6c3272fb"/></dir></dir><dir name="etc"><file name="config.xml" hash="c17cd380e882b6641808f4e52a0d9f10"/><file name="jstranslator.xml" hash="fa97045eb98e4bf7e7f4b76be18df90a"/></dir></dir><dir name="Usa"><dir name="Block"><dir name="Adminhtml"><dir name="Dhl"><file name="Unitofmeasure.php" hash="ba5dfe994d3152b055f9580ac3e58e4d"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="5dbe8f0326ef7a80f9318d0b2707ecd5"/></dir><dir name="Model"><dir name="Shipping"><dir name="Carrier"><dir name="Abstract"><dir name="Backend"><file name="Abstract.php" hash="9e91ce65ec1af0388b0c4456d32e1711"/></dir><dir name="Source"><file name="Mode.php" hash="d8568690e4b84fbf992362bd19ba0961"/><file name="Requesttype.php" hash="68589f59c69d5976fe153c8f4fe7eb82"/></dir></dir><file name="Abstract.php" hash="451f18c7e73d25c156487264b054bbce"/><dir name="Dhl"><file name="Abstract.php" hash="62e61c6a4dfd171a2b65e6fb1259c924"/><dir name="International"><dir name="Source"><file name="Contenttype.php" hash="0a4f3ebda2706ead647430b69e0892e4"/><dir name="Method"><file name="Abstract.php" hash="fb157d1f72ca464e8417ed73c167b5d8"/><file name="Doc.php" hash="4ea8f26b671ed220c32a492d1d1910e3"/><file name="Freedoc.php" hash="af14e65122e6e6e50a3e0dceae59a2c4"/><file name="Freenondoc.php" hash="fe699070755f3bfea90a62332707209e"/><file name="Nondoc.php" hash="f9491acea7b9fcf19a2f80b189580da5"/><file name="Size.php" hash="48e51a58a97be356f6331b3f80669c49"/><file name="Unitofmeasure.php" hash="35d02c4ecf0eac1e2f07bd4fe741ad0c"/></dir></dir></dir><file name="International.php" hash="35db2cb4d784f5a62b46cc478b4fa067"/><dir name="Label"><dir name="Pdf"><file name="Page.php" hash="d7ac2bfa030833fb9cefb76d0a823fba"/><file name="PageBuilder.php" hash="077f7f18f1f31aee2a7ce37a7b206beb"/></dir><file name="Pdf.php" hash="a44414148bf1abce2a07dbb4b3f81fd0"/></dir><dir name="Source"><file name="Dutypaymenttype.php" hash="e09767c041f9bae77700de9098e19a47"/><file name="Freemethod.php" hash="92afb8d13bc722df555df60508f8b835"/><file name="Method.php" hash="6bcf3f33fc6251155ecebb7a2a237539"/><dir name="Protection"><file name="Rounding.php" hash="4e4dc5c4f76b64972d18ecb788fca908"/><file name="Value.php" hash="b47fd2001a57fef4942be3e784382324"/></dir><file name="Shipmenttype.php" hash="5cbfeef6890b5970fc8ccc55f580acc0"/></dir></dir><file name="Dhl.php" hash="477ebaa5f0beda378372c85238c6e93b"/><dir name="Fedex"><dir name="Source"><file name="Dropoff.php" hash="758baf8dd0c2712bff118b2ddce3809d"/><file name="Freemethod.php" hash="fb49427126fd659914106808656031e2"/><file name="Method.php" hash="bd03b725b0d2cefa0f6677c9acf75336"/><file name="Packaging.php" hash="e299e8cee3e12f7c0f2662cb23484abd"/><file name="Unitofmeasure.php" hash="00b65bb159c2d0a786266878dde01def"/></dir></dir><file name="Fedex.php" hash="9c574bcdd34f07d02183b7ff61f34b52"/><dir name="Ups"><dir name="Backend"><file name="Freemethod.php" hash="3facd57849c49291ec969865e79b7395"/><file name="OriginShipment.php" hash="68122e78998b4bfbec768a01b686e161"/><file name="Type.php" hash="bece4019afd10e9ef670a5dbc6bbb41a"/></dir><dir name="Source"><file name="Container.php" hash="f6e18ffbaa876c899fd980672664d23d"/><file name="DestType.php" hash="439d7061f0bac5f42e721e8a044596ea"/><file name="Freemethod.php" hash="345f2366c87e5e7c7a57dd660dfac1ab"/><file name="Method.php" hash="52a37667bc4b0174df75c8e13c507065"/><file name="Mode.php" hash="6ccfd387582e7c1696e2d017ff8fe87f"/><file name="OriginShipment.php" hash="cdba14537c9bc5a25f5eb2b4244f73cc"/><file name="Pickup.php" hash="60cb63ede7fdff5b84e97f4bc07a9b2b"/><file name="Type.php" hash="1ad70d88c013eedcf77235e210fe47cb"/><file name="Unitofmeasure.php" hash="cc8d95a75abe465054260c29e7379c48"/></dir></dir><file name="Ups.php" hash="cfa133745fb5c641f9b40525eca7d161"/><dir name="Usps"><dir name="Source"><file name="Container.php" hash="cef574246f5dc390bb24fb41782b0e20"/><file name="Freemethod.php" hash="94eea66308a014b81c09f380399ff4a8"/><file name="Machinable.php" hash="f9a501780b104ced4e9a17ef3dd5b9a1"/><file name="Method.php" hash="e878c4010f2efedf0705afd7ebe668df"/><file name="Size.php" hash="7dda4a9535dcfbcbb0d93c5f6403b5c9"/></dir></dir><file name="Usps.php" hash="1de3814105ec5c916967a0379820bef1"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="226528ed59016bf1b79898d7a9b1a4a4"/><dir name="dhl"><dir name="international"><file name="countries.xml" hash="f7836aaf1918cb82a65d5abb0adc8699"/></dir></dir><file name="system.xml" hash="a4e17eb8e419c2f05d6da3ae05a2dada"/><dir name="wsdl"><dir name="FedEx"><file name="RateService_v10.wsdl" hash="352ed0cd739b31d42d206aba31bf4c31"/><file name="RateService_v9.wsdl" hash="5e698519a3b3ae3dcea2105545053763"/><file name="ShipService_v10.wsdl" hash="4e661e70491a1af695c27878610054e2"/><file name="ShipService_v9.wsdl" hash="9c3779aa87540dcae41b43b16b724df6"/><file name="TrackService_v5.wsdl" hash="89cc7077a8fc439446e70bac0ca0f0c1"/></dir></dir></dir><dir name="sql"><dir name="usa_setup"><file name="install-1.6.0.0.php" hash="26fbb7e34b87914697cc6871edda22a4"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="197e9bc2a98589def93089b694673615"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="13d60fce09900951eae682f8b13fc2a1"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="c06b0b3e1f934ad33101607adfe53247"/><file name="upgrade-1.6.0.2-1.6.0.3.php" hash="6711b63165039cfe60cf00e735d5e5ff"/></dir></dir></dir><dir name="Weee"><dir name="Block"><dir name="Element"><dir name="Weee"><file name="Tax.php" hash="dd1d38a54afff3f31078819c31bd5f9f"/></dir></dir><dir name="Renderer"><dir name="Weee"><file name="Tax.php" hash="12f03363dce2e8a1a56ad1c991de6a14"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="65fb35999d1f4c94c230460297249720"/></dir><dir name="Model"><dir name="Attribute"><dir name="Backend"><dir name="Weee"><file name="Tax.php" hash="e3f8dfb51300048782418fd06e08a06d"/></dir></dir></dir><dir name="Config"><dir name="Source"><file name="Display.php" hash="b43c72a43a59c1143912288e12d913b3"/><dir name="Fpt"><file name="Tax.php" hash="9f9d2495c23e82df238b6458f8388ace"/></dir></dir></dir><dir name="Mysql4"><dir name="Attribute"><dir name="Backend"><dir name="Weee"><file name="Tax.php" hash="32c06b72032549792c9638fceed8c587"/></dir></dir></dir><file name="Setup.php" hash="54dca7d7912ba877f6596fbeae69af70"/><file name="Tax.php" hash="0fde280f65cb36288adb2e57cd3eb40c"/></dir><file name="Observer.php" hash="528f551ccda1e7ad35f2a98cc2719060"/><dir name="Resource"><dir name="Attribute"><dir name="Backend"><dir name="Weee"><file name="Tax.php" hash="67d628ba369d04c642e69b150c073c7b"/></dir></dir></dir><file name="Setup.php" hash="d2aae8d090a8bef563e1c763488f063b"/><file name="Tax.php" hash="b23f72ae8ac264ab7fb2c0485d7d2277"/></dir><file name="Tax.php" hash="5863d32ec6ee177a4f77e9b31ed01d14"/><dir name="Total"><dir name="Creditmemo"><file name="Weee.php" hash="b99109bcf0327463824430c6d52b8744"/></dir><dir name="Invoice"><file name="Weee.php" hash="8dba424309d6fe761905d4c8e4021f85"/></dir><dir name="Quote"><dir name="Nominal"><file name="Weee.php" hash="ca2bed0f15d71df9805520cabf028766"/></dir><file name="Weee.php" hash="e7f633d68063d3b7e7fcb486d43a8c0d"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="564863c962652804d710b50caf40a30f"/><file name="system.xml" hash="6998725f0d5f5ed88d739b19cd62beb5"/></dir><dir name="sql"><dir name="weee_setup"><file name="install-1.6.0.0.php" hash="373aa75567720ce8918d6a8745e72168"/><file name="mysql4-install-0.1.php" hash="8c8bbf4877723d9f2b94f75913f4c597"/><file name="mysql4-upgrade-0.1-0.2.php" hash="79f8c5597c228f4320c23d7f948e75b1"/><file name="mysql4-upgrade-0.10-0.11.php" hash="393eed4a14dc3d1c37676fac2f236cf2"/><file name="mysql4-upgrade-0.11-0.12.php" hash="3431260605a9f5a9ada16b375300d5da"/><file name="mysql4-upgrade-0.12-0.13.php" hash="5bbd8872154955771c80c1977eced612"/><file name="mysql4-upgrade-0.2-0.3.php" hash="778548bda9fe41143db0cf45823a1471"/><file name="mysql4-upgrade-0.3-0.4.php" hash="190f38f67c5f726a93b961e34d7921b6"/><file name="mysql4-upgrade-0.4-0.5.php" hash="757b01b1356c285c04a2e5bc7402c209"/><file name="mysql4-upgrade-0.5-0.6.php" hash="702e2a896807a7b3bc635ba2a1a66a59"/><file name="mysql4-upgrade-0.6-0.7.php" hash="be2e155cde14eb7f8cc4bf638b1d81fd"/><file name="mysql4-upgrade-0.7-0.8.php" hash="0b1ae83118ac099a5560d09e158e996d"/><file name="mysql4-upgrade-0.8-0.9.php" hash="176dbc4942fe2400ea10a2525b017077"/><file name="mysql4-upgrade-0.9-0.10.php" hash="8ead68994714d0b25c5c39047f9fba02"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="19a59139ce909992c07b0425c58cd12d"/></dir></dir></dir><dir name="Widget"><dir name="Block"><dir name="Adminhtml"><dir name="Widget"><file name="Chooser.php" hash="169ce71cc8f5a01ba89ca4ec57c9a8a9"/><file name="Form.php" hash="2a80e1b1767c134726f818f995c78fd3"/><dir name="Instance"><dir name="Edit"><dir name="Chooser"><file name="Block.php" hash="b0c34d86835152a9c3d2afe02c890200"/><file name="Layout.php" hash="9bd8455d73ffba1ee4f8be01eeb9c18c"/><file name="Template.php" hash="447c7fe84f235f1923ebb2db50953cc0"/></dir><file name="Form.php" hash="a37c182ebb8950863dc9a0d776f09dd8"/><dir name="Tab"><dir name="Main"><file name="Layout.php" hash="fff4297f8ddba98eb089243531ebf763"/></dir><file name="Main.php" hash="b82b7774468a5973fa42f9755234f503"/><file name="Properties.php" hash="516dbe2d7b2d7f8756b99b1688e812d0"/><file name="Settings.php" hash="ecd469678157f228c30a9aac78102afb"/></dir><file name="Tabs.php" hash="e59f2b777dd7e94489559e671d803102"/></dir><file name="Edit.php" hash="cecc5b56b71ecffe69f651c050ef4e90"/><file name="Grid.php" hash="69a1c8ec85fd30003de6c5133c117437"/></dir><file name="Instance.php" hash="07b63add76ac1e6dfacb2afacdc05a90"/><file name="Options.php" hash="497fede60bac6b7a216df0a45b33b14a"/></dir><file name="Widget.php" hash="039dde0f995450ca2f9148c71209a996"/></dir><file name="Interface.php" hash="2cb55b8c0d6af5bd2a0758830c004842"/></dir><dir name="Helper"><file name="Data.php" hash="7f013e78ed95a1ad41ffc5f23f0ef5be"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Widget"><dir name="Instance"><file name="Collection.php" hash="6b3febe92ecfd914c98c754a5eb158dd"/></dir><file name="Instance.php" hash="ee0d4cc5636ce4b2651e65b5099587e8"/></dir><file name="Widget.php" hash="e5d40bda5ff5890238d3c3d6e4527acc"/></dir><file name="Observer.php" hash="c3445374fb6906f0efde283488ba9378"/><dir name="Resource"><dir name="Widget"><dir name="Instance"><file name="Collection.php" hash="e3902166a81e8722b641aedd9f95cfce"/></dir><file name="Instance.php" hash="28079677f50b80fac1f6bc488c0b0807"/></dir><file name="Widget.php" hash="3099262fdcfe8a8f16323aa6b1d7ca3f"/></dir><dir name="Template"><file name="Filter.php" hash="c843c67434cd66fbfa6a86f38549536e"/></dir><dir name="Widget"><file name="Config.php" hash="7da77d63701c312fb130a7b0feaa9106"/><file name="Instance.php" hash="9d125f015d1485e51904defdb816974b"/></dir><file name="Widget.php" hash="37c2a2a84f8fb8fcfc515b293ff53f02"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Widget"><file name="InstanceController.php" hash="218860b74b7e0f0c8353bb60ef68beac"/></dir><file name="WidgetController.php" hash="945ca2af03294aec29c45872e6644197"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="b18272a0985c3ac10406d8013faaa000"/><file name="config.xml" hash="1296d4a61cc78b03af7d12e778b0c637"/><file name="jstranslator.xml" hash="15fa15335d56f745e1451a58a6d64304"/></dir><dir name="sql"><dir name="widget_setup"><file name="install-1.6.0.0.php" hash="f5fb5499b6a63d4165afa465cb43d465"/><file name="mysql4-install-1.4.0.0.0.php" hash="d4cbcbd5b184f6f8d88d1de0c0e8d9d3"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="4caf94862163caa778280da0a38918b2"/></dir></dir></dir><dir name="Wishlist"><dir name="Block"><file name="Abstract.php" hash="2a4368fb1240108eb3ca0bf3b969ec7b"/><dir name="Customer"><file name="Sharing.php" hash="456d004729709c8d7c93d1cce98062cb"/><file name="Sidebar.php" hash="773c7e0a34e82902e643d5f6e6ba4d18"/><dir name="Wishlist"><file name="Button.php" hash="08f371025f96b0b5f1a61bf478108a4f"/><dir name="Item"><dir name="Column"><file name="Cart.php" hash="7d83a707cb3ded3870f84b071ced9926"/><file name="Comment.php" hash="f1bb301ffeb315bbc70be80fdbb54682"/><file name="Image.php" hash="ed984449a33f12e4a14bf3ee4ae83283"/><file name="Remove.php" hash="05160b4067a96a0929287540508aa2f2"/></dir><file name="Column.php" hash="c6b2b4381ad3e3379c7fc0c536a12d96"/><file name="Options.php" hash="d73c2dfb807e650368066856fecef77b"/></dir><file name="Items.php" hash="089145c3af734b031ffff57008f6f562"/></dir><file name="Wishlist.php" hash="e4b1ee5fb9f8588ff4f7822ffb98dab0"/></dir><dir name="Item"><file name="Configure.php" hash="d088576750ccf8037a03695d1438087f"/></dir><file name="Links.php" hash="2655dcb3efac4930924e6b58bc5f5075"/><dir name="Render"><dir name="Item"><file name="Price.php" hash="cb0b316c82175eac440a4d6846da4b78"/></dir></dir><dir name="Share"><dir name="Email"><file name="Items.php" hash="9d80a790d02b536963c7e88eae6b95ce"/><file name="Rss.php" hash="0838f3cfec5688655a8642874552b823"/></dir><file name="Wishlist.php" hash="8ff7ff53e213f270377969b3558c0f0e"/></dir></dir><dir name="Controller"><file name="Abstract.php" hash="99a465e8de4587316cdfa8b8ee74620e"/></dir><dir name="Helper"><file name="Data.php" hash="4e16099480123dc7c31a7e58df83289b"/></dir><dir name="Model"><dir name="Config"><dir name="Source"><file name="Summary.php" hash="8db150e8cd58659adb15ba1216d5b864"/></dir></dir><file name="Config.php" hash="9b36ac4d278559067440f0db63584bdb"/><dir name="Item"><file name="Option.php" hash="002538fc6f15eaeff15576e02ff9d5d1"/></dir><file name="Item.php" hash="af65dabdad473bbae1de031daf9f1fb2"/><dir name="Mysql4"><dir name="Item"><file name="Collection.php" hash="a0878abb3d34f513d74d644e5d6a6b5b"/><dir name="Option"><file name="Collection.php" hash="c32c1b96b6cb1a5d220d2f4da4842068"/></dir><file name="Option.php" hash="2cb17ff416a0c3e10fbe5c0f87131a14"/></dir><file name="Item.php" hash="dc6643f16dc4c4b30ebc7b8f40b772fe"/><dir name="Product"><file name="Collection.php" hash="ce35de73b53e36b821d5f39681deed3d"/></dir><dir name="Wishlist"><file name="Collection.php" hash="e3055aa7f4420786d4ab7246a19ce4c9"/></dir><file name="Wishlist.php" hash="ce4a3be4f46f359f8b9e8d97a132dde5"/></dir><file name="Observer.php" hash="ea721f78bbb92431dc7e016995fb9d74"/><dir name="Resource"><dir name="Item"><file name="Collection.php" hash="5859138d39949c65768c8c205fcbae20"/><dir name="Option"><file name="Collection.php" hash="5b509abd69357bd6f4f5bfb4ce1f0a2e"/></dir><file name="Option.php" hash="a9520ad57cd860ef7a6b692f1e495604"/></dir><file name="Item.php" hash="92cb2dd3e24b0e6bd2ef2845d6c7d094"/><dir name="Product"><file name="Collection.php" hash="79761acc3422b92c21b0dae222e8b3b9"/></dir><dir name="Wishlist"><file name="Collection.php" hash="7b9722281bd55802b91ef20eab53255b"/></dir><file name="Wishlist.php" hash="78c5b1d349978896cea12317ed382fdf"/></dir><file name="Session.php" hash="9d74602cc1a45399e7b97f70df2c17b8"/><file name="Wishlist.php" hash="62fa9d7924b61421f382b0c01b6dda92"/></dir><dir name="controllers"><file name="IndexController.php" hash="7a4e3cae97e3c2940c0317fcfec9ad9e"/><file name="SharedController.php" hash="72a145bcb802ea7505c9bcb6f4e85a2f"/></dir><dir name="etc"><file name="adminhtml.xml" hash="027373e7b6da22b634a79733660c267c"/><file name="config.xml" hash="42860b28fefb8230e54b66efc6cca7e1"/><file name="system.xml" hash="b3451ddf7936228ac9c4319d0f896f0c"/></dir><dir name="sql"><dir name="wishlist_setup"><file name="install-1.6.0.0.php" hash="c086bab117e32d9b2a37be6f6841fa8b"/><file name="mysql4-install-0.7.0.php" hash="83b22b61bfe862192d54321cd89ee3e6"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="1fec6213ffc583c317f1cc8b01421f5b"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="fe9e1be0465528dcc9b9f9a4bc33f671"/><file name="mysql4-upgrade-0.7.2-0.7.4.php" hash="6aad117dd4ed68cd7fabfd28f52c5eb3"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="17b24b6b18e8b60c85c2bd24542b18a4"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="1492241a61245378b59422098d922dc5"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="560fde491b85eb08575a212137e4dc77"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="ad907977c112455072ec3877caa6467f"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="6458a21c207db69ec3b0ff16ece201e9"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="e7de27080f47c179fa64044b7c7f01ef"/></dir></dir></dir></dir><dir name="Zend"><file name="Date.php" hash="95bf218944785f606f22c2ea0c077f5d"/><dir name="Db"><file name="Select.php" hash="28f3efa5f9797af22f899fb525dbb44f"/><file name="Statement.php" hash="4b5b39a1e1c651ab9d6db332c882fdf7"/></dir><dir name="Filter"><file name="PregReplace.php" hash="1b5bbd52c2b2d17f19db273606e5ddfc"/></dir><dir name="Form"><dir name="Decorator"><file name="Form.php" hash="fbd6a6687ef13a8b7ba416c1ca50dd38"/></dir></dir><file name="Mime.php" hash="f216d84221e3d7601822b4c95948aeaf"/><dir name="Serializer"><dir name="Adapter"><file name="PhpCode.php" hash="d19044ca7b67e672bb9627f572f1a069"/></dir></dir><dir name="Validate"><file name="EmailAddress.php" hash="e04917b783b4880bdc984e7774abf7a6"/><file name="Hostname.php" hash="08c032ea8831e62e79c792e274220aa9"/></dir><dir name="Xml"><file name="Security.php" hash="7366a7b9e2dab5551b557f49d900d6a1"/></dir></dir></target><target name="mage"><dir name="app"><file name="Mage.php" hash="a9493d524033073783b3a699dfa33935"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/><file name="bootstrap.php" hash="f4a82f3d5b3e180f6c3edaf54400ce9d"/></dir><dir name="."><file name="cron.php" hash="acaf5a64a15dacb758ac99767e8da6a4"/><file name="LICENSE.txt" hash="59563e7be45096d0833dade102989042"/><file name="index.php.sample" hash="516477ded8fca96db7b7baf32cc12677"/><file name=".htaccess.sample" hash="971c336db60ac86ae96b5c5871be1e8c"/><file name="LICENSE_AFL.txt" hash="45a399f2095030865fb962263ccd7506"/><file name="LICENSE.html" hash="caf0a79ffb5e4719f9f4de286f253a61"/><file name="cron.sh" hash="0fbc521a7d6c9ba5460c3184967e0f12"/><file name="install.php" hash="765ccaa3255ba707420b760e1fc78ffa"/><file name="php.ini.sample" hash="d7412c2f78440a96fc2d9378ccf460cb"/><file name="get.php" hash="72c6c8b5ea9450a46d2852448d39ded3"/><file name="RELEASE_NOTES.txt" hash="a8b538d1b4db14dc337b3a67081899c7"/><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><file name="api.php" hash="c254de5be8783255e05b7161392ec7ca"/></dir><dir name="errors"><file name="404.php" hash="52eb809b4ac842f5d8b8a0e8162fb87d"/><file name="503.php" hash="ad502fac41a76914095ee504186bb60a"/><dir name="default"><file name="404.phtml" hash="060eed9c360b7f2b7c835e396257697b"/><file name="503.phtml" hash="a4f4cdf8c571de3bee43f3334a5e3236"/><dir name="css"><file name="styles.css" hash="08e8a2dd4953f273a86c6b5105c14956"/></dir><dir name="images"><file name="bkg_body.gif" hash="82bfc5bfe346c8e974cd33b1314b0acf"/><file name="bkg_header.jpg" hash="0211c47be1493bd0ec72949c47932b81"/><file name="bkg_main1.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="bkg_main2.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><file name="i_msg-error.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="i_msg-note.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="i_msg-success.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="logo.gif" hash="48b7eb03807fdf80bdfb19b872cf84b8"/></dir><file name="page.phtml" hash="6cbf2242c9e7c370fd3eca50f3a74a19"/><file name="report.phtml" hash="06f47a20a74d6eb5cfd9f6ab0a3091fa"/></dir><file name="design.xml" hash="92f4586ad3d45a8a05fc342035669d78"/><file name="local.xml.sample" hash="83c646d259d7b0afbcf7878c352dbd1c"/><file name="processor.php" hash="885881c4fa60a3e97f3ae351b8d81110"/><file name="report.php" hash="3de9c5efc110fc6dd30941dedf33ae4d"/><file name=".htaccess" hash="8382e66b40fe15d7a1edfc780f9be92f"/><file name=".htaccess" hash="8382e66b40fe15d7a1edfc780f9be92f"/></dir><dir name="var"><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><dir name="shell"><file name="abstract.php" hash="40f2c3410dfc2a0b676a5e58c696a510"/><file name="compiler.php" hash="f2d926c4a51d2197def3c66c51205d08"/><file name="indexer.php" hash="2284eebdec56889a7de2ebd959757bf2"/><file name="log.php" hash="0544716ccbfa851341951cdd5eae6f7b"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><dir name="lib"><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><dir name="media"><file name=".htaccess" hash="08de5b2f5ea1ce6f51f40a19bacbf42e"/><dir name="dhl"><file name="logo.jpg" hash="68500df59e568e01333ba078a262ca27"/></dir><dir name="downloadable"><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><dir name="customer"><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir></dir></target><target name="mageetc"><dir name="."><file name="config.xml" hash="26e7fcad34e33bf1c86d34aa5229569f"/><file name="local.xml.template" hash="d618514ef235cc0766c28d533a0ff0ae"/><file name="local.xml.additional" hash="dcf73b5a1b54822cdccd79610e4f47ff"/></dir><dir name="modules"><file name="Mage_All.xml" hash="11e9eb861369a21d6a1a1f774db84172"/><file name="Mage_Bundle.xml" hash="0427fde4b98189033d22c475bf952aee"/><file name="Mage_Api.xml" hash="099ab4ebf639c4d7e08610a9abacdfef"/><file name="Mage_Downloadable.xml" hash="8e907dc0be6e843acca4cd9ad5183e33"/><file name="Mage_Weee.xml" hash="ed33da8b3c051a2f05cec8691b80a836"/><file name="Mage_Widget.xml" hash="62f954220f02a866f1c195544198b57f"/><file name="Mage_Connect.xml" hash="62fbc51b1e64cb580ebe81e8b89d72fd"/><file name="Mage_ImportExport.xml" hash="e1591ab0bf438c3d2868cfb794fd2716"/><file name="Mage_PageCache.xml" hash="a4ec3cac551d62995c97cedd99a2fdd1"/><file name="Mage_Persistent.xml" hash="3c16a3e0c22c7c2398253afd7f3231d5"/><file name="Mage_Authorizenet.xml" hash="54837c3b1432c6074de7add7da07fc43"/><file name="Mage_Captcha.xml" hash="6f42b7d1e07aa44d5c8dbff656e3e8e3"/><file name="Mage_CurrencySymbol.xml" hash="334f1b4b44a8a235da5aa3ff7d693e30"/><file name="Mage_Api2.xml" hash="cb422c0dc04c27e86a481ee1d861c36c"/><file name="Mage_Oauth.xml" hash="3ae635189b55f252c5e94d4a9ee11b6b"/><file name="Mage_ConfigurableSwatches.xml" hash="e2eaeb2cc79a53541fe54aa53c412307"/></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Lib_Varien</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_Google_Checkout</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_Js_Calendar</name><channel>community</channel><min>1.51.1.16</min><max>1.51.1.16</max></package><package><name>Lib_Js_Mage</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_Js_Prototype</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_Phpseclib</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Mage_Locale_en_US</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_Mage</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_Magento</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_Credis</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_Pelago</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_Unserialize</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package><package><name>Lib_IDNA2</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Mage_Core_Modules-1.9.4.0.xml b/var/package/Mage_Core_Modules-1.9.4.0.xml
new file mode 100644
index 0000000..93e58cf
--- /dev/null
+++ b/var/package/Mage_Core_Modules-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Mage_Core_Modules</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Collection of Magento Core Modules</summary>
+    <description>Collection of Magento Core Modules</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:08</time>
+    <contents><target name="magecore"><dir name="Mage"><dir name="Admin"><dir name="Helper"><file name="Block.php" hash="caa2d50273d135454432a82279a11568"/><file name="Data.php" hash="a1e30b8cff30b64d0071e3fc0d4d747c"/><dir name="Rules"><file name="Fallback.php" hash="5482131732670d135c93815ccda8c06f"/></dir><file name="Variable.php" hash="fae16e7d6ff7c120b7f4ef6382c00286"/></dir><dir name="Model"><dir name="Acl"><dir name="Assert"><file name="Ip.php" hash="a59d50ca3b29cc9a624261da4dbe9c1b"/><file name="Time.php" hash="7192ead0d21ba20bfe1790f5e2aff34b"/></dir><file name="Resource.php" hash="0839068c44eddb3b3748236642bf84e7"/><dir name="Role"><file name="Generic.php" hash="21c78892191682d198ebeb3a4995db8c"/><file name="Group.php" hash="538b9f77a4c75aa1060a52f611abaf1a"/><file name="Registry.php" hash="a24c7a642f46edd6c2d4c7675c0c84f1"/><file name="User.php" hash="46d3710d79d3640420f58a262fbeffd4"/></dir><file name="Role.php" hash="943df3fdcf2f2c819b804203762c405b"/></dir><file name="Acl.php" hash="54433cdf323e543e1867c2549ece2146"/><file name="Block.php" hash="6f4be02782162b7139294394fb2004ef"/><file name="Config.php" hash="a3bcd071ae1f775d2e1501a7a4f9822b"/><dir name="Mysql4"><dir name="Acl"><dir name="Role"><file name="Collection.php" hash="9b07c8d517462b6204a83d90acd16756"/></dir><file name="Role.php" hash="8b294821cf814a143d850198f4c43152"/></dir><file name="Acl.php" hash="6cc39341f37e79af75598f6cac080928"/><dir name="Permissions"><file name="Collection.php" hash="adefccfe4c00a5107351e4db77640acb"/></dir><dir name="Role"><file name="Collection.php" hash="d932179a37015862d102e9bad94f3bbf"/></dir><file name="Role.php" hash="f9e310b9e3866e9b444e914275a7874e"/><dir name="Roles"><file name="Collection.php" hash="dfc8f612252f1290b2159451fe4e9436"/><dir name="User"><file name="Collection.php" hash="4e7b8bf1992f866fe90e3ddf5b0c6461"/></dir></dir><file name="Roles.php" hash="983a8d78acc8b0497aac971d41aca7ad"/><dir name="Rules"><file name="Collection.php" hash="a8dbbe361030637cfb8302a9b00d1679"/></dir><file name="Rules.php" hash="28114cde294f6cc6e145b46ec725c72f"/><dir name="User"><file name="Collection.php" hash="57f200bf02f6ea105ceb61e8fe46e756"/></dir><file name="User.php" hash="55f3f78be0507543391cbc8e540c6b7b"/></dir><file name="Observer.php" hash="81cc930f29d4344171630cb7ea4a1edd"/><file name="Redirectpolicy.php" hash="b646df71602dbe82e7ab1782fbd84133"/><dir name="Resource"><dir name="Acl"><dir name="Role"><file name="Collection.php" hash="1926e0a7c8bf8940f70e26e3c2dd70ae"/></dir><file name="Role.php" hash="be13385eb722b00b08ee72c333f3c948"/></dir><file name="Acl.php" hash="f24de22c611f36f6fc7be3ac20c46695"/><dir name="Block"><file name="Collection.php" hash="718324e3f2d4c5d48c056bc6fda734de"/></dir><file name="Block.php" hash="5035beb7d68f54ffd191e1f7b8884421"/><dir name="Permissions"><file name="Collection.php" hash="cad5501e6d14ab6e7422881c2bd0529a"/></dir><dir name="Role"><file name="Collection.php" hash="daa545d25e2b93754fd2f7b5eac63795"/></dir><file name="Role.php" hash="f464a8b332d285af1bd80248fb18400c"/><dir name="Roles"><file name="Collection.php" hash="8ccb0a88f2091d75721a52c3b12757a3"/><dir name="User"><file name="Collection.php" hash="0f674723bb96b168ace8a02a1cca0186"/></dir></dir><file name="Roles.php" hash="8cc80a0c8b61fe74fb736ce8dfcac4c7"/><dir name="Rules"><file name="Collection.php" hash="fdc5f99600a5fbd7dba4fae947895689"/></dir><file name="Rules.php" hash="7d29a42a640f540fb93fcd74d5736670"/><dir name="User"><file name="Collection.php" hash="4ce53e45a26d3e054bb88df76471de9b"/></dir><file name="User.php" hash="d83993d485d972470d74e3bbef5129ef"/><dir name="Variable"><file name="Collection.php" hash="a6e4c9520ae8814e22a86126263a8123"/></dir><file name="Variable.php" hash="d552d6a33a00e83583c2c9b958fc57e9"/></dir><file name="Role.php" hash="427f7e03d269ad1dc23a4173621c6d3a"/><file name="Roles.php" hash="b83f289438abb74f56f1912877f53f1c"/><file name="Rules.php" hash="489fdb5eae36676cc780ef79bd0b3f2c"/><file name="Session.php" hash="2028c3c98afd35568fb8d3cc4f134581"/><file name="User.php" hash="c0acee16404bf6cb02f161ef3b77d7ee"/><file name="Variable.php" hash="7d47e44adeea80a3497965d4ac43a11c"/></dir><dir name="data"><dir name="admin_setup"><file name="data-install-1.6.0.0.php" hash="0c513c2cfa2157991f25ced0078a0a28"/></dir></dir><dir name="etc"><file name="config.xml" hash="e46e6daf902ff5fa67e29aeb7822dc25"/></dir><dir name="sql"><dir name="admin_setup"><file name="install-1.6.0.0.php" hash="980f7a261260766a99bb1c2168ee9ee8"/><file name="mysql4-install-0.7.0.php" hash="3ac4123cb71f013d2ad470dea9d30810"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="72634f2eb3a48eeceaea8c5996628e58"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="0b41c60e4309ab58b185475035690803"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="a6e086154afbf0e78ebda93b8df1e6e5"/><file name="upgrade-1.6.0.0-1.6.1.0.php" hash="aa06fe4ff87c19621f325a7eb7ef74af"/><file name="upgrade-1.6.1.0-1.6.1.1.php" hash="b09feaaa0526ef59693920d6eda5bc70"/><file name="upgrade-1.6.1.1-1.6.1.2.php" hash="6b79418a832f51d1f9c28c5ce748322a"/></dir></dir></dir><dir name="AdminNotification"><dir name="Helper"><file name="Data.php" hash="df042bc27f5d78373840d635b65b602c"/></dir><dir name="Model"><file name="Feed.php" hash="db188fd3c854c92ab2f2fd18e3aeef56"/><file name="Inbox.php" hash="3f3e76c94db42f21e2213e87f347650b"/><dir name="Mysql4"><dir name="Inbox"><file name="Collection.php" hash="5d92840cb8289659edf2bea39c9506e5"/></dir><file name="Inbox.php" hash="efbb324a01db989b7abe345a7e2a0603"/></dir><file name="Observer.php" hash="b4ed5e01e17ab5d02af5dbf62fd6b99f"/><dir name="Resource"><dir name="Inbox"><file name="Collection.php" hash="161c59fda876ddb47af017f3d3688e92"/></dir><file name="Inbox.php" hash="c88b47b782cfcdf0752568434b29fd4a"/></dir><file name="Survey.php" hash="1b099509ff57f10c585295f95b1bdbf6"/></dir><dir name="etc"><file name="adminhtml.xml" hash="8306afc5cbf075e597ea182abbbad3bf"/><file name="config.xml" hash="93e0e7500211acff718572a494b1ff1d"/><file name="system.xml" hash="5022df69821d874a52f57c9073cebb27"/></dir><dir name="sql"><dir name="adminnotification_setup"><file name="install-1.6.0.0.php" hash="cf2dd6c652424ef76d06f74c89b66a7b"/><file name="mysql4-install-1.0.0.php" hash="f0ae881e7787a929c476dd20798eab98"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="d2c80d03e0f86c9b8825f033c23b6d01"/></dir></dir></dir><dir name="Api"><dir name="Controller"><file name="Action.php" hash="6c3628b0ac300a4cd89b98eda8d09c26"/></dir><file name="Exception.php" hash="f1c37ee004e19d1bd0d89feee1cb8399"/><dir name="Helper"><file name="Data.php" hash="0ef5815133c5d83c063356a3e0da3daa"/></dir><dir name="Model"><dir name="Acl"><dir name="Assert"><file name="Ip.php" hash="c2a37bf362c2a7b2b7541bdfaecec197"/><file name="Time.php" hash="c914e7c3bdfd6a9db3520a09092042c7"/></dir><file name="Resource.php" hash="c73618e1e22cd9e536ac70743cdd2540"/><dir name="Role"><file name="Generic.php" hash="fb84e9243f5b0b259550ac04d78f3f14"/><file name="Group.php" hash="8767858e21f6f122daf9e9613aa46daf"/><file name="Registry.php" hash="86e7d446f72e86958fd31fd0529a89ff"/><file name="User.php" hash="c469eff3b9a049abfffa2713efae214f"/></dir><file name="Role.php" hash="d96b56ede53505c56b58b0f38135823e"/></dir><file name="Acl.php" hash="939deaca14b67306b767e389187590e6"/><file name="Config.php" hash="bb1e22bcb0fb28ad2588f6c2b2a60e31"/><dir name="Mysql4"><dir name="Acl"><dir name="Role"><file name="Collection.php" hash="32fe974a16a7b48f1894d2679b84e1a2"/></dir><file name="Role.php" hash="e5e0771ac8010362fa549c6e7daa7e30"/></dir><file name="Acl.php" hash="70c0aeedb1fb6ab524ab2794686e2901"/><dir name="Permissions"><file name="Collection.php" hash="4cd6e1648ef9de08aac8cd601f0e6dc7"/></dir><dir name="Role"><file name="Collection.php" hash="be4910ba32a9a2523441b0e94055cb96"/></dir><file name="Role.php" hash="ac94438d85b8e1fe7dd54ea5b6e63ae3"/><dir name="Roles"><file name="Collection.php" hash="18e2d6868811a2ca964bc8b6bd114976"/><dir name="User"><file name="Collection.php" hash="747d7d19d70c23540b3fd2597700eea8"/></dir></dir><file name="Roles.php" hash="49c8bf80cce95a6144ab436e3325fa0f"/><dir name="Rules"><file name="Collection.php" hash="9074b80fdbe0064239f630923205116a"/></dir><file name="Rules.php" hash="428cd0c12e6fd67e9c8034c7ac916020"/><dir name="User"><file name="Collection.php" hash="a5528fbfb43795975f632684de0a1e9b"/></dir><file name="User.php" hash="ffa15689d0d3be22d1dd833854c9918e"/></dir><dir name="Resource"><file name="Abstract.php" hash="f651d503d44050750e347dea6c4eb2a1"/><dir name="Acl"><dir name="Role"><file name="Collection.php" hash="8cebb1abdaa3a0047515c8f293024185"/></dir><file name="Role.php" hash="89d84c7acc34e89db2ce8da6549cb309"/></dir><file name="Acl.php" hash="68367d41c8cddb578356dd3e954b4e05"/><dir name="Permissions"><file name="Collection.php" hash="8f0a8da938b11ae2f807a8cea8ed90fb"/></dir><dir name="Role"><file name="Collection.php" hash="4b0f67fd9f8b98d6290d89637b8d316e"/></dir><file name="Role.php" hash="fb845fb504654a9d77d589f9375cec0c"/><dir name="Roles"><file name="Collection.php" hash="107712d451f49d5117b0ca501993e725"/><dir name="User"><file name="Collection.php" hash="dd46a32c262b6f614e06c137e966b444"/></dir></dir><file name="Roles.php" hash="601e50dd0dcee557e210dc58d8a6cefa"/><dir name="Rules"><file name="Collection.php" hash="71e01b2d03324b5cca1febb062c16b82"/></dir><file name="Rules.php" hash="8bc2f8599ff63bace0f881b7dbad38d4"/><dir name="User"><file name="Collection.php" hash="af7f66ac98385c12eb69eec621091b7c"/></dir><file name="User.php" hash="4e00711e498dbad779d00e44abdadafb"/></dir><file name="Role.php" hash="ae0c28bdc096f4a02a24bacffbe43e4c"/><file name="Roles.php" hash="fa40e03fd2fb95ad6d180006b372a000"/><file name="Rules.php" hash="19025dc7e78b47f7bfab247abbf3dfab"/><dir name="Server"><dir name="Adapter"><file name="Interface.php" hash="5a2b192b023481b9334867830f7fc138"/><file name="Soap.php" hash="ea07c3bad993021d2b30901ad5277691"/><file name="Xmlrpc.php" hash="89630ebb23280c22955d32834dd428e7"/></dir><dir name="Handler"><file name="Abstract.php" hash="958f6fb48098d3f5593be13444b6271d"/></dir><file name="Handler.php" hash="15041baa52a1f7378c923a7fe19ddbf9"/><dir name="V2"><dir name="Adapter"><file name="Soap.php" hash="b40c707f4d69a59570142e416eae6ea6"/></dir><file name="Handler.php" hash="645b2e4ab2515e5ad8ad88d7513cbba9"/></dir><dir name="Wsi"><dir name="Adapter"><file name="Soap.php" hash="e04892f8ee83aa2236240f7f674beebe"/></dir><file name="Handler.php" hash="c8287d2c89cb6135104bda851f977489"/></dir></dir><file name="Server.php" hash="9be34054f5a0c93688ddfd9f052169b7"/><file name="Session.php" hash="8a290c5d23e5caba85adbc5748ddee85"/><file name="User.php" hash="15f64d4cc591f61fbf227ba25c3a1485"/><dir name="Wsdl"><dir name="Config"><file name="Base.php" hash="5c284d7e8e13f59f4b4f8b275d191452"/><file name="Element.php" hash="e42b6b1c30064f8a53f0fb199d77e5cb"/></dir><file name="Config.php" hash="fca16130d0fc928d68c4307fc7fc4886"/></dir></dir><dir name="controllers"><file name="IndexController.php" hash="0d50721374b168478c75084b9e0aa784"/><file name="SoapController.php" hash="caaba72fa28c829c358566baefeccbaf"/><dir name="V2"><file name="SoapController.php" hash="7bf9b20009581e5ec0cee7fba29fae6d"/></dir><file name="XmlrpcController.php" hash="757a12d58d3c89c92c25767d78bb8ba5"/></dir><dir name="etc"><file name="adminhtml.xml" hash="57ae0b2026085976e92bc10a4bfe0aab"/><file name="api.xml" hash="338887365fd87a21806a14089685d4cb"/><file name="config.xml" hash="abee7d9e23f6d7d2684eaa5b517f21f7"/><file name="system.xml" hash="f48c397a9a8ae46ec06bd051cfa38626"/><file name="wsdl.xml" hash="f0db676b04733b38f310355bb44bc3cb"/><file name="wsdl2.xml" hash="7d527421ba4b63a8a812ab6b1095891d"/><file name="wsi.xml" hash="9fb1700cf935a26e7fada90a07fae7fe"/></dir><dir name="sql"><dir name="api_setup"><file name="install-1.6.0.0.php" hash="09e011980354c86266cdf9d63a5af8cd"/><file name="mysql4-install-0.7.0.php" hash="4cb547e0f089626e582767db0ec8ee90"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="6aba64817491a0d6a75bf672ac4cab44"/><file name="mysql4-upgrade-0.8.0-0.8.1.php" hash="193d3c806f3f6f9c8b9d78695856ae3d"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="8e4802513a90731e5d70d1882b38b806"/><file name="mysql4-upgrade-1.6.0.0-1.6.0.1.php" hash="f7b95ac048305ed05d040e3f21c495b4"/></dir></dir></dir><dir name="Api2"><dir name="Block"><dir name="Adminhtml"><dir name="Attribute"><file name="Buttons.php" hash="e57b2cca67185e3cd213f8a0f8b85f40"/><dir name="Edit"><file name="Form.php" hash="c8d355c13150048b44adbb7890807182"/></dir><file name="Edit.php" hash="f16b5c8886a820c2e6aa98bd4aa4d643"/><file name="Grid.php" hash="86ba4658fb06045763abb8c7a06b15a4"/><dir name="Tab"><file name="Resource.php" hash="3239ed35e6d73f4d99f3aebc6cb15df2"/></dir><file name="Tabs.php" hash="505fd3e313888bf6841b8419de4a36b9"/></dir><file name="Attribute.php" hash="0dd6ead429d30891593ef5dd46694fd8"/><dir name="Permissions"><dir name="User"><dir name="Edit"><dir name="Tab"><file name="Roles.php" hash="fae6fda77fa35cb811e343db83ab538f"/></dir></dir></dir></dir><dir name="Roles"><file name="Buttons.php" hash="99d83abfae8d8c391c2f1ec74cacf783"/><file name="Grid.php" hash="34d4de009fe78255533328d5d9948e24"/><dir name="Tab"><file name="Info.php" hash="b580103e0eb426629d6abab30bcbbbf8"/><file name="Resources.php" hash="a9cb4685233d34c84fb44b0fcc79df4f"/><file name="Users.php" hash="dd1412f767dd45ba5ca2766095cec422"/></dir><file name="Tabs.php" hash="d60717cf367b7fb6bbb0ae11dba22c0a"/></dir><file name="Roles.php" hash="1d276329e5a50560e6e2f2b32ec29285"/></dir></dir><file name="Exception.php" hash="f4ced7d9dfb82edfdeb2c7d0b5ce2768"/><dir name="Helper"><file name="Data.php" hash="8975105793473a87063e164aea84feaa"/></dir><dir name="Model"><dir name="Acl"><dir name="Filter"><dir name="Attribute"><file name="Operation.php" hash="7772c8a909faec7391ce93fe91e077df"/><file name="ResourcePermission.php" hash="7980da3c1b5f522349a63f43938e37a1"/></dir><file name="Attribute.php" hash="af82dddf8646031fdae39a58dfa307df"/></dir><file name="Filter.php" hash="5109370c1a4adc8bc1f6b276f50868ae"/><dir name="Global"><file name="Role.php" hash="ae97b45a46e8770005e419678fa8ebf9"/><dir name="Rule"><file name="Permission.php" hash="8de779f299484181680195e87387fc88"/><file name="Privilege.php" hash="d90ec9b7324de863e74e6f13b3dfcde3"/><file name="ResourcePermission.php" hash="48f8373c47060c8c01358500d4548d5e"/><file name="Tree.php" hash="9a49b87115c274c87198a612fac101ff"/></dir><file name="Rule.php" hash="321434a2a494b8b519df55c0554b99e2"/></dir><file name="Global.php" hash="7819e08f4116c8c5a26af3a5a7f8a5fc"/><file name="PermissionInterface.php" hash="cabcf2514da2259366f1f68767937646"/></dir><file name="Acl.php" hash="8168df9324f44b487637330fe94e5b45"/><dir name="Auth"><dir name="Adapter"><file name="Abstract.php" hash="fa725f5d2bc74776393ab577da5213e0"/><file name="Oauth.php" hash="dafe7bb6be6ebb9648dd8d013c68f924"/></dir><file name="Adapter.php" hash="872d0216ee0446972dc2d486ff0d7bd4"/><dir name="User"><file name="Abstract.php" hash="81117cecf3a752eb7bf0ba689a4c0528"/><file name="Admin.php" hash="02230ffbbe56609a244dcb4f531a5739"/><file name="Customer.php" hash="0023067ca016f00f011204ffe6a346d2"/><file name="Guest.php" hash="e57dd3245a2a09a2755a1ade2cf1a788"/></dir><file name="User.php" hash="2b22b00fbd482e569f7e01c6ee4f1e74"/></dir><file name="Auth.php" hash="665a2694ec0fc6e233767d05ddc7b0f5"/><file name="Config.php" hash="ed2cdc8b2c092280a58cee2ec8ab9e2e"/><file name="Dispatcher.php" hash="30da396e02ddb880a36fcae44b3f4ffb"/><file name="Multicall.php" hash="c82b0b041e8b71685658ce9939d9f537"/><file name="Observer.php" hash="23b35ca3a5c0de9419bff1b50b98ef64"/><dir name="Renderer"><file name="Interface.php" hash="d9bd0c2d19c4f216ca1495ac30987233"/><file name="Json.php" hash="76b25110de667ee1c5f76c93fb242565"/><file name="Query.php" hash="5ef975348f915590b5fba1ff5a5a4958"/><dir name="Xml"><file name="Writer.php" hash="03bcf955bf8cb14b2143647161949357"/></dir><file name="Xml.php" hash="92504e9d4da46b51835e029882cdbe0b"/></dir><file name="Renderer.php" hash="6802baf80fe73e306e2361054a7b4687"/><dir name="Request"><file name="Internal.php" hash="ed73acd6aa487d4d55ddb073cc92a54f"/><dir name="Interpreter"><file name="Interface.php" hash="bd8eea102f6fdd48da627dad533b87b9"/><file name="Json.php" hash="28ae2899eaeb54f13a10424ad0bd2222"/><file name="Query.php" hash="dbdc8defdc20549dde842a6f30b05926"/><file name="Xml.php" hash="ce5d93d53da641b1f92514b2490b5c40"/></dir><file name="Interpreter.php" hash="c983432ec6ab8ab19061e2895b0b12ee"/></dir><file name="Request.php" hash="52ce6e5ed8b67e92242c89358c0ff61f"/><dir name="Resource"><dir name="Acl"><dir name="Filter"><dir name="Attribute"><file name="Collection.php" hash="c5c3f91562564872857a90de8f6e6eb1"/></dir><file name="Attribute.php" hash="4b31a1a4c3923d393607c65c363cb74a"/></dir><dir name="Global"><dir name="Role"><file name="Collection.php" hash="c8cdd0443473ccdef524bbc9d0ee5faf"/></dir><file name="Role.php" hash="d512859354a0f3a68482c0b5b724200f"/><dir name="Rule"><file name="Collection.php" hash="199861b7d7ac3a114a9a3acd7b3b6bdc"/></dir><file name="Rule.php" hash="027b4342ef354ae654b95d3ad67d052a"/></dir></dir><file name="Setup.php" hash="06271b676d7740c82d9b87cab3f9c7cb"/><dir name="Validator"><file name="Eav.php" hash="f8eca8dadc2a2b16b01c523bf18a1fe9"/><file name="Fields.php" hash="9afa037fbf7489ea9042eb6955083b0d"/></dir><file name="Validator.php" hash="dc081ab02438cd20f95540a9a9552b30"/></dir><file name="Resource.php" hash="2de527731797b00eee24128ea7dadcb6"/><file name="Response.php" hash="03b815e352a2e39648c1836a28106519"/><dir name="Route"><file name="Abstract.php" hash="ad6970f5b98a7d2c8b7f6686d3e5e50e"/><file name="ApiType.php" hash="5bd38d66efe6a96558778c22cbd3cf25"/><file name="Interface.php" hash="635382ad0b407c35a551832250c79ab7"/><file name="Rest.php" hash="a1524cd462cb860fbb586e999a6a3dc7"/></dir><file name="Router.php" hash="26b93184e98020f9266225c0654cc011"/><file name="Server.php" hash="636ebda89a840623c4ec3c783c2c0581"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Api2"><file name="AttributeController.php" hash="e7c9a4ff55b6bfde147b4562cf9d6867"/><file name="RoleController.php" hash="a281f68c3d40ead23d29a5a761c27036"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="120807e3d576ab501e5a289d97e25978"/><file name="config.xml" hash="692bf96f7375cb891461e67f1e3e2ee1"/></dir><dir name="sql"><dir name="api2_setup"><file name="install-1.0.0.0.php" hash="ed93a6c9c5d36b8c9e552c1b75cb8c2d"/></dir></dir></dir><dir name="Authorizenet"><dir name="Block"><dir name="Directpost"><file name="Form.php" hash="e69a1ed465822af82fcca19b6232296e"/><file name="Iframe.php" hash="d175239ccdac988fe85d3ac55552d060"/></dir></dir><dir name="Helper"><file name="Admin.php" hash="73abd68b846923ba6841d0f16bb68ac3"/><file name="Data.php" hash="57de952e77147fe84c0ac75701b055a1"/></dir><dir name="Model"><dir name="Directpost"><file name="Observer.php" hash="49b71dfe98c71e0704f503fc6b1ee200"/><file name="Request.php" hash="373852a6d6a4b2d204d2105748a3d0e4"/><file name="Response.php" hash="d671a881c1241f1bbb173babbcf082b0"/><file name="Session.php" hash="9ed74b4f3bd8694cb4e9512748cff581"/></dir><file name="Directpost.php" hash="f68182cb174048294a2069ad5f19c510"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Authorizenet"><dir name="Directpost"><file name="PaymentController.php" hash="58a391e6780c02cbb6e96629406b70d5"/></dir></dir></dir><dir name="Directpost"><file name="PaymentController.php" hash="68655a8dec57f412c6c1c75472310385"/></dir></dir><dir name="etc"><file name="config.xml" hash="e5b53414e308a72beb5964c9e52bb891"/><file name="system.xml" hash="ffc68b24656677cc1f4191332a59a90f"/></dir></dir><dir name="Backup"><file name="Exception.php" hash="aef32492db8e2e178a6f19dd60ec44b2"/><dir name="Helper"><file name="Data.php" hash="0f9eb22500eecf1541ffae88a455ebbf"/></dir><dir name="Model"><file name="Backup.php" hash="b9f82ae285c4d1537dcde437da930445"/><dir name="Config"><dir name="Backend"><file name="Cron.php" hash="e55dc0f8d625f820247117fa8340a7c2"/></dir><dir name="Source"><file name="Type.php" hash="b717810ab4fdae54653a5a2fbc7ea83f"/></dir></dir><file name="Db.php" hash="8e4071a663d5c9c56ccdefe6f11f202a"/><dir name="Fs"><file name="Collection.php" hash="12b97f06d9bf26f826f06c0eea7409fc"/></dir><dir name="Mysql4"><file name="Db.php" hash="9d8151ac0ee8a690f82250ca69af7d21"/></dir><file name="Observer.php" hash="863ee663b43f6d2034d485df551e8408"/><dir name="Resource"><file name="Db.php" hash="16989c6a7a852e56e0fc163e28ea7579"/><dir name="Helper"><file name="Mysql4.php" hash="5871dac4d9b3224d5a1ad47095346d11"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="43b323c1e0b322d4a01a0a27e6c235c6"/><file name="config.xml" hash="668b53e3184cbdf3fc15250286b53c4d"/><file name="system.xml" hash="903010312af10460e9eef9cd2936f816"/></dir></dir><dir name="Bundle"><dir name="Block"><dir name="Adminhtml"><dir name="Catalog"><dir name="Product"><dir name="Composite"><dir name="Fieldset"><file name="Bundle.php" hash="9f4002ed90b9e2a53dc20e71151acda8"/><dir name="Options"><dir name="Type"><file name="Checkbox.php" hash="96f52f78dc7a09bdb427c8ee52b65d23"/><file name="Multi.php" hash="3722af33a4e0dbb000091073426fb096"/><file name="Radio.php" hash="2d5e65660d87f101cb7cece0b11ae040"/><file name="Select.php" hash="b649193e763687ee21b24869a8339133"/></dir></dir></dir></dir><dir name="Edit"><dir name="Tab"><dir name="Attributes"><file name="Extend.php" hash="5af45e344d7369bbf96c509da09306db"/><file name="Special.php" hash="af9f401061ebb00a733af4bb305bc5ee"/></dir><file name="Attributes.php" hash="fbfb5661ef64a6f9e30054208b760ae5"/><dir name="Bundle"><dir name="Option"><dir name="Search"><file name="Grid.php" hash="89d6f93c59a52af2cf56950665054b7c"/></dir><file name="Search.php" hash="9fa52e06eb3f75a425d5402116ce47e0"/><file name="Selection.php" hash="8f70becf362c369b2f6bcb8c3378763c"/></dir><file name="Option.php" hash="4eb61a0f38c5d7ebf82a58ee985bc28f"/></dir><file name="Bundle.php" hash="3c8a140d681c43aa707dadf3891178b4"/></dir><file name="Tabs.php" hash="51e04fa4277ae8461e947fa11bb6f3df"/></dir></dir></dir><dir name="Sales"><dir name="Order"><dir name="Items"><file name="Renderer.php" hash="b9ed58833e99ba225f7e06a5c770447b"/></dir><dir name="View"><dir name="Items"><file name="Renderer.php" hash="a6b39e26ae9800313883689ac88ace9e"/></dir></dir></dir></dir></dir><dir name="Catalog"><dir name="Product"><dir name="List"><file name="Partof.php" hash="0626bb248d0bfc65fbfabe1afa6fca63"/></dir><file name="Price.php" hash="c2fb9faa87455332faa3e860d35e938a"/><dir name="View"><dir name="Type"><dir name="Bundle"><dir name="Option"><file name="Checkbox.php" hash="cb772c2e417713caf2f9fa98b0a32d4c"/><file name="Multi.php" hash="e143ea304896f9f9e4b1d257d87260b3"/><file name="Radio.php" hash="f12ee7d486847ca528183856e07c5174"/><file name="Select.php" hash="fe4ac96fab3ff577861643ed565e330c"/></dir><file name="Option.php" hash="f85c1a9ff47d44591680f5e65aada7f6"/></dir><file name="Bundle.php" hash="a31d887cea522b42895561f80c0fb535"/></dir></dir><file name="View.php" hash="a91000e3d040ad4db6c9b2709ce77af0"/></dir></dir><dir name="Checkout"><dir name="Cart"><dir name="Item"><file name="Renderer.php" hash="5a7bb36644dfc43964eea9aabf815825"/></dir></dir></dir><dir name="Sales"><dir name="Order"><dir name="Items"><file name="Renderer.php" hash="1cfbb62968ad39b38626233a30901805"/></dir></dir></dir></dir><dir name="Helper"><dir name="Catalog"><dir name="Product"><file name="Configuration.php" hash="f3db3dce8aa1d5d8bf31cc0767708c47"/></dir></dir><file name="Data.php" hash="a504909d004a1d701008aed90be4d3bd"/></dir><dir name="Model"><dir name="CatalogIndex"><dir name="Data"><file name="Bundle.php" hash="7ca532d3cebc8c69213d8f9f407cf190"/></dir></dir><dir name="Mysql4"><file name="Bundle.php" hash="e3b32c7f32917f53ac37e3636f903868"/><dir name="Indexer"><file name="Price.php" hash="9b1ff395e4dd949d3d335f165c36276a"/><file name="Stock.php" hash="1f2616a3a7410536206b7808d5007eb2"/></dir><dir name="Option"><file name="Collection.php" hash="f9c4648e7460f9a5f7b2551b7fc9f746"/></dir><file name="Option.php" hash="f5e970a9a7f208a92726761804dc7551"/><dir name="Price"><file name="Index.php" hash="203756cdc4713e771e0a7a05a892d544"/></dir><dir name="Selection"><file name="Collection.php" hash="45ab88a71e63861349fcbfad333a5d03"/></dir><file name="Selection.php" hash="91af51ec66d9c5d965977743ea871d40"/></dir><file name="Observer.php" hash="28e69ae14ca167303063cf0b82acbb16"/><file name="Option.php" hash="e8e875976ecb9f67244c0759415a5c90"/><dir name="Price"><file name="Index.php" hash="04a040260f89de6d07b49b40c8242434"/></dir><dir name="Product"><dir name="Attribute"><dir name="Source"><dir name="Price"><file name="View.php" hash="ef62864559ecc464e984df4d8d6dd264"/></dir></dir></dir><file name="Price.php" hash="08be1b25c01a1afb9b6fe2f60210c04a"/><file name="Type.php" hash="c3ac88d57ee7bca0fe7f6f7a4a11c46a"/></dir><dir name="Resource"><file name="Bundle.php" hash="bdba9059fb28a4cd03ef8ff63c9f57a2"/><dir name="Indexer"><file name="Price.php" hash="2128077c360503bbdad7cea6d0c055bc"/><file name="Stock.php" hash="b8c3dbf508ccaebda2ff5e6187dc3b82"/></dir><dir name="Option"><file name="Collection.php" hash="c25e5bda5dd2f5d53084a836be9c2e6c"/></dir><file name="Option.php" hash="c4d9d237f6c0a481b6ab26d3c3e0fd7e"/><dir name="Price"><file name="Index.php" hash="362d1e90ca755bd15888781e6834a54b"/></dir><dir name="Selection"><file name="Collection.php" hash="7066e059b329afdc3c78f581ace99f86"/></dir><file name="Selection.php" hash="843e5b865eccaba72cd30f39559ee1ba"/></dir><dir name="Sales"><dir name="Order"><dir name="Pdf"><dir name="Items"><file name="Abstract.php" hash="77d8b0578aae73f0d15a9fca4ee61c4c"/><file name="Creditmemo.php" hash="8c526bf1db150d294d3f7895529db53a"/><file name="Invoice.php" hash="646cca8fdb8fedc83dcd9c29ea40ed8d"/><file name="Shipment.php" hash="cbc9cf391fe7f28ad74462eb09d49dca"/></dir></dir></dir></dir><file name="Selection.php" hash="6f30a4943f5092f5495ff7b37eb191ab"/><dir name="Source"><dir name="Option"><dir name="Selection"><dir name="Price"><file name="Type.php" hash="c654f9f6bf71f078160d4a34641e051c"/></dir></dir><file name="Type.php" hash="ed911131f87e6574bccdf4253565c1da"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Bundle"><dir name="Product"><file name="EditController.php" hash="0eaa6bfbaaaff740bbda5b3a135fe2ab"/></dir><file name="SelectionController.php" hash="f0884d1f147a752bd8e6f509189882d2"/></dir></dir><dir name="Product"><file name="EditController.php" hash="0255f1bdfac6e3fe6a740bdcf4a1a9d3"/></dir><file name="SelectionController.php" hash="ac354d6e6c719b3bc3fd03471b6c418c"/></dir><dir name="data"><dir name="bundle_setup"><file name="data-install-1.6.0.0.php" hash="51f712340a2a28e9da1e7b72bdab97c0"/></dir></dir><dir name="etc"><file name="config.xml" hash="93215a0503d700dca5f2e13f7223bded"/></dir><dir name="sql"><dir name="bundle_setup"><file name="install-1.6.0.0.php" hash="a1cfca05b83d498cb152e03b90dbe70f"/><file name="mysql4-data-upgrade-0.1.13-0.1.14.php" hash="ed4ad4a2e94719374e7425a6a1405583"/><file name="mysql4-install-0.1.0.php" hash="999ed121f79a34042f49c3b3d2b08aeb"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="2b177adfaf3ef71fac894b17d6183145"/><file name="mysql4-upgrade-0.1.1-0.1.2.php" hash="6a9d04d83024f3284f5cff880e54936c"/><file name="mysql4-upgrade-0.1.10-0.1.11.php" hash="459d1215e6cef3708c88a3f9e813094c"/><file name="mysql4-upgrade-0.1.11-0.1.12.php" hash="7dc6038bc99f2ae1222e11fc3cfb6765"/><file name="mysql4-upgrade-0.1.12-0.1.13.php" hash="ca59841ba6210240fcc85959743255df"/><file name="mysql4-upgrade-0.1.2-0.1.3.php" hash="717da80d58087bee6a40d313cba86d0e"/><file name="mysql4-upgrade-0.1.3-0.1.4.php" hash="b7bd7f7f9e7a8cddfba8f6fb4ea37353"/><file name="mysql4-upgrade-0.1.4-0.1.5.php" hash="9971b39c34daf8797596b4cdbbcaf3f4"/><file name="mysql4-upgrade-0.1.5-0.1.6.php" hash="35e56f2170462bc56c108eab708dccb4"/><file name="mysql4-upgrade-0.1.6-0.1.7.php" hash="a0208cfa774d98b0331ed9812c93c205"/><file name="mysql4-upgrade-0.1.7-0.1.8.php" hash="01b9bf1ed81e71b6e7c53ae35cb31f3e"/><file name="mysql4-upgrade-0.1.8-0.1.9.php" hash="0edea46d0d166eb6fad7acc3dc586048"/><file name="mysql4-upgrade-0.1.9-0.1.10.php" hash="194078628aff605dd856189c02e8053c"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="69349ff72fe2b1ef99db0b08da589cc9"/><file name="mysql4-upgrade-1.6.0.0-1.6.0.0.1.php" hash="a96e843cf78d277cc933940fa0d1d7d2"/><file name="upgrade-1.6.0.0-1.6.0.0.1.php" hash="83d9e00ff228d78b44e6d56d754b3b53"/></dir></dir></dir><dir name="Captcha"><dir name="Block"><dir name="Captcha"><file name="Zend.php" hash="9e650dca067fab58be1817aae23f97f9"/></dir><file name="Captcha.php" hash="c88c6aff85e912f8018af95c830a52ec"/></dir><dir name="Helper"><file name="Data.php" hash="cca9932fc8cebcc419deaa08f82f632e"/></dir><dir name="Model"><dir name="Config"><file name="Font.php" hash="f6855855204af49b27021a07dc4997f5"/><dir name="Form"><file name="Abstract.php" hash="aed06b20ca537c8001e8a652628cb6b1"/><file name="Backend.php" hash="ad0061b6efb7b52a774c0b92fbf97d49"/><file name="Frontend.php" hash="f889118ab152231b826b2b8c347a9193"/></dir><file name="Mode.php" hash="83cbb2e35c76da541767eca87eec22d3"/></dir><file name="Interface.php" hash="d098c44cd60168ba7659c826a7a92cda"/><file name="Observer.php" hash="699da0e3ccf56f580f2407e2626d6593"/><dir name="Resource"><file name="Log.php" hash="f8095dd5be1d14a799fe8c7dc3746a22"/></dir><file name="Zend.php" hash="5390ae9b64f9c725ee1419ec5259bb57"/></dir><dir name="controllers"><dir name="Adminhtml"><file name="RefreshController.php" hash="85a78cd9706548cdd2d0bea07a9d68d5"/></dir><file name="RefreshController.php" hash="1c13db5d690d5818476b9ece2a906e79"/></dir><dir name="etc"><file name="config.xml" hash="83239b8a32eeb80562c2953be588c3b7"/><file name="system.xml" hash="045798ed80f08456fa4bde6538115200"/></dir><dir name="sql"><dir name="captcha_setup"><file name="install-1.7.0.0.0.php" hash="79b8836dc21b7e5bf7da7c077f3d84fa"/></dir></dir></dir><dir name="Catalog"><dir name="Block"><file name="Breadcrumbs.php" hash="dff5d9fb1b553e501f75c88030d744cb"/><dir name="Category"><file name="View.php" hash="59d72d523c2748a5c2a08cc2c3f5c0cd"/><dir name="Widget"><file name="Link.php" hash="87d7738143ee4e40e863c5e67a8f6bdb"/></dir></dir><dir name="Layer"><dir name="Filter"><file name="Abstract.php" hash="d605f8ef9809fb47302d175a539c5d94"/><file name="Attribute.php" hash="698725af0c0341607dbbd914f95630f5"/><file name="Category.php" hash="70b91e71c41ca3518fa935d4ab645c34"/><file name="Decimal.php" hash="ad2c34e653da950d13944da5a4d3c00b"/><file name="Price.php" hash="6226b66128b6748bdf2a42b9edf04345"/></dir><file name="State.php" hash="2200cf8e1fbe736cca46ad217ea37988"/><file name="View.php" hash="bb5bedfaa2f986ac88a6ee4b2b932da5"/></dir><file name="Navigation.php" hash="01f02f9f5aea7d8086afdb806f2508b5"/><dir name="Product"><file name="Abstract.php" hash="b3de11057a65efa46ca5f85a00cf77a5"/><dir name="Compare"><file name="Abstract.php" hash="eb1dd4aab523921a65e273881836b70f"/><file name="List.php" hash="aeff8054c24559dc325f7d2f0351c875"/><file name="Sidebar.php" hash="a62ecd9ff51fdc71bdbfe5fe60c3af92"/></dir><file name="Gallery.php" hash="af6d5c6eadc817482bf6dce6c57c95f4"/><dir name="List"><file name="Crosssell.php" hash="b5b416cb2af25edf53cebf62a74758c0"/><file name="Promotion.php" hash="b76409fdf26b11c07f9363733dd37fa9"/><file name="Random.php" hash="1086668ebc995d636f5ade64c67c4669"/><file name="Related.php" hash="9f4aae52a6a5a20f2b04f67238444820"/><file name="Toolbar.php" hash="792a5c55e1af817370b163022fdab038"/><file name="Upsell.php" hash="d2760b9e9144964a536a778ffc9eb996"/></dir><file name="List.php" hash="7d3419df76b9e532fd7945e2579bf630"/><file name="New.php" hash="ca34053438dca273450f23902124bbe3"/><dir name="Price"><file name="Template.php" hash="c070ad6804ae31e33b4b0f75c3081ef3"/></dir><file name="Price.php" hash="5ba3147f9d6edc765a459eaae5ca2fc6"/><file name="Send.php" hash="fad4ac95aa668d13335ee67173f992e4"/><dir name="View"><file name="Abstract.php" hash="02afc973fe15d2b186148522dde4253e"/><file name="Additional.php" hash="fd23972777ae7f22166c8637b4452f48"/><file name="Attributes.php" hash="418505496533f47cfdb552653478ec64"/><file name="Description.php" hash="3933e86b723ee0eeccb8d0e15c35cdb2"/><file name="Media.php" hash="c67ad24d870bc3fbac46b6c034262d0e"/><dir name="Options"><file name="Abstract.php" hash="673200ae6c98005daccc0bb45f557590"/><dir name="Type"><file name="Date.php" hash="23e971c82349012b2674f53cf78b21ae"/><file name="Default.php" hash="45df1b4c1f76c7c3f0c6b161a2364a32"/><file name="File.php" hash="27916e714ab9663e3c6559e9fc5be771"/><file name="Select.php" hash="f361ede3f754ca9471cc51fdd3f5d872"/><file name="Text.php" hash="b1693b780ff9bbcfffaad43771fcf8eb"/></dir></dir><file name="Options.php" hash="f544353c1c28e13adb5ffda0c2809253"/><file name="Price.php" hash="2931561be062a5c174868d6da75d5ee1"/><file name="Tabs.php" hash="5308f17a3c09fa7ebe810f6131588dba"/><dir name="Type"><file name="Configurable.php" hash="1d101337ffe557e3565bfcc29fefeae0"/><file name="Grouped.php" hash="e5914c1612836ac7e4beb4ffd4be3edb"/><file name="Simple.php" hash="407e6a940c8f2904aaa89f49e4bf28e7"/><file name="Virtual.php" hash="6ca0c8c536343b13424ad1722c22d1cd"/></dir></dir><file name="View.php" hash="35973636c7800bde04ed8fed69bb8b87"/><dir name="Widget"><dir name="Html"><file name="Pager.php" hash="3c025a4ade4383a2936ad5aa7bb39894"/></dir><file name="Link.php" hash="24341cfdad66bd4f4c41aa30fe977372"/><file name="New.php" hash="cdc5ab6e5ae7c3d1622830123852bd17"/></dir></dir><file name="Product.php" hash="c3016a548c94c5067a9971da0d7d7e20"/><dir name="Seo"><dir name="Sitemap"><file name="Abstract.php" hash="45bdaf82409349f8e6f511be3f4dd011"/><file name="Category.php" hash="af055f9f149c46feb59fae19e5ccedb7"/><file name="Product.php" hash="015b16562aaa16931affccc8dd71f1ba"/><dir name="Tree"><file name="Category.php" hash="7a3f8afcfc448f7d71dd42c1d4925432"/><file name="Pager.php" hash="de260e14c195ddb1aeb736dcf8cf2383"/></dir></dir></dir><dir name="Widget"><file name="Link.php" hash="7a86f0e03c53f2bb1e9252141c9020d3"/></dir></dir><file name="Exception.php" hash="0179104ce5022bcc5512e962d431bba2"/><dir name="Helper"><dir name="Category"><file name="Flat.php" hash="e403f3fea684f4b40a6a8e131a715304"/><dir name="Url"><dir name="Rewrite"><file name="Interface.php" hash="7d6c19e3883d3bbd99de969bdeb3c0e4"/></dir><file name="Rewrite.php" hash="f20dafaabe85500b298989e37f1ca0ab"/></dir></dir><file name="Category.php" hash="bdc769946270dfdbe696f3b7e6dd4fa6"/><file name="Data.php" hash="51c9b79ee40eea71e548dc2f1fc05eab"/><dir name="Flat"><file name="Abstract.php" hash="fdbb21698a8fbe8db7603c4355b73a51"/></dir><file name="Image.php" hash="4434f405f3a2f2200a94cd90ad50b10e"/><file name="Map.php" hash="1686e6ed32f6b5dbeb5a597288254652"/><file name="Output.php" hash="489484164b5e7ba9372b186988de082c"/><dir name="Product"><file name="Compare.php" hash="0766ebc34366d772617632e8da5d7671"/><dir name="Configuration"><file name="Interface.php" hash="001b92f52823ecc5777807f986b4c0dd"/></dir><file name="Configuration.php" hash="cc9c25e19e2af63d782ad96bff298a02"/><file name="Flat.php" hash="f6c0e965a8bdc23d95f236c6006f32a0"/><file name="Options.php" hash="c8fc172f2eefd0804d5e4753ddae00c4"/><dir name="Type"><file name="Composite.php" hash="22568c93e4fdb14ac1b49ccfd977641c"/></dir><dir name="Url"><dir name="Rewrite"><file name="Interface.php" hash="364322afee5e385f7d3294436fd7f493"/></dir><file name="Rewrite.php" hash="623588d9ff88a376b8b736bfb1f98b76"/></dir><file name="Url.php" hash="f2d6d9473153c84a406c7960d944018a"/><file name="View.php" hash="aeab098bc4a82af3ac33f1670dcfb15d"/></dir><file name="Product.php" hash="8f74cd3e74940bc977b37d2e5f33b5c3"/></dir><dir name="Model"><file name="Abstract.php" hash="5399d56b627d1a675cd3cadd8aaa768f"/><dir name="Api"><file name="Resource.php" hash="5d342b70a49b19b2747e7a03c85095af"/></dir><dir name="Api2"><dir name="Product"><dir name="Category"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="cad9ef1517173f0f00ff569be0b981bf"/></dir><dir name="Customer"><file name="V1.php" hash="a108c6bb33433839a3694c425cf92d69"/></dir><dir name="Guest"><file name="V1.php" hash="3ce11e40688705dca640b1186f414453"/></dir></dir><file name="Rest.php" hash="ac416fbef617af536dff5bbcbbdd61d0"/></dir><file name="Category.php" hash="bedb76db707efccaa3c53ef7fe602aa5"/><dir name="Image"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="312ff9a8f0b3842c76e82f0c8723023c"/></dir><dir name="Customer"><file name="V1.php" hash="2a73ed3ae72e037d4e107216fcb66576"/></dir><dir name="Guest"><file name="V1.php" hash="01f2136a7a27329bcec67560c069cc3f"/></dir></dir><file name="Rest.php" hash="0a64e319ac196c15d3af58f2a74efe48"/><dir name="Validator"><file name="Image.php" hash="c3d9e939bfdc90d9f2309fede3d61eaf"/></dir></dir><file name="Image.php" hash="b36d59fa96a06f1225de7ce226b32a7f"/><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="a9aa9dab5be83186e1a4d88f55fb2513"/></dir><dir name="Customer"><file name="V1.php" hash="7e330764edf3b2ed1e581e49c2de3315"/></dir><dir name="Guest"><file name="V1.php" hash="4285c2ba5ca5b228d1f0f8039655e34e"/></dir></dir><file name="Rest.php" hash="2c1d36d5174b420d031697b672afa8fd"/><dir name="Validator"><file name="Product.php" hash="3d774220754452726072f51246e113c0"/></dir><dir name="Website"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="54aaaf767c93cebbcc4c30d768b460cc"/></dir></dir><file name="Rest.php" hash="41088bbc5eb642ee779e30f2cbe13415"/><dir name="Validator"><dir name="Admin"><file name="Website.php" hash="49bfed6811464d93eafdad36d358f472"/></dir></dir></dir><file name="Website.php" hash="c85d0759a2a89efffe85dac4318b6472"/></dir><file name="Product.php" hash="8ebe91dc817724fe0d4502d8de5cdd03"/></dir><dir name="Attribute"><dir name="Backend"><file name="Customlayoutupdate.php" hash="1906499bafc1edd37e26f3959055427f"/><dir name="Urlkey"><file name="Abstract.php" hash="4e84559fa09f5dd3dc701c1cd3defe89"/></dir></dir></dir><dir name="Category"><dir name="Api"><file name="V2.php" hash="74d409f156cafc8d1eae110782228867"/></dir><file name="Api.php" hash="26d34123ccb312221f7b8e720be39c64"/><dir name="Attribute"><dir name="Api"><file name="V2.php" hash="06af4c1245b1450021cc52bbce2a8864"/></dir><file name="Api.php" hash="f116285d1ea2de3e22cfa76d380ec7ae"/><dir name="Backend"><file name="Image.php" hash="88de246cf8a346d336e6d30b0f453910"/><file name="Sortby.php" hash="2d1b48beda0699587b1eff7d9eb18f8d"/><file name="Urlkey.php" hash="469c1883e70ebfcc3f6e2a18b927d760"/></dir><dir name="Source"><file name="Layout.php" hash="38316f42324a3227e27e753d2d17f015"/><file name="Mode.php" hash="29a887a321b5f1cb199d859b33ad89aa"/><file name="Page.php" hash="d8f1fb0693fa613b87cad674832a7cae"/><file name="Sortby.php" hash="f95940ed9bd96805d9d099a111557b08"/></dir></dir><dir name="Indexer"><file name="Flat.php" hash="3a8aed45dd42d6c5e89b4cfc24ab0a11"/><file name="Product.php" hash="7c332ea93f25e4d0586d94c00c3f83a5"/></dir><file name="Url.php" hash="03204ac658d9c3548a1e0111a3ed6a7f"/></dir><file name="Category.php" hash="0ab3203b113fb38341a6972b08357929"/><file name="Config.php" hash="960943c9b90cd595356b1f439932751e"/><dir name="Convert"><dir name="Adapter"><file name="Catalog.php" hash="e2d7a1b5016c9c937a5f940e8bd4a9dd"/><file name="Product.php" hash="2249eb2cc4c64504ec0ffbff80bb6a6d"/></dir><dir name="Parser"><file name="Product.php" hash="bf4f3af184dbb2dfb6b553d960cabe4c"/></dir></dir><file name="Convert.php" hash="f8711c86e2936d74b793321d0b3398ba"/><file name="Design.php" hash="0788ad594384e78dc18211e541a97985"/><dir name="Entity"><file name="Attribute.php" hash="967d705a4b89a92d41fae1b4518fbd12"/><dir name="Product"><dir name="Attribute"><dir name="Design"><dir name="Options"><file name="Container.php" hash="0c06ba7586010a01e30aebfdc0e5aa7b"/></dir></dir><dir name="Frontend"><file name="Image.php" hash="b1eb392c46c0d0e31fd4ceec82d91677"/></dir></dir></dir></dir><file name="Factory.php" hash="37199b8fa6933b87e8bf9e6643fd0862"/><file name="Index.php" hash="4f7bb172ee1334e510fecbce52373c51"/><dir name="Indexer"><file name="Url.php" hash="ac4a5bb7efeba1fe9313d220f6249ded"/></dir><dir name="Layer"><dir name="Filter"><file name="Abstract.php" hash="6d339963bab9940293e0f42782022e1f"/><file name="Attribute.php" hash="187f66e483e8654d5decf4abae8fcee8"/><file name="Category.php" hash="fc0b6dc472326743f30439fa3801fa85"/><file name="Decimal.php" hash="35d10ab83c9fdae952affaa48b043817"/><file name="Item.php" hash="c11edf35238a31aa492dfc8ed6aa327a"/><dir name="Price"><file name="Algorithm.php" hash="394ee3039156f05cb153bc87d55b1fc8"/></dir><file name="Price.php" hash="2ca517a1a54e992cbf167b970ff52e03"/></dir><file name="State.php" hash="077f09092c1414b4d8a73653db81dd00"/></dir><file name="Layer.php" hash="0d2ac9d06fcd6688beb4a07d0045da65"/><file name="Observer.php" hash="c5146dfd5fc5a556aa4f5d77b38d65b1"/><dir name="Product"><file name="Action.php" hash="c5148e1d47094a363250e732815082b0"/><dir name="Api"><file name="V2.php" hash="f6920d64fb2ddb9afb784dc70e888186"/></dir><file name="Api.php" hash="38f7c365b6938803956d8d5384effc68"/><dir name="Attribute"><dir name="Api"><file name="V2.php" hash="b496a0f7d27095451fbcf9ccfc7ce32f"/></dir><file name="Api.php" hash="14a858bcac11c35ceef2500538830f91"/><dir name="Backend"><file name="Boolean.php" hash="229e9a7fb8d2e15d1fdeb8181445ebe0"/><dir name="Groupprice"><file name="Abstract.php" hash="d35b8dd3ff94f32d03d974ac33fde2f9"/></dir><file name="Groupprice.php" hash="e13ab416436949702144be98a8c94e9d"/><file name="Media.php" hash="5b643b94d167bcd3cbb8dde5623246e0"/><file name="Msrp.php" hash="fe63bc9e0d65dc3d1237eb2078923d76"/><file name="Price.php" hash="ff52da1f8a92a9c4271b4ad435801856"/><file name="Recurring.php" hash="f8e58b745661650d28892373ec982f90"/><file name="Sku.php" hash="46cfd45e115daa320b751e857ba9e8b7"/><dir name="Startdate"><file name="Specialprice.php" hash="cdcf2668c93fa5035b76aa15ef88fffc"/></dir><file name="Startdate.php" hash="b9a4b229fe15ba352db8ec9a04291691"/><file name="Tierprice.php" hash="1ac4294d92e3d250159564751335d6e2"/><file name="Urlkey.php" hash="004afee828cc01704b31919349eb1851"/></dir><dir name="Frontend"><file name="Image.php" hash="386d33679a77c37895bda511517c17ff"/></dir><file name="Group.php" hash="2a129a217055568d0958af302a1a5d2d"/><dir name="Media"><dir name="Api"><file name="V2.php" hash="9e5969b4b8530e57ee00ac55280cd2f8"/></dir><file name="Api.php" hash="a5ef7461fb59e7e6b2ef5f3d8ba42d49"/></dir><dir name="Set"><dir name="Api"><file name="V2.php" hash="ec27f9bd23529e40243196b006ddfdfc"/></dir><file name="Api.php" hash="44d60e0fef24f0d1b6fa369353d8c1e0"/></dir><dir name="Source"><file name="Boolean.php" hash="8188d6e83cc0d2d16fc4876d228c2475"/><file name="Countryofmanufacture.php" hash="b5ab8824ea10fbce4088c050fbcf67f6"/><file name="Inputtype.php" hash="e8b344c662a099b7cbe3bb1d0ae312c4"/><file name="Layout.php" hash="ecd67bb233e6aa0b188f446d5962f8ff"/><dir name="Msrp"><dir name="Type"><file name="Enabled.php" hash="874a11135465a502bbbf62cd58461556"/><file name="Price.php" hash="f3dbe7528b070894c617dc982f33f348"/></dir><file name="Type.php" hash="1d30a1e90e79d90af028202e5bd622c6"/></dir></dir><dir name="Tierprice"><dir name="Api"><file name="V2.php" hash="db92cf6602484be811da52fd5cda27a2"/></dir><file name="Api.php" hash="623e710a8cde8e495fff36009a6c2ff6"/></dir></dir><dir name="Compare"><file name="Item.php" hash="5a0b8c6dbd3e554d23d7edde6dc7664c"/><file name="List.php" hash="3ccac75f80eb97e5e7ed05ccfb4a8e80"/></dir><dir name="Condition"><file name="Interface.php" hash="3d1e83608560f21fcd94ca45a979b41c"/></dir><file name="Condition.php" hash="25a0cd54440afbf3ad8d915e88f10a4f"/><dir name="Configuration"><dir name="Item"><file name="Interface.php" hash="e7d838c6995cf062706f3aff8343390e"/><dir name="Option"><file name="Interface.php" hash="4a73836aad7135383a37250e6bfca517"/></dir><file name="Option.php" hash="f0dcacab62c5bf1c693c1abbd9352098"/></dir></dir><dir name="Flat"><file name="Flag.php" hash="dbfc46eefe47f08ab90de7b9729e6c72"/><file name="Indexer.php" hash="30f815a8c6c39c49954fe75e4b519f01"/><file name="Observer.php" hash="41e970922615897d150f92612196c764"/></dir><file name="Image.php" hash="a18f0d17efe6d01ec6ef1cce06960ccc"/><dir name="Indexer"><file name="Eav.php" hash="7618ab5d273a835fdebcd05aa146dae0"/><file name="Flat.php" hash="dbb5aa4c06b3353d1957b876d2c40167"/><file name="Price.php" hash="97c4e703f62475e3358865f12d811e28"/></dir><dir name="Link"><dir name="Api"><file name="V2.php" hash="6c70e65f2586fc28f09384f349244457"/></dir><file name="Api.php" hash="ad3458914b4ada1b1cfad8944c7eb9d9"/></dir><file name="Link.php" hash="4397ebb8e0e755273b84849c2bad05c8"/><dir name="Media"><file name="Config.php" hash="7f730c523323b820493066b116e160d0"/></dir><dir name="Option"><dir name="Api"><file name="V2.php" hash="e2e337f444291e17e84e813f34b5e686"/></dir><file name="Api.php" hash="8a56eb1b5c9c7990c9df368cc562805e"/><file name="Observer.php" hash="13cf958417156e721339f05893ba8aae"/><dir name="Type"><file name="Date.php" hash="e4d7596b3f4dbf962383d87d85dc154e"/><file name="Default.php" hash="ba662f4493c2e6a966ba6e2720b88b71"/><file name="File.php" hash="056f59762babcd043f3455f5abecf6c3"/><file name="Select.php" hash="281ed0e1384dbf4dc18ff9638ccdc68c"/><file name="Text.php" hash="cdff8cdce60d340e95e5d2d4a28baee8"/></dir><dir name="Value"><dir name="Api"><file name="V2.php" hash="f478fc9cad96b446af48597122d85664"/></dir><file name="Api.php" hash="afdb12fc5e3e52e4e8ac687b05f5b4f7"/></dir><file name="Value.php" hash="a63d01e87928ca3bb65229145dc1efd4"/></dir><file name="Option.php" hash="2d4d937648d019311a2a72a6ef1dc174"/><file name="Status.php" hash="ced8970f86fdccb17c830b80b12b33fb"/><dir name="Type"><file name="Abstract.php" hash="cd675bf61affc80c7410a38dbae08eb0"/><dir name="Api"><file name="V2.php" hash="7c9c9c80f446a59897f25e60672fb2ec"/></dir><file name="Api.php" hash="8ebd7e0d437a70645a0cf80e9834069f"/><dir name="Configurable"><file name="Attribute.php" hash="c8f8d57c9a3804c408b9e261beb3eefc"/><file name="Price.php" hash="cf7daffcb252267d1e502273e28a305e"/></dir><file name="Configurable.php" hash="42ad7a5df7ef6a527bb5b14588aacf42"/><dir name="Grouped"><file name="Price.php" hash="28eaf519153d5db1b79028b120a48bd4"/></dir><file name="Grouped.php" hash="9553d7467f1167744ea3f3d57a81c1d8"/><file name="Price.php" hash="2a757a8c1268c07ae43c4d3c1eba45f9"/><file name="Simple.php" hash="bc8aa458ff494d4475511cad48a866a9"/><file name="Virtual.php" hash="82c8912508ac48b7dd3dc55706c3c528"/></dir><file name="Type.php" hash="8c919879f58180f42da96db9303bafbd"/><file name="Url.php" hash="29b50e89e08b81a3b0fb00c3833dfc3c"/><file name="Visibility.php" hash="8c6dd0f045c26492e5a082086d18aa9b"/><file name="Website.php" hash="56c6082ede65a6764a892c35f235a579"/></dir><file name="Product.php" hash="eb003077225ab3b612e15ed46dbb871f"/><dir name="Resource"><file name="Abstract.php" hash="c78fb80b238aa93bffd770da2634077b"/><file name="Attribute.php" hash="083fbabafa2f9b2b93be9c32febe9c9a"/><dir name="Category"><dir name="Attribute"><file name="Collection.php" hash="16bb20412710d7a2a9ecf1d499942be1"/><dir name="Frontend"><file name="Image.php" hash="a3f01f4cdb9d581b7005fff83e1b7b73"/></dir><dir name="Source"><file name="Layout.php" hash="b528859d861098e5ab7ce183cd878c7a"/><file name="Mode.php" hash="268e61822290de0bf2cd59be33766d86"/><file name="Page.php" hash="675cf0b87655fff869bfc1f8d45d9e38"/></dir></dir><file name="Collection.php" hash="6b7ef3804ad45381b0164b967f595aca"/><dir name="Flat"><file name="Collection.php" hash="b4c7a90acb2d41d0be620c4994025926"/></dir><file name="Flat.php" hash="fa589f1153b9eeaf0b2311671152adb1"/><dir name="Indexer"><file name="Product.php" hash="7c573ac7e1d0be9d510d3cabae9d7c77"/></dir><file name="Tree.php" hash="2a160b88ab1aded63dc37040ee843a00"/></dir><file name="Category.php" hash="3c079ade2f2bf38e9423ef47e8d9a456"/><dir name="Collection"><file name="Abstract.php" hash="19c6f3250eb34e02648885695bb72a10"/></dir><file name="Config.php" hash="56b4be1960a399cca1f6e3a5413cdfc8"/><dir name="Eav"><file name="Attribute.php" hash="0553b24b137b571fe5adaf6f7079eae8"/><dir name="Mysql4"><file name="Abstract.php" hash="77bf8d831649cbd4cb22c6e38e1e6cbd"/><file name="Attribute.php" hash="ce29fde69b75dbfa76ee59395c27ef46"/><dir name="Category"><dir name="Attribute"><file name="Collection.php" hash="16fd9fb1c0a9e3f7f0a3da630f8b5f5d"/><dir name="Frontend"><file name="Image.php" hash="7b1efd69b7068f6269e5963fcb0f2421"/></dir><dir name="Source"><file name="Layout.php" hash="5902b8ec96fdabbfba22d12147a1f9f8"/><file name="Mode.php" hash="d298a9b154606d73977448afd409cf14"/><file name="Page.php" hash="2a0d8a3d458f6ad47fab99709c575b83"/></dir></dir><file name="Collection.php" hash="1e919121af88496fd3c9e12204d984b5"/><dir name="Flat"><file name="Collection.php" hash="3b6493ded5a4b074074984210c083900"/></dir><file name="Flat.php" hash="c6310cc6f9b3ad85fa543fcdb59f0ebf"/><dir name="Indexer"><file name="Product.php" hash="7cfc40ac2f41452ad477c6ead974d440"/></dir><file name="Tree.php" hash="e12a81ba27afb2c5044283bcb2ca9580"/></dir><file name="Category.php" hash="9f2f641cb0de686c995718288a4c1b2e"/><dir name="Collection"><file name="Abstract.php" hash="80eac3b59973421b48c8ff0082227f4d"/></dir><file name="Config.php" hash="26650f9818fca47b48c4654acee00a41"/><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2fe32b4753d30dfc5de743e512c2fe69"/><file name="Decimal.php" hash="72e4695e08258a882ef36b2b2ef25a2e"/><file name="Price.php" hash="e3fe65ace9436eb406c68796cd21bf93"/></dir></dir><dir name="Product"><file name="Action.php" hash="5227ea6c0ce4484b4bf997bce9cd37cf"/><dir name="Attribute"><dir name="Backend"><file name="Image.php" hash="c3b5adfd873cb29c60c3ac18e2bd7bf3"/><file name="Media.php" hash="f05b409ffa13b07ce7f387925aba5c35"/><file name="Tierprice.php" hash="9ea320310cf7f210d0e5f61e3fd5a622"/><file name="Urlkey.php" hash="22b92b8efd3a9a92bcc4477ed07b8c77"/></dir><file name="Collection.php" hash="656272a27a7d0fb7bb7783fabe7ed4ba"/><dir name="Frontend"><file name="Image.php" hash="6e1bb32214d33789802cad5224b31d0d"/><file name="Tierprice.php" hash="7aa313df344f028150607d3715069fef"/></dir></dir><file name="Collection.php" hash="bca3f22426b03396a8b99ce4c886b086"/><dir name="Compare"><dir name="Item"><file name="Collection.php" hash="9013f3daaea7e9a6fec6ac018c97fc7f"/></dir><file name="Item.php" hash="d85209d65afb97ce19ea977d74b414ae"/></dir><dir name="Flat"><file name="Indexer.php" hash="86dae654289b2146c4d2fcfd15c313c7"/></dir><file name="Flat.php" hash="c6c46472a572248707522cdf977a0369"/><dir name="Indexer"><file name="Abstract.php" hash="e2469fe950d76f10da8a811e688abd3f"/><dir name="Eav"><file name="Abstract.php" hash="7d6704efe0e95a3ef525e85bcafb3983"/><file name="Decimal.php" hash="34c9b97c8bf1b2821e7cd3c4b6eb7dbe"/><file name="Source.php" hash="fb4544e261a3ec415aeb420255f5a70a"/></dir><file name="Eav.php" hash="d9c748945123a47685db1fb255ee0264"/><dir name="Price"><file name="Configurable.php" hash="6555f812507f36d3139b2406bf2691b0"/><file name="Default.php" hash="ef2e3327c73efd98120b7b10ffed1cbd"/><file name="Grouped.php" hash="8823446108436d3bf360bca5b75e0bb5"/><file name="Interface.php" hash="3466a545d21ee82855f1caf2c2e04a24"/></dir><file name="Price.php" hash="c042288cbde8958279292469e7ef977f"/></dir><dir name="Link"><file name="Collection.php" hash="3f1dedead3fc806ab616edbea689d08d"/><dir name="Product"><file name="Collection.php" hash="e742fe4505d1f9b66e605f638f70d064"/></dir></dir><file name="Link.php" hash="9a8426299e8ececb93eba31c4651f511"/><dir name="Option"><file name="Collection.php" hash="6f94b6f180f1261cfd97a48319f0b267"/><dir name="Value"><file name="Collection.php" hash="64d49df810c454e57dc352af45e79db4"/></dir><file name="Value.php" hash="98d0ac8c28fcd7b73b0300e2bd03e038"/></dir><file name="Option.php" hash="a5fe5fef0022403ce04d3f6d8f5d66b8"/><file name="Relation.php" hash="7528ce5262e287b5ac4570c39cecdd80"/><file name="Status.php" hash="1d85dfd645199aff01697f9075ea69ec"/><dir name="Type"><dir name="Configurable"><dir name="Attribute"><file name="Collection.php" hash="11bb638081b4749458946e1448d9ca10"/></dir><file name="Attribute.php" hash="0ac0ea517b292148c8847bfd30baefcc"/><dir name="Product"><file name="Collection.php" hash="c3ba64bb9367830b6870195e46ec1cc9"/></dir></dir><file name="Configurable.php" hash="330a459b1686b6ae6f19563f32ffdb8d"/></dir><file name="Website.php" hash="ab17bc81707fd31b1eb6b4985e0382f5"/></dir><file name="Product.php" hash="5db16fca9860bf397d035b5dba87507d"/><dir name="Sendfriend"><file name="Collection.php" hash="41e24179196d884a89d8fcb7c292e964"/></dir><file name="Sendfriend.php" hash="dafac33cd5a9ad0f0bd1503e17f1e693"/><file name="Setup.php" hash="d8a92cc2f3f802f3943911fdafcb3362"/><file name="Url.php" hash="f06beb416bb905d70d1350a4fb6fbddc"/></dir></dir><dir name="Helper"><file name="Mysql4.php" hash="bddc88c4de81e944e3bbf35fdd4363ed"/></dir><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="beef208a673d4acbd9afbccc639ad200"/><file name="Decimal.php" hash="469556abeb7e15eef17b5ea3353894f5"/><file name="Price.php" hash="0eb1fde29b2098ac20a7e2ad548adabe"/></dir></dir><dir name="Product"><file name="Action.php" hash="3faf7b08a790efd350e9f992d24221ab"/><dir name="Attribute"><dir name="Backend"><dir name="Groupprice"><file name="Abstract.php" hash="0c44439c5413141510ae5a094928cf68"/></dir><file name="Groupprice.php" hash="f3d29b2f169cbd0a8fe24d39c8710a7e"/><file name="Image.php" hash="33034e003246bdaa3732444289385724"/><file name="Media.php" hash="d8f212a3d6ca27c4392b700f66dae802"/><file name="Tierprice.php" hash="a2cbaacb0ac840adfe9646db31ed855a"/><file name="Urlkey.php" hash="2262eb9b8c6db5b7fbbcda8535976a30"/></dir><file name="Collection.php" hash="a73b5a17c24744e95ac32d1f97f3cab7"/><dir name="Frontend"><file name="Image.php" hash="139229526616ebdef9fb27aca81db6c0"/><file name="Tierprice.php" hash="5d4ceecd198819c7ba458b7f28622f5b"/></dir></dir><file name="Collection.php" hash="28c8c814e1c9545eafcb848dc5d00384"/><dir name="Compare"><dir name="Item"><file name="Collection.php" hash="948e5a8ff1ea4dc486a19b2229ffc8a3"/></dir><file name="Item.php" hash="9d2d9c3902a8985e140598169e670e65"/></dir><dir name="Flat"><file name="Indexer.php" hash="00c53d98e3a205e3d2c97d7d03835012"/></dir><file name="Flat.php" hash="7a2c7d7711c9c598b4a04ba436160617"/><dir name="Indexer"><file name="Abstract.php" hash="21126ba16f5f2ca4db63897f9a559f43"/><dir name="Eav"><file name="Abstract.php" hash="d37eae3cc381710ec7abad80571ec52a"/><file name="Decimal.php" hash="0372d92275a05c07cd5715cbde92c06e"/><file name="Source.php" hash="b4edfcd21fb7974a08bf195bdbd8b560"/></dir><file name="Eav.php" hash="f579a7e70b13ec272eacc6b8f6850e6d"/><dir name="Price"><file name="Configurable.php" hash="8ec53532373b5e8c2326041d71d7b1e9"/><file name="Default.php" hash="6e04e9071bd8bb74bbefa54ad3cb8dc0"/><file name="Grouped.php" hash="d044889afe733ecedcca6c03777142a3"/><file name="Interface.php" hash="021e40baacd8bee14d34678eaa6cbda7"/></dir><file name="Price.php" hash="d1eccd5ff490dd96d27bfedfa4ad3f4e"/></dir><dir name="Link"><file name="Collection.php" hash="c58cdd3a4bb7439b8e0f01d2c23deb4e"/><dir name="Product"><file name="Collection.php" hash="7fe7daecdb0738f726c89a1a9b4ab5fb"/></dir></dir><file name="Link.php" hash="f6315829fc96747e5cfcc1f7cb920024"/><dir name="Option"><file name="Collection.php" hash="411f7f3d3d4ff31128a35e8012fe6f2c"/><dir name="Value"><file name="Collection.php" hash="faa70f0e1340def77f28676f33c117d0"/></dir><file name="Value.php" hash="9a2eb3f77bed40339874df0d7735aa48"/></dir><file name="Option.php" hash="e9ce26ccbe023f25ffcd0cd6119913d6"/><file name="Relation.php" hash="29a7c4f5416dbfb510f10e1e5ca7b307"/><file name="Status.php" hash="babd4c22ef0706906e5a17cfa3ae2451"/><dir name="Type"><dir name="Configurable"><dir name="Attribute"><file name="Collection.php" hash="f2d589d068f6e3252d8d3e1c27971d59"/></dir><file name="Attribute.php" hash="733bd1f4d46246a5c6cab4afacd12d66"/><dir name="Product"><file name="Collection.php" hash="7c74e62a50f7062fc67343224aff59d9"/></dir></dir><file name="Configurable.php" hash="c1e2764cc282e227c9cc90e664adc57c"/></dir><file name="Website.php" hash="24eabf1dac8102c0a172522c41edf63d"/></dir><file name="Product.php" hash="07048cb76beb23b3eaad5c8dfe200111"/><file name="Setup.php" hash="a07f84365233d9e247508ca1d52fb8fc"/><file name="Url.php" hash="7f392dc6284e61e239c0e1dfdf463688"/></dir><file name="Session.php" hash="85dc8d88009120a351c2cdf2e59ddd23"/><dir name="System"><dir name="Config"><dir name="Backend"><dir name="Catalog"><dir name="Category"><file name="Flat.php" hash="d6a167189578f6729a8464a5b00c889f"/></dir><dir name="Product"><file name="Flat.php" hash="29d00096aab5c387fe09d53914599a50"/></dir><dir name="Url"><dir name="Rewrite"><file name="Suffix.php" hash="3c096e44cb311bff7b8827be26d9a7a9"/></dir></dir></dir></dir></dir></dir><dir name="Template"><file name="Filter.php" hash="873a8a3731ed4d71b18ecee89a8389f1"/></dir><file name="Url.php" hash="cb7fdd0608ab6ef7b6ded81966ae7c50"/></dir><dir name="controllers"><file name="CategoryController.php" hash="1a90cc9dd1b10853972d8c4859309078"/><file name="IndexController.php" hash="e015ae60fb19f872e6ccce968f5f5517"/><dir name="Product"><file name="CompareController.php" hash="9625bc3c8663dcfd52f8c20ee4ec9e71"/></dir><file name="ProductController.php" hash="2e1746bb7cccec9146b0d0430be78b81"/><dir name="Seo"><file name="SitemapController.php" hash="8faa57ee67d67ebc07f3c7d7c2ff6701"/></dir></dir><dir name="data"><dir name="catalog_setup"><file name="data-install-1.6.0.0.php" hash="0911877b0f5f7f75153e647632144053"/><file name="data-upgrade-1.6.0.0.12-1.6.0.0.13.php" hash="7408d9bebec81bac8cfaa82d2246bc61"/><file name="data-upgrade-1.6.0.0.13-1.6.0.0.14.php" hash="f6d063b376d8239af71933169aada7e3"/><file name="data-upgrade-1.6.0.0.19.1.3-1.6.0.0.19.1.4.php" hash="3ea878479e551944714ac2b22c0ee96c"/><file name="data-upgrade-1.6.0.0.4-1.6.0.0.5.php" hash="69a1c10da60ed0aaaf76686f1510494c"/><file name="data-upgrade-1.6.0.0.8-1.6.0.0.9.php" hash="5f1f3a491473a2e60afe18e9bb3ec319"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="cc8126ed44039f3578a18e8408190bda"/><file name="api.xml" hash="d784a8b268ef8848061df57fa4190625"/><file name="api2.xml" hash="2ea1ea69a6bfd1efaffb00c8f5cc6022"/><file name="config.xml" hash="98ad8521c9b08aaeab31fbda617e0c26"/><file name="convert.xml" hash="9cc9a49a719e66e2bd8dd229d6886f3a"/><file name="system.xml" hash="c85941108a3321424e46c07f258c6ca2"/><file name="widget.xml" hash="63d9a69bdeffb96fd652f832e93b4dea"/><file name="wsdl.xml" hash="fa198392d766134085b3c2ec1be4a0e9"/><file name="wsi.xml" hash="0acfd65c613ccb83404317500078a85d"/></dir><dir name="sql"><dir name="catalog_setup"><file name="install-1.6.0.0.php" hash="d3d83b26127ce996b341e4d67fb4b2ca"/><file name="mysql4-data-upgrade-0.7.57-0.7.58.php" hash="e77b598a1c7080a97e2d066530bc4780"/><file name="mysql4-data-upgrade-0.7.63-0.7.64.php" hash="b5443e86cc381622e7bbb4128732f5fa"/><file name="mysql4-data-upgrade-1.4.0.0.28-1.4.0.0.29.php" hash="dafb3fd3c8ff721f9c2bdb2cb8e03332"/><file name="mysql4-data-upgrade-1.4.0.0.42-1.4.0.0.43.php" hash="8052bc5216e4f035f32bb806727ff3dd"/><file name="mysql4-install-0.7.0.php" hash="c2ecf9ab172739266247748be75aef25"/><file name="mysql4-install-1.4.0.0.0.php" hash="d3faa8bc8f7c294a6953087776bd9456"/><file name="mysql4-upgrade-0.6.40-0.7.0.php" hash="1a4fb3cab768f3aa36023818c89af55f"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="ac13e51cb31dda3ecab2597beb51bc8c"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="3806192600b523969eef31c5a18a03c3"/><file name="mysql4-upgrade-0.7.11-0.7.12.php" hash="a3f49edb28d84c59fe9ca7837dcea688"/><file name="mysql4-upgrade-0.7.12-0.7.13.php" hash="71021c0648afc8b71256e66f41ff40e3"/><file name="mysql4-upgrade-0.7.13-0.7.14.php" hash="d03a980c274d1f676db2eefa856eeecc"/><file name="mysql4-upgrade-0.7.14-0.7.15.php" hash="b4287cf3624eae49641148ffbef8de5b"/><file name="mysql4-upgrade-0.7.15-0.7.16.php" hash="ae46ab3bacd5e00907f115a45764db05"/><file name="mysql4-upgrade-0.7.16-0.7.17.php" hash="71021c0648afc8b71256e66f41ff40e3"/><file name="mysql4-upgrade-0.7.17-0.7.18.php" hash="981e85d7a3413309de30374f910deb9d"/><file name="mysql4-upgrade-0.7.18-0.7.19.php" hash="55b76609304d873314a15330948ae957"/><file name="mysql4-upgrade-0.7.19-0.7.20.php" hash="a3f49edb28d84c59fe9ca7837dcea688"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="aa675f723b60582fde073c690a42ebb6"/><file name="mysql4-upgrade-0.7.20-0.7.21.php" hash="e8f620a5a054b991489c48860ba10221"/><file name="mysql4-upgrade-0.7.21-0.7.22.php" hash="556cfef21109c164e2e41eb485637eff"/><file name="mysql4-upgrade-0.7.22-0.7.23.php" hash="f2cd9fd2ff63f12e8399a5d7e4e62c18"/><file name="mysql4-upgrade-0.7.23-0.7.24.php" hash="3bb145d699f3c5a6db4c5f32233e2e93"/><file name="mysql4-upgrade-0.7.24-0.7.25.php" hash="bf5b8bee4bd3d1e4ebc687a2dc2c3b30"/><file name="mysql4-upgrade-0.7.25-0.7.26.php" hash="bf5b8bee4bd3d1e4ebc687a2dc2c3b30"/><file name="mysql4-upgrade-0.7.26-0.7.27.php" hash="88908e44653f5001778a2c215d2334a2"/><file name="mysql4-upgrade-0.7.27-0.7.28.php" hash="18c56edc18cb2d26b4fee1602031a8b0"/><file name="mysql4-upgrade-0.7.28-0.7.29.php" hash="82e449ada8ef2dd3f772f672ac9c8f4f"/><file name="mysql4-upgrade-0.7.29-0.7.30.php" hash="19993f5d8b5061d548402dd1ced2511a"/><file name="mysql4-upgrade-0.7.30-0.7.31.php" hash="ce6e9a220b1f47a449b1da768b481362"/><file name="mysql4-upgrade-0.7.31-0.7.32.php" hash="1f95d965cdd2ef8e0701c36d9a6d81ad"/><file name="mysql4-upgrade-0.7.32-0.7.33.php" hash="a3a0bb1853557a46d94ba9717e17c21c"/><file name="mysql4-upgrade-0.7.33-0.7.34.php" hash="1b317292156c19786d0c7891a8b6c94c"/><file name="mysql4-upgrade-0.7.34-0.7.35.php" hash="ae2f124dc9859240b3e5ce1a5ab0f79f"/><file name="mysql4-upgrade-0.7.35-0.7.36.php" hash="7b5b00ab8ec63b5fd02d8fa65cadf1b9"/><file name="mysql4-upgrade-0.7.36-0.7.37.php" hash="cb86e22aa7fd8996725dcd06935dff86"/><file name="mysql4-upgrade-0.7.37-0.7.38.php" hash="97a399efa3aa04df7dc63b395c2580ee"/><file name="mysql4-upgrade-0.7.38-0.7.39.php" hash="fb4444e6f5e32ef7dfca18a41e68ac50"/><file name="mysql4-upgrade-0.7.39-0.7.40.php" hash="bdde08b163e8c6a309637611ab6ebb06"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="b6f41c583a739161c2255da179ac2bd7"/><file name="mysql4-upgrade-0.7.40-0.7.41.php" hash="d2e40907a7c8182999b4fd4b05aa54a7"/><file name="mysql4-upgrade-0.7.41-0.7.42.php" hash="827225fc74e03e78dd9394881330eb5e"/><file name="mysql4-upgrade-0.7.43-0.7.44.php" hash="95b7e4a01611587a57ae1c8421b0683d"/><file name="mysql4-upgrade-0.7.44-0.7.45.php" hash="6d9ee0c7fb4bd68452f1d82743005ef7"/><file name="mysql4-upgrade-0.7.45-0.7.46.php" hash="0fc03ee03ae2ffa5be0e718d3b5481c3"/><file name="mysql4-upgrade-0.7.46-0.7.47.php" hash="db9d37ff3ad447df8969dcf82b9bfdf6"/><file name="mysql4-upgrade-0.7.47-0.7.48.php" hash="f2ba617765373d640b78c409feec30f6"/><file name="mysql4-upgrade-0.7.48-0.7.49.php" hash="0eab9338782973dc63bec3ea582b8a5e"/><file name="mysql4-upgrade-0.7.49-0.7.50.php" hash="d85f9f9b9bcae12794b6bf6370d94644"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="3cee2cef6e32abe440cccdadd671f932"/><file name="mysql4-upgrade-0.7.50-0.7.51.php" hash="e55d842ef8a8437553644cf25cfcb9c9"/><file name="mysql4-upgrade-0.7.51-0.7.52.php" hash="0bfafab7de0664a4178de76f3890daf9"/><file name="mysql4-upgrade-0.7.52-0.7.53.php" hash="29533cc9df23e68747399c8263731477"/><file name="mysql4-upgrade-0.7.53-0.7.54.php" hash="d22c9a89e63753b14a8a7f1688a3526d"/><file name="mysql4-upgrade-0.7.54-0.7.55.php" hash="0dc3e2a1902cb6b14e9b7055ab570799"/><file name="mysql4-upgrade-0.7.55-0.7.56.php" hash="60753837cd5d60361534cbb0225a3454"/><file name="mysql4-upgrade-0.7.56-0.7.57.php" hash="170c670d3d72f70148e4d6c08342d235"/><file name="mysql4-upgrade-0.7.57-0.7.58.php" hash="12e12c08e28702e44fafd0028c1b849f"/><file name="mysql4-upgrade-0.7.58-0.7.59.php" hash="051192900951ee98fc951b5cc6aa9483"/><file name="mysql4-upgrade-0.7.59-0.7.60.php" hash="55fc783cb0f0729167ff5fd2e0a1dd57"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="a3f49edb28d84c59fe9ca7837dcea688"/><file name="mysql4-upgrade-0.7.60-0.7.61.php" hash="b895f5353751e0188c753acf337818ec"/><file name="mysql4-upgrade-0.7.61-0.7.62.php" hash="7a5c16a58337826b6d99039b8afaf5fd"/><file name="mysql4-upgrade-0.7.62-0.7.63.php" hash="a5191a21d2a025b70a4c9b3262300da6"/><file name="mysql4-upgrade-0.7.63-0.7.64.php" hash="996bd2a70e9038fad8394f45d0eff9f6"/><file name="mysql4-upgrade-0.7.64-0.7.65.php" hash="010c4eea30beaa065d1978cc9c75858f"/><file name="mysql4-upgrade-0.7.65-0.7.66.php" hash="31937181e9cb258de9ac045166cf2e36"/><file name="mysql4-upgrade-0.7.66-0.7.67.php" hash="965f4ea3f8a2a3462b2643e6aba90d65"/><file name="mysql4-upgrade-0.7.67-0.7.68.php" hash="64799f0acc85d3dd4f38d329e5af0aab"/><file name="mysql4-upgrade-0.7.68-0.7.69.php" hash="a77cf62660a94679202d0afcfe5c377c"/><file name="mysql4-upgrade-0.7.69-0.7.70.php" hash="27b1fb809c832ba02a1ee11408733fdc"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="6101295efd5f3f08f01a25736ec5e4f2"/><file name="mysql4-upgrade-0.7.70-0.7.71.php" hash="fd9597fd643c92bf0fca4d47dc12d774"/><file name="mysql4-upgrade-0.7.71-0.7.72.php" hash="9cd8144308f5164ced498a58cee7338a"/><file name="mysql4-upgrade-0.7.72-0.7.73.php" hash="2bb63d43241c32344f04ba08ec779b9c"/><file name="mysql4-upgrade-0.7.73-1.4.0.0.0.php" hash="a7ac06f492342ad7aa7a793c2b777f16"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="5da5b75ea047b1650baf789cd8ca5b4a"/><file name="mysql4-upgrade-1.4.0.0.0-1.4.0.0.1.php" hash="4eb5719eaeb28af0b58a5eb55b782c0c"/><file name="mysql4-upgrade-1.4.0.0.1-1.4.0.0.2.php" hash="77631a576880ed0c95bae492b0ec43c9"/><file name="mysql4-upgrade-1.4.0.0.10-1.4.0.0.11.php" hash="64bccc23fe9b77f2baab984f8cd9a4f0"/><file name="mysql4-upgrade-1.4.0.0.11-1.4.0.0.12.php" hash="9e71f44020268215ce0442be5390ad0a"/><file name="mysql4-upgrade-1.4.0.0.12-1.4.0.0.13.php" hash="98320c3efea02f3cdc48b736f062af25"/><file name="mysql4-upgrade-1.4.0.0.13-1.4.0.0.14.php" hash="769851d021ea071c5472a688a7ec27a9"/><file name="mysql4-upgrade-1.4.0.0.14-1.4.0.0.15.php" hash="85a2d3ea3b5b01559306595127f10108"/><file name="mysql4-upgrade-1.4.0.0.15-1.4.0.0.16.php" hash="31ac945d49fe496eb1b9bc097dee6809"/><file name="mysql4-upgrade-1.4.0.0.16-1.4.0.0.17.php" hash="af36774824c34c2e4607deb6c7a4cd8a"/><file name="mysql4-upgrade-1.4.0.0.17-1.4.0.0.18.php" hash="db18c11c5cb8a2629e1a542509eca131"/><file name="mysql4-upgrade-1.4.0.0.18-1.4.0.0.19.php" hash="3f279db6d9bc87e9da98805465ea58f0"/><file name="mysql4-upgrade-1.4.0.0.19-1.4.0.0.20.php" hash="273d8e4e1ae2746e546a206d62e43820"/><file name="mysql4-upgrade-1.4.0.0.2-1.4.0.0.3.php" hash="9ecd093559741748ace7a4cfd5b88f11"/><file name="mysql4-upgrade-1.4.0.0.20-1.4.0.0.21.php" hash="efaf7fd6da74170c570c8a318ae21e35"/><file name="mysql4-upgrade-1.4.0.0.21-1.4.0.0.22.php" hash="9fbbbc917f61035c2660f3506f81ab0d"/><file name="mysql4-upgrade-1.4.0.0.22-1.4.0.0.23.php" hash="5d060e7f034fce20260a77318207a5e5"/><file name="mysql4-upgrade-1.4.0.0.23-1.4.0.0.24.php" hash="601f0a64fded0b691d4e5cee1d4605f1"/><file name="mysql4-upgrade-1.4.0.0.24-1.4.0.0.25.php" hash="ef6456951f48c49a2c8655371dfc3882"/><file name="mysql4-upgrade-1.4.0.0.25-1.4.0.0.26.php" hash="6e28c9a7f29d0f4e84a2e288be34a0d2"/><file name="mysql4-upgrade-1.4.0.0.26-1.4.0.0.27.php" hash="e81a3dad476185e2d34b8a8f4e17aed9"/><file name="mysql4-upgrade-1.4.0.0.27-1.4.0.0.28.php" hash="a48503aadadba707cc96a39f344b3e87"/><file name="mysql4-upgrade-1.4.0.0.28-1.4.0.0.29.php" hash="2cfb7b7f14ef594bc4d09768cceff672"/><file name="mysql4-upgrade-1.4.0.0.3-1.4.0.0.4.php" hash="445490fc8158fd0ef7cd83c27ba93743"/><file name="mysql4-upgrade-1.4.0.0.30-1.4.0.0.31.php" hash="2a428605b7c8ddf194eccd4f40b57627"/><file name="mysql4-upgrade-1.4.0.0.31-1.4.0.0.32.php" hash="7d8e65edb87932c9a03c1e037e15c217"/><file name="mysql4-upgrade-1.4.0.0.32-1.4.0.0.33.php" hash="70e5a99b44286483ded586c2c77609ae"/><file name="mysql4-upgrade-1.4.0.0.33-1.4.0.0.34.php" hash="8dfca4d13fedcd3927800ce3abb3adcb"/><file name="mysql4-upgrade-1.4.0.0.34-1.4.0.0.35.php" hash="c452a59ae39426cf10bf2dd296363fa8"/><file name="mysql4-upgrade-1.4.0.0.35-1.4.0.0.36.php" hash="9ce0c5ae8cf94b5b2aaf29934d77ff94"/><file name="mysql4-upgrade-1.4.0.0.36-1.4.0.0.37.php" hash="a0b70d350522db088260ad4ec2c6fb6f"/><file name="mysql4-upgrade-1.4.0.0.37-1.4.0.0.38.php" hash="bceac8cc99838b2eb12609af7fa4d289"/><file name="mysql4-upgrade-1.4.0.0.38-1.4.0.0.39.php" hash="a183832b91182bc1d76a001f33fa2c91"/><file name="mysql4-upgrade-1.4.0.0.39-1.4.0.0.40.php" hash="d22ec63695cf1d6c6d73a45a423b1560"/><file name="mysql4-upgrade-1.4.0.0.4-1.4.0.0.5.php" hash="07ce9770be5a2c649589ae390077d11f"/><file name="mysql4-upgrade-1.4.0.0.40-1.4.0.0.41.php" hash="ea749610e40e90c9614314964b64a396"/><file name="mysql4-upgrade-1.4.0.0.41-1.4.0.0.42.php" hash="38846d1d51038070a2733c032c157970"/><file name="mysql4-upgrade-1.4.0.0.43-1.4.0.0.44.php" hash="9b31f4b214dbb5230c29d83cace9fba7"/><file name="mysql4-upgrade-1.4.0.0.5-1.4.0.0.6.php" hash="d1c7df345f9d59660a45ae79c4aa159c"/><file name="mysql4-upgrade-1.4.0.0.6-1.4.0.0.7.php" hash="34c9a15dbd4b6c0b765c2730022f8c1a"/><file name="mysql4-upgrade-1.4.0.0.7-1.4.0.0.8.php" hash="10547a76c65573fa3dbe2a2c8d683817"/><file name="mysql4-upgrade-1.4.0.0.8-1.4.0.0.9.php" hash="c4895fa8b5b66db9a98cc765116b54ca"/><file name="mysql4-upgrade-1.4.0.0.9-1.4.0.0.10.php" hash="dfdc909dbc50f6e4556b3f350bb31cf9"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="262c663c9367c7404f63608ff545cd72"/><file name="mysql4-upgrade-1.6.0.0.8-1.6.0.0.9.php" hash="26fd60835af8537cdcaecfc86776b4c5"/><file name="upgrade-1.6.0.0-1.6.0.0.1.php" hash="a407effa970d70d0c38e8f8a3c1190b5"/><file name="upgrade-1.6.0.0.1-1.6.0.0.2.php" hash="683a300cf2c2b65967804b1ba86b6247"/><file name="upgrade-1.6.0.0.10-1.6.0.0.11.php" hash="be8d5e4b7ef6f6d698837e7d7d038468"/><file name="upgrade-1.6.0.0.11-1.6.0.0.12.php" hash="5f27bb2394ca437ccc6eafacda319c26"/><file name="upgrade-1.6.0.0.14-1.6.0.0.15.php" hash="5a64b192dfb43b5b6068a36c750f666d"/><file name="upgrade-1.6.0.0.15-1.6.0.0.18.php" hash="6713ad3a3e1279840570d09be596ad8d"/><file name="upgrade-1.6.0.0.18-1.6.0.0.19.php" hash="2b9ff26ac0a03b7b06d11e5da20a36fd"/><file name="upgrade-1.6.0.0.19.1.1-1.6.0.0.19.1.2.php" hash="3b43f2365ac8a0cc69128b42ef55a552"/><file name="upgrade-1.6.0.0.19.1.2-1.6.0.0.19.1.3.php" hash="0c50b1fe993a9c96ebfc1195cec2d9ef"/><file name="upgrade-1.6.0.0.19.1.4-1.6.0.0.19.1.5.php" hash="8bf92dde7ab583472cf41e3aa3bc7854"/><file name="upgrade-1.6.0.0.2-1.6.0.0.3.php" hash="977b5802c56f3995d1e3f350bc560840"/><file name="upgrade-1.6.0.0.3-1.6.0.0.4.php" hash="5fb5d4f3f47671b5b9de7bc189420df6"/><file name="upgrade-1.6.0.0.4-1.6.0.0.5.php" hash="2fb8b3607046c292040810e74a07f4e0"/><file name="upgrade-1.6.0.0.5-1.6.0.0.6.php" hash="48946c60f1c39c90f12423af8fd9ab4a"/><file name="upgrade-1.6.0.0.6-1.6.0.0.7.php" hash="d902f18b3d77ceb531870db665dd6a5f"/><file name="upgrade-1.6.0.0.7-1.6.0.0.8.php" hash="1954af67d8f5ce325f211a062e607185"/><file name="upgrade-1.6.0.0.9-1.6.0.0.10.php" hash="8bea76f4be2e8a15b414fe85200e0146"/></dir></dir></dir><dir name="CatalogIndex"><dir name="Model"><file name="Aggregation.php" hash="d8af150f1f31f8eeb374b372112c7bd6"/><file name="Attribute.php" hash="e7fc5f65b7150d29466cf72e660499a3"/><dir name="Catalog"><dir name="Index"><file name="Flag.php" hash="f9994f4bfa80c140a5dc3c7d56f354eb"/><dir name="Kill"><file name="Flag.php" hash="aadfadde5165ee0d52c48b171eabdba9"/></dir></dir></dir><dir name="Data"><file name="Abstract.php" hash="1ad82e249c4503cdf441957c7b455b57"/><file name="Configurable.php" hash="ba79b0a91e7250057b67ac0d83604534"/><file name="Grouped.php" hash="5914fe1730fe66b4b9f5f3127a4f422a"/><file name="Simple.php" hash="7f58b8c4463fe055fe99427fdfd4cb1f"/><file name="Virtual.php" hash="383cf1b8a7936cdedc1f37b2966fd687"/></dir><dir name="Indexer"><file name="Abstract.php" hash="3f4d1948c963b9295eb9d74cadad19bb"/><file name="Eav.php" hash="f48fda3c09788e64982acd730859a681"/><file name="Interface.php" hash="17198f0e5b2db1597e934a7fc87df8ba"/><file name="Minimalprice.php" hash="6083e851bd5987d52b783f7534dfe54b"/><file name="Price.php" hash="f3f374ff229ed0e4275e3d75801152b5"/><file name="Tierprice.php" hash="80e587f773db5240db32eea1fbf0eb02"/></dir><file name="Indexer.php" hash="ea8f414c384e223f7066f40a1825da58"/><dir name="Mysql4"><file name="Abstract.php" hash="d31a3c0e2196eed9b5803f7f3dcbadcb"/><file name="Aggregation.php" hash="1e2bd5dbd163b5d380de7042caa476af"/><file name="Attribute.php" hash="5432abbb2508b9e035a3e281fedc9a32"/><dir name="Data"><file name="Abstract.php" hash="e923a9926a1f067de21d8d1f401545db"/><file name="Configurable.php" hash="3de1676d25c734ecd245c7bf878f73aa"/><file name="Grouped.php" hash="c68cd41d33583c508227e85cf60976b9"/></dir><dir name="Indexer"><file name="Abstract.php" hash="af322c8d3d112ecde8ca776a0018e664"/><file name="Eav.php" hash="a12a21ca3b5d071c70da3ccf3ba594be"/><file name="Minimalprice.php" hash="00922c6b3c641c559eca64383bb77769"/><file name="Price.php" hash="36d9a8cc30d851f144db2687ab2f403a"/></dir><file name="Indexer.php" hash="638fe575e181ee6c68c4bfbc988c24e5"/><file name="Price.php" hash="88052475d8f04c300c6fae7b09d319e8"/><file name="Retreiver.php" hash="8f05bd5edb9b7a6ff19bea9f844dfbc6"/><file name="Setup.php" hash="1fbb2d9be694eadc61f2d1d83a0309d5"/></dir><file name="Observer.php" hash="8047d191d20f391728e223f9fc8e311d"/><file name="Price.php" hash="a195a56776dc8633fefaf4bf95cf7da8"/><dir name="Resource"><file name="Abstract.php" hash="55c819cd20eb177370d0d7c9a53a3174"/><file name="Aggregation.php" hash="67dc7625e3715466d02be700f5af432a"/><file name="Attribute.php" hash="9771e6b7750db77ada5437c299f0c097"/><dir name="Data"><file name="Abstract.php" hash="81f481e13bff2c1516442eef052ae670"/><file name="Configurable.php" hash="1c28a438bee1ab045dae5831d2d9514a"/><file name="Grouped.php" hash="ae6f6724480661972838fb5a5495addd"/></dir><dir name="Indexer"><file name="Abstract.php" hash="192816c1dfa15625f02ec3b24bdd6950"/><file name="Eav.php" hash="e2c4848e82adfe4e1a36084aed6e1276"/><file name="Minimalprice.php" hash="d09967b2fc0f04afbf7109a1fbce2851"/><file name="Price.php" hash="e950948c90f03beeb93e8351b6e095e3"/></dir><file name="Indexer.php" hash="cf50fc45c5da409e70e1496b395c2934"/><file name="Price.php" hash="2383523c21df945fc7c6a1d335f2f27a"/><file name="Retreiver.php" hash="70598ae252e98fb6f89cab93469bba01"/><file name="Setup.php" hash="2a69b5d885631ea810158a4909329a9e"/></dir><file name="Retreiver.php" hash="cbec9f6f58e97c37f191d310a1eff230"/></dir><dir name="etc"><file name="config.xml" hash="50ff66b4fc9b312bc89626503b3cd348"/></dir><dir name="sql"><dir name="catalogindex_setup"><file name="install-1.6.0.0.php" hash="cf8f185eee27560f80f39a914b5c3c82"/><file name="mysql4-install-0.7.0.php" hash="58a76cfbf513042d9241684681c6b079"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="d0aa67bf065bb707fe2abab0425caf6d"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="c9148eaec8f5380d769b2b34ffb18084"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="b2710d3bef49d9fd256c6ae9c871be05"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="bb820f1d177b543937070e00fb4b1845"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="29314bf0698771534cab5eb548402ca1"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="24cbd4a5b74266bcfbade17ef5f8ada4"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="7b2a5ed488381396236020a21579aeb1"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="af7837b7a4a1824e87c9f0f1645dd33c"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="d68c3505c7b47de51e4fe56a6cbd791e"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="8d8b05c8e5df2bf84b586816ac1b13d3"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="3870bb2755fbb8547c7d7862f869c7b1"/></dir></dir></dir><dir name="CatalogInventory"><dir name="Block"><dir name="Adminhtml"><dir name="Form"><dir name="Field"><file name="Customergroup.php" hash="a1bc58f2f084c1f648e56e3b9da4fc7c"/><file name="Minsaleqty.php" hash="70ad8c04e28efb204fc106207c33aeeb"/></dir></dir></dir><file name="Qtyincrements.php" hash="b261f945d395df544101b9aefbeef6ad"/><dir name="Stockqty"><file name="Abstract.php" hash="e24fe678792bd0418688654445adabcc"/><file name="Composite.php" hash="7e64a2096cf31e8403a8ef2f059f0f9b"/><file name="Default.php" hash="89e5d0814a90450ccd11b8505c74a0e9"/><dir name="Type"><file name="Configurable.php" hash="cbffc0a8607f8ace1240b22f8d989fcb"/><file name="Grouped.php" hash="ab6c2c5e76f4d4bf3355b0a63cde0493"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="dead0e2fb29574261d5b5d315e356e05"/><file name="Minsaleqty.php" hash="838420acee2dd3a5acb6001ef5382494"/></dir><dir name="Model"><dir name="Api2"><dir name="Stock"><dir name="Item"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="97562c6058565fe06b265442414811f0"/></dir></dir><file name="Rest.php" hash="76b2a33c938950385b8201e3df6b090d"/><dir name="Validator"><file name="Item.php" hash="1b0cfbaed0d9ba8f83b02fc32185de6b"/></dir></dir><file name="Item.php" hash="cbca2f7f7afcf55b105e90a0673ce262"/></dir></dir><dir name="Indexer"><file name="Stock.php" hash="c0984aedb09efd73fe70a489761e6ae1"/></dir><dir name="Mysql4"><dir name="Indexer"><dir name="Stock"><file name="Configurable.php" hash="31fa6e10d95ed91f2cd36ec49087eb47"/><file name="Default.php" hash="3a95a221685f00b7bb1d75715e6955fc"/><file name="Grouped.php" hash="f0014ec4bb9d18b18ad8fe076777ac64"/><file name="Interface.php" hash="dd5e3abc59defff34dae52e7ade0541d"/></dir><file name="Stock.php" hash="6f0903cd0b2ab90b43d58d6343a81f8a"/></dir><dir name="Stock"><dir name="Item"><file name="Collection.php" hash="f782cd8443b68f42c9b9f1040bf23637"/></dir><file name="Item.php" hash="d78fcc6b999ef32713e1e3a40c74d127"/><file name="Status.php" hash="b771b21943d3dbf935125ba221fde479"/></dir><file name="Stock.php" hash="f459ba26acf3bc5c48d28d94ddf9bacf"/></dir><file name="Observer.php" hash="cf0787c14b69f8a331548a2d6ed341ce"/><dir name="Resource"><dir name="Indexer"><dir name="Stock"><file name="Configurable.php" hash="99b85c19436fd2cb1bb639c234507903"/><file name="Default.php" hash="d3b5e2ef640c5b1ddd51d1d384ac7a23"/><file name="Grouped.php" hash="373135e46cfb49c9ac161cdf4542e216"/><file name="Interface.php" hash="21633d6d7270d2f27a6a3e43aa4e3718"/></dir><file name="Stock.php" hash="006bd7c6552ba58f3f5c6f4d2b02b801"/></dir><dir name="Stock"><dir name="Item"><file name="Collection.php" hash="ac116ab6c146546acfe59331b2652a21"/></dir><file name="Item.php" hash="7aa6d956789b642696f070490bb886ab"/><file name="Status.php" hash="5069f9b3d81cc2653932563e972a3a1c"/></dir><file name="Stock.php" hash="75a6f191034e6b3cd459198f5200846a"/></dir><dir name="Source"><file name="Backorders.php" hash="dd5a2e4f5efb98cc3ea16b8b7e9ec555"/><file name="Stock.php" hash="bf73ca9c63cda414afd2b2a1217ddd97"/></dir><dir name="Stock"><dir name="Item"><dir name="Api"><file name="V2.php" hash="ff859921c2c7b1ee05aebe08d30fb197"/></dir><file name="Api.php" hash="47b8ff35afcf3619b439f064b2290e64"/></dir><file name="Item.php" hash="8bd5d30e4c56b9bb9553e8c2a50b1254"/><file name="Status.php" hash="d95989bb579fc09fe4de165589a32eb2"/></dir><file name="Stock.php" hash="16f67a9361cee9a7147ddb739d401a98"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Minqty.php" hash="d9831c57b177371b4df7dcc296c842d7"/><file name="Minsaleqty.php" hash="b09b9183f94e35e2c01bf076e4a73dbe"/><file name="Qtyincrements.php" hash="048f74672f457990537be44d98b9315f"/></dir></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="7e7bf9fcaf608e7655e2fadb729b12c5"/><file name="api.xml" hash="0568837d13dc040aa49b41ab4dff808a"/><file name="api2.xml" hash="bd3260899f9b9486db208d765a24e8d1"/><file name="config.xml" hash="014f7fe202259a429541ca3128f13940"/><file name="system.xml" hash="3d995e44a4426e9bf2df71c86b53f2df"/><file name="wsdl.xml" hash="cfad5924eb32b8fb7ccf79309e5966df"/><file name="wsi.xml" hash="ec7bdd8cb2bc5dd12c0a4d865fe3d313"/></dir><dir name="sql"><dir name="cataloginventory_setup"><file name="install-1.6.0.0.php" hash="f27e471805eddff1bf82df8107f3f974"/><file name="mysql4-install-0.7.0.php" hash="6ba7aa64d910b36a119e6a4ccab4f1d9"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="5a9307e341725852439334f7d5e2816f"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="28fcfff6687a76578474774b791ede4d"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="3c038bcc6fd8d8a377833995c8e57188"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="ccd6337d78f140a84b40a3aa34d594f8"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="1f84078a74c0b69b25627921ba46d9a6"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="594dda2c42f64420af520403b0ad280d"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="fd73a003742f3e2568de9e4b1cbaab59"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="8129f7ce45e56324a5ecd7e5bc65e039"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="b72a6c90993bc3285473ac430078e2b6"/><file name="mysql4-upgrade-1.6.0.0-1.6.0.0.1.php" hash="aa090c910f467d017f647bf9bed33f85"/><file name="upgrade-1.6.0.0.1-1.6.0.0.2.php" hash="f07d18a7750209513b5e30acd4d0b372"/></dir></dir></dir><dir name="CatalogRule"><dir name="Helper"><file name="Data.php" hash="f114ddae5cdaf5bb9062fbc0525a65a4"/></dir><dir name="Model"><dir name="Action"><dir name="Index"><dir name="Refresh"><file name="Row.php" hash="cf9ea839eac7052dd9016baa261571e9"/></dir><file name="Refresh.php" hash="6988a0c4ef21306a3fc3f9bf5a3c26b2"/></dir></dir><file name="Flag.php" hash="89da7917e6cdfb0d297190251ebf4169"/><dir name="Mysql4"><dir name="Rule"><file name="Collection.php" hash="98dc46b90d3d123138e2ceca984e1a16"/><dir name="Product"><dir name="Price"><file name="Collection.php" hash="082fee76f3ec35c9e6574848aaee5148"/></dir><file name="Price.php" hash="df79ff85fd019caec3a0e3c00deabee6"/></dir></dir><file name="Rule.php" hash="e6cccfd2c15365dd7fadd0cb7d3e11c5"/></dir><file name="Observer.php" hash="0a085d9342bd1781dfc1c94dff083539"/><dir name="Resource"><dir name="Rule"><file name="Collection.php" hash="44c60a399686f678146b4030cc178cb1"/><dir name="Product"><dir name="Price"><file name="Collection.php" hash="be34144ee4fc34011eedcadcc023d5a2"/></dir><file name="Price.php" hash="db97799a10e708a7ce51ee5aed4b3290"/></dir></dir><file name="Rule.php" hash="d3ef4a4ff9876be7c747e181e827f8dc"/></dir><dir name="Rule"><dir name="Action"><file name="Collection.php" hash="8597f6e2ba5196887db9182bb4a16877"/><file name="Product.php" hash="37363ef9f7e28a4e4895586f99526e95"/></dir><dir name="Condition"><file name="Combine.php" hash="585427b59b5c3a2cd2940ab7812e6901"/><file name="Product.php" hash="00fd7823a5edca69180b03533896150d"/></dir><dir name="Product"><file name="Price.php" hash="60226e4a64afc637de9c77f5591b425c"/></dir></dir><file name="Rule.php" hash="d004ff0a9cd62a4e06f4a9f7cd88369e"/></dir><dir name="etc"><file name="adminhtml.xml" hash="73016378f9ba7645398de6357859d1c1"/><file name="config.xml" hash="322f34e65bdf4e2bd7356f24cc2bf3e3"/></dir><dir name="sql"><dir name="catalogrule_setup"><file name="install-1.6.0.0.php" hash="f99c00bb678a800719c5d4c412a49170"/><file name="mysql4-install-0.7.0.php" hash="b357df1aa63143f7ed1fc4c1c2d4a1a0"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="adc3ad486f6a80fe863b9d44df345d1e"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="f005bc366de60f96a1505055d817a5e8"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="20435e11621f0306884a64005286c0e3"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="4936b71df8df089c274f2dc5f2c8821e"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="1a238cedfd2b80d5ea30879c53ce8e43"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="cd4c75cd9a21b6d9cd3f0e5a799815f5"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="c918bb2d58138ed34576b591521d8ef6"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="f082bd75ebca7b25f64f07df9a099db8"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="ab2e1f2440c969df314517be519f64a2"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="8edc824dd64b606a204ee9fe1c610a91"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="02a57c0410a008a9be02f9f6a7b54de2"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="4e0c6fab17fb8551c47322c6765341f5"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="dc42862c395434103f7fa6bdca290164"/><file name="upgrade-1.6.0.2-1.6.0.3.php" hash="73f0ee67893eee7948cb9f48242e88a9"/></dir></dir></dir><dir name="CatalogSearch"><dir name="Block"><dir name="Advanced"><file name="Form.php" hash="c4c1713e4bbdc16cb0ee850aaedc3cad"/><file name="Result.php" hash="310fc695dcbfcbceb35119312ec66b5f"/></dir><file name="Autocomplete.php" hash="e202dd4bbef904236e7cd062fba11705"/><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2dc8cf868e549f09695c8332163933d8"/></dir></dir><file name="Layer.php" hash="68ff0d6b3a774c4dee71a63db303fe49"/><file name="Result.php" hash="7fa721871ca0ddae2f8170b5c995997e"/><file name="Term.php" hash="cb1b28a95c749bf853631e1a4b1777c9"/></dir><dir name="Helper"><file name="Data.php" hash="07929ff5bf2897db21b8d941e2f6827c"/></dir><dir name="Model"><file name="Advanced.php" hash="28c2238611b6a6839870720ed3a4e9d0"/><dir name="Fulltext"><file name="Observer.php" hash="db616d623addda792285431dba58d592"/></dir><file name="Fulltext.php" hash="c2214a9c614551ac8a73e25e7ba08909"/><dir name="Indexer"><file name="Fulltext.php" hash="110dfc244cc187d62a803ff6daa33cec"/></dir><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2bad10ccda4b15a38b22d4bd149d1e71"/></dir></dir><file name="Layer.php" hash="404dcaa87375d9170e81e4c3e04f0cf5"/><dir name="Mysql4"><dir name="Advanced"><file name="Collection.php" hash="aa03f1339b7ebc61d4be24edcd74ce10"/></dir><file name="Advanced.php" hash="945e86183ddabab0dc939e7c8dbe36fa"/><dir name="Fulltext"><file name="Collection.php" hash="967735a54331b0f7675ea682d876eb09"/><file name="Engine.php" hash="ae74f610dfd3278c86757304357b096a"/></dir><file name="Fulltext.php" hash="e8b8165e231a1a47e354550156023a7b"/><dir name="Indexer"><file name="Fulltext.php" hash="f3895c8928c0729144fcb543341e0933"/></dir><dir name="Query"><file name="Collection.php" hash="80795ac59424f9343ec3579cd3afaf5f"/></dir><file name="Query.php" hash="eca5a8fed6561e2bf1f503a5e3894bd9"/><dir name="Search"><file name="Collection.php" hash="0c8336671fa586fbbbf45cfc011fdb79"/></dir></dir><file name="Query.php" hash="0ec47e6cfa90f303cc0aeeaf4242dec1"/><dir name="Resource"><dir name="Advanced"><file name="Collection.php" hash="5a35a25c346410403155657d9c794b80"/></dir><file name="Advanced.php" hash="3d8c2a496f2adff90f97ea7b27bd7093"/><dir name="Fulltext"><file name="Collection.php" hash="aa2f7ad37c1f328d4a858af5224161d1"/><file name="Engine.php" hash="2922f0eab7a7157a62ece349ffad4656"/></dir><file name="Fulltext.php" hash="b10421b49c01934e25a0b5b89423a286"/><dir name="Helper"><file name="Mysql4.php" hash="1cb52148ea9f147443142802a5ccac8e"/></dir><dir name="Indexer"><file name="Fulltext.php" hash="6d6c52c0bb00ac1a4ff0283f1ffc135e"/></dir><dir name="Query"><file name="Collection.php" hash="1f36d427babb22a0f610cd217bd88729"/></dir><file name="Query.php" hash="e0960c2bb8fae4146fd06f4c97967053"/><dir name="Search"><file name="Collection.php" hash="3bac930ad9b9fbdbcf18e85083741e1f"/></dir></dir><file name="Session.php" hash="3b64d6f7dcd2bd9ae5c0c5347887529d"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Sitemap.php" hash="f8a202c12c4eec2c3a07ef7b462f69e5"/></dir></dir></dir></dir><dir name="controllers"><file name="AdvancedController.php" hash="bb536922f21c24c1ae0b12744300f807"/><file name="AjaxController.php" hash="b5addc862bb4c8d3f768e314e52ec9a6"/><file name="ResultController.php" hash="221e519f7985eb066d64792862fc59b2"/><file name="TermController.php" hash="22420488e648e5f852fb7df4120cc884"/></dir><dir name="etc"><file name="adminhtml.xml" hash="ab94dc4bbf1312308549b7d3999452ee"/><file name="config.xml" hash="8b374762e2c06a24be57da998c87fcc7"/><file name="system.xml" hash="a2fcb985b8b881b78d27010897c13870"/></dir><dir name="sql"><dir name="catalogsearch_setup"><file name="install-1.6.0.0.php" hash="a2b0d197a9e45e8ba6ec6fdb199888d6"/><file name="mysql4-install-0.7.0.php" hash="712a386cbbd394efe749e5194370fca2"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="f1298524c0e8389799244f065e097a0d"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="83e4a715af4d5690b58dc4dbad3006f9"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="392ccdab42485cea7426beea3288792e"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="4186e84dd5d4b4be4e78b3f9428f78b9"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="27d10ec3e6a9e8ab6fb2e6fc7cd45e0d"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="c36dec0d08b86b36cceeafda534321a0"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="e0610cececc06f7d0d96a82ddb648344"/><file name="upgrade-1.6.0.0-1.8.2.0.php" hash="3f43aa1f65cc87f92d7e19b4c180ca21"/></dir></dir></dir><dir name="Checkout"><dir name="Block"><file name="Agreements.php" hash="01835129ca84c8a6f56097b06636fd5d"/><dir name="Cart"><file name="Abstract.php" hash="872be8c057c924ca191ba0537f5b0794"/><file name="Coupon.php" hash="1fceac167119d3c42af64a6e7c8a71a2"/><file name="Crosssell.php" hash="13dbf998a15118ea5b56f3bc7841c560"/><dir name="Item"><file name="Configure.php" hash="842993ebdfeb50a0c26ae19fc6997997"/><dir name="Renderer"><file name="Configurable.php" hash="0c2e3530214b12cb21c736248dea8803"/><file name="Grouped.php" hash="67625b5ec0559494f73cc2ae19ee8347"/></dir><file name="Renderer.php" hash="5b5b9830a510c0967bf27da2912d36fe"/></dir><file name="Minicart.php" hash="1a542fc17951851fab4caf179db2bc55"/><file name="Shipping.php" hash="6fc8fe017f2373cb29628c113d1bb1b8"/><file name="Sidebar.php" hash="b9ce6dc90840fb4e522025e6a2417817"/><file name="Totals.php" hash="3acc1369b38f6f51075219698d03345f"/></dir><file name="Cart.php" hash="90530b2ceef673632d7198950523d896"/><file name="Links.php" hash="46de6b3a0fc7ae8a1ae381bb74bd0d00"/><dir name="Multishipping"><file name="Abstract.php" hash="e341425a398ff768c34a65230682ba6a"/><dir name="Address"><file name="Select.php" hash="1793fb3a0ea7e43a1cdcd9b755bd39b0"/></dir><file name="Addresses.php" hash="8759f8cc535172f9b8d9ee5356780fba"/><dir name="Billing"><file name="Items.php" hash="53b44cedd1239aa341c6eafe08d48fe5"/></dir><file name="Billing.php" hash="ad98a619f72678d071839ed955915fb8"/><file name="Link.php" hash="94c157e952a32362e76b712197a59c66"/><file name="Overview.php" hash="ca306b397661c6123c131e5e535bb261"/><dir name="Payment"><file name="Info.php" hash="08ef96244b3ebca5d7732ee56cf5c263"/></dir><file name="Shipping.php" hash="f705bb50a314ebbaeb3083dec924e448"/><file name="State.php" hash="334ee0b3c9545fd5e581f4ef63330092"/><file name="Success.php" hash="5b83ad214e1b0384cb1c871528995e90"/></dir><dir name="Onepage"><file name="Abstract.php" hash="4b39037994dfe61e2cfc7bef63448cce"/><file name="Billing.php" hash="ba0a71fa042248952a74636202652680"/><file name="Failure.php" hash="9106efb1dccccfc80f5d307b134c7448"/><file name="Link.php" hash="bd368ed291976634c9c52f33cd5f6809"/><file name="Login.php" hash="7857bc45c6226a8229b83f562679a5fe"/><dir name="Payment"><file name="Info.php" hash="ac4a991b0a6d05048ca2db14d246509a"/><file name="Methods.php" hash="8265cc80ed4910af39b6e1f74e78c5ed"/></dir><file name="Payment.php" hash="bc88e1014705d486be1e33d094f2ac49"/><file name="Progress.php" hash="20d530cb1867ed769bb8cec8052afe4b"/><dir name="Review"><file name="Info.php" hash="b061baa6f8d251c64b9cab27a94c9127"/></dir><file name="Review.php" hash="7dcf5f69495112c22a13088025e91845"/><dir name="Shipping"><dir name="Method"><file name="Additional.php" hash="482c7aced91da476fcc7940ba2422aa4"/><file name="Available.php" hash="ac975fe58100c7187c7ad41efee2f3c6"/></dir><file name="Method.php" hash="9635ce02ff9e552c6ca316ee87e3e41d"/></dir><file name="Shipping.php" hash="80b9583f205de49524da89d391acb084"/><file name="Success.php" hash="0885c2795f13c50f57e69bce8d085b41"/></dir><file name="Onepage.php" hash="5cf1c1c0489e8f9a1f0012e2b9595752"/><file name="Success.php" hash="e8018a6b54cded2365d186c663cd4968"/><dir name="Total"><file name="Default.php" hash="66dc9076a8ce6931fdc699db167ba92b"/><file name="Nominal.php" hash="cabb2ac2a88ba346625b9247a3a71a08"/><file name="Tax.php" hash="6f154ed6626155404969501946c71344"/></dir></dir><dir name="Controller"><file name="Action.php" hash="2140565efbed00f9adf27760f44b2f84"/></dir><file name="Exception.php" hash="5ec650bdcb9d71f0b5fc348fc2758f19"/><dir name="Helper"><file name="Cart.php" hash="5baa4a7803d841df763d75c3301b8deb"/><file name="Data.php" hash="f4dc9af9742b7842867ed99c2e83772f"/><file name="Url.php" hash="16a0c1a51531c77e47d59d3d1c626c18"/></dir><dir name="Model"><file name="Agreement.php" hash="b580e9f9103423b901ab91f5310770b6"/><dir name="Api"><dir name="Resource"><file name="Customer.php" hash="025742b119d655c84df990522df5d48b"/><file name="Product.php" hash="a0ff764a225e34426528bed282710d51"/></dir><file name="Resource.php" hash="6bae9a50adf01bf17a8026ae5ea16e15"/></dir><dir name="Cart"><dir name="Api"><file name="V2.php" hash="ca951fb2730c2a3b8a25aba1e48bf669"/></dir><file name="Api.php" hash="64362c38ea6adb5569300c9302c6150b"/><dir name="Coupon"><dir name="Api"><file name="V2.php" hash="9147be382a0f3e670b935e854d21149b"/></dir><file name="Api.php" hash="7281c3d83022812980530277d988b9df"/></dir><dir name="Customer"><dir name="Api"><file name="V2.php" hash="24f3b7eb8dea09b6fddb7785078768f8"/></dir><file name="Api.php" hash="80552ab2df6b4a666c5026894e6b7fdc"/></dir><file name="Interface.php" hash="a18f87449ec50d3759620e08f7b209de"/><dir name="Payment"><dir name="Api"><file name="V2.php" hash="84aa5a5f31a36cdd0ec87a2120b9fcea"/></dir><file name="Api.php" hash="505b707924d3510781922693db5705e5"/></dir><dir name="Product"><dir name="Api"><file name="V2.php" hash="52d7e0631effa6573f2e7cb9f499c34b"/></dir><file name="Api.php" hash="b205126d26bcfef83c42c5c004336e58"/></dir><dir name="Shipping"><dir name="Api"><file name="V2.php" hash="0ca7ed3c830a45b6e0a22ed412f48fd1"/></dir><file name="Api.php" hash="e9af22352df7284f040dad6a9a5ec241"/></dir></dir><file name="Cart.php" hash="78a88f2b65cfbf9f83b75316b62dce3f"/><dir name="Config"><dir name="Source"><dir name="Cart"><file name="Summary.php" hash="8e54e142a018e30c2a6263d734091ed4"/></dir></dir></dir><dir name="Mysql4"><dir name="Agreement"><file name="Collection.php" hash="a5d2e187861d7a47e33a1f8dfe568799"/></dir><file name="Agreement.php" hash="8fd16cd1119f012cdc66ce0101f7cd72"/><file name="Cart.php" hash="68a293fb22cdedf7fd4c49d4d01cc577"/><file name="Setup.php" hash="0818088b40ef0aacf85e35bd10822a8f"/></dir><file name="Observer.php" hash="95c74ef6d46a2421855f991659c7dc23"/><dir name="Resource"><dir name="Agreement"><file name="Collection.php" hash="70390a18d13f12efd292c76228d29034"/></dir><file name="Agreement.php" hash="7f20980118952614f5714c1f4153b92c"/><file name="Cart.php" hash="ce89a605fd599477cac950d59d41f4fd"/><file name="Setup.php" hash="813ccb7e69f00a31c143037af7662e3f"/></dir><file name="Session.php" hash="0375614ce3144681b02f37bc25a414bf"/><dir name="Type"><file name="Abstract.php" hash="df92eaf8fd8e69285de36aa2aa4110f4"/><dir name="Multishipping"><file name="State.php" hash="48e6080608d05fc6dc7284b635040e76"/></dir><file name="Multishipping.php" hash="05e6c897750305c65f21ac527cb6f064"/><file name="Onepage.php" hash="bb170775e5417ee7b4f87fee907f4bbe"/></dir></dir><dir name="controllers"><file name="CartController.php" hash="fccbfdf52d77e2c706d1cb4e99e7445e"/><file name="IndexController.php" hash="835b0dbd4fac4b76a274d7299cbd3c00"/><dir name="Multishipping"><file name="AddressController.php" hash="c9c93e7093db346806c9f79d8f5b52d6"/></dir><file name="MultishippingController.php" hash="301ea50309f4b0f007e44465dc0cc4c0"/><file name="OnepageController.php" hash="60fc66d4af696cda774a99b8159f75a1"/></dir><dir name="etc"><file name="adminhtml.xml" hash="72fa6908b80f63b891ab5ac9e60a74ad"/><file name="api.xml" hash="07869dd7ea9e838ae3ab12df67816a2d"/><file name="config.xml" hash="1a3aa782c78fa35897769c97763089d6"/><file name="jstranslator.xml" hash="e7d071b767fb4269f62d5b33dd241f80"/><file name="system.xml" hash="3226cfa047ceb033fdab8ba223f01fd9"/><file name="wsdl.xml" hash="9a10e25803e84713f5031a168dd0c624"/><file name="wsi.xml" hash="2567bee4ef18e1b426c700ce66c3bcb1"/></dir><dir name="sql"><dir name="checkout_setup"><file name="install-1.6.0.0.php" hash="8023f1dce251f1376c3ba9a15262d1e5"/><file name="mysql4-install-0.9.1.php" hash="121a29cd5d6fac478e0e7c8cc0ae4e0e"/><file name="mysql4-upgrade-0.9.0-0.9.1.php" hash="caf108e5f9ad2c1cbcd6dd4512405bc0"/><file name="mysql4-upgrade-0.9.1-0.9.2.php" hash="8b7187ee19e04e5722522ee204df4bbe"/><file name="mysql4-upgrade-0.9.2-0.9.3.php" hash="2fe9fb1f351f24f255e01578acdf5e20"/><file name="mysql4-upgrade-0.9.3-0.9.4.php" hash="c86e236086ee30581d8ab81d5be6d8bc"/><file name="mysql4-upgrade-0.9.4-0.9.5.php" hash="d5eb44438a47c217307b567b5d5b3cda"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="1647b99f4ca60de0ca2caabae08b1cc2"/></dir></dir></dir><dir name="Cms"><dir name="Block"><file name="Block.php" hash="2026d5e3ec9868f3a565d461e2781185"/><file name="Page.php" hash="8a942685ce32d526fb633b05d61e633d"/><dir name="Widget"><file name="Block.php" hash="87384c28f0fcf94ff4cdb894d94c3bd9"/><dir name="Page"><file name="Link.php" hash="62d09bfafc2eee9d3df946a8348e5434"/></dir></dir></dir><dir name="Controller"><file name="Router.php" hash="5dd259a31fbbb1d93d37479585d98adb"/></dir><dir name="Helper"><file name="Data.php" hash="5b401887c9b6ea30b87faa3383e32676"/><file name="Page.php" hash="9dbd6afbf7f7fc1020ab6bf2e5308de1"/><dir name="Wysiwyg"><file name="Images.php" hash="9d37c7df55870372c67ef614c87e7012"/></dir></dir><dir name="Model"><dir name="Adminhtml"><dir name="Template"><file name="Filter.php" hash="4b8f25b0d6a794d041807fee31d4cf92"/></dir></dir><file name="Block.php" hash="83d40f33b021463bc4bb0eb1d56f40ac"/><dir name="Mysql4"><dir name="Block"><file name="Collection.php" hash="0ce095dbc704bf96a03b58cc34bcee38"/></dir><file name="Block.php" hash="e58e789de65a1d0b1e3200f308a326a3"/><dir name="Page"><file name="Collection.php" hash="1b0ab33ca1731ea0317355b4cd26a80f"/><file name="Service.php" hash="a36048e18e769374bffd794b01aeb5c8"/></dir><file name="Page.php" hash="79becb04a45a36b58361057380cb63a2"/></dir><file name="Observer.php" hash="56af81a9637530097458c997fa6d7a70"/><file name="Page.php" hash="3b60c996d092d36d0df2381f072bc828"/><dir name="Resource"><dir name="Block"><file name="Collection.php" hash="094cbc78f457b943183bd62986ade660"/></dir><file name="Block.php" hash="1a984c70b61e3c501a791919595b51d4"/><dir name="Page"><file name="Collection.php" hash="fb752a9e5941720852132c2526ac4ac5"/><file name="Service.php" hash="031c3b36bd9327c264c94a5ace150fde"/></dir><file name="Page.php" hash="de4319cd668bb83608932ba3d608fbd5"/></dir><dir name="Template"><file name="Filter.php" hash="21286b1ddb5e180223905d9a2930cd2b"/></dir><dir name="Wysiwyg"><file name="Config.php" hash="d8d910e5a4c480f6d93184f107989b2e"/><dir name="Images"><dir name="Storage"><file name="Collection.php" hash="fe8a17645ea1a2e5ea23f31ac2f34251"/></dir><file name="Storage.php" hash="a094d259b85527d5bd3fbdd9c70c14f1"/></dir></dir></dir><dir name="controllers"><file name="IndexController.php" hash="22073687a4879efcae896723ba6901c7"/><file name="PageController.php" hash="1c0eee5022af77ad35fa6387823a7b7c"/></dir><dir name="data"><dir name="cms_setup"><file name="data-install-1.6.0.0.php" hash="98ffdd112d54cd7d8bf0baa9fb42a497"/><file name="data-upgrade-1.6.0.0.0-1.6.0.0.1.php" hash="cf1aa0ef419605b9041c511f1df6b30c"/><file name="data-upgrade-1.6.0.0.1-1.6.0.0.2.php" hash="d34ef38bbe7c6454609549735924cacc"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="26cfaa3305365414a7bbcb212ba6676e"/><file name="config.xml" hash="5ee4baa239fe2f016bd366e002d08406"/><file name="system.xml" hash="f96d55ee55ec88d17ab1fd129fd15526"/><file name="widget.xml" hash="19daa63e98d6adf9bf7a8743ebcfec60"/></dir><dir name="sql"><dir name="cms_setup"><file name="install-1.6.0.0.php" hash="036832fd0187d0c97a386e02548e4b7e"/><file name="mysql4-install-0.7.0.php" hash="eba8ab5a1a3b17a4efaee22ee36e2303"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="43ca4351a1f90c5b6d15b160140fec4e"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="c1e07029aea48f5efea912da751d3364"/><file name="mysql4-upgrade-0.7.10-0.7.11.php" hash="3c0b96adf71c6548a7d060aa2887f7bd"/><file name="mysql4-upgrade-0.7.11-0.7.12.php" hash="df2dd2e5fb88662ec3aeef3ca66cb683"/><file name="mysql4-upgrade-0.7.12-0.7.13.php" hash="94959b92163ebeb21ee267b056f9fffe"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="33c5082df30fe56f5b52cb3e3ba33f5e"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="80036501cd1d3673b29025791bad936f"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="5a7f7d8801adb61b7f40742f14fcc5c0"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="9296cf6a7bf311e21d38f78b7a4382f5"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="bbd1d797b5efcd9d700e4172475fe96e"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="3673999c0fb91684094cbe9360dec2fc"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="7eb82690d68c916e310cbb3afa3ce612"/></dir></dir></dir><dir name="ConfigurableSwatches"><dir name="Block"><dir name="Catalog"><dir name="Layer"><dir name="State"><file name="Swatch.php" hash="5870932d0398e31209b38592e0f2a1de"/></dir></dir><dir name="Media"><dir name="Js"><file name="Abstract.php" hash="ac0376fb546b2b5466fc265db805500e"/><file name="List.php" hash="32c3e7a38a8464b96d36e6bf9bf70e10"/><file name="Product.php" hash="b4110492547aac402ab6299a24312c3a"/></dir></dir><dir name="Product"><dir name="List"><file name="Price.php" hash="3f5bfebd086a4a15766a92f5033711e7"/></dir><dir name="View"><dir name="Type"><dir name="Configurable"><file name="Swatches.php" hash="f6bbfd51d4c3cfa820120323e39e37d9"/></dir></dir></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="b8ba8a4a2f67ce5ad3ad68be3fa8c669"/><dir name="List"><file name="Price.php" hash="6bd1fe6fe96ffd70d0056ae40a8d94ee"/></dir><file name="Mediafallback.php" hash="3b05c50121fee8862a6632aadea056d0"/><file name="Productimg.php" hash="ec85544a4cd10b89e4cb11bec7f3cd68"/><file name="Productlist.php" hash="3f04a102b5456a7d51b45c53b435dbf9"/><file name="Swatchdimensions.php" hash="e2ff093ff96ef0c759095bdc46964d52"/></dir><dir name="Model"><file name="Observer.php" hash="152d660d8b152d089cbd3bdb9b288be7"/><dir name="Resource"><dir name="Catalog"><dir name="Product"><dir name="Attribute"><dir name="Super"><file name="Collection.php" hash="537866e74b606cef3c8254a1bba6a288"/></dir></dir><dir name="Type"><dir name="Configurable"><dir name="Product"><file name="Collection.php" hash="00671910ae721b7e4b0c5fd65bd3f6b6"/></dir></dir><file name="Configurable.php" hash="d602e5e25165db00445513598b15ca19"/></dir></dir></dir></dir><dir name="System"><dir name="Config"><dir name="Source"><dir name="Catalog"><dir name="Product"><dir name="Configattribute"><file name="Select.php" hash="2d9fa3692840f71216f7753ab92121aa"/></dir><file name="Configattribute.php" hash="0d540fa0f5d44d102c7f48469b208a97"/></dir></dir></dir></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="8e694ee9e63658cf427583a0048b4298"/><file name="config.xml" hash="985c7d9dc014951dacbc8e087103bc50"/><file name="jstranslator.xml" hash="f2648cac1386d4ba4c1b5a8d699f66c2"/><file name="system.xml" hash="04c114ed08e34c9d258a900101f6423d"/></dir></dir><dir name="Connect"><dir name="Block"><dir name="Adminhtml"><dir name="Extension"><dir name="Custom"><dir name="Edit"><file name="Form.php" hash="e26414f64cedd1321ba8da2cc225ed19"/><dir name="Tab"><file name="Abstract.php" hash="dbd67c2564728e893753dd3dde4f6e0b"/><file name="Authors.php" hash="cd6621452faba0be529c8eda1fee984c"/><file name="Contents.php" hash="3c8132774831b661b0f47daa178cd2e8"/><file name="Depends.php" hash="9e380c2f0dde7c4a6586a3425d02cc72"/><file name="Grid.php" hash="2bc4b16f7dd704fbdef92fe506771ad9"/><file name="Load.php" hash="5763af2594d2e4761d05c2095afbdf7e"/><file name="Local.php" hash="051aafb1da88da0d4a20fac4e26a63f1"/><file name="Package.php" hash="0a3a063eb7a3d2deec9c58a10e8da807"/><file name="Release.php" hash="edfb87af6df90f33a3645bcc47a9630b"/></dir><file name="Tabs.php" hash="eaadde7d25104b25c86f6fc15be1072a"/></dir><file name="Edit.php" hash="77160823c353eec4ead9b1a91533de65"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="8f4525f02dbd792bca739def1a54c66b"/></dir><dir name="Model"><dir name="Extension"><file name="Collection.php" hash="e3edca7adb4900df4959dc0672842790"/></dir><file name="Extension.php" hash="eb7923ef67622eeba1fa0e13f77ab095"/><file name="Session.php" hash="b3668a4540c2ac629c3897ec494d8b4f"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Extension"><file name="CustomController.php" hash="aa399d37bc97765d0003b9f64f1107d2"/><file name="LocalController.php" hash="d51c4ca3b11eb15ec4bedb3d06361385"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="81c78906e15656a7a38c602e48bf39d6"/><file name="config.xml" hash="9c7adf5d5c9381d03a47ec8a4c0f1dd7"/></dir></dir><dir name="Contacts"><dir name="Helper"><file name="Data.php" hash="5b94241f71c741c1f1ec214614dddf0f"/></dir><dir name="Model"><dir name="System"><dir name="Config"><dir name="Backend"><file name="Links.php" hash="8e3b0397091a6e8ec8d46957fd413aa9"/></dir></dir></dir></dir><dir name="controllers"><file name="IndexController.php" hash="228964505f71cabc33ff172c01337f07"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6a077dd2f29239e1bd4d6f157047e3e0"/><file name="config.xml" hash="8c70aedd3e5f207e3a60aa96f2a2fdf5"/><file name="system.xml" hash="464371ade06413d71129ddf133c8138f"/></dir><dir name="sql"><dir name="contacts_setup"><file name="install-1.6.0.0.php" hash="4523d0df619c528b9fe09c217b1403fe"/><file name="mysql4-install-0.7.1.php" hash="5177d23b10f5c4f13c71611ccf498bc1"/><file name="mysql4-install-0.8.0.php" hash="75c9bc4e6b64ff6b66e5e38e8356ca13"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="329bc2138e3c827cbdc0e43e0ce2eab9"/></dir></dir></dir><dir name="Core"><dir name="Block"><file name="Abstract.php" hash="a4758c091f367ef85d0c6b4629fc1a34"/><file name="Flush.php" hash="1c81f1f58c42f8be5de5c18de7930004"/><dir name="Html"><file name="Calendar.php" hash="5a93eb0c181d3856b43b9427eb1fa2c7"/><file name="Date.php" hash="5e258063e63e9a671fcc62652a035b42"/><file name="Link.php" hash="91bc4e1065dba61f08d7ae10c82d05b9"/><file name="Select.php" hash="d5a535fd18cbb27e602f8ba5337a4d2f"/></dir><file name="Messages.php" hash="e7083c054bbdae836dad9a475dd872a0"/><file name="Profiler.php" hash="5c6fb9ba6ecaf6b6d63c36f3fb8aa3ad"/><dir name="Store"><file name="Switcher.php" hash="9739aed5c6f4102b74f4cbaa04f82d26"/></dir><dir name="Template"><file name="Facade.php" hash="7922ee4c04286ce3eb98059cadb267dd"/><file name="Smarty.php" hash="2ee2ff23f9699c3e5344d0cdad0a8682"/><file name="Zend.php" hash="8502425e486ee06d7990cf59e6c352ed"/></dir><file name="Template.php" hash="74ae08a5f164504e178563f3cb472717"/><dir name="Text"><dir name="List"><file name="Item.php" hash="78507c198e651856f6eb0b1de165d018"/><file name="Link.php" hash="ebe9462234b8e722dbb78d9c69733ea2"/></dir><file name="List.php" hash="56072cf10a5747c38a953322d8b9df1f"/><dir name="Tag"><dir name="Css"><file name="Admin.php" hash="84cc0d77b7246ec4057eb79e055fb8fb"/></dir><file name="Css.php" hash="edadd3969bfe2c3aeada707b3c2b3088"/><file name="Debug.php" hash="dbc940a9871b56c0c88248bfda2c3694"/><file name="Js.php" hash="2ed1784cb60e4278660f9aab1ab0cc8e"/><file name="Meta.php" hash="a571e8f423426d0a26eb64243f290a64"/></dir><file name="Tag.php" hash="482ad79a266f5892cf522c92e76fc9cf"/></dir><file name="Text.php" hash="ec7485a26b1b035ecb008fc39b637148"/></dir><dir name="Controller"><dir name="Front"><file name="Action.php" hash="9e79d3d56b4da2478017d92b78ed9398"/><file name="Router.php" hash="4f8912333744827c28d814ef62851699"/></dir><dir name="Request"><file name="Http.php" hash="d634129e9ed625819159358d4793ed11"/></dir><dir name="Response"><file name="Http.php" hash="ff98a825b04f4159bd56f60e129b6dc3"/></dir><dir name="Varien"><file name="Action.php" hash="0de4286af825455c29e455ff6a561304"/><file name="Exception.php" hash="323d91b1c5020d2f0f8e70923dfee51f"/><file name="Front.php" hash="6f29f0475c5eff2eb93f6e89b5e0c7cf"/><dir name="Router"><file name="Abstract.php" hash="e7d162ad38982815fe1e3be8d4b91e0e"/><file name="Admin.php" hash="90039dea8a57f01308861db0ada6b237"/><file name="Default.php" hash="28e45c061f48ffea9b2ed93658194456"/><file name="Standard.php" hash="8e46f8bd97db4693976a80e9f98db675"/></dir></dir></dir><file name="Exception.php" hash="a6a9dea6b1f59cba29564e44acc7bd88"/><dir name="Helper"><file name="Abstract.php" hash="be419d2ae92967b64101d8476c6e1b3a"/><file name="Array.php" hash="c2789f63f05681b449f7a6ccef2b1369"/><file name="Cookie.php" hash="de1f32bc6d23d9b1d79af8c3c17c2aaa"/><file name="Data.php" hash="f0bd7ca4b96912ee637d63fc7865f873"/><dir name="File"><dir name="Storage"><file name="Database.php" hash="70c2d3685fe216a9dfe47ce46d6d1121"/></dir><file name="Storage.php" hash="fec468db62c90dce4f84c1fecf4d904e"/></dir><file name="Hint.php" hash="bc7c4d51b8494323f9722f44384c4331"/><file name="Http.php" hash="c601ef1dc4b63f02651b78d7303bc231"/><file name="Js.php" hash="129ca78b4a4be5a0ad419fe668c847e4"/><file name="String.php" hash="e501986df9fef06fc8823dc3a45f975f"/><file name="Translate.php" hash="ddf28a39448666179aa0971c39e2d3a8"/><file name="UnserializeArray.php" hash="08bae1b3464e662df323a50c592a4a6b"/><dir name="Url"><file name="Rewrite.php" hash="7f6fcc21fc757de6784057e1747afac5"/></dir><file name="Url.php" hash="c894c0a3eacd745355468bdc1301fbdd"/></dir><dir name="Model"><file name="Abstract.php" hash="3f4befe189872445b531739b1346f9e0"/><dir name="App"><file name="Area.php" hash="48ae85f39015edd9e79ee189e9ebda2f"/><file name="Emulation.php" hash="4056aeb1d1db4398ee9d7f322e524b11"/></dir><file name="App.php" hash="6b0e193af8cdb2d74eb28ca98259cc88"/><file name="Cache.php" hash="1e0b6cac7b114332ec0a20cf6b53c4dc"/><file name="Calculator.php" hash="04b04f608cc3b4caf76d8f927b930b0f"/><dir name="Config"><file name="Base.php" hash="50ed2b4e270db833ee91c21d35986c65"/><file name="Data.php" hash="663eb167c35391f77caf53c07347d7cb"/><file name="Element.php" hash="830513274ce2e355317f0cd80b5cae96"/><file name="Options.php" hash="bf6e7351c30e291fcf28bfda7b73c9e7"/><file name="System.php" hash="dd0497c8e28c365b5b5f22c6b591a118"/></dir><file name="Config.php" hash="ccd5ec20ff7e8685dac7cbdd453ff280"/><file name="Convert.php" hash="7061bd4dfc8a68e3ee8bd97edb40ae37"/><file name="Cookie.php" hash="34ef9b7ad40572763d2c1dc298f9a49e"/><file name="Date.php" hash="55b340e0ea366ed6d73dc1d1527be844"/><dir name="Design"><file name="Config.php" hash="cc7204a98d3ab882e8910a99e280ed4c"/><file name="Fallback.php" hash="c2304f13391a3f18f17441f6ebc327cb"/><file name="Package.php" hash="11bf73f2ff2e0528aa06811a4e9f90c8"/><dir name="Source"><file name="Apply.php" hash="340087f0619d7666ab5737479a563876"/><file name="Design.php" hash="d712c236572a3891af359ec8b3e4e89a"/></dir></dir><file name="Design.php" hash="bc0cc433586f176a2016de5bea4ab66b"/><file name="Domainpolicy.php" hash="8ed8dcd059fdfdf2218fb458c3b44763"/><dir name="Email"><file name="Info.php" hash="3a1152c569ba371366c876ce09580ebc"/><file name="Queue.php" hash="5d5d01ffe9aa4d3592cf663ecf25142e"/><dir name="Template"><file name="Abstract.php" hash="11305d196235edfbd986e6a10ffb0d39"/><file name="Filter.php" hash="17b3201f056acaa8e0f8b112db52561e"/><file name="Mailer.php" hash="cd7fbc1e3be6945446d3d2386c7e8e24"/></dir><file name="Template.php" hash="58917615766c5e3238bf2debc539210f"/><file name="Transport.php" hash="dee3f7b1dac344ee7ce6908eb7acec3b"/></dir><file name="Email.php" hash="3a6a3ee260169b333be8bd75dcd945c7"/><file name="Encryption.php" hash="0f21e842fddf683bb1a0c0de4e4ea8ef"/><file name="Factory.php" hash="3c63a62a08dd427aca268d6abe4a52b3"/><dir name="File"><dir name="Storage"><file name="Abstract.php" hash="eead16bc8a93b7eb0fa96cccada9570c"/><dir name="Database"><file name="Abstract.php" hash="43838858cc42d70897c99b45195e4933"/></dir><file name="Database.php" hash="3d8c5c9c3c4c7db04223cc50cdef1283"/><dir name="Directory"><file name="Database.php" hash="572d4f449cb211963eb5b1864d80e1cd"/></dir><file name="File.php" hash="564a477c9a19e138cb0f9a87cdaec6f9"/><file name="Flag.php" hash="f7c9c910b8998b2d797276769838efce"/></dir><file name="Storage.php" hash="eb25e64a06a12a866b1d9e7c9f111a62"/><file name="Uploader.php" hash="d91a08273557273378beab0a6f9fb60d"/><dir name="Validator"><file name="AvailablePath.php" hash="51c35fa5e4ece45893f88ebba52529d4"/><file name="Image.php" hash="dbd45c9eea5f9d061917e3938abea16f"/><file name="NotProtectedExtension.php" hash="68e1493daf2ced574367115c92556640"/></dir></dir><file name="Flag.php" hash="12f33ffabeae1142bd5bd12bc25de002"/><dir name="Input"><dir name="Filter"><file name="MaliciousCode.php" hash="49d2e9a0dbcc0c8e220628885bab6640"/></dir><file name="Filter.php" hash="5fd5d9338ca0082ff98912c3eb9359c8"/></dir><file name="Language.php" hash="8fddf850daf6897171bb6ba4c6f15789"/><dir name="Layout"><file name="Data.php" hash="9da1afc128962e84044f4463c44ed558"/><file name="Element.php" hash="118b879171c589409b9fe40dd4629dab"/><file name="Update.php" hash="bd1af87aa563228ffd86fe622991ea72"/></dir><file name="Layout.php" hash="9d2c128a29924244431610cd1cf69f0a"/><dir name="Locale"><file name="Config.php" hash="83ad0ba769761ebcced7e5b5aeada4c9"/></dir><file name="Locale.php" hash="fc771d4a95e27648181e69bab7e7155d"/><dir name="Log"><file name="Adapter.php" hash="7a8401e4d25e0da113d0de139ef9a9e8"/></dir><file name="Logger.php" hash="d9ae8759b479ff92d354bc99d7ef4979"/><dir name="Magento"><dir name="Api"><file name="V2.php" hash="407d967185263a58ed75caf3a2d4f701"/></dir><file name="Api.php" hash="25df5649d1cd7953941dcf13df2e3a7f"/></dir><dir name="Message"><file name="Abstract.php" hash="8c3a895255d819b98a37499bad00bf76"/><file name="Collection.php" hash="e0b87967a18fb8c9bf9835f95bf0d2a1"/><file name="Error.php" hash="5f899d95612fdda8df4bbc2ea457dfd5"/><file name="Notice.php" hash="79ab2b274b750be42ba95dc67c0d12a7"/><file name="Success.php" hash="bd6a19eb5801bda3b13238022bdd3718"/><file name="Warning.php" hash="1e6b045c0cfb6108278a65fc3c56a3d4"/></dir><file name="Message.php" hash="22fefaca51c85298d2b9840d0dcf8c2b"/><dir name="Mysql4"><file name="Abstract.php" hash="a5b0dffc0523feb7ac71b98d4ecc8689"/><file name="Cache.php" hash="d153d94172471184bd189ff347569ecd"/><dir name="Collection"><file name="Abstract.php" hash="acbea581a60f43d5a4b84785a114ca6a"/></dir><dir name="Config"><dir name="Data"><file name="Collection.php" hash="e85b8dcb782634137f8b6a5616c16adb"/></dir><file name="Data.php" hash="970870fb626f85630c78ed1136284e51"/></dir><file name="Config.php" hash="bc3c014b73d5ae8e24961b289ab0ebb2"/><dir name="Design"><file name="Collection.php" hash="48943d6c564b7db32e4c09d69f271dbb"/><dir name="Package"><file name="Collection.php" hash="293f71c1a6f67e1e3b4bf6c85782c360"/></dir><dir name="Theme"><file name="Collection.php" hash="636491bc7c6f569f96c5005022d242fb"/></dir></dir><file name="Design.php" hash="692036df13b9d9c1058b550f52483f69"/><dir name="Email"><dir name="Template"><file name="Collection.php" hash="f23e024d78302a7f9f0c0be8b0694c22"/></dir><file name="Template.php" hash="846c3b75b324d575200359a7b8be2220"/></dir><dir name="File"><dir name="Storage"><file name="Abstract.php" hash="49eb25d34e39054e01b0b7d4d741323a"/><file name="Database.php" hash="1fd0f24f483a7c10a977fdd27fe715e2"/><dir name="Directory"><file name="Database.php" hash="bd191938529bab16adb6def749799b9b"/></dir><file name="File.php" hash="d32e4e94fa8a68db9fbf8c617da0b066"/></dir></dir><file name="Flag.php" hash="14ac206457b121fcc7df5ea9832d38b5"/><dir name="Language"><file name="Collection.php" hash="8c51e96c56e66e3911208a2317628c45"/></dir><file name="Language.php" hash="79ba6c8a50b5f52ab05668ca361d58d4"/><file name="Layout.php" hash="2a0208447b0ce6ef1505ba9868f4b590"/><file name="Resource.php" hash="3f3896a0e511a1e4591dfb9aefada380"/><file name="Session.php" hash="c912515bf0c0dff233e7d64b38735d9a"/><dir name="Store"><file name="Collection.php" hash="2b66b1cec8018315ba307bb3c5b60159"/><dir name="Group"><file name="Collection.php" hash="351d169b4d8eb2ef01d5db074252ab59"/></dir><file name="Group.php" hash="9d9f26a9133487df0615352335df733c"/></dir><file name="Store.php" hash="8dfb196abb20d16f825095dfdae70c44"/><dir name="Translate"><file name="String.php" hash="2808fdec826d5c451b11e3d798eaf20e"/></dir><file name="Translate.php" hash="6f8cb9fd5e0edafd2ea9bc56633e14f8"/><dir name="Url"><dir name="Rewrite"><file name="Collection.php" hash="faf8681e97b36e6c3f47af3183064f46"/></dir><file name="Rewrite.php" hash="130d9e44375487c19b51eb4c64b117d5"/></dir><dir name="Variable"><file name="Collection.php" hash="b2f02972a0dfd4f1ea42f306927eaf54"/></dir><file name="Variable.php" hash="00f32aad2d2e2cf3eddc6206ede0cc6a"/><dir name="Website"><file name="Collection.php" hash="5b62abbb214c52c22bdb72d403e9e75e"/></dir><file name="Website.php" hash="cdb13ace26831a84c72d61b06f9cb8b2"/></dir><file name="Observer.php" hash="effe59867a72d6e8d69652d85069fb2f"/><dir name="Resource"><file name="Abstract.php" hash="6249b6cd53449f175086e864fc701dd7"/><file name="Cache.php" hash="f6cdcf5c628073e9de24a12699dea566"/><dir name="Config"><dir name="Data"><file name="Collection.php" hash="6e12f1d9bed4f1199509a106ec4c1ab0"/></dir><file name="Data.php" hash="334c7f498c9f362160456d5afa2e4f61"/></dir><file name="Config.php" hash="628fc6ad70658c502e01d43fb01cc428"/><dir name="Db"><file name="Abstract.php" hash="70742e4f98224203c04a01836d23c1c5"/><dir name="Collection"><file name="Abstract.php" hash="45689c0f4f1a0e1a016fe72610a9c2b4"/></dir></dir><dir name="Design"><file name="Collection.php" hash="2786593e20815b30b8b372717b78fcd4"/><dir name="Package"><file name="Collection.php" hash="3d7a17b1b7abe93afeb6ad623f8235c1"/></dir></dir><file name="Design.php" hash="5cddce7c05e36d1ce1aef2c4ef950d9e"/><dir name="Email"><dir name="Queue"><file name="Collection.php" hash="a0f9a4bec6ed16c4fcc554dbe958c862"/></dir><file name="Queue.php" hash="281cd39e5d3edf692a5604e722c20b0c"/><dir name="Template"><file name="Collection.php" hash="7fcbb63a73cfab972415daf18e35aecb"/></dir><file name="Template.php" hash="708e3b8fd6327cdc960659b90d82275c"/></dir><dir name="Entity"><file name="Abstract.php" hash="99e23e03c62b44e02b581d78c8b79cbd"/><file name="Table.php" hash="6335ecad183a1955ac12bcb0fa581773"/></dir><dir name="File"><dir name="Storage"><file name="Abstract.php" hash="76e4cc5f176c054926e2006b90f63635"/><file name="Database.php" hash="52245f989927dc671eb9182a8e35b007"/><dir name="Directory"><file name="Database.php" hash="11b6a6f504540e2e0e0ac53a32c0f20b"/></dir><file name="File.php" hash="bc0da83b2bff3932edccd77e5e79fcc4"/></dir></dir><file name="Flag.php" hash="e61fd49103e42a38d912f9a11ca4fd8c"/><dir name="Helper"><file name="Abstract.php" hash="fea98c00b89d7976ef18d0961346b212"/><file name="Mysql4.php" hash="c6e9f97258577a6a4c587f90d99341dd"/></dir><file name="Iterator.php" hash="a210d63d17e893b907e96190bfa38fae"/><dir name="Language"><file name="Collection.php" hash="0d4a2657ee3c590f932c66b0bae934c9"/></dir><file name="Language.php" hash="c24c716d7dcd561bc5b729f1423322cc"/><file name="Layout.php" hash="51de17855da5063e25941ee9b891acf5"/><file name="Resource.php" hash="54558489eaeaebcc7160ecbcfdb3e67e"/><file name="Session.php" hash="10d4d694c026ba0422c8743406b110bf"/><dir name="Setup"><dir name="Query"><file name="Modifier.php" hash="73d0f717ecf8901097a15ea8f3d43504"/></dir></dir><file name="Setup.php" hash="5a4a58fe4bd1a2a3f642ef46cc81c4e9"/><dir name="Store"><file name="Collection.php" hash="9a7cc552adb5eb04f5576bfdbadae03d"/><dir name="Group"><file name="Collection.php" hash="cf663e2dda1c1130e0e47d59b686ee92"/></dir><file name="Group.php" hash="ab767197a0686013520ed7ad64c1bcb5"/></dir><file name="Store.php" hash="724e5fbbcdeae9491ed48a969477714d"/><file name="Transaction.php" hash="f2fbd76d08845ca1b3ec53e12230c668"/><dir name="Translate"><file name="String.php" hash="a346efbf76625f7b3399f40d62ab228f"/></dir><file name="Translate.php" hash="6f6549e2a389e08c68aadeb22e9f2b15"/><dir name="Type"><file name="Abstract.php" hash="a8e391ec218b55760800284ae511f37a"/><dir name="Db"><dir name="Mysqli"><file name="Setup.php" hash="63c50624b4fb9ac00a780dc0fac2a96e"/></dir><file name="Mysqli.php" hash="0b741fdb7e318bce2b61d25a2da498a8"/><dir name="Pdo"><file name="Mysql.php" hash="00a917b3cb7eb4f8c72ccc4805eec0f3"/></dir></dir><file name="Db.php" hash="1c91391d4ddee72a30df5a684a2927b2"/></dir><dir name="Url"><dir name="Rewrite"><file name="Collection.php" hash="2cb8f9d4f734a0937d1f0b356d3a1da8"/></dir><file name="Rewrite.php" hash="ccc4dcdc077ca7ce028295faa7f1ac1b"/></dir><dir name="Variable"><file name="Collection.php" hash="b7c09727d07c9b7fe0fc1ba7e89cfdb0"/></dir><file name="Variable.php" hash="ec4b046ce49519d63a091a4f48e2df81"/><dir name="Website"><file name="Collection.php" hash="e074d4b0943374022b3ce225bb4d26e2"/></dir><file name="Website.php" hash="0cf266c0cd26f8d0e4f3d1f376fe6b0a"/></dir><file name="Resource.php" hash="0d494aef71eb1df19e34cdd6581a2092"/><dir name="Session"><dir name="Abstract"><file name="Varien.php" hash="c1c73292138566eec395feba1697886c"/><file name="Zend.php" hash="5ca67559ac0904e1474b7ce6686056d9"/></dir><file name="Abstract.php" hash="e3bbbe8c2fe16e0a8830a7ca57f18b39"/><file name="Exception.php" hash="2ce0d2e3923104ec5f9e041285876f41"/></dir><file name="Session.php" hash="2f427ed8f6303d1dc9573dc76920c11a"/><dir name="Source"><dir name="Email"><file name="Variables.php" hash="ccd018681dfa5eead7152f379714ffa5"/></dir></dir><dir name="Store"><dir name="Api"><file name="V2.php" hash="18ee7c33dd0a8ff7eca9b5b82fdcd30b"/></dir><file name="Api.php" hash="973ae7808f90acc5f50eeef25b5a0d4a"/><file name="Exception.php" hash="f6043d3c13b888eb4c57fa55b26fb49a"/><file name="Group.php" hash="53414869d792ce401cd539ae795cc549"/><file name="Observer.php" hash="eb7511c32941f027fc485b860b1805c0"/></dir><file name="Store.php" hash="234b1bad13494763cbb47f3addcadde9"/><file name="Template.php" hash="aa933216eb7f4c0f228e6f74866b9974"/><dir name="Translate"><file name="Expr.php" hash="5e9c06ad00e633bcc4a9592a5120ecec"/><file name="Inline.php" hash="bedb481b05c8d3a721cb5c52a0f4a16b"/><file name="String.php" hash="4934297c507c27507ace7d898cfc3ae7"/></dir><file name="Translate.php" hash="bbeaa42c48a253f0366bc8f43c162796"/><dir name="Url"><dir name="Rewrite"><file name="Interface.php" hash="f3d5ccdada27a76c2a7c15cf926973d5"/><file name="Request.php" hash="f40827c0146b53cd6e93ee3f5955035f"/></dir><file name="Rewrite.php" hash="a00559f1795bb44f61fc43c9923c2a0c"/><file name="Validator.php" hash="04b9e2c0fb7bf6e4337335fdea3ff759"/></dir><file name="Url.php" hash="1078f2a6231e5c9bc2f05db23b41d239"/><dir name="Variable"><file name="Config.php" hash="affa171299550c5558dfcc94c5e9d8ee"/><file name="Observer.php" hash="501bd5408054c499673c515e679545f5"/></dir><file name="Variable.php" hash="7b91ae3d55518b0c2f8de6c8363c0e59"/><file name="Website.php" hash="20477ae06b1c27fd6a60fb8da6fb7b04"/></dir><dir name="controllers"><file name="AjaxController.php" hash="5cf58eec53bbcbd449e23ac865daf7c9"/><file name="IndexController.php" hash="edbad5b5eb4a268c83859cf51d64610b"/></dir><dir name="etc"><file name="api.xml" hash="90a4f686b4b8900874eab726e149c880"/><file name="config.xml" hash="0cb790f5adfada1d06fe668b571bee87"/><file name="jstranslator.xml" hash="22bc1abd3a680fe5e22b61a81fb902f9"/><file name="system.xml" hash="7a58d8527b930fa01f3278ca2403d532"/><file name="wsdl.xml" hash="79501d6ccf39846b5dd551e85880dcb8"/><file name="wsi.xml" hash="31fa195d527181c946019bcd44d819d6"/></dir><file name="functions.php" hash="033663bd0a00fd88f0bc91f4e8606073"/><dir name="sql"><dir name="core_setup"><file name="install-1.6.0.0.php" hash="207fc73211835ecd5b49093f69bab4d1"/><file name="mysql4-data-upgrade-1.6.0.2-1.6.0.3.php" hash="1d4fcc69c6f9fa8067678977b0dc5c95"/><file name="mysql4-install-0.7.0.php" hash="d83334de1789e098603fefa69f39f282"/><file name="mysql4-install-0.8.0.php" hash="7061c4a797513e811c7efe7c6f735c63"/><file name="mysql4-upgrade-0.6.26-0.7.0.php" hash="1dd91b18dfe36b82216fe1c6ed9e4a0f"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="19e29347f075f6189ad00f3c4c012e56"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="1143d68867fd0ccbf562d4aec21660fd"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="169fab24feb57a49a42daded0d383958"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="a6600be894f2532c5cef50cec2007c0b"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="e793862db62739a013029bc4c3abef6b"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="f60564dbab8975c5a72aba870e31bd22"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="ea7ea8fa28524f360df30308e6557c97"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="d87fff0113dca61276ec2f7decb3e8fa"/><file name="mysql4-upgrade-0.8.0-0.8.1.php" hash="b4c44da961498683ee9f7f0ec6aa125e"/><file name="mysql4-upgrade-0.8.1-0.8.2.php" hash="825e321edf450059ea62412a78fa4b11"/><file name="mysql4-upgrade-0.8.10-0.8.11.php" hash="e0efe65cf9d2d987c7b83e95bdd4b34f"/><file name="mysql4-upgrade-0.8.11-0.8.12.php" hash="7d6c21a027ba7fb754ec92577dad3ef7"/><file name="mysql4-upgrade-0.8.12-0.8.13.php" hash="bcdaa98ee4d7c83c7568c063bda07699"/><file name="mysql4-upgrade-0.8.13-0.8.14.php" hash="eb967ee83a8c7bd5b0cdefb693ba4062"/><file name="mysql4-upgrade-0.8.14-0.8.15.php" hash="e1f09afd0caef193b05453634390b8c5"/><file name="mysql4-upgrade-0.8.15-0.8.16.php" hash="396c159dac306c08379918f06e824b2f"/><file name="mysql4-upgrade-0.8.16-0.8.17.php" hash="0a8d8ae910028fd5aa59c229f919d07f"/><file name="mysql4-upgrade-0.8.17-0.8.18.php" hash="64ef5bd40aab9d958211614b4f68a568"/><file name="mysql4-upgrade-0.8.18-0.8.19.php" hash="88d0c45baab863a737b2d15973294322"/><file name="mysql4-upgrade-0.8.19-0.8.20.php" hash="ba233f3cda242eed69e6793382dfda47"/><file name="mysql4-upgrade-0.8.2-0.8.3.php" hash="bbbb2b3554505abb07a1988a87b8d9d1"/><file name="mysql4-upgrade-0.8.20-0.8.21.php" hash="75bf4b1ffde80714098dc3bb4fe4e2de"/><file name="mysql4-upgrade-0.8.21-0.8.22.php" hash="77fdd776cd12f1114eaa6d7f85f2d20f"/><file name="mysql4-upgrade-0.8.22-0.8.23.php" hash="2704ddfaaec17ac0a99883cd91072ea6"/><file name="mysql4-upgrade-0.8.23-0.8.24.php" hash="0e70926bb4262b24cbdfa1e947c7eddd"/><file name="mysql4-upgrade-0.8.24-0.8.25.php" hash="2321dd3ebdb9898d6616dd324a7ef54a"/><file name="mysql4-upgrade-0.8.25-0.8.26.php" hash="e0ebe20e9ab0dff68647ab00fb9f0c66"/><file name="mysql4-upgrade-0.8.26-0.8.27.php" hash="85d3080545d141ca6ff8bcbdff1b514b"/><file name="mysql4-upgrade-0.8.27-0.8.28.php" hash="48f40823eefa729259add6b2f81f366d"/><file name="mysql4-upgrade-0.8.3-0.8.4.php" hash="1a5ec8dccd994ad3761e68e1cd588372"/><file name="mysql4-upgrade-0.8.4-0.8.5.php" hash="240256a88580d96a50ca0fd833a8c7f8"/><file name="mysql4-upgrade-0.8.5-0.8.6.php" hash="f7275b1915e80d7296113a3dfe725cf8"/><file name="mysql4-upgrade-0.8.6-0.8.7.php" hash="13df9d23e39c7570e1cdb18abf1e996e"/><file name="mysql4-upgrade-0.8.7-0.8.8.php" hash="8b20971ed0197db54611f227413ff239"/><file name="mysql4-upgrade-0.8.8-0.8.9.php" hash="fb213c2773f2f2cdd2cfd83bd4077ea8"/><file name="mysql4-upgrade-0.8.9-0.8.10.php" hash="120fe10e615eb5943b42a2ca06a3336f"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="667bf08e56b52f9eb049d177abe5b1a0"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="078c49764308e40b133039ae907044fb"/><file name="upgrade-1.6.0.2-1.6.0.3.php" hash="3e1d4dae0a1de35ac70551d438e50a58"/><file name="upgrade-1.6.0.3-1.6.0.4.php" hash="c276a2413a5af5bf2ef31270d20f6afe"/><file name="upgrade-1.6.0.5-1.6.0.6.php" hash="86d0277801776f2fde3fd53a4b85914e"/><file name="upgrade-1.6.0.6-1.6.0.7.php" hash="1fcc06dca2bc742c1c8cb4730d19f951"/><file name="upgrade-1.6.0.7-1.6.0.8.php" hash="6449ac67e5dfdeb275fa4b4ff485dd63"/></dir></dir></dir><dir name="Cron"><file name="Exception.php" hash="698e1ae4ab5e8ea37299653add15f225"/><dir name="Helper"><file name="Data.php" hash="9eef300858d951cebc7297535a2768e8"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Schedule"><file name="Collection.php" hash="af9a782cc7af9b9770bd820e092dd9b6"/></dir><file name="Schedule.php" hash="5214e7c13aa7365707a7040e97533ba1"/></dir><file name="Observer.php" hash="b27044c1c30795906f10c5c8bab1dee7"/><dir name="Resource"><dir name="Schedule"><file name="Collection.php" hash="031a856a7e5f60d8d7ddb9195707a19c"/></dir><file name="Schedule.php" hash="5466ff7798ca4a0ee0382a58c41ae6b3"/></dir><file name="Schedule.php" hash="04144e52081a8cf3cab6d3f78c812d77"/></dir><dir name="etc"><file name="config.xml" hash="46d440f1e6ee5ed818a6efd37c0d7d2e"/><file name="system.xml" hash="bad12ffe57452fef65dec8c8b2b638c2"/></dir><dir name="sql"><dir name="cron_setup"><file name="install-1.6.0.0.php" hash="272c23770f78ad5b1eb97345a5b9ce02"/><file name="mysql4-install-0.7.0.php" hash="1f39f29137ac0af690ea2b818bf32bdb"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="acad1a38a1dd136af831fcefc5c72710"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="46911e5c2891db7f51148ca7750b16ee"/></dir></dir></dir><dir name="CurrencySymbol"><dir name="Block"><dir name="Adminhtml"><dir name="System"><file name="Currencysymbol.php" hash="e76a96fbb861ca950eb63de00bdf4a9f"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="9a8845e99868d20d9c8306511ecf98ba"/></dir><dir name="Model"><file name="Observer.php" hash="b95780e39abdb087465e8e003b08969d"/><dir name="System"><file name="Currencysymbol.php" hash="e5ee2b0c099200097bca1cb992ea2a1e"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="System"><file name="CurrencysymbolController.php" hash="63fde0a3389998317587a527401f6070"/></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="10a63d13f96c5fe11c378a589e538635"/><file name="config.xml" hash="80547d477b4c01ed8a9d1e12a9eaa20f"/></dir></dir><dir name="Customer"><dir name="Block"><dir name="Account"><file name="Changeforgotten.php" hash="2165e8674836d3f6077b483dde55a524"/><dir name="Dashboard"><file name="Address.php" hash="bb468d82e2fc11e7e04f257bc726e146"/><file name="Block.php" hash="07ed7e21b9e1eeb23da49076b69a594b"/><file name="Hello.php" hash="94b9169f9ae6cdd0a55e4eb0681404de"/><file name="Info.php" hash="b1680c05fed7931f2db96b524f70f1cf"/><file name="Newsletter.php" hash="1307cd50a5fd5adbdc16e76492915152"/><file name="Sidebar.php" hash="3f294c394525e981a3b054626ea8e368"/></dir><file name="Dashboard.php" hash="188cda8616e1d4d9023ac4b8bed5d66b"/><file name="Forgotpassword.php" hash="90e79520d13aed885e774160a42fe01b"/><file name="Navigation.php" hash="026681e321fbbad6ad29d815b0faac9f"/><file name="Resetpassword.php" hash="ed7f01bb5386900ee50245ab36016ec1"/></dir><file name="Account.php" hash="396fc3f7fb48be6a3538b04135d875e4"/><dir name="Address"><file name="Book.php" hash="0b171d4bd5ad21144aeec5b81bba61f0"/><file name="Edit.php" hash="c4b0c1d640b1b0b935ab96529e7b21f8"/><dir name="Renderer"><file name="Default.php" hash="125728a42ac70607881ed13d88b00983"/><file name="Interface.php" hash="24e732400bee61ac8323c7ef40ea2207"/></dir></dir><dir name="Form"><file name="Edit.php" hash="feb426e2d7fb6e4bcec1bc5988266523"/><file name="Login.php" hash="2d66cd34739d5a311d05fa91e512f00c"/><file name="Register.php" hash="d851618f8c530b3b02e81f41b6a1d13a"/></dir><file name="Newsletter.php" hash="1d134f5c6cdbc5dfd7c0df6ee075cc43"/><dir name="Widget"><file name="Abstract.php" hash="37a2d217bd8542ec907776eb292e12dd"/><file name="Dob.php" hash="3960da7db95ac69ac800ac021137cd2e"/><file name="Gender.php" hash="5780729cb26d78623fa19fff5ab5cfc0"/><file name="Name.php" hash="c678280a641859850a38743bf5f0702a"/><file name="Taxvat.php" hash="4d45092a70e3fb94ec24c346b8aeda22"/></dir></dir><file name="Exception.php" hash="dca1ff1b1dfbf189979aa500f9d48158"/><dir name="Helper"><file name="Address.php" hash="d8ab02f0954687c02146356ad289289e"/><file name="Data.php" hash="e6d0f585162c55285ce4407a56df52cc"/></dir><dir name="Model"><dir name="Address"><file name="Abstract.php" hash="c8b4c4c792d297cec5f245c0efdda8b4"/><dir name="Api"><file name="V2.php" hash="0df7a6b269c9c66de3f507b12539cc4e"/></dir><file name="Api.php" hash="7cf53451b28c4aef47b4a3bf1797a900"/><file name="Config.php" hash="d3b2fda5b82d2fdbcdc7266771cba0c1"/></dir><file name="Address.php" hash="04170cb7363debfca14d81510fdbe38b"/><dir name="Api"><file name="Resource.php" hash="cec904fdca1932b6f939931ec75512dc"/></dir><dir name="Api2"><dir name="Customer"><dir name="Address"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="47f7475beed2029f8249dc85dbacc003"/></dir><dir name="Customer"><file name="V1.php" hash="c750635dfeb399f3191648769749b401"/></dir></dir><file name="Rest.php" hash="d7b1d8b2a87435993f9ad1720902533f"/><file name="Validator.php" hash="723dcf84a7c3041e4a65b61028af8238"/></dir><file name="Address.php" hash="982ca3e8815193ab93bcc74a2cd4a4ff"/><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="14dcb7f30dc8307cb4ef66ee010ab461"/></dir><dir name="Customer"><file name="V1.php" hash="2fc46be21aa72477180284a4270607f2"/></dir></dir><file name="Rest.php" hash="76b670c80fcb2e755279f08cd97db60c"/></dir><file name="Customer.php" hash="bb2083444d7dcf5ae9851c533979ae54"/></dir><dir name="Attribute"><dir name="Backend"><dir name="Data"><file name="Boolean.php" hash="a83b90a0cadbbaf0a6a2a0ca97f42ef7"/></dir></dir><dir name="Data"><file name="Abstract.php" hash="d6fa9133e31c8836c7cc86e678bf6e17"/><file name="Boolean.php" hash="3c81d8a93839757c93e2dbf672de7fcc"/><file name="Date.php" hash="bee8757ec8cd9e7d6cf6227e2412b4ff"/><file name="File.php" hash="d3c09e55bb7f81c617654e96f9fd36f1"/><file name="Hidden.php" hash="9167d59b97ba65de906c9bcea4cbbb12"/><file name="Image.php" hash="1ad8011e210c69f928179646e930aade"/><file name="Multiline.php" hash="0b9a4dd5ebd3dac1e6d9cfbd26dcd314"/><file name="Multiselect.php" hash="f3dd8e4a58e04ba6fed979909fe29eae"/><file name="Postcode.php" hash="0ebcfeb413f684090ad77986637b46a9"/><file name="Select.php" hash="78ea1fea99b14dadf1d16c10bd7a2bbc"/><file name="Text.php" hash="774686a2285b7b1d8d3349d479851ed4"/><file name="Textarea.php" hash="e6bfed03f06a397ac0e9a9398f61e03e"/></dir><file name="Data.php" hash="27aaf4bd021dc85a3481ce1795c3fe90"/></dir><file name="Attribute.php" hash="294c4b2feae71fe4ccefb29272bf07db"/><dir name="Config"><file name="Share.php" hash="7c686c3441868fcc6b13428e74b630c0"/></dir><dir name="Convert"><dir name="Adapter"><file name="Customer.php" hash="a48b5b89d865057a61899c4db960c9ca"/></dir><dir name="Parser"><file name="Customer.php" hash="f454ce0b343c8b6db2344c1ecdc07c56"/></dir></dir><dir name="Customer"><dir name="Api"><file name="V2.php" hash="1b0032263dfe9dc3b454df91f5d5b59c"/></dir><file name="Api.php" hash="1879b627678e095d9201ace5f6c87d20"/><dir name="Attribute"><dir name="Backend"><file name="Billing.php" hash="c790e51101d66c9f15f83063674d2ab0"/><file name="Password.php" hash="ca5cf2dd24a73edc132006c033d605a2"/><file name="Shipping.php" hash="e3115593c9775f827fcec44763c129b1"/><file name="Store.php" hash="d0a6243dacb6ab1dee73fa06a9d34ed4"/><file name="Website.php" hash="efadf3585544e5a303131aed29902150"/></dir><dir name="Source"><file name="Group.php" hash="0c33bb6eaeaa3cbd4d708c5a327dc6a8"/><file name="Store.php" hash="245b6db46348a41721c61caff65ca042"/><file name="Website.php" hash="4f71e88c526adde06c0a70dcd21d2f52"/></dir></dir></dir><file name="Customer.php" hash="9c05aa3e6820feae8280fbfa0a940c9b"/><dir name="Entity"><dir name="Address"><dir name="Attribute"><dir name="Backend"><file name="Region.php" hash="e7bb13fac9313d6244a0773cebee9b90"/><file name="Street.php" hash="3adb0e7e180f12d16e08871b46d9c54d"/></dir><file name="Collection.php" hash="df7147b4c1eabf10f0ae9098e7eca5dc"/><dir name="Source"><file name="Country.php" hash="6d08cda63ae6b8cf55e59a2624012f5d"/><file name="Region.php" hash="a2b67e84fa17a62b5d908d2b3a2c1778"/></dir></dir><file name="Collection.php" hash="949fc8a7a58aae1c8b9c59a7f2a8a182"/></dir><file name="Address.php" hash="0492fcbb856189d00d66a2dd6ac7fd72"/><dir name="Attribute"><file name="Collection.php" hash="2b7624138b5c4c0d743673be04edf040"/></dir><file name="Attribute.php" hash="2cb29633e3866836fca7d65f4fb362ee"/><dir name="Customer"><file name="Collection.php" hash="7ca7ee4b50bd1f60b166ff2d1888f255"/></dir><file name="Customer.php" hash="20127bf34252803f5f48b366a22e9f4e"/><dir name="Form"><dir name="Attribute"><file name="Collection.php" hash="6c7584593f3f6df841e62d0753f16c79"/></dir><file name="Attribute.php" hash="3dcc90e92a126e425625268a4af3708d"/></dir><dir name="Group"><file name="Collection.php" hash="c75ecbc772ba3e31982682709c5e9b75"/></dir><file name="Group.php" hash="65b79330116831293f4a76a2d2d63875"/><file name="Setup.php" hash="ce1184ded6a42aa443a5c8c43c219390"/><dir name="Wishlist"><file name="Collection.php" hash="e3db89598d9088101f81c276f491655c"/></dir></dir><file name="Flowpassword.php" hash="6dab53fb9b686fbe5ff7b6c412eb5442"/><file name="Form.php" hash="578b7921ecb8a6e47d9fecfe8496dc72"/><dir name="Group"><dir name="Api"><file name="V2.php" hash="777166c9c186dcb5895e85b5dfd5db0c"/></dir><file name="Api.php" hash="94648fc954036011fb28b18732d196dd"/></dir><file name="Group.php" hash="e2014a157641a22edb354a3aa99ad7b6"/><file name="Observer.php" hash="3f0671a7e623f6b5bb32235175ab0dd1"/><dir name="Resource"><dir name="Address"><dir name="Attribute"><dir name="Backend"><file name="Region.php" hash="017256abf7f99dae72fd05961d812e19"/><file name="Street.php" hash="27145361c9523b9c3e0f1ed68c19b6c5"/></dir><file name="Collection.php" hash="f7ec8cff4bb7c41ae82e5ee7918bed20"/><dir name="Source"><file name="Country.php" hash="229c22d6d4c7f94072f8b101cc070561"/><file name="Region.php" hash="91645ec1e733b718e6a54b5c61015057"/></dir></dir><file name="Collection.php" hash="dfcd8f8884a9847982800bf0948ec20b"/></dir><file name="Address.php" hash="763b668489edfb8432a70b38cb828fda"/><dir name="Attribute"><file name="Collection.php" hash="d66a1141fbc70acf24d179600b9c61c0"/></dir><file name="Attribute.php" hash="0e188694a33b3acc70ec71ec5871a75b"/><dir name="Customer"><file name="Collection.php" hash="a29158a6b9b5b35d8e6267d73cb02ce4"/></dir><file name="Customer.php" hash="478d8f4f866c20b86bcc1363744a9813"/><dir name="Flowpassword"><file name="Collection.php" hash="78d4510d187abac4a3891054b6ae7034"/></dir><file name="Flowpassword.php" hash="bd2057a2d3ac57f00d4d582674a7ad1f"/><dir name="Form"><dir name="Attribute"><file name="Collection.php" hash="5572cab9a0e1e3f5417cc08ce5a50e29"/></dir><file name="Attribute.php" hash="cb0b5cf6af662e3b4e71af72d1885244"/></dir><dir name="Group"><file name="Collection.php" hash="3b47d4c152cabece1b1328bee3b70143"/></dir><file name="Group.php" hash="2a109f070024d1eac7de055ce89e1129"/><file name="Setup.php" hash="e92903e8249c89f34fe325bb3afcf981"/><dir name="Wishlist"><file name="Collection.php" hash="568caa7c996736d83fa1b3fd16780a47"/></dir></dir><file name="Session.php" hash="f6c22413f7f9f6cbcf83314e0e7157ff"/></dir><dir name="controllers"><file name="AccountController.php" hash="11ba2ddc87439e592be2459e64bee992"/><file name="AddressController.php" hash="0f0692985f38e2fbc4b895910e80c71f"/><file name="ReviewController.php" hash="09c4a76238c9aa2f6a53679ca1b1ca70"/></dir><dir name="data"><dir name="customer_setup"><file name="data-upgrade-1.6.2.0.2-1.6.2.0.3.php" hash="5e2bc7393945d4c1f916c3beb51c9a0d"/><file name="data-upgrade-1.6.2.0.4-1.6.2.0.5.php" hash="238f41bdbe43950cfec729c37bbb48d0"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="6fcdaaa7fde1907e2385bb0343c1bed8"/><file name="api.xml" hash="12578cdd5eb4f083910ecf88408b4439"/><file name="api2.xml" hash="ead1ed09da00aa66b9aa877be5d1e084"/><file name="config.xml" hash="ea2233e4eb4bb61ef86173320d64e251"/><file name="system.xml" hash="51c792ceb49448faece9b1a325b70204"/><file name="wsdl.xml" hash="b31ebf1de4a58469781b383f455991f5"/><file name="wsi.xml" hash="4c81aee30c525677be5c38e078b98408"/></dir><dir name="sql"><dir name="customer_setup"><file name="install-1.6.0.0.php" hash="d2954a98182da41fde0adbfcbaffe195"/><file name="mysql4-data-upgrade-1.4.0.0.11-1.4.0.0.12.php" hash="c33fd77867bcf4f13c8c06ff3d7b7024"/><file name="mysql4-data-upgrade-1.4.0.0.13-1.4.0.0.14.php" hash="343415802d404a260070b7e098105e38"/><file name="mysql4-data-upgrade-1.4.0.0.7-1.4.0.0.8.php" hash="cbaf3411b9c93fb4c11368359d55199c"/><file name="mysql4-data-upgrade-1.4.0.0.8-1.4.0.0.9.php" hash="1916487374f08a6438c203688a682f11"/><file name="mysql4-install-0.7.0.php" hash="fd9b5478bfda45834810ca7d12a4743d"/><file name="mysql4-install-0.8.0.php" hash="804d79a4d498b6ff315d9234d30bcd20"/><file name="mysql4-install-1.4.0.0.0.php" hash="f69dca07689d5184dc47a55170559b62"/><file name="mysql4-upgrade-0.6.1-0.7.0.php" hash="94edeef8a4d892b308d1435a627dc26b"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="b078ab70e40aeb9d8e8e5b2500ce9394"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="708aebee9d6b0a0c8ba683f48f2e25cb"/><file name="mysql4-upgrade-0.8.0-0.8.1.php" hash="ccd49f55274344a42aa0c28352095230"/><file name="mysql4-upgrade-0.8.10-0.8.11.php" hash="2643dcdc4d3af31f3fc64ccbe229005c"/><file name="mysql4-upgrade-0.8.11-0.8.12.php" hash="722c8c7019240145f83503ef3c25672d"/><file name="mysql4-upgrade-0.8.12-1.4.0.0.0.php" hash="e9a5d864230004ee0588cf8c03aeb58f"/><file name="mysql4-upgrade-0.8.4-0.8.5.php" hash="0a08f7e04adb43ce644b12e2324b7e7c"/><file name="mysql4-upgrade-0.8.5-0.8.6.php" hash="5bace0b9dcf142bc7f81e74255b2b411"/><file name="mysql4-upgrade-0.8.6-0.8.7.php" hash="9ef24d3661aee9fbd69ce708641ef4f2"/><file name="mysql4-upgrade-0.8.7-0.8.8.php" hash="58d79dcc8e9772b9996c5cf98c6983ef"/><file name="mysql4-upgrade-0.8.8-0.8.9.php" hash="08c336853502414b87303d506f103772"/><file name="mysql4-upgrade-0.8.9-0.8.10.php" hash="0149e3e53723b5121571cebbadc8c18c"/><file name="mysql4-upgrade-1.4.0.0.0-1.4.0.0.1.php" hash="5bbffccca8a6178ecbabf3bf289056b1"/><file name="mysql4-upgrade-1.4.0.0.1-1.4.0.0.2.php" hash="b635e478f1c9f61e5099ac0c2bb0dc1c"/><file name="mysql4-upgrade-1.4.0.0.10-1.4.0.0.11.php" hash="255fa61555ef1ae9ee49642aade7d9c5"/><file name="mysql4-upgrade-1.4.0.0.12-1.4.0.0.13.php" hash="dcdb4497854588ca6e12e4907404f27c"/><file name="mysql4-upgrade-1.4.0.0.2-1.4.0.0.3.php" hash="0a93f1e367aaf0a62cae6c07734ea129"/><file name="mysql4-upgrade-1.4.0.0.3-1.4.0.0.4.php" hash="e0ecad3fc1c05d112dab117c67059c78"/><file name="mysql4-upgrade-1.4.0.0.5-1.4.0.0.6.php" hash="87b10e436f90b5fa56ad6cc0cf6904e5"/><file name="mysql4-upgrade-1.4.0.0.6-1.4.0.0.7.php" hash="21ba959239cbd436d78834464f258b22"/><file name="mysql4-upgrade-1.4.0.0.7-1.4.0.0.8.php" hash="f99f0568dbbfbb8284fa40107c6d367e"/><file name="mysql4-upgrade-1.4.0.0.8-1.4.0.0.9.php" hash="176f6b5b7f52fa3d619e90626da1ce22"/><file name="mysql4-upgrade-1.4.0.0.9-1.4.0.0.10.php" hash="214d180f85958672b4588404e66aa13d"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="b6ebde8d13e2b4fc83d5d7a76909f6ee"/><file name="mysql4-upgrade-1.6.0.0-1.6.1.0.php" hash="5ec13b9bbd4aff56e7f912ee163f204c"/><file name="upgrade-1.6.1.0-1.6.2.0.php" hash="79483a191e9a06f439e1c301bccb750a"/><file name="upgrade-1.6.2.0-1.6.2.0.1.php" hash="df76a788c48d9e06a521271fcf333b4a"/><file name="upgrade-1.6.2.0.1-1.6.2.0.2.php" hash="05ef590163c85515a2dc5ba6f59e2763"/><file name="upgrade-1.6.2.0.3-1.6.2.0.4.php" hash="7793e15f6b89ae1ef39a111346bfa04f"/><file name="upgrade-1.6.2.0.4-1.6.2.0.5.php" hash="44d497f99af3a16c7ba7590f7a5dce82"/><file name="upgrade-1.6.2.0.5-1.6.2.0.6.php" hash="1f52f23f1e014e40deb9cb0300850e33"/><file name="upgrade-1.6.2.0.6-1.6.2.0.7.php" hash="8864bd4550bbcf0eb8bdafedc12bbc3b"/></dir></dir></dir><dir name="Dataflow"><dir name="Helper"><file name="Data.php" hash="ba0c7d7b0ebbe85cdc161daf58ed818d"/></dir><dir name="Model"><dir name="Batch"><file name="Abstract.php" hash="3543ba2800ba5ee38bac37ec00d275c3"/><file name="Export.php" hash="d701e10f4c6f3f5cbc31744be7811dee"/><file name="Import.php" hash="9173bb07584a68e50e5c88102089576b"/><file name="Io.php" hash="a2b3504d88757ab81f133752006b7559"/></dir><file name="Batch.php" hash="b070f1a35519016888ed33eb43a388b0"/><dir name="Convert"><dir name="Action"><file name="Abstract.php" hash="16cb4e158c1e976cc8a23f1b1969e625"/><file name="Interface.php" hash="9685043ccbdec28bc203f6f89ff58538"/></dir><file name="Action.php" hash="a0eac5d684aad0a52ebd9999d93e40eb"/><dir name="Adapter"><file name="Abstract.php" hash="4b599e7300ae3025c45734f3eae53103"/><dir name="Db"><file name="Table.php" hash="bc8f691b432a592c58af98ab6fe497fe"/></dir><dir name="Http"><file name="Curl.php" hash="e7d49e8826112b54d7379d7a8ae1cbe1"/></dir><file name="Http.php" hash="0210afa8d3272999b9fc98e05f8daf94"/><file name="Interface.php" hash="73f2c70039dde1a6228db866735f4f19"/><file name="Io.php" hash="41615998377cfa8c8be8566587395094"/><file name="Soap.php" hash="ba8a2bc6d1db1fadfbf62ea44dbca02b"/><file name="Std.php" hash="2ed56f9f09c3cd2b2a43572e8f6cb067"/><dir name="Zend"><file name="Cache.php" hash="5098b27d145d6e3e600354668382191c"/><file name="Db.php" hash="f79aaa83f74d4e7127ef7828da023325"/></dir></dir><dir name="Container"><file name="Abstract.php" hash="a5eeee61ff65d3e562041feeee60f130"/><file name="Collection.php" hash="524623eb4ee22f41733a719f610256e0"/><file name="Generic.php" hash="0aa8ef9254ac3992f3a2c44760d94161"/><file name="Interface.php" hash="0cdcdb866b5e763a00d17983fd7da4f5"/></dir><file name="Exception.php" hash="67c3a53179e7611fd85b6b9cddb6e74e"/><dir name="Iterator"><dir name="File"><file name="Csv.php" hash="abe3394015e92bd440377fdd26112e54"/></dir><file name="Http.php" hash="cd9fe0bd3f40a0d6a138f5b7bfaffe09"/><file name="Interface.php" hash="6c862c3886f10444133f674de27ed12d"/></dir><file name="Iterator.php" hash="3e0435baffe704561b94bd3fa094cfb2"/><dir name="Mapper"><file name="Abstract.php" hash="f1c55848d32916f3aa0d7fbe29745b34"/><file name="Column.php" hash="314699dda7a12c97db22b44d7c76797c"/><file name="Interface.php" hash="14bf4780e2b0714b915817bca16baef6"/></dir><dir name="Parser"><file name="Abstract.php" hash="184653a172556aaf30ae011bdf8a709b"/><file name="Csv.php" hash="956ff398a9e77aa5721529a65cb7d3ac"/><file name="Interface.php" hash="8c034c04958dec654b4ff6e89e995548"/><file name="Serialize.php" hash="5bc986b7f5d75fb631fb4e9886791abc"/><dir name="Xml"><file name="Excel.php" hash="80afe217220f9e1bd3155d3b45b8eeff"/></dir></dir><dir name="Profile"><file name="Abstract.php" hash="8625b39536ed7f8ac6c6f1ff362b3be2"/><file name="Collection.php" hash="ac7f050bf0893a95dd5d1763c0a73286"/><file name="Interface.php" hash="0d3b1dfd027ff14c33d2e0a1aaf29441"/></dir><file name="Profile.php" hash="364dc7b99afed83feb7582e8fc823d8a"/><dir name="Validator"><file name="Abstract.php" hash="cbfe5a09ccdb86444a5d4cdcdcb8051c"/><file name="Column.php" hash="1abea0910f88e265bc829b4c331c9a46"/><file name="Dryrun.php" hash="b5c492bba60680cc846e9d24955b4c49"/><file name="Interface.php" hash="03f27c47cf2e481da96423e1d36e5087"/></dir></dir><file name="Convert.php" hash="b64fc1b5d816f58afec56ee51dcc8351"/><file name="Import.php" hash="4573a6ef4d0b95b803b2c01f9663462e"/><dir name="Mysql4"><dir name="Batch"><file name="Abstract.php" hash="e70e77cc8668a29189dec4ad9e56fa8f"/><file name="Collection.php" hash="ed46e43597beb2ec95002a840c47a641"/><file name="Export.php" hash="6ef9e98156da48ad51cbfd0f3776d681"/><file name="Import.php" hash="74a0db2a88fc41dc80355cf7ea25af56"/></dir><file name="Batch.php" hash="89929eba1effb5486ff4ec2b319f50c4"/><file name="Catalogold.php" hash="b66882011d992c6b8b2517e109d77dea"/><dir name="Import"><file name="Collection.php" hash="70bb331246ec17243bd6c300636750cd"/></dir><file name="Import.php" hash="a71013c6cb85f1ef29892ce889f18550"/><dir name="Profile"><file name="Collection.php" hash="56876c9976738f0e21a9b8ff6aa3c27d"/><dir name="History"><file name="Collection.php" hash="163b2a826d2b8fd96398960aa92f3e81"/></dir><file name="History.php" hash="09b2b4f263b324b523d832d75071dee6"/></dir><file name="Profile.php" hash="9aa4936500033a62679b84f1da27c041"/><file name="Session.php" hash="6c30e12d60f78221dae3835dad0037e9"/></dir><dir name="Profile"><file name="History.php" hash="728b39b8a1520b7fd91952a695c379ad"/></dir><file name="Profile.php" hash="54b918565d7afc27e5da9f35a4c099dd"/><dir name="Resource"><dir name="Batch"><file name="Abstract.php" hash="612fafd01d83759b1e10a39ed50e0652"/><file name="Collection.php" hash="02ff02d640c78e9a06490215daebebcc"/><file name="Export.php" hash="0d22450c096f16387ba00e0ba8f0a24f"/><file name="Import.php" hash="7a1e167147c4a5641c5a3e52b4b1aaa9"/></dir><file name="Batch.php" hash="9403c9b07303b56e3f442e37af936651"/><dir name="Import"><file name="Collection.php" hash="bde0dfbd42b4ff401e481bd268b5f859"/></dir><file name="Import.php" hash="58574de8620131253f1ed739e549056a"/><dir name="Profile"><file name="Collection.php" hash="98cc3701db9032fd8826d1fc75d94193"/><dir name="History"><file name="Collection.php" hash="67a836cfe4cafe0b2b3d7ef0a5ff3051"/></dir><file name="History.php" hash="ce6905b9dbae69351f57c0ed524bbc53"/></dir><file name="Profile.php" hash="f3cff7f8e8155732fae8d4f421ab0103"/><file name="Session.php" hash="453263f698ac876ce8557ac2be7c1496"/></dir><dir name="Session"><dir name="Adapter"><file name="Http.php" hash="edc6b564cf9d56e0f12de5ea447dbdfd"/></dir><dir name="Parser"><file name="Csv.php" hash="61840f83e0d43b67d53930fec1385d1e"/></dir></dir><file name="Session.php" hash="b94c5b87b2d4f3ea7cf6c84b46cb4cff"/></dir><dir name="data"><dir name="dataflow_setup"><file name="data-install-1.6.0.0.php" hash="42c052e1062f756b947dd923e50c3776"/></dir></dir><dir name="etc"><file name="config.xml" hash="035ee01a0e0220f14801318b58f8be49"/></dir><dir name="sql"><dir name="dataflow_setup"><file name="install-1.6.0.0.php" hash="094c2853f4d7308dea858833be058181"/><file name="mysql4-install-0.7.0.php" hash="b6f614644e7b7ccca8c5b321fd25fc7d"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="30d4761c1860cd8d42ce0a43727e5943"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="9ba941a259ee395cfd90ad3dbdd71c2e"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="7eda27a8f788e7ee1fb6e380e02cf5fa"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="5535484fec01d7822ac93e7096290ca3"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="303ca60636f0518f09239cd259a5a338"/></dir></dir></dir><dir name="Directory"><dir name="Block"><dir name="Adminhtml"><dir name="Frontend"><dir name="Currency"><file name="Base.php" hash="e0e170e03ca4d96a7dce5d56336a80a2"/></dir><dir name="Region"><file name="Updater.php" hash="f47e815e8c798610b80dc4b6fcf186d5"/></dir></dir></dir><file name="Currency.php" hash="bd713bb957c6a23c548a7697de84efb4"/><file name="Data.php" hash="c257ee7d3517ca2ee9d8bb2e6252afc7"/></dir><file name="Exception.php" hash="f9639b73bf22148a74976f4daf6f6af4"/><dir name="Helper"><file name="Data.php" hash="4bf35e82fae3db2aba4958bd836d5d09"/><file name="Url.php" hash="f17914084283bc6d7aa4dd5d237ba68b"/></dir><dir name="Model"><dir name="Country"><dir name="Api"><file name="V2.php" hash="312e1300362594a3ba7a522305c5d227"/></dir><file name="Api.php" hash="5133388d9e059b505cae9c4b04f2e354"/><file name="Format.php" hash="ad52c9c51abe5f00f6226c5e43bb0fac"/></dir><file name="Country.php" hash="8c2fafcf43814d42244965f9c09ac52a"/><dir name="Currency"><file name="Filter.php" hash="0b8340daa8a90406059f1acb59933825"/><dir name="Import"><file name="Abstract.php" hash="8d6378f932e87726aadefcd28215eb42"/><file name="Webservicex.php" hash="d53038bf530401b6f1c8201210a5ac72"/></dir></dir><file name="Currency.php" hash="75aeb64410600e854a30f6cfc7645c42"/><dir name="Mysql4"><dir name="Country"><file name="Collection.php" hash="c1fc63c262198bbf18c3edb570c0d52f"/><dir name="Format"><file name="Collection.php" hash="16a17d89b911114555cb775cedf550dd"/></dir><file name="Format.php" hash="e8fcf24b451e4a2454c11df0e7dc1810"/></dir><file name="Country.php" hash="b2bea61b669d97241aa89fc42e17e524"/><dir name="Currency"><file name="Collection.php" hash="41261c0556f08a31e14a233764003e37"/></dir><file name="Currency.php" hash="f415ccb29551abf0dba5d7e43c12863d"/><dir name="Region"><file name="Collection.php" hash="3be48e3b6caf317f289af5f386c5284f"/></dir><file name="Region.php" hash="c2db0ac95c10e1d366b7837318c936f1"/></dir><file name="Observer.php" hash="3e5b58a1b7a1b6bd7ddf93656fc8162e"/><dir name="Region"><dir name="Api"><file name="V2.php" hash="84695e6d5d487bd0aea05eaac060dae2"/></dir><file name="Api.php" hash="2fbbd4774edec8785db449c066b43b71"/></dir><file name="Region.php" hash="63f29958a6533648182ea867d18cc07c"/><dir name="Resource"><dir name="Country"><file name="Collection.php" hash="514bbcc131797481e5ae5021be0e6ff4"/><dir name="Format"><file name="Collection.php" hash="211b05e29af2f95189b64b5ab5bebb5d"/></dir><file name="Format.php" hash="624d5e614fad28b2d23d470a49a780ed"/></dir><file name="Country.php" hash="90802624de442f1813e202179761f294"/><dir name="Currency"><file name="Collection.php" hash="6143827bee6390e2106da6b6020b2bd2"/></dir><file name="Currency.php" hash="2b05897729d8c123b0906a00ad3c5d37"/><dir name="Region"><file name="Collection.php" hash="b84e4245bf5f29be351840d6bf8debfa"/></dir><file name="Region.php" hash="de5686e13ec0ae244ea2981da6f2eed9"/></dir></dir><dir name="controllers"><file name="CurrencyController.php" hash="0a8ad93782d6a0ed66fa1e42912feaca"/></dir><dir name="data"><dir name="directory_setup"><file name="data-install-1.6.0.0.php" hash="c33868f8e7e39dc584672a9d0514d293"/><file name="data-upgrade-1.6.0.0-1.6.0.1.php" hash="98b30b282695ba73fd344cdbfeacbb5c"/><file name="data-upgrade-1.6.0.2-1.6.0.3.php" hash="902c18199d5c5cc78222277ff5cf7626"/></dir></dir><dir name="etc"><file name="api.xml" hash="2f6edb16617f5aba97008638ebbfec36"/><file name="config.xml" hash="56c352b6bdebc026b4ab3ef846cec026"/><file name="system.xml" hash="e73b60ed25b6c6b787a135793388ff28"/><file name="wsdl.xml" hash="cc488b81c0eae648a0ee360d6e2d9960"/><file name="wsi.xml" hash="66de37cc17e24c0c66f74c52e2df616e"/></dir><dir name="sql"><dir name="directory_setup"><file name="install-1.6.0.0.php" hash="47aa97efec924128eab805e5636fe099"/><file name="mysql4-install-0.7.0.php" hash="b5c454d8d309525d71a8634781b931ce"/><file name="mysql4-install-0.8.0.php" hash="bb3cf4e3d432dfb8f94bebfcab61cbc8"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="cfd6af022870643f32aeff8b6cb27c99"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="5542d4352bd04edc8803c729c371db22"/><file name="mysql4-upgrade-0.8.0-0.8.1.php" hash="e1c4fbe48c99a7e87fc27b693683e1f7"/><file name="mysql4-upgrade-0.8.1-0.8.2.php" hash="f81458a4b6f6734b4acc1ec01db4220e"/><file name="mysql4-upgrade-0.8.10-0.8.11.php" hash="e640398483b9695c739c88507ac65690"/><file name="mysql4-upgrade-0.8.2-0.8.3.php" hash="eeeb163cefe0c778c2077c63cc1fcb73"/><file name="mysql4-upgrade-0.8.3-0.8.4.php" hash="6ff564fa86ffdec80ab88379f5da5134"/><file name="mysql4-upgrade-0.8.4-0.8.5.php" hash="bf3b8d577a19cc941eb14c7f261c8ceb"/><file name="mysql4-upgrade-0.8.5-0.8.6.php" hash="a29e42eaad895ed4a8c0f3ecda42c19e"/><file name="mysql4-upgrade-0.8.6-0.8.7.php" hash="b1b88c828f88211e1260dcee4108b173"/><file name="mysql4-upgrade-0.8.7-0.8.8.php" hash="62f5447cdc62ac6799375bf5db44a7ae"/><file name="mysql4-upgrade-0.8.8-0.8.9.php" hash="29ae507ef1d1aee81047dbbfed152895"/><file name="mysql4-upgrade-0.8.9-0.8.10.php" hash="5d8904e905b2ac9d962cc7bcbc937fd7"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="cc3a1d63c33612a38b1824b37c40f606"/><file name="mysql4-upgrade-1.6.0.1-1.6.0.2.php" hash="c9f1054bd8fe3afb6837f5a8546d313c"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="8245890ddee5b8f396ffa6274794d205"/></dir></dir></dir><dir name="Downloadable"><dir name="Block"><dir name="Adminhtml"><dir name="Catalog"><dir name="Product"><dir name="Composite"><dir name="Fieldset"><file name="Downloadable.php" hash="77e55e5dc308822d8bc555fcbefdbe58"/></dir></dir><dir name="Edit"><dir name="Tab"><dir name="Downloadable"><file name="Links.php" hash="3a08edc2a67d0f56b08a44c3cce6253a"/><file name="Samples.php" hash="eed530baa2d844aedad97aeed7239c78"/></dir><file name="Downloadable.php" hash="5ef9d5819dd23845c4f22f607010b699"/></dir></dir></dir></dir><dir name="Sales"><dir name="Items"><dir name="Column"><dir name="Downloadable"><file name="Name.php" hash="51f6e2c18ac7f9c318fcb17ee035d277"/></dir></dir></dir></dir></dir><dir name="Catalog"><dir name="Product"><file name="Links.php" hash="8f19b5ed669a01eacd225b6a9907779c"/><file name="Samples.php" hash="75c9baa52ae8bc43f9ec8103f2e25c1c"/><dir name="View"><file name="Type.php" hash="485e6be75ad728e4aa26ea594026e69d"/></dir></dir></dir><dir name="Checkout"><dir name="Cart"><dir name="Item"><file name="Renderer.php" hash="b2e42724a1d0f44b52058741c43afc23"/></dir></dir><file name="Success.php" hash="d56ec2dd50af50f75a135e83b466c3c3"/></dir><dir name="Customer"><dir name="Products"><file name="List.php" hash="9127274b3057d49572318b694e1e0292"/></dir></dir><dir name="Sales"><dir name="Order"><dir name="Email"><dir name="Items"><file name="Downloadable.php" hash="df331c7b0aa306c6f7ea15045b719953"/><dir name="Order"><file name="Downloadable.php" hash="6d2ebaaaef11110583be03527941a5a4"/></dir></dir></dir><dir name="Item"><dir name="Renderer"><file name="Downloadable.php" hash="8f303cbe0ace26b706fcb00be8cc498e"/></dir></dir></dir></dir></dir><dir name="Helper"><dir name="Catalog"><dir name="Product"><file name="Configuration.php" hash="af46f2f32acab466b264892a3ee3e29b"/></dir></dir><file name="Data.php" hash="7aa704d7f269529a1ed08854b763f322"/><file name="Download.php" hash="34b7eb406082d674cf335c93cddd64f1"/><file name="File.php" hash="5a3d283e711d328246742b39a378c14d"/></dir><dir name="Model"><dir name="CatalogIndex"><dir name="Data"><file name="Downloadable.php" hash="97bc07e2d0627436ea42bed84819a22e"/></dir></dir><dir name="Link"><dir name="Api"><file name="Uploader.php" hash="ebf17810830ae7f0f7ffdfa2943eb8b1"/><file name="V2.php" hash="630b806eb820e97db4e24579b582478a"/><file name="Validator.php" hash="a33511ef63ce2b72f4cbe0f52b385a34"/></dir><file name="Api.php" hash="40977ea134fe7d7a7e7f1df52812a05d"/><dir name="Purchased"><file name="Item.php" hash="967313e0d6d239338ae63da5e09c1614"/></dir><file name="Purchased.php" hash="3c28742e85b74a5b32fe4063133e5097"/></dir><file name="Link.php" hash="c8421acc93494d6bc7ae215724b5ae6b"/><dir name="Mysql4"><dir name="Indexer"><file name="Price.php" hash="029700e06b7b63b8572c4fbcc150eda1"/></dir><dir name="Link"><file name="Collection.php" hash="87d378e29012ffc6fc6e0a4a6688f609"/><dir name="Purchased"><file name="Collection.php" hash="bf291246aafb628ac154df41cfb26f2c"/><dir name="Item"><file name="Collection.php" hash="926cdd08de3a6f7ffcde1a82a1acd6bb"/></dir><file name="Item.php" hash="788b0541f99fe64ac3522326375d14c6"/></dir><file name="Purchased.php" hash="172425d690bbf19f12c3a5226f570ba8"/></dir><file name="Link.php" hash="27c16f53f3a9035b32ebcdb0b027705f"/><dir name="Sample"><file name="Collection.php" hash="3e191b153dfeac19f3ee50a203f07c0d"/></dir><file name="Sample.php" hash="4c8f836ce98f98f1461b020949e9609c"/></dir><file name="Observer.php" hash="ed975e0eab2425f9f0c102c30ca804f7"/><dir name="Product"><file name="Price.php" hash="6c2d6ecb0d3fc48e0f479c980dcdd2c0"/><file name="Type.php" hash="67d40e317b34be3a3caabfffd1752028"/></dir><dir name="Resource"><dir name="Indexer"><file name="Price.php" hash="526544bd79468c6641b785d6cb07da31"/></dir><dir name="Link"><file name="Collection.php" hash="729b6d9003d8b3f942db75b6c4befce2"/><dir name="Purchased"><file name="Collection.php" hash="d7adc05ec8432f95c6c7e3a3be40b697"/><dir name="Item"><file name="Collection.php" hash="8f42e22586347f5f895572cf88b95070"/></dir><file name="Item.php" hash="abcf293327e3bb0bfa709d18fadb7c8f"/></dir><file name="Purchased.php" hash="2b59397a1aff196004542a14230fca00"/></dir><file name="Link.php" hash="9be179d68f5448d38aca23fa27e16289"/><dir name="Sample"><file name="Collection.php" hash="3b40c3da6ed3aed34822d6eff4e4a2a0"/></dir><file name="Sample.php" hash="0f32fb1d00539f03e5221e200ed85522"/></dir><dir name="Sales"><dir name="Order"><dir name="Pdf"><dir name="Items"><file name="Abstract.php" hash="432e2c16960010365705e365ca35fc6f"/><file name="Creditmemo.php" hash="7cf76116841c5c8b409cc51503637bc5"/><file name="Invoice.php" hash="2ab75c691e6f8efa21c1c34f23147fb3"/></dir></dir></dir></dir><file name="Sample.php" hash="5eadf7eae3a5ec395bc2c25816d59b9a"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Contentdisposition.php" hash="7d63d4e0768044cd86480eca8edd5ebb"/><file name="Orderitemstatus.php" hash="dc8ed67d3a3bf8d905389c71a46a5a72"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Downloadable"><file name="FileController.php" hash="7f6088cc8e8cd74444e50e71d73829d9"/><dir name="Product"><file name="EditController.php" hash="2880fec7d953a2fd52ea2a126b5a4246"/></dir></dir></dir><file name="CustomerController.php" hash="a34bf5346a11e528f854363492b9441a"/><file name="DownloadController.php" hash="62d043ad37366ab6b772b727eb7f81bb"/><file name="FileController.php" hash="e8b1eb0949070406deea301a08bb87d9"/><dir name="Product"><file name="EditController.php" hash="17f8841c6c0d40b268326e489d46d594"/></dir></dir><dir name="data"><dir name="downloadable_setup"><file name="data-install-1.6.0.0.php" hash="310d216938c8e74cd319d063c90e7350"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="58497f09521db8a24ea83b86a7e31ad0"/><file name="api.xml" hash="c85905a7aeb88d75ab4e7bd18d121527"/><file name="config.xml" hash="44161669aa492757ff48e918d895d74b"/><file name="system.xml" hash="4defd2adf9adb88a3ed18c9e44f63d08"/><file name="wsdl.xml" hash="b3935ff3bf7e2ca40ddd304b4c78577f"/><file name="wsi.xml" hash="7eef36b29c2abf88596e63b6a042626d"/></dir><dir name="sql"><dir name="downloadable_setup"><file name="install-1.6.0.0.php" hash="4793286c9962b042b95f24b5bbd37c07"/><file name="mysql4-install-0.1.0.php" hash="1ab98631cd79b8e009b931b39a192a50"/><file name="mysql4-install-1.4.0.0.php" hash="a363ea42b837c06fbc7510caa62d8fd6"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="2f199f03c7223cf0c1b09f2075004fb5"/><file name="mysql4-upgrade-0.1.1-0.1.2.php" hash="6decba51bdbf5ed44f9a3ff1b3df385c"/><file name="mysql4-upgrade-0.1.10-0.1.11.php" hash="3c9fe53c07b3cf47ce1dcfae8316da12"/><file name="mysql4-upgrade-0.1.11-0.1.12.php" hash="a6ed75d590b8a0ca9102f8d51f2df969"/><file name="mysql4-upgrade-0.1.12-0.1.13.php" hash="19241f621502e8587b28b98f98c2cc6a"/><file name="mysql4-upgrade-0.1.13-0.1.14.php" hash="7947fb9ba92e7d49b5e6b2c624047a94"/><file name="mysql4-upgrade-0.1.14-0.1.15.php" hash="da6a046bf037037722fce7ab52120ce6"/><file name="mysql4-upgrade-0.1.15-0.1.16.php" hash="176c8f58e6d47958108f4f56d4b8fd64"/><file name="mysql4-upgrade-0.1.2-0.1.3.php" hash="01bb73724dff697f98fe0545ea9011d3"/><file name="mysql4-upgrade-0.1.3-0.1.4.php" hash="a6288325fa8db2cffa1f730413806caa"/><file name="mysql4-upgrade-0.1.4-0.1.5.php" hash="531ce0cd65051a1c1cc552a93cc14ae2"/><file name="mysql4-upgrade-0.1.5-0.1.6.php" hash="ef10502c5995e745e50054a6ad89dd58"/><file name="mysql4-upgrade-0.1.6-0.1.7.php" hash="3503c89a97630439c4bb07dd3021ff72"/><file name="mysql4-upgrade-0.1.7-0.1.8.php" hash="2c7d8cc7e2f9c5c0198c2373e861a852"/><file name="mysql4-upgrade-0.1.8-0.1.9.php" hash="21b6bd6346bc3bb610945592968e571a"/><file name="mysql4-upgrade-0.1.9-0.1.10.php" hash="0700661f8dbe9ce7233697d62b78317f"/><file name="mysql4-upgrade-1.3.9-1.4.0.0.php" hash="7b3c1cdf1d9c388e6d720cca660447ef"/><file name="mysql4-upgrade-1.4.0.0-1.4.0.1.php" hash="7825b58ac73156af8951af3995dfef02"/><file name="mysql4-upgrade-1.4.0.1-1.4.0.2.php" hash="9a8736e8e0e09d2cbe2495ac4d0146ff"/><file name="mysql4-upgrade-1.4.0.2-1.4.0.3.php" hash="a2414a36022f0f45523c5609e97dacac"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="34f2b29b89a18d245905516250292318"/><file name="mysql4-upgrade-1.6.0.0.1-1.6.0.0.2.php" hash="0704160c20e0de302e7847a9edff75ad"/><file name="upgrade-1.6.0.0-1.6.0.0.1.php" hash="79c0faefeea54f1aaeb562c05489c584"/><file name="upgrade-1.6.0.0.1-1.6.0.0.2.php" hash="540f11c1af76a687b147dd5b6e91f986"/><file name="upgrade-1.6.0.0.2-1.6.0.0.3.php" hash="3887541a51fb2560ffce3c3132f5ce76"/></dir></dir></dir><dir name="Eav"><dir name="Block"><dir name="Adminhtml"><dir name="Attribute"><dir name="Edit"><file name="Js.php" hash="76a9d04618fece6a5c7a56b0ff823b07"/><dir name="Main"><file name="Abstract.php" hash="d65003f51d01d39fe1509a30073e922a"/></dir><dir name="Options"><file name="Abstract.php" hash="460fd5dfc5de88544c7975ec2e34e27f"/></dir></dir><dir name="Grid"><file name="Abstract.php" hash="e6c5b5368108405afff2f0b9217b0ddf"/></dir></dir></dir></dir><file name="Exception.php" hash="0641af2a86f332e1386f6693f008086a"/><dir name="Helper"><file name="Data.php" hash="c5432d5aab78f9905451c8aa8440d75b"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Source"><dir name="Inputtype"><file name="Validator.php" hash="a79c5cb074642fb8625491737e814266"/></dir><file name="Inputtype.php" hash="e43dd8ec548fe9f6b0229185e0b6cb0a"/></dir></dir></dir></dir><dir name="Attribute"><dir name="Data"><file name="Abstract.php" hash="4ce6313b746673f0d5b763cc2dccc384"/><file name="Boolean.php" hash="c26954c81573f845ae60285ab9b1b2f9"/><file name="Date.php" hash="1e012219855b5fa9f9ae5b58a1516a3f"/><file name="Datetime.php" hash="bf368d67a5d1f914dd279bbe6f73fa0a"/><file name="File.php" hash="5a70c867df2671b8d1c5f70f32383b5a"/><file name="Hidden.php" hash="1f5cdac56967998115ca00161c84eeb2"/><file name="Image.php" hash="97c7de0fa47b44f24d3142d90179dcfd"/><file name="Multiline.php" hash="0e5e8d7a805bab2ff6e17884ee51b377"/><file name="Multiselect.php" hash="9623ffb47b3e1c7ce71fb4bbaf4e27f3"/><file name="Select.php" hash="3431a4994c8b3374dc3c187ae26de33b"/><file name="Text.php" hash="732cd418b9c743b1bf71f1d781f0a2bf"/><file name="Textarea.php" hash="9538125fb3ba6bf6f4ae054300348f6e"/></dir><file name="Data.php" hash="00c615fcd2d67e2744b43d745ea3849d"/></dir><file name="Attribute.php" hash="adfc8ad9a0686925eb0861c360331537"/><file name="Config.php" hash="2486546f2a2e4191e6c3e3cfbfa3d1c2"/><dir name="Convert"><dir name="Adapter"><file name="Entity.php" hash="8af9af9cc6e7c6f6e4e555911c97f3e1"/><file name="Grid.php" hash="11516ac20dc12f8e677f195108e364fa"/></dir><dir name="Parser"><file name="Abstract.php" hash="0604c7ed305525ae9d81848f2b9a1b98"/></dir></dir><dir name="Entity"><file name="Abstract.php" hash="984170b2a8518fb1c5e8261dd41b4007"/><dir name="Attribute"><file name="Abstract.php" hash="297ed4642ce31d785cbd31ff8d6c3a11"/><dir name="Backend"><file name="Abstract.php" hash="70be013552d8c7c33e3051561f45b321"/><file name="Array.php" hash="25a71b55a3184e652f64d2756e46b24c"/><file name="Datetime.php" hash="44c3fa95099cb5317790305ca58310d5"/><file name="Default.php" hash="410e85e64c32085f147eda397bbdc692"/><file name="Increment.php" hash="69578bd86ad7cc788ab47c31f2c4d2fb"/><file name="Interface.php" hash="41097f25651a3faefe054b3a7e183c11"/><file name="Serialized.php" hash="f6dbd98ea2643317ce32eb8b89a04d0a"/><file name="Store.php" hash="01edda1a78495d0854978b05d23198dc"/><dir name="Time"><file name="Created.php" hash="8a340cc06767f6e337dae1d979ccb689"/><file name="Updated.php" hash="b1b554a1c03ba16781a79e587629c40c"/></dir></dir><file name="Exception.php" hash="abc42003ac62cf10f1c47a8aaa589ea5"/><dir name="Frontend"><file name="Abstract.php" hash="fdfdffe846bcacfd22d448174d2cc645"/><file name="Datetime.php" hash="5cd584d2fdf76e195c76bca5e994327e"/><file name="Default.php" hash="31bb8bc9f506d826364db720ef0b3cb4"/><file name="Interface.php" hash="f0fb5394dc3398c7cff693648c62c1b9"/></dir><file name="Group.php" hash="44982468cc5be1181c5b64ab7faa856c"/><file name="Interface.php" hash="9c6d1484d583d9970cb77b3d3e6fb6ee"/><file name="Option.php" hash="c4f375b24d469faa8233dd905daf1455"/><file name="Set.php" hash="060fee5055d424b6e3efff99389f845b"/><dir name="Source"><file name="Abstract.php" hash="db30a8e44b3cb508baba0f36872754ba"/><file name="Boolean.php" hash="e4582a62d9159a4b7648cb4eb3e2caa7"/><file name="Config.php" hash="3b0ee8512dc7b6dd5ac8dad9781db55b"/><file name="Interface.php" hash="629ae9ef9d6d0232d647a536b0792331"/><file name="Store.php" hash="220f8f06642156cd24cbd424ec5110b9"/><file name="Table.php" hash="eace4965b17821cc095761d1e37a6fee"/></dir></dir><file name="Attribute.php" hash="d43198173e548682b76fa1278b0c2d41"/><dir name="Collection"><file name="Abstract.php" hash="7f60905ac1b3094dba0d800095a3b682"/></dir><file name="Collection.php" hash="85f80d08170392a2868e5eb5b3186218"/><dir name="Increment"><file name="Abstract.php" hash="2888867d0a8ed162656cf340c0618dd7"/><file name="Alphanum.php" hash="860dcaee5fb974ae5b3fde7ded0495b9"/><file name="Interface.php" hash="579718f1c5f00d86de5f2cd6c86f9900"/><file name="Numeric.php" hash="ac9694098c66d6915599f7ac2156017b"/></dir><file name="Interface.php" hash="d16dc535ac2260f768d9c6f2969efdf0"/><file name="Setup.php" hash="bc9575a290ac0bbce793b7743cb3fe17"/><file name="Store.php" hash="0b577726b3c683de678502177834f122"/><file name="Type.php" hash="754b8eca697af02342e9af40ee5657dc"/></dir><file name="Entity.php" hash="136a4a48687f5f555cc85635b4006e45"/><dir name="Form"><file name="Element.php" hash="337a2fcf7c3b197dd70598dae6d8c340"/><file name="Fieldset.php" hash="b815b9e4cba0661813b9402f2893adac"/><file name="Type.php" hash="ebd19351b9b4e8db07aec320187fe0f7"/></dir><file name="Form.php" hash="215128f79657713d4df1f7ab56f771cb"/><dir name="Mysql4"><file name="Config.php" hash="2c70bf309223ff222b794e0268ce6d94"/><dir name="Entity"><dir name="Attribute"><file name="Collection.php" hash="ea0d24b4433898f853be14f37f3b0ce3"/><dir name="Group"><file name="Collection.php" hash="b1f663cd69ca7195299b0d4226ff9f15"/></dir><file name="Group.php" hash="918798aea17c6f1797d6bbe5c7ece33c"/><dir name="Option"><file name="Collection.php" hash="53051a0f2e0c0a97c20c949f1a6d8145"/></dir><file name="Option.php" hash="229c97a12c8fbbc0a9b1c5486693fe9d"/><dir name="Set"><file name="Collection.php" hash="0fa368469dba3ad44790f892c3c894ea"/></dir><file name="Set.php" hash="d64928af617ebf66e443c310361fc09b"/></dir><file name="Attribute.php" hash="6922c29a0ccf56634f2a1ea71022bb6f"/><file name="Store.php" hash="91dac98040dd3993dd92eae8b4e403ce"/><dir name="Type"><file name="Collection.php" hash="a0194188e88174876b6178c3d1ace5a7"/></dir><file name="Type.php" hash="f0d84ba44ef5bdd32c024fed77604944"/></dir><dir name="Form"><dir name="Element"><file name="Collection.php" hash="73bf00347f1430684129d0796c2e79c2"/></dir><file name="Element.php" hash="45408edaab72d3012b0e3e7b9fc5e777"/><dir name="Fieldset"><file name="Collection.php" hash="aa3bc9586d55fcf814867b94e98c0fcc"/></dir><file name="Fieldset.php" hash="2ec1a2743fa322af7a4632f1ca61e3fd"/><dir name="Type"><file name="Collection.php" hash="85a3ccaf53b1fbff9fdca14d242ad072"/></dir><file name="Type.php" hash="0bd8c782878c8223226bd9d8bfbac4d7"/></dir></dir><dir name="Resource"><dir name="Attribute"><file name="Collection.php" hash="f80f5f6af8fedad29bd1a8bd09dc976b"/></dir><file name="Attribute.php" hash="971e713c98d7c5ea3a11776ac80d38ef"/><file name="Config.php" hash="266c18abd1cbfcb3f3c1edeb6cefb7aa"/><dir name="Entity"><dir name="Attribute"><file name="Collection.php" hash="9bbbefb45886601bce6ed592a8d8f73a"/><dir name="Group"><file name="Collection.php" hash="78ba0874bd6d3bd571e84e01908e26ea"/></dir><file name="Group.php" hash="ea6b9ac59278d659ef9b0d050219178c"/><dir name="Option"><file name="Collection.php" hash="68c28362189535c99c931f619fadad01"/></dir><file name="Option.php" hash="9d2b310b493a6e2dfc32ce9b06162977"/><dir name="Set"><file name="Collection.php" hash="dd07d151084deddf0b56d9bdb7006a21"/></dir><file name="Set.php" hash="eeb9c645eaf56f73741d0a60386c6b2f"/></dir><file name="Attribute.php" hash="15654e6c59dd1d58ed9dd767200e3a43"/><file name="Store.php" hash="beba844583f5400064864e040233da48"/><dir name="Type"><file name="Collection.php" hash="44235e7ca4dd3f77ea89d4ab8be0c82f"/></dir><file name="Type.php" hash="83a1a2b191f33f9a9e0dff4c5e93961d"/></dir><dir name="Form"><dir name="Attribute"><file name="Collection.php" hash="cb1f62b0b621db7d0eb27c3820849c39"/></dir><file name="Attribute.php" hash="b89d6dcb7d57698b0b2e393df3abdca8"/><dir name="Element"><file name="Collection.php" hash="736be5236a8285b6fa302c99da11c8c4"/></dir><file name="Element.php" hash="4688cecadc8df666e912d14a3258aedd"/><dir name="Fieldset"><file name="Collection.php" hash="25357b8097755c3973474340097b2ce3"/></dir><file name="Fieldset.php" hash="08d7abb063b6077f1d588645b79b289a"/><dir name="Type"><file name="Collection.php" hash="ae392ea4c078f226cf1da81e240f2279"/></dir><file name="Type.php" hash="eeb3c28b0cef7362c6c693c0f1ffcc52"/></dir><dir name="Helper"><file name="Mysql4.php" hash="247ebd95acc61ee421b3cb6362af18eb"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="098b2f79a17d6ed050fd839cc6fd874b"/></dir><dir name="sql"><dir name="eav_setup"><file name="install-1.6.0.0.php" hash="e9f0004ee2482d0f1c51814aced44076"/><file name="mysql4-install-0.7.0.php" hash="2a19f8adf9e922105a282606a65a3cea"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="9af1cc7c6346405c07794a5d120e5a94"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="681c496e8b957651551104ac7dcf5edf"/><file name="mysql4-upgrade-0.7.10-0.7.11.php" hash="4880b73f4ab3b2ffdef24e051b8ea659"/><file name="mysql4-upgrade-0.7.11-0.7.12.php" hash="9b51e19f1558aa72e479e9d0bf46377c"/><file name="mysql4-upgrade-0.7.12-0.7.13.php" hash="d4baa1ae2581f30ac4c2609ef72b570d"/><file name="mysql4-upgrade-0.7.13-0.7.14.php" hash="4687ead62851c02ef3e3165bd69ed7ba"/><file name="mysql4-upgrade-0.7.14-0.7.15.php" hash="8c620c539d07f9cf7035a9c338650bfc"/><file name="mysql4-upgrade-0.7.15-0.7.16.php" hash="650033cdf0d1a3b822827c281e7f2a1b"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="154e0892c90540a1fe4d3a0a36aefac6"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="f58877d02c4887a4d35a6933dc181af8"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="abadd9f1c7c93f105c3b00f847dc93e9"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="e62460b26496c2faea8894e0cb1a739d"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="323cf145a26acd0c55c5757cfd3f4315"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="d9a688efeac2bec4db158e1507e7f38f"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="245da9e0c322b928bf58037735f257e9"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="47a6d832bdc3e6313b0af9f23039b468"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="99c24f3347ca435b6401548c2c0dc14d"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="05bb8b40f5ed919459bf25accd6249a6"/></dir></dir></dir><dir name="GiftMessage"><dir name="Block"><dir name="Adminhtml"><dir name="Product"><dir name="Helper"><dir name="Form"><file name="Config.php" hash="e71f2e04e4435423481ea322c3577517"/></dir></dir></dir><dir name="Sales"><dir name="Order"><dir name="Create"><file name="Form.php" hash="0f4ff9f0f21d09351422ab01b835b22d"/><file name="Giftoptions.php" hash="3232e441e4d680a8ecee0decb81345c9"/><file name="Items.php" hash="d78fbf3af42cfd6967becbe11128a699"/></dir><dir name="View"><file name="Form.php" hash="9b50cb2c6e9d4f9b965f4d80b6ea873c"/><file name="Giftoptions.php" hash="3d08ae4a4ab9f780298f359c6c96607b"/><file name="Items.php" hash="b5f8879e95e1ec40478c779d93110e45"/></dir></dir></dir></dir><dir name="Message"><file name="Form.php" hash="6522fa4219475cf2c82015127e67fee7"/><file name="Helper.php" hash="633539513329d9ad7533b0296328f2a9"/><file name="Inline.php" hash="7c337341633b17fa8d8dc01ad4584526"/></dir></dir><dir name="Helper"><file name="Data.php" hash="1c4851cf5ca35fcb72683eeb417a97ee"/><file name="Message.php" hash="01c630fee1c4a874bb27f19a20e98af8"/><file name="Url.php" hash="34a66962d449bc84a752425779ef4bcc"/></dir><dir name="Model"><dir name="Api"><file name="V2.php" hash="425812d0c57c35dfb0dd43119e020240"/></dir><file name="Api.php" hash="0dc93eb3747f94245124ad822c2eaef0"/><dir name="Entity"><dir name="Attribute"><dir name="Backend"><dir name="Boolean"><file name="Config.php" hash="36b274f046bfb9b319176607356b6143"/></dir></dir><dir name="Source"><dir name="Boolean"><file name="Config.php" hash="ec2e57b5e26893ed338a99fefbe45e5d"/></dir></dir></dir></dir><file name="Message.php" hash="c9a2fba0ec16be13039fda703613c02a"/><dir name="Mysql4"><dir name="Message"><file name="Collection.php" hash="fe8df3daf9574cc194c03bf124e55660"/></dir><file name="Message.php" hash="410f8523e4dcad503a0ee3af64b8ff94"/><file name="Setup.php" hash="527fc0ae71838098211a6520cd832aae"/></dir><file name="Observer.php" hash="aa755924aa16458d401690baeb938855"/><dir name="Resource"><dir name="Message"><file name="Collection.php" hash="80b5e1f03de5dc20c607c4dbdc761c69"/></dir><file name="Message.php" hash="79c5c51500ab7effbaf9a99686d415b6"/><file name="Setup.php" hash="a6005fad51da9c18a83eb84e99db8d01"/></dir></dir><dir name="controllers"><file name="IndexController.php" hash="88d7e7c90ac99f80030c1f5be3c720f1"/></dir><dir name="etc"><file name="api.xml" hash="888db708fb445ab49d51ab4fda3fe516"/><file name="config.xml" hash="27fa6377d2e16d638d82d01b484a48c1"/><file name="system.xml" hash="46692861e2deab8d6bfb535cdb196dd5"/><file name="wsdl.xml" hash="b99aaaac0126c6e09a7ba59fa4dbcf30"/><file name="wsi.xml" hash="ab77c7cfecb0f5d6cb7b07c0b5abc1d1"/></dir><dir name="sql"><dir name="giftmessage_setup"><file name="install-1.6.0.0.php" hash="36402fec00264f941ef4642b0ae17f13"/><file name="mysql4-install-0.7.0.php" hash="2ac19d879e241289b72b8e432db7e6ac"/><file name="mysql4-upgrade-0.1.3-0.7.0.php" hash="650f9811d600721a9f1787c7fc3964c8"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="5c3fb419447e54794cecab192cd54b4c"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="778cdc4f68a01902bd9342de1371f1e1"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="e939d659a0424363d764e142e917df6e"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="7f78f03378a984b9263a1a345b3c7d56"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="2631230eca6a451392038dfb838c9a01"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="649670744ac9d43328ccb66a003b2264"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="1779217817376cb22d561d4dfe636f86"/></dir></dir></dir><dir name="GoogleAnalytics"><dir name="Block"><file name="Ga.php" hash="3148322407646e182554ccdaf8ccc45d"/></dir><dir name="Helper"><file name="Data.php" hash="04fdb8a7157cf81df10883c9a0ce7b28"/></dir><dir name="Model"><file name="Observer.php" hash="dc24aa1b34905724a135cff31a509c71"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Type.php" hash="b1a9154aec1ad478622cb67c8e019236"/></dir></dir></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="c155b0d0a90476653938711908cf57f6"/><file name="config.xml" hash="81df5ac1b5d262aee2989083a203419b"/><file name="system.xml" hash="62c1fd94ac8c60034212ff68faec8e06"/></dir><dir name="sql"><dir name="googleanalytics_setup"><file name="install-1.6.0.0.php" hash="7bba830fc3217cd1f73a2f80d2b83f8b"/></dir></dir></dir><dir name="GoogleBase"><dir name="Block"><dir name="Adminhtml"><file name="Captcha.php" hash="90ff64fec37f0b7893ee21ee719d1e69"/><dir name="Items"><file name="Item.php" hash="6d99c34d1dd6ec6c6019eb6297c0081b"/><file name="Product.php" hash="947028d77ec8f996c14aaaa9c9407275"/><dir name="Renderer"><file name="Id.php" hash="f0727df9056dace8587859a8a33b1af2"/></dir></dir><file name="Items.php" hash="d525d39493b7fffdd2fb4670e9bfbe74"/><dir name="Store"><file name="Switcher.php" hash="76478739b7d10298fa193d9a12d14420"/></dir><dir name="Types"><dir name="Edit"><file name="Attributes.php" hash="a7d12c39a051102057d4fe824d4349fa"/><file name="Form.php" hash="72ea980f9aae32dc7ad1ad60cb9e4809"/></dir><file name="Edit.php" hash="18293aa040bb66feb4498b7a64dce501"/><file name="Grid.php" hash="e30a7efef2fe7568caa966afe81bb828"/><dir name="Renderer"><file name="Country.php" hash="ea232b928ace2757bdf2b0c37e850771"/></dir></dir><file name="Types.php" hash="13966d79b28bd855808419902509f31a"/></dir></dir><dir name="Helper"><file name="Data.php" hash="e257389dbf828cce28e64b87fc695fb9"/></dir><dir name="Model"><file name="Attribute.php" hash="d2a7215c38c74ac923ce9735d89ef28f"/><file name="Config.php" hash="836458d8264fef80fc0cf315cdf2ee63"/><file name="Item.php" hash="591a9671462cbd4aeeb96ddcdb7638b1"/><dir name="Mysql4"><dir name="Attribute"><file name="Collection.php" hash="06759e3cfec97b909585d906f7d3eb9f"/></dir><file name="Attribute.php" hash="4c728a47b333e31c25bb8d4d12232ec8"/><dir name="Item"><file name="Collection.php" hash="a813f8532f8f7829cd2c32a24c0aaa1c"/></dir><file name="Item.php" hash="28d9123d1da5a9cf7ac0563339e20d89"/><dir name="Type"><file name="Collection.php" hash="e5aadc72c6d629ae56c715fda9edbc30"/></dir><file name="Type.php" hash="56449cad35d34524c04cfa68c693bb41"/></dir><file name="Observer.php" hash="6c7a7527c4dfa444af5ba8f7db00ecda"/><dir name="Resource"><dir name="Attribute"><file name="Collection.php" hash="62b3e3c64888ab3869b09694504cf2f2"/></dir><file name="Attribute.php" hash="516c058fc8aa2072c6ea8fcfaf556c83"/><dir name="Item"><file name="Collection.php" hash="40d9819d8d6a5f7bcb825e8f232eef5e"/></dir><file name="Item.php" hash="a13e5622f56537b8ba0254da3fcc0a87"/><dir name="Type"><file name="Collection.php" hash="4c7917040926f5a05b39144f3d403b36"/></dir><file name="Type.php" hash="193c5d60ca3b742a85df5a1505861d74"/></dir><dir name="Service"><file name="Feed.php" hash="5d89c71e6c0de63ccbd1a254d9a48589"/><file name="Item.php" hash="b95af2ff6782b4827ae4a65a6c0fbc17"/></dir><file name="Service.php" hash="f62afc225bb3b3da18b1140f0016a270"/><dir name="Source"><file name="Accounttype.php" hash="89d4467103c6fc59b2c6b2be4f4c40b5"/><file name="Authtype.php" hash="605022851691e4b33931d101ba4f3f65"/><file name="Country.php" hash="d3078ff19116e32944f267686e147f15"/><file name="Statuses.php" hash="828a3352d9a3a818a40924f8a7274dab"/></dir><file name="Type.php" hash="cb9750a2d515fde890a7cfc6436ea0f0"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Googlebase"><file name="ItemsController.php" hash="c696d03d62662dc9ada15c1d06300923"/><file name="SelectionController.php" hash="3b6f44c81d8c9eb195f576a4363fb920"/><file name="TypesController.php" hash="525cbe0fa8c34f894af502c1f52279f7"/></dir></dir><file name="ItemsController.php" hash="68b04d48b14fd5427138af535c908398"/><file name="SelectionController.php" hash="33ed88d739b01c81177031ba08ab4103"/><file name="TypesController.php" hash="e96c32e59a0c3fc973a4e4fb1b8dcc5d"/></dir><dir name="etc"><file name="adminhtml.xml" hash="4e11c32c225957c0c8f8798d82a7e528"/><file name="config.xml" hash="cfe395c9828af3b7849193b55b34697e"/><file name="system.xml" hash="6319e314f403f9e23097e1ac47c62c38"/></dir><dir name="sql"><dir name="googlebase_setup"><file name="install-1.6.0.0.php" hash="169ffe03e43161146b9b41655824829c"/><file name="mysql4-install-0.1.0.php" hash="e24ec4fc9fece30ccf9afe11413ec51a"/><file name="mysql4-upgrade-0.1.0-0.1.1.php" hash="06d9ca8e476fb0bbe09e767ceff499d8"/><file name="mysql4-upgrade-0.1.1-0.1.2.php" hash="3ce5464a7bf542af3d8302d5dea3c50b"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="f29793e6f271898ef8aba120e3ac7953"/></dir></dir></dir><dir name="GoogleCheckout"><dir name="Model"><file name="Payment.php" hash="6c1ae663fd5ee1d044bb36fe05fa5042"/></dir><dir name="etc"><file name="config.xml" hash="5512b847eb250040ba373fd75d4ef468"/></dir></dir><dir name="ImportExport"><dir name="Block"><dir name="Adminhtml"><dir name="Export"><dir name="Edit"><file name="Form.php" hash="8c0a90aef430dff392c4f6c7535a298e"/></dir><file name="Edit.php" hash="42ad5e1f5eb593b34ebdaf1ac0fa58fe"/><file name="Filter.php" hash="a680e942e4aef9a3b973ca2246f6bf4d"/></dir><dir name="Import"><dir name="Edit"><file name="Form.php" hash="6005dde9dc29a61b9d922f5979c53de8"/></dir><file name="Edit.php" hash="1d6b68a203c0decb63d50d8bef85b091"/><dir name="Frame"><file name="Result.php" hash="6be7e32acf5f6eb8735339bfba41f425"/></dir></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="23ccef7c01439576ad355a83bfd7fc33"/></dir><dir name="Model"><file name="Abstract.php" hash="da532014ec8c1da0ab7812048255d988"/><file name="Config.php" hash="acff4a07ddcb7287cef69349895c4dc6"/><dir name="Export"><dir name="Adapter"><file name="Abstract.php" hash="3f02a932eb9a60e09077435d1dc39253"/><file name="Csv.php" hash="3c8efb64063cb74f86c43f6279a68814"/></dir><dir name="Entity"><file name="Abstract.php" hash="ce8cfdade201dca6a72e07b5520cc534"/><file name="Customer.php" hash="22c4356e5836de3dd807429f829e41a9"/><dir name="Product"><dir name="Type"><file name="Abstract.php" hash="0279244c65f5a569ab570786397f899a"/><file name="Configurable.php" hash="d6265cc14bf5dd82713c95e159a31aea"/><file name="Grouped.php" hash="4fc08bfd8997f4c67c980ff52b274285"/><file name="Simple.php" hash="ff9841cf5cf96961045a24887a4b3d61"/></dir></dir><file name="Product.php" hash="91ad9bfe5a122a2fa02e70cee409b2a8"/></dir></dir><file name="Export.php" hash="ecb1980aea6d70e9b5cb2194f9b5f4b9"/><dir name="Import"><dir name="Adapter"><file name="Abstract.php" hash="a0281e645a59766bcaa33f48019c868d"/><file name="Csv.php" hash="1485b97f96a3c37380b9f3ffc188e387"/></dir><file name="Adapter.php" hash="a6b4e8b8a815f874c0c50355ef10f67e"/><dir name="Entity"><file name="Abstract.php" hash="66d5255e757c039ae9c475f4cd203a25"/><dir name="Customer"><file name="Address.php" hash="2305d18df63e2d1f1aaf1d30b2cca0b9"/></dir><file name="Customer.php" hash="52825f97363b31c967e5fb4d76a49bb1"/><dir name="Product"><dir name="Type"><file name="Abstract.php" hash="c2af099c3d104994c64b821638b347d7"/><file name="Configurable.php" hash="ae58a371b226560ea8396eb790686d78"/><file name="Grouped.php" hash="66f7fc872086bff458180ed71faf463d"/><file name="Simple.php" hash="7aab97fad42f1911c7594d52d12331f1"/></dir></dir><file name="Product.php" hash="362f4e0134026c123871d670208dfb99"/></dir><dir name="Proxy"><dir name="Product"><file name="Resource.php" hash="4f48a6772f3d37695949011744edce4d"/></dir><file name="Product.php" hash="546f152c0e20030a6d849bfd4faa3124"/></dir><file name="Uploader.php" hash="4f5ad1a1704839935b3bfe976bad6ebe"/></dir><file name="Import.php" hash="6b7d74d101280209f402ec3db6b75f6e"/><dir name="Mysql4"><dir name="Import"><file name="Data.php" hash="a49fb8aafb9050ae578115c21e829888"/></dir><file name="Setup.php" hash="febd1871bbe88278134887274d9e1394"/></dir><dir name="Product"><dir name="Attribute"><dir name="Backend"><file name="Urlkey.php" hash="dcdf48b3f12bfb824df47d49a1bf87fa"/></dir></dir></dir><dir name="Resource"><dir name="Helper"><file name="Mysql4.php" hash="1da742e4cc124c54413dcea86cca91a4"/></dir><dir name="Import"><file name="Data.php" hash="6684f138f53d2f21bbec021834d32178"/></dir><file name="Setup.php" hash="5486ea84fba5e15d8a95bfb1e4e37464"/></dir><dir name="Source"><dir name="Export"><file name="Entity.php" hash="b3e8f29c401d0b51149c7a335d723333"/><file name="Format.php" hash="755c5944f6cf76a73410670b5ca82e71"/></dir><dir name="Import"><file name="Behavior.php" hash="dae5c8358bdcfdba82126628fc0749a5"/><file name="Entity.php" hash="55b550eb1bc4f6d62991e3c984d3b213"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="ExportController.php" hash="ac53bc75b82d0758f5d41c6f32c93c50"/><file name="ImportController.php" hash="c262b652812db581fab1c19eab947e80"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="cffe27dd5f4445f2a075c6db18ec068d"/><file name="config.xml" hash="69acc517b147579559fa30ac2429e03b"/><file name="system.xml" hash="52728a6afa67432259b07510a4857aa8"/></dir><dir name="sql"><dir name="importexport_setup"><file name="install-1.6.0.0.php" hash="7b243fdb587af327b86df6561d6f4ff3"/><file name="mysql4-install-0.1.0.php" hash="a669634907c6393797a7fc9f57914a3d"/><file name="mysql4-upgrade-1.6.0.1-1.6.0.2.php" hash="2ef4e95819de7a6f825f217dd2c13c56"/></dir></dir></dir><dir name="Index"><dir name="Block"><dir name="Adminhtml"><file name="Notifications.php" hash="0502428a04f868b969977e8cbe9ca68c"/><dir name="Process"><dir name="Edit"><file name="Form.php" hash="7138d95f471b73cd1db8c50048dbfa59"/><dir name="Tab"><file name="Main.php" hash="70e7ed7e545def02e2fbbd3501b648a3"/></dir><file name="Tabs.php" hash="77bed81cf36df06a6e5c85c525afd393"/></dir><file name="Edit.php" hash="4e7e3d405a775d0412bd2c59bfa48348"/><dir name="Grid"><file name="Massaction.php" hash="94b8d97b7a62191439ed0533278ee246"/></dir><file name="Grid.php" hash="a6763a508c9608587c554b655ba6cd4b"/></dir><file name="Process.php" hash="6a34dee446d98c1a021b45403b807e43"/></dir></dir><file name="Exception.php" hash="2abd7e24d0e5f42ec2e94fbaf7f83713"/><dir name="Helper"><file name="Data.php" hash="ddc60c6babe27a91d185aa9eb65bf1a9"/></dir><dir name="Model"><file name="Event.php" hash="9d541285ef6dec4776e8a99a962bd8e5"/><dir name="Indexer"><file name="Abstract.php" hash="17a2d6175c88b0b6314e5f4fd9f82c9d"/></dir><file name="Indexer.php" hash="036771069dfa406996ae0146c3fc2efb"/><dir name="Lock"><dir name="Storage"><file name="Db.php" hash="8b2746a15e7e92f0e44ee2462067e434"/><file name="Interface.php" hash="8e3de0b1cc4acbf532be5244a21105bc"/></dir></dir><file name="Lock.php" hash="571bb826223b080017bebc8a36abda92"/><dir name="Mysql4"><file name="Abstract.php" hash="c91d020895e5bba42395d8d81254fa40"/><dir name="Event"><file name="Collection.php" hash="ca52f306157be7b688a47d8a148cd12c"/></dir><file name="Event.php" hash="da1a734fdfc309952d3a9c98589b3359"/><dir name="Process"><file name="Collection.php" hash="62f31af83a5fda6963e6c4a4146f8f93"/></dir><file name="Process.php" hash="a6a69af2c162b57f704955853896c050"/><file name="Setup.php" hash="730e01929ea0e3af40d5fc31413f3811"/></dir><file name="Observer.php" hash="009367d6b0bfb2426cc2dd65b7fa99fc"/><file name="Process.php" hash="43ee21cf9b5b9692b8f80a5c367423aa"/><dir name="Resource"><file name="Abstract.php" hash="c2eca7b501fb4229c95e10e1083e0167"/><dir name="Event"><file name="Collection.php" hash="aa7f8135cd9543988d78363b5264e00b"/></dir><file name="Event.php" hash="38a7f4231adc01251fa8d4de3cef2258"/><dir name="Helper"><dir name="Lock"><file name="Interface.php" hash="0683f031e83e0d0d08623d37470fa9f2"/></dir><file name="Mysql4.php" hash="e3ebcf77c8f5bc9adcebf7f7d1add03c"/></dir><dir name="Lock"><file name="Resource.php" hash="5745201b6fcf0e8c9e1f72f15111d6ad"/></dir><dir name="Process"><file name="Collection.php" hash="a97368a80473465782fc276e0c4e6e4a"/></dir><file name="Process.php" hash="4f698ade97452f2c5f7df154f8d8fec6"/><file name="Setup.php" hash="ae8759b256c26d361606070814b62bae"/></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="ProcessController.php" hash="ecbb2ba955cff030e762d9bd17ad36e6"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="73774f3cb6b8a9ecabe2a34825863cc2"/><file name="config.xml" hash="ef73494843fdd261b72c8dfcb2265e4f"/></dir><dir name="sql"><dir name="index_setup"><file name="install-1.6.0.0.php" hash="c9abd384d75bd9ae6c1eef9a72474506"/><file name="mysql4-install-1.4.0.0.php" hash="064e9f0e1403436d6802523e9dbc825f"/><file name="mysql4-upgrade-1.4.0.0-1.4.0.1.php" hash="9c5b0567a6070eb64728519ba631eccf"/><file name="mysql4-upgrade-1.4.0.1-1.4.0.2.php" hash="d50af25db7c40f134c0454db38409866"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="370153229feabc0ae76027266c9245a8"/></dir></dir></dir><dir name="Install"><dir name="Block"><file name="Abstract.php" hash="ca03b54314c4fad54b1d80a88cd966c1"/><file name="Admin.php" hash="94bbdac89b39c44885fec8abacaebced"/><file name="Begin.php" hash="4cda74306ad4bdeaa41bf0934b0b6bba"/><file name="Config.php" hash="0f50fa4ee04f7042fed47947cd2cdc5f"/><dir name="Db"><file name="Main.php" hash="13343e3f0097e095e19d2f36458e5a25"/><dir name="Type"><file name="Mysql4.php" hash="733faabc64a68d2e8bb23ea2345e7a3e"/></dir><file name="Type.php" hash="f489d8450f382ae541288464f3ef1e5f"/></dir><file name="Download.php" hash="4710dd31557c53b09fdf15abee245906"/><file name="End.php" hash="7764ff5608344fc6f705b0eed702355c"/><file name="Locale.php" hash="1096108913896157368789eb7be68b38"/><file name="State.php" hash="53f3de195337567ad91bf0f8a814991a"/></dir><dir name="Controller"><file name="Action.php" hash="84731263011f3251f47bcb9256e57277"/><dir name="Router"><file name="Install.php" hash="bbcd341a81cfda360877355aae659f22"/></dir></dir><dir name="Helper"><file name="Data.php" hash="1cef380829a4f6322a102f8ca55acb02"/></dir><dir name="Model"><file name="Config.php" hash="4d8084f912d33f4af9f23340bf8fbadb"/><dir name="Installer"><file name="Abstract.php" hash="369ea7aca230b883a76e9f595c73b608"/><file name="Config.php" hash="3dc50e732fabf3c49f50255be5476cf8"/><file name="Console.php" hash="b2b1744e38de05f532de3854611c6fba"/><file name="Data.php" hash="92e0782d07009cde613c52a6664d4edb"/><dir name="Db"><file name="Abstract.php" hash="55770957bbfe3065b56fddf03df8eb0f"/><file name="Mysql4.php" hash="0ab2d6c06304f53798ba6df2c0dbdafa"/></dir><file name="Db.php" hash="d553f0ae56ff856ab5589ace6d299028"/><file name="Env.php" hash="28341cd7cb8623e86a5430e7822dfc04"/><file name="Filesystem.php" hash="eda0f45009142a40fe81ce8b6430d8d1"/><file name="Pear.php" hash="5204107313d23dccc88a2c3334f091c8"/></dir><file name="Installer.php" hash="72d72d93692b073c644c55414b776b88"/><file name="Observer.php" hash="6afe735d213f59504a041eacb2bd26a5"/><file name="Session.php" hash="2ab7246cd2d3becbb96792f64f2193b6"/><file name="Wizard.php" hash="1a368631d270e8f2b0660de98b4624e1"/></dir><dir name="controllers"><file name="IndexController.php" hash="3ab953dafd6000928bae8bf53d3177fa"/><file name="WizardController.php" hash="7a5d5cb369c7b21372365ad4077e1fcb"/></dir><dir name="etc"><file name="config.xml" hash="17a0d6f4472fe496b4cdaaca7586b7ea"/><file name="install.xml" hash="5cacf1ea5ba56f6bd7d42d63060e3026"/></dir></dir><dir name="Log"><dir name="Helper"><file name="Data.php" hash="8a0325ed14a7bb3a523488c9217d8f56"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="System"><dir name="Config"><dir name="Source"><file name="Loglevel.php" hash="d28f40ec66bb0d887d63b895767df47b"/></dir></dir></dir></dir><file name="Aggregation.php" hash="d0db269470bec4d97162fe39307d9d95"/><file name="Cron.php" hash="aa69d2f341ae137e478333b890304695"/><file name="Customer.php" hash="f10b6b88fccf821375d0dd8e15079b57"/><file name="Log.php" hash="1d7a29c78da548b24096aaaa674b01e1"/><dir name="Mysql4"><file name="Aggregation.php" hash="befc68bb34bb3781e3e203324edecca8"/><file name="Customer.php" hash="2bc896862a996728066c8093d023879e"/><file name="Log.php" hash="16760341353457edcdac0abb6acdea60"/><dir name="Visitor"><file name="Collection.php" hash="97e0d353e927b67961baeabb002f8ca8"/><dir name="Online"><file name="Collection.php" hash="31ef43622058d9408334d075c537abc0"/></dir><file name="Online.php" hash="990d2fd509874f9960767c23fc61f92f"/></dir><file name="Visitor.php" hash="33eece4b2d319675ae96a868e219b828"/></dir><dir name="Resource"><file name="Aggregation.php" hash="065f18fb7ad3ba1f9fc2e076c45835ee"/><file name="Customer.php" hash="7ca21af42caddc5b33b58ce8294be65f"/><file name="Log.php" hash="fadc7f5e01b580ac241d164b2f849335"/><dir name="Visitor"><file name="Collection.php" hash="aac8c82a4ab29539278d5db8f90afec2"/><dir name="Online"><file name="Collection.php" hash="c3b633da19a3cd3b23758779042a16c3"/></dir><file name="Online.php" hash="e6b52cc97bd8728d118d7444c7fb9622"/></dir><file name="Visitor.php" hash="c4d6976141b8d93935f12c76b07ea100"/></dir><dir name="Visitor"><file name="Online.php" hash="770284f9f8fe6ce975faf50b82b65598"/></dir><file name="Visitor.php" hash="632017210c729948a32355bc02873e6f"/></dir><dir name="data"><dir name="log_setup"><file name="data-install-1.6.0.0.php" hash="20b4e578d26ddbcd1c85dc29cba07a56"/></dir></dir><dir name="etc"><file name="config.xml" hash="d2597554e1238297fd72f85d34de55ee"/><file name="system.xml" hash="32348c1e64534363d08d63bc6128a26c"/></dir><dir name="sql"><dir name="log_setup"><file name="install-1.6.0.0.php" hash="642fa050d97e47739a594074459321bd"/><file name="mysql4-install-0.7.0.php" hash="e7c5af70b26609ce168c5c8a34a8c4f8"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="0fa3790c5b1f31fec3cdca25576bba13"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="c1d51bbae35b2722dd39c79062e4eabb"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="cf4cf002bbeb5ec86d6087d980244b3d"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="038f6b84cee27c3df17407c0fe179541"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="b251796e95da3a9bfbbce375ddff8731"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="da65b0a560db302bd8bebe40d136914a"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="2df887c02ecbcf996b7e1f44ab610f38"/><file name="mysql4-upgrade-1.6.0.0-1.6.1.0.php" hash="afe7b3adab3a1bc4d094db7913b455f4"/><file name="mysql4-upgrade-1.6.1.0-1.6.1.1.php" hash="7fa22a9b4db88b9a6f0f8f4d04ca8d3f"/></dir></dir></dir><dir name="Media"><dir name="Helper"><file name="Data.php" hash="59877530e180bccec76efb3e20409751"/></dir><dir name="Model"><dir name="File"><file name="Image.php" hash="170170d6bc9c26cf246696592ffbb59d"/></dir><dir name="Image"><dir name="Config"><file name="Interface.php" hash="364f837bf1fbf25107ba7c8d1face188"/></dir></dir><file name="Image.php" hash="4ea65115b0a4ae3cfe3fed0aff0e3d00"/></dir><dir name="etc"><file name="config.xml" hash="c60ba7f82d63de51e0a0d4a1d1adcd29"/></dir></dir><dir name="Newsletter"><dir name="Block"><file name="Subscribe.php" hash="001313ea7cad90c6d0c583bbe271f577"/></dir><dir name="Helper"><file name="Data.php" hash="3bf5afa684ab87ccbbd8ffea14667c82"/></dir><dir name="Model"><file name="Message.php" hash="04c45f03d227d377136f7bfb8a9c2060"/><dir name="Mysql4"><dir name="Problem"><file name="Collection.php" hash="a621e853213fef78b97d092f22f4b6cf"/></dir><file name="Problem.php" hash="1af0aaf83dd64970dbec2315846767f3"/><dir name="Queue"><file name="Collection.php" hash="63bf3582e463cfead41f06170f12ccb6"/></dir><file name="Queue.php" hash="20f7e8925518a5c2be1da31a653c537e"/><dir name="Subscriber"><file name="Collection.php" hash="2435451ef565788c5db52ed04b73173a"/></dir><file name="Subscriber.php" hash="b1af8c88da9b34d6b347eb1e90b7c9b2"/><dir name="Template"><file name="Collection.php" hash="7d7b251f328c367f4b5ab980f5835df9"/></dir><file name="Template.php" hash="e31a772f50c21b6c6779a168a363ef29"/></dir><file name="Observer.php" hash="7144a9695e8337210a846fd479ef3104"/><file name="Problem.php" hash="90a8edbda50aba746bb0b8cc84c81c10"/><file name="Queue.php" hash="f0a21e1f019200e3a0d5f260fbba8898"/><dir name="Resource"><dir name="Problem"><file name="Collection.php" hash="c0c91fa3da32f63211d446d50ca616ae"/></dir><file name="Problem.php" hash="6846ee74581878cc1573b546c720ccc9"/><dir name="Queue"><file name="Collection.php" hash="143911e1b419cf4de343ba133e42cbc8"/></dir><file name="Queue.php" hash="24428d90f8bad535d69e2d6969dfc007"/><dir name="Subscriber"><file name="Collection.php" hash="d0aba05515f102eb1a3a233241aeb973"/></dir><file name="Subscriber.php" hash="eb4415875435b356b0e936b44b1994fd"/><dir name="Template"><file name="Collection.php" hash="b4f3f8b0d2fa733f07da322ee83b9465"/></dir><file name="Template.php" hash="b8a9e7f12cbcaae5d74a8281fb8701e6"/></dir><file name="Session.php" hash="0f6118a9d3bdda33759a08d538a42b1e"/><file name="Subscriber.php" hash="f39a6a7deb2530e53a7b2adb7dfd916d"/><dir name="Template"><file name="Filter.php" hash="694a7adefb521667830b6c8622fb922f"/></dir><file name="Template.php" hash="b23eeb2b2576b5ce84367d842454f465"/></dir><dir name="controllers"><file name="ManageController.php" hash="e023f87aa2fbc1681bdc71e1fafff6a5"/><file name="SubscriberController.php" hash="44f5ae94ee1bd2433716a404d4c0c588"/></dir><dir name="data"><dir name="newsletter_setup"><file name="data-upgrade-1.6.0.0-1.6.0.1.php" hash="a6839702c558b5e316e9bb2e8d34e9e9"/><file name="data-upgrade-1.6.0.1-1.6.0.2.php" hash="bc41dfa900ae72dbd1f4bc9cffb8061c"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="a138f30d7540d1ae5aea45f497409e56"/><file name="config.xml" hash="4f5b07bedd42a9c0c04a46cd61c48f94"/><file name="system.xml" hash="061b10846b83f8d61b9da7f4e49a42a9"/></dir><dir name="sql"><dir name="newsletter_setup"><file name="install-1.6.0.0.php" hash="0041ea9db1cfaf73d997d0db7c0f15f1"/><file name="mysql4-install-0.7.0.php" hash="864456494c3a7bf98bee7c063a99f968"/><file name="mysql4-install-0.8.0.php" hash="9ed900416bc1d897bb14b8dc7aa8d6c6"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="685e2c4b18639bc53a648d557b4d41b4"/><file name="mysql4-upgrade-0.8.0-0.8.1.php" hash="bd7699cb9b1d5bac800c402e15b70cb9"/><file name="mysql4-upgrade-0.8.1-0.8.2.php" hash="ce3fc3ca7c687838fa3c978c8b33a898"/><file name="mysql4-upgrade-0.8.2-0.8.3.php" hash="ff85d1f43997c605d063bd9a9c90d79d"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="a2927ab2911de988787206f2e9ba610c"/></dir></dir></dir><dir name="Oauth"><dir name="Block"><dir name="Adminhtml"><dir name="Oauth"><dir name="Admin"><dir name="Token"><file name="Grid.php" hash="d7ad6175b76249112fdeb036d335461d"/></dir><file name="Token.php" hash="8341bedc79dacc47d95c8862f7166fcb"/></dir><dir name="Authorize"><file name="Button.php" hash="4ff67d854c73f8cd745de2b104eee189"/></dir><file name="Authorize.php" hash="3292dc0ad49f627ce3ee3c756a44336d"/><dir name="AuthorizedTokens"><file name="Grid.php" hash="b487b3940c469bce7cd44f6bf5abc0df"/></dir><file name="AuthorizedTokens.php" hash="2436e4acbf44cbe2225185d21a59bb27"/><dir name="Consumer"><dir name="Edit"><file name="Form.php" hash="553b7b38651e1923a7d3ca4dc3051ee2"/></dir><file name="Edit.php" hash="3cf9750c84f9a0925f9ea76737ae46c8"/><file name="Grid.php" hash="b9b5225f9c184fce14efd2bf94c90d9a"/></dir><file name="Consumer.php" hash="a6796218280d28a9b4aa764e0fbe66cf"/></dir></dir><dir name="Authorize"><file name="Abstract.php" hash="67872cb70be20664180b8f2715c02247"/><file name="Button.php" hash="ee5ba47ae932fbd57a61e735714d9ee1"/><file name="ButtonBaseAbstract.php" hash="ce3cd8de0ca383fde819ab0222de6fcd"/></dir><file name="Authorize.php" hash="107980275153c2b9142bf9577f86647f"/><file name="AuthorizeBaseAbstract.php" hash="ca037d0d2df1d671741d7a7f7becb93d"/><dir name="Customer"><dir name="Token"><file name="List.php" hash="e1154a5aa51e493ccc59c6017a30cfc0"/></dir></dir></dir><file name="Exception.php" hash="bf992e72284e6d524c3c5cfb0fbdaf5a"/><dir name="Helper"><file name="Data.php" hash="4aa4712963e132d4398a551781c4cd6f"/></dir><dir name="Model"><dir name="Consumer"><dir name="Validator"><file name="KeyLength.php" hash="9ad199cfcb84fda61c1712b7e6f62e04"/></dir></dir><file name="Consumer.php" hash="d5cdcf8a24636f5128fe9714de8811a0"/><file name="Nonce.php" hash="af39ce6d03adf99e78fb605e40a8cd8c"/><file name="Observer.php" hash="2de5f25babecf6a3c8ddc0b450579200"/><dir name="Resource"><dir name="Consumer"><file name="Collection.php" hash="f2598ca728e610b5401482f4ae261dab"/></dir><file name="Consumer.php" hash="031f8162d9ddb8feccc6480822e74e17"/><dir name="Nonce"><file name="Collection.php" hash="84ec6dd23847cf83641c4693e59d140d"/></dir><file name="Nonce.php" hash="0e0c57b0fe53c2bc701b8c14c5be733e"/><file name="Setup.php" hash="f73d99109f2c624776ff6d437361007d"/><dir name="Token"><file name="Collection.php" hash="db4f41a6704364c432151f831689ad03"/></dir><file name="Token.php" hash="d39fd4df2cffce3eef1295aa1fb1043e"/></dir><file name="Server.php" hash="affda00d99f8e97a5f66eaa9d6d5abc8"/><file name="Token.php" hash="6888cc747cb8fd9ac26c97559775b46e"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Oauth"><dir name="Admin"><file name="TokenController.php" hash="3808752665df116a118330ee48a993ac"/></dir><file name="AuthorizeController.php" hash="9b94b9f0d5e97b2033633415f8fae483"/><file name="AuthorizedTokensController.php" hash="0bd734a21bc403a5bdf79200a57c8d19"/><file name="ConsumerController.php" hash="a7313fd6baf55eee9eb35a9207de02cf"/></dir></dir><file name="AuthorizeController.php" hash="69e315001d701bedcb9cefdf11d1b8d4"/><dir name="Customer"><file name="TokenController.php" hash="20b723ac1c7b628d9aaf0cc18d6a5539"/></dir><file name="InitiateController.php" hash="cb05ebe5c1907a17b7c3dfd260d8b31d"/><file name="TokenController.php" hash="f46650e9544b7e39898a71007eb0deb7"/></dir><dir name="etc"><file name="adminhtml.xml" hash="ccf2f251a3c6a7da0e267971268072ef"/><file name="config.xml" hash="2a569a46049a4fe51fd320a2120011f4"/><file name="system.xml" hash="cdb0c93c59b685d393941b692ef2c711"/></dir><dir name="sql"><dir name="oauth_setup"><file name="install-1.0.0.0.php" hash="706315e7e5959f345ebc31ec00d8139b"/></dir></dir></dir><dir name="Page"><dir name="Block"><dir name="Html"><file name="Breadcrumbs.php" hash="93e28b409d3a5b0f63b2689fba7e3ebe"/><file name="CookieNotice.php" hash="c06fc21ddfb2f44eeccd3bc9f341f08b"/><file name="Footer.php" hash="5f74dc2996e75f739ee64a2a9f251cbf"/><file name="Head.php" hash="cf1c00c6a6dcaf8708e93e079ddff208"/><file name="Header.php" hash="1348228a8d831522b6a92939bf4f881c"/><file name="Notices.php" hash="91d69e32e5509a58657508b0d18c3a72"/><file name="Pager.php" hash="1b44a7c48c5dd03e47abecaf0a133748"/><file name="Toplinks.php" hash="4a58e40613ac577a7487c5941c12352a"/><dir name="Topmenu"><file name="Renderer.php" hash="d9e62509655fb2d255e144a92c2e70a1"/></dir><file name="Topmenu.php" hash="e4c9a9a257738d14584ebc587b5d602d"/><file name="Welcome.php" hash="38d4c135aa6bc74a3f6c18d548bc8fb4"/><file name="Wrapper.php" hash="261d0533aeabbff798d731f0b9c050c9"/></dir><file name="Html.php" hash="54b3ed2528283d911fef2303bc6ccd55"/><dir name="Js"><file name="Cookie.php" hash="daa2c60da73eeaba950105c3c6888f90"/><file name="Translate.php" hash="f5b463fa97737a974fe828f701c4a434"/></dir><file name="Redirect.php" hash="83af10528b7bda2fe3c82391a5220382"/><file name="Switch.php" hash="51d834776dc6e0be52ded27c8552566a"/><dir name="Template"><file name="Container.php" hash="a80162d0a24bbd3109f11dfe830acbce"/><dir name="Links"><file name="Block.php" hash="1e3e7f7434f91922333cd826b5db69b7"/></dir><file name="Links.php" hash="a8c62ede972f85a933cccd1e9b581703"/></dir></dir><dir name="Helper"><file name="Data.php" hash="15f25e825046ba13e1d6b58f37d118c5"/><file name="Html.php" hash="de6bee855b74d76a22fc043566bfe867"/><file name="Layout.php" hash="d00d4f1b1af50f507c1cd1434b3e8626"/></dir><dir name="Model"><file name="Config.php" hash="dda5bf4a680db95ad29899fda27ed4fa"/><dir name="Source"><file name="Layout.php" hash="c7b53a3434ce4ef8ce6de81289195d25"/></dir></dir><dir name="etc"><file name="config.xml" hash="80e0a9431cd91a7b8b7e8ce0d15c45bd"/><file name="system.xml" hash="cf33658d2dad24b629e9a143bc06c092"/></dir></dir><dir name="PageCache"><dir name="Block"><dir name="Adminhtml"><dir name="Cache"><file name="Additional.php" hash="ffdc593bf1074652a6e54726fde56938"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="dbd9122cf85f1aec65ad0fed6f7f59a2"/></dir><dir name="Model"><dir name="Control"><file name="Interface.php" hash="e8f4d14631df668f14d1683d26be97d8"/><file name="Zend.php" hash="2b34fc0230e45e7973dabc442e533c8a"/></dir><file name="Observer.php" hash="84b6a38809a505c003c7a93f4d839f09"/><dir name="System"><dir name="Config"><dir name="Source"><file name="Controls.php" hash="3047b1a853d32f1580f50206ad80fe10"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><file name="PageCacheController.php" hash="78ae7c705ebbe98cd0934687adf645fd"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="567ab3520a74f946ccd70bdb62299275"/><file name="config.xml" hash="1480ca7d245a4aa9e6c02a08b91763a0"/><file name="system.xml" hash="d1af2a63d486ef54f9aa0e6e950fb35f"/></dir></dir><dir name="Paygate"><dir name="Block"><dir name="Authorizenet"><dir name="Form"><file name="Cc.php" hash="7da4933e03c5a66f5f923d2844154687"/></dir><dir name="Info"><file name="Cc.php" hash="bb3eda4d33ea69c96d58c3a8f99e1080"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="5b691fc135d1992204a1c11193c3735f"/></dir><dir name="Model"><dir name="Authorizenet"><file name="Cards.php" hash="22d2b8c2507d05a231721df9f93bc479"/><file name="Debug.php" hash="312171d4c03484ed2cfee33b6529a6e7"/><file name="Request.php" hash="62acd350f308b107fc73df8f816af07e"/><file name="Result.php" hash="1bbc3f8c1594a48d7dce1d37e7feb2e0"/><dir name="Source"><file name="Cctype.php" hash="878e7bb13c2f22aa287bef7aa636f118"/><file name="PaymentAction.php" hash="8597a947dd50a19b2a2d8630903bf422"/></dir></dir><file name="Authorizenet.php" hash="f77d1046c5ccfa1f286d249a7395c536"/><dir name="Mysql4"><dir name="Authorizenet"><dir name="Debug"><file name="Collection.php" hash="28786186721465a7d214616ff567a118"/></dir><file name="Debug.php" hash="0333884d2080bf6530ae9931e7a27d57"/></dir></dir><dir name="Resource"><dir name="Authorizenet"><dir name="Debug"><file name="Collection.php" hash="b878381b266f6231b16189772ba6947c"/></dir><file name="Debug.php" hash="3df93081e0c043058204412176253ed3"/></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Paygate"><dir name="Authorizenet"><file name="PaymentController.php" hash="d54d0d987ef05a77d91ff2b84415908b"/></dir></dir></dir><dir name="Authorizenet"><file name="PaymentController.php" hash="65644062e9003c97617f5df3ae959ad8"/></dir></dir><dir name="etc"><file name="config.xml" hash="3de2efa6cbc25168fcc78dff3c75d956"/><file name="system.xml" hash="43937ed87f594f3d5d44e22380d2b815"/></dir><dir name="sql"><dir name="paygate_setup"><file name="install-1.6.0.0.php" hash="3c82de7f761f2568603b3ea44f045937"/><file name="mysql4-data-upgrade-0.7.0-0.7.1.php" hash="008fda217c9664889741849a96919ea5"/><file name="mysql4-install-0.7.0.php" hash="e808b390c548a92017dfa85109f37afc"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="27de0cae75014bce4e7812430185397e"/></dir></dir></dir><dir name="Payment"><dir name="Block"><dir name="Catalog"><dir name="Product"><dir name="View"><file name="Profile.php" hash="400fb0c50e0ea4ed3c31a67901438c30"/></dir></dir></dir><dir name="Form"><file name="Banktransfer.php" hash="eb7a99ea502731e80ce00081556cea8d"/><file name="Cashondelivery.php" hash="7a3090b201a31646137cd9ac16107e6a"/><file name="Cc.php" hash="32e21ce2492807c174c21c33d85bbc55"/><file name="Ccsave.php" hash="9a73badc8aefca6f8e3764c29be36a6b"/><file name="Checkmo.php" hash="079eb1ec995b1f53311162df7f09c0e3"/><file name="Container.php" hash="78c3b538d465e5c0800018cd633f8cc4"/><file name="Purchaseorder.php" hash="0a38e5024f5445ccd7bd6727c7e856fe"/></dir><file name="Form.php" hash="797157be5f6c8afc42777bb1f0dbafb9"/><dir name="Info"><file name="Banktransfer.php" hash="e702c12a17fb8eae7ca0fa79558b875f"/><file name="Cc.php" hash="439edfb22a4b99b77e3f0d3d5ea39397"/><file name="Ccsave.php" hash="096cc6fda5538bc305f77a7c32e5447f"/><file name="Checkmo.php" hash="c379c97543229f1126d9f5d2d98d39b5"/><file name="Container.php" hash="07140ee36b9c5b88424530de2ea42c98"/><file name="Purchaseorder.php" hash="6cfa9189f9c5412d6567932d63caeb9a"/></dir><file name="Info.php" hash="3ea3a123e9845c709de46abd06851004"/></dir><file name="Exception.php" hash="32910bf105bee28695f0cc5c3efc682b"/><dir name="Helper"><file name="Data.php" hash="fac30d9d7659d7bfb27aa94d6b76ec08"/></dir><dir name="Model"><dir name="Billing"><dir name="Agreement"><file name="MethodInterface.php" hash="ebdb0ea122d412d09c92227a5b911a9a"/></dir><file name="AgreementAbstract.php" hash="7e726c5fa0066cf1ad5c734c47b2be32"/></dir><file name="Config.php" hash="d27b768958f62c3887ce3311f4f82d82"/><dir name="Info"><file name="Exception.php" hash="7d1565ac6743daf7a528c633f1cb9351"/></dir><file name="Info.php" hash="0524fc5de69c8c2f4d4c239708c2f1d5"/><dir name="Method"><file name="Abstract.php" hash="c407dd2eaccefeb158a0c6a4607abe9b"/><file name="Banktransfer.php" hash="88924c3aa18f916733b9a8d8bd391f70"/><file name="Cashondelivery.php" hash="f5cf8d57b76f676790a2e2bc8dab5688"/><file name="Cc.php" hash="32d47c4e0ca2a4351931c9dbe8aa9097"/><file name="Ccsave.php" hash="2dba3d79d5bb3d52a651b307a71c7916"/><file name="Checkmo.php" hash="b4bb1c0aec560df4430ac6ac4519d889"/><file name="Free.php" hash="5124e7dd6dfc5922e744330aee0b06da"/><file name="Purchaseorder.php" hash="f912adbe0be4ee6e253faf5235aeada6"/></dir><file name="Observer.php" hash="7eb7f453a05ec64df921edca6a943b99"/><dir name="Paygate"><file name="Request.php" hash="0b0ab286f578e34158e888a632be5eab"/><file name="Result.php" hash="ac430ec777d776e957bf5e0675e14067"/></dir><dir name="Recurring"><dir name="Profile"><file name="MethodInterface.php" hash="7a5c2be97a5a381c3985a8d8e4e5a001"/></dir><file name="Profile.php" hash="5eb791e3acb4b95f51fed05743fd3ee8"/></dir><dir name="Source"><file name="Cctype.php" hash="ba11e8b19f705ab4928683722ec3d1c6"/><file name="Invoice.php" hash="9dcd17eda0df7b4432eb878bd096a92a"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="333585cb2d2317233c01aa3fd498fe9d"/><file name="config.xml" hash="d537f055d6791dedb25aa002498469b6"/><file name="system.xml" hash="73e980e72c76624ce84007acee61b628"/></dir><dir name="sql"><dir name="payment_setup"><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="59bf49af8807915cc8a7f8938b339111"/></dir></dir></dir><dir name="Paypal"><dir name="Block"><dir name="Adminhtml"><dir name="Settlement"><dir name="Details"><file name="Form.php" hash="943fd1a6109bc15b18f19f6673ee368b"/></dir><file name="Details.php" hash="31f3c41cea1eae8ce5d3017f3ec08660"/><dir name="Report"><file name="Grid.php" hash="1bc2951104d9eb349d5c48f99eab10bf"/></dir><file name="Report.php" hash="52b24a25ae41bf008036d935b32fa9fa"/></dir><dir name="System"><dir name="Config"><file name="ApiWizard.php" hash="8864cda15d76c91bc199553bc93254bf"/><file name="BmlApiWizard.php" hash="43141332d0e47f6c899dc2a4ec84c459"/><dir name="Field"><file name="Country.php" hash="2ffab6c627e84d1d1cc7d32e7872bad8"/><file name="Hidden.php" hash="c40f5e71f2ab8eab783a47ac9fcd8235"/><file name="SolutionType.php" hash="40d3c97492923a4fadda2d04891c79bc"/></dir><dir name="Fieldset"><file name="Deprecated.php" hash="2b5fa55674bb53c7ff2ddd9510b38a28"/><file name="Expanded.php" hash="a6a591981f4849100acf12392dd115a1"/><file name="Global.php" hash="717a39f6f8403902306edf4277951864"/><file name="Group.php" hash="44b47e18e1db70b5a978df90b4a57dba"/><file name="Hint.php" hash="c5f825fab528b4a397bf307d9e3a78e6"/><file name="Location.php" hash="07de7b09618d77526c79efff936f1cf3"/><file name="PathDependent.php" hash="3ff75723b61567049b44b010d2ef7685"/><file name="Payment.php" hash="fce97c4954900e60b30733462dd6607d"/><file name="Store.php" hash="e399e625dc5588fef17ed2f241db3b3d"/></dir><dir name="Payflowlink"><file name="Advanced.php" hash="529de1707a1fdb01ad10dbe4d0683369"/><file name="Info.php" hash="657f8befdf7798c3615403c14cd06bc4"/></dir></dir></dir></dir><dir name="Bml"><file name="Banners.php" hash="f9760a8b10a2b8c1c200e32ee50ca0da"/><file name="Form.php" hash="399187c36c5355e76e57bc69f57139e7"/></dir><dir name="Express"><file name="Form.php" hash="4a7d8f578a58dca6a53b7c2087fa1d82"/><dir name="Review"><file name="Billing.php" hash="8317d350dfe6ef3fef169f359c80f623"/><file name="Details.php" hash="575c3382e55db9c3a31e6ed8554ac2ea"/><file name="Shipping.php" hash="defc7869be7f634d8228bd51e625278d"/></dir><file name="Review.php" hash="be9ecaddb367e9bfa889e93e9374a70b"/><file name="Shortcut.php" hash="0da5a135a12055bdb899d15e911093dc"/></dir><dir name="Hosted"><dir name="Pro"><file name="Form.php" hash="6b54945810ac593cf1e3f106109b8374"/><file name="Iframe.php" hash="e8742903bcb9e4825b28bd91d0a41f8c"/><file name="Info.php" hash="14e3192fb955c3f6d4b6303590d1d7b8"/></dir></dir><file name="Iframe.php" hash="7e68e970303d8018208ab794439af280"/><file name="Logo.php" hash="96c385824a71b8d7dab7a88acfdd2d56"/><dir name="Payflow"><dir name="Advanced"><file name="Form.php" hash="4b824bca36d5a89e291217282dc716e1"/><file name="Iframe.php" hash="c65848b435a4a734aaca4062fba9af3b"/><file name="Info.php" hash="27d34399d6e3b3d0a22f1d686018d951"/><file name="Review.php" hash="52fd78714986a6367133f38368519e62"/></dir><dir name="Link"><file name="Form.php" hash="f284cd98f12f4916ca7f7a1cf176a6dc"/><file name="Iframe.php" hash="ccd27737b93296e02fd2ef8b92547c27"/><file name="Info.php" hash="e1fb0c2e5e690007f4dde584c07e62b4"/><file name="Review.php" hash="76dfb1d8d1e97c602303cb065147a24b"/></dir></dir><dir name="Payment"><file name="Info.php" hash="f653755ab5d497405d60030cd38550b2"/></dir><dir name="Standard"><file name="Form.php" hash="9d7433a3ab3abd085827110fff1d323a"/><file name="Redirect.php" hash="9edb0937d0459a9d1cf30bfef9618051"/></dir></dir><dir name="Controller"><dir name="Express"><file name="Abstract.php" hash="d9f7906e11ab212b3b81fa5dc3f38dc3"/></dir></dir><file name="Exception.php" hash="42e83ea0a524e322ae29ffce6afff0a6"/><dir name="Helper"><file name="Checkout.php" hash="26db733a6331cb9b7da81bea1798c9df"/><file name="Data.php" hash="854aaa4dc2a886f395b220b4f8c98851"/><file name="Hss.php" hash="4c0e7a330baec9548dc6b051d2174db3"/></dir><dir name="Model"><dir name="Api"><file name="Abstract.php" hash="853cf7ffe16c382efad46fb290cf59c4"/><file name="Nvp.php" hash="9a1ee7b7e52006aa40b11c34645705c3"/><file name="ProcessableException.php" hash="1064f915485c3e5d7d449c0155979583"/><file name="Standard.php" hash="2a83ec089b13c9f6001151c3eadc17b9"/></dir><file name="Bml.php" hash="d62d2a41e8efbf9cb5e62fecc077e4e1"/><file name="Cart.php" hash="f3db65cf7e0e8144eea161e5d373970d"/><file name="Cert.php" hash="1b0788670cb85bfab85d7c9b734cf2f3"/><file name="Config.php" hash="15c04141ed3d32818c38a260ec19bfbd"/><file name="Direct.php" hash="a5257cfa4d5f3a8a37f1a0f41839a6c3"/><dir name="Express"><file name="Checkout.php" hash="3d670375fec8751c7fd0d5c51774b5b8"/></dir><file name="Express.php" hash="3ab66ca2f5c3eaa3d0ede96370ac8e73"/><dir name="Hostedpro"><file name="Request.php" hash="7803af9165f870a26fe55ed0e5304eca"/></dir><file name="Hostedpro.php" hash="32987cfd97eac02ec8427c33030bd7f5"/><file name="Info.php" hash="673aa7caf2e8ed45789f7a73f702512d"/><file name="Ipn.php" hash="6e41d2ec1abdcdae52de0f541f8ceb58"/><dir name="Method"><file name="Agreement.php" hash="37133725de519922babdc325eeca5c6f"/></dir><dir name="Mysql4"><file name="Cert.php" hash="3e50ad315820151832a91a7cc81e0283"/><dir name="Report"><dir name="Settlement"><dir name="Row"><file name="Collection.php" hash="220a8ae1369406bd42c0f539494338cd"/></dir><file name="Row.php" hash="69a7309359db488b67d07b1d4fe4b3c4"/></dir><file name="Settlement.php" hash="01355aa6b6fe1ccbb351801dea7c3259"/></dir><file name="Setup.php" hash="7f12d0cd81f3871df62837cd55e1412b"/></dir><file name="Observer.php" hash="a45ae1a8f93adec22fc360186222b5ab"/><dir name="Payflow"><file name="Request.php" hash="44a4b60d484872a42b57bbd80d18dcab"/></dir><file name="Payflowadvanced.php" hash="d35b51c8a16527be09a2d01c9d934fd0"/><file name="Payflowlink.php" hash="d666697ba0cbe6f9416e845959f8542e"/><file name="Payflowpro.php" hash="156c9a6f7aa845df2066ace07ef89c0f"/><dir name="Payment"><file name="Transaction.php" hash="f2f56d3a0cb7c6e9651876122f4fa4de"/></dir><file name="Pro.php" hash="c8e1d2b03360c7f72de2ea6f9d808594"/><dir name="Report"><dir name="Settlement"><file name="Row.php" hash="c42f00ca8183f901742b3a7777c4f1a3"/></dir><file name="Settlement.php" hash="a3c27c3ef2e4d6b5960a79da0beca709"/></dir><dir name="Resource"><file name="Cert.php" hash="b6dea9e13029a42bd3d49f2502a42269"/><dir name="Payment"><dir name="Transaction"><file name="Collection.php" hash="25c817d238602fab9d9327de023ddcfb"/></dir><file name="Transaction.php" hash="7525357211b299e0a8455adac883b886"/></dir><dir name="Report"><dir name="Settlement"><dir name="Row"><file name="Collection.php" hash="d5e957f951b99ac2dd4fd7b70be46008"/></dir><file name="Row.php" hash="6e3a32b786fbd22b2156643e96e66231"/></dir><file name="Settlement.php" hash="fb84007539707028d79eb6d7d5108c11"/></dir><file name="Setup.php" hash="c6cb9fd182492d7df0c0d067a39473db"/></dir><file name="Session.php" hash="25ca7d53d013f0b0f2bc69a6087a413d"/><file name="Standard.php" hash="eadbe724e3d47448b40bd48044bf886b"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Cert.php" hash="9d128f09fe873cf0b1ea41f3f30f4bfc"/><file name="Cron.php" hash="d5f128f029d1c0ba2f334f5c549dbc75"/><file name="MerchantCountry.php" hash="7c9acac0ae45a6c57ec89726d8a7f394"/></dir><dir name="Source"><file name="AuthorizationAmounts.php" hash="afaa58d50abf29bd79274d7823b84543"/><file name="BmlPosition.php" hash="71b9471ae79adbcf6165119f56b1a314"/><file name="BmlSize.php" hash="c6794e9bd317969a391f18fba0a8a9d6"/><file name="BuyerCountry.php" hash="6f82dd2cb4e1a881459cf2f851f1512d"/><file name="FetchingSchedule.php" hash="6b80b1b53e5a7c2db35bdfa6c754df6d"/><file name="Logo.php" hash="3a58193ab5ed076ce6286179fc4ec80b"/><file name="MerchantCountry.php" hash="48bb537fa3023995b841e58686ebecb2"/><dir name="PaymentActions"><file name="Express.php" hash="e8d3100896ab6279bde84b9cc50fade5"/></dir><file name="PaymentActions.php" hash="94cc301d1ee998781bd21573c56d8b92"/><file name="RequireBillingAddress.php" hash="c9b32d3278f246c75e252c85b87c8975"/><file name="UrlMethod.php" hash="b7dec1e93e7d2c08fbf019391690b25a"/><file name="YesnoShortcut.php" hash="50835466524574e594a9f572a0637e5a"/></dir></dir></dir></dir><file name="UnavailableException.php" hash="3ec714e8f5d5027c32975ec6d16f110f"/><dir name="controllers"><dir name="Adminhtml"><dir name="Paypal"><file name="ReportsController.php" hash="10dc0d85d2087037e39e9bf380d763b0"/></dir></dir><file name="BmlController.php" hash="31ecd5f6b28d6a96a8c1b64a11bc84c6"/><file name="ExpressController.php" hash="95f3525ed328039f38291df86dae3c29"/><file name="HostedproController.php" hash="d7cd59e1fbd59a9702228a792bb02341"/><file name="IpnController.php" hash="1585633541488a4ff26be867e10b8102"/><file name="PayflowController.php" hash="eef2ada71c05c92234b044e1705091a8"/><file name="PayflowadvancedController.php" hash="f4dad4ab0e1b288cf8ac0481398b5f17"/><file name="StandardController.php" hash="40d81bd725bb66e2e4dd7944aed5d355"/></dir><dir name="data"><dir name="paypal_setup"><file name="data-install-1.6.0.5.php" hash="16d27f5072c11de73cf19438769d46e1"/><file name="data-upgrade-1.6.0.2-1.6.0.3.php" hash="1ddb866b5fda22aef57d9e6f27293e41"/><file name="data-upgrade-1.6.0.4-1.6.0.5.php" hash="6f06b0f0389f11480fd31e9fb85afd96"/><file name="data-upgrade-1.6.0.5-1.6.0.6.php" hash="9daed402dc30188c642561d5da250afa"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="27a136b11e33a71fc995b5e39283a223"/><file name="config.xml" hash="8a431563a9ff24fd00fe56597778e292"/><file name="system.xml" hash="e9573182c66efd1c0db47d44594b903c"/></dir><dir name="sql"><dir name="paypal_setup"><file name="install-1.6.0.0.php" hash="cf384731360aa321869c23ea8c6262bf"/><file name="mysql4-install-0.7.0.php" hash="fb088a2d9879d6717fe7d733b24a4535"/><file name="mysql4-install-1.4.0.0.php" hash="fb71462488ba2df5a684898d4ca755e1"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="a1ede75a2e0ec1580bb74edfcb864a6d"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="f9ac7626e645092c7d978880dd94b8d8"/><file name="mysql4-upgrade-1.4.0.0-1.4.0.1.php" hash="ace3769cd4317e84e9d67829835e3235"/><file name="mysql4-upgrade-1.4.0.1-1.4.0.2.php" hash="3b3def86d87adbda44acb5918924b1b2"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="8e7b965c1b036cebe91e03edf4cccfd3"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="f16c4e0ae70d3115275a0a9e37d5a87f"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="15a2caa712db43590b6146184b65d5e2"/><file name="upgrade-1.6.0.3-1.6.0.4.php" hash="aa71a5a0229015f44cac2fc6eadb7f70"/></dir></dir></dir><dir name="PaypalUk"><dir name="Block"><dir name="Bml"><file name="Form.php" hash="1f9333136682dc8a31339858005ec546"/></dir><dir name="Express"><file name="Form.php" hash="88a4955df3a5475d0606d8031097e093"/><file name="Shortcut.php" hash="7233a1c4e03ac8410d52d99b06ccebb8"/></dir></dir><dir name="Helper"><file name="Data.php" hash="d5fbb6590a6bc2c779d083574373aa55"/></dir><dir name="Model"><dir name="Api"><dir name="Express"><file name="Nvp.php" hash="d8b04d57dc25cf8b6665f03d2a1be06c"/></dir><file name="Nvp.php" hash="38db2b5abaee5b221bab3db7ef771299"/></dir><file name="Bml.php" hash="679a28c0dbb409617820ffdd18f7cd64"/><file name="Direct.php" hash="9957d2d79c133cd123b3be3e78989138"/><dir name="Express"><file name="Checkout.php" hash="83102d7294cbc2c07b2689125793b1ba"/><file name="Pro.php" hash="8ae7abbeed2c6ec78ad6f3389c2e999b"/></dir><file name="Express.php" hash="5b2718de3bf92a445c01c9f8046e88db"/><file name="Pro.php" hash="9af4a3524ab19d522cc4a16c7aebd889"/><file name="Session.php" hash="e9588933e26fc8c80e51476e889ab6b0"/></dir><dir name="controllers"><file name="BmlController.php" hash="deb635b1c700214db52fe4fda7e319c2"/><file name="ExpressController.php" hash="e3d9b7ac163b37cdaee7521bc6a53085"/></dir><dir name="etc"><file name="config.xml" hash="a03e54b4588f8c5fea00138d1e42f354"/></dir><dir name="sql"><dir name="paypaluk_setup"><file name="install-1.6.0.0.php" hash="b93205d0a10e1908eb6dc2ec5e6f2742"/><file name="mysql4-install-0.7.0.php" hash="504f997c41748c227273773bec0c3e67"/></dir></dir></dir><dir name="Persistent"><dir name="Block"><dir name="Form"><file name="Remember.php" hash="94f49b0d45c5e369d5d30b77c33ed683"/></dir><dir name="Header"><file name="Additional.php" hash="546b107bb5c0b5b1a3fa673e11caee9b"/></dir></dir><dir name="Helper"><file name="Data.php" hash="8bd90637e4e896351fa58084135016d7"/><file name="Session.php" hash="88fca3bb462e6d785c66d3ae2dde9a84"/></dir><dir name="Model"><dir name="Observer"><file name="Session.php" hash="ccb74d67b42504aa95ef599053ca91dc"/></dir><file name="Observer.php" hash="839c67becc6407533e0da7a95ad3f965"/><dir name="Persistent"><file name="Config.php" hash="7126ed3ceef9579a2dc1e28299e4a247"/></dir><dir name="Resource"><file name="Session.php" hash="a2a2d5e75095da58c9c81e07b2c949a2"/></dir><file name="Session.php" hash="0b2d41e85d7549aa28d551d691e32ce4"/></dir><dir name="controllers"><file name="IndexController.php" hash="372173d8b96a211f01f8ed64c61349bc"/></dir><dir name="etc"><file name="adminhtml.xml" hash="6f8b408461a312be90b93e7961042c2d"/><file name="config.xml" hash="bd0b27ed57da2ae34280ef3037076d4d"/><file name="persistent.xml" hash="a0e87bf517504b97eb701e32c17471cf"/><file name="system.xml" hash="076afa82bd518ad235c0dab39ea17310"/></dir><dir name="sql"><dir name="persistent_setup"><file name="install-1.0.0.0.php" hash="e5656fdbdacf94b68b51e39e9636fc70"/></dir></dir></dir><dir name="Poll"><dir name="Block"><file name="ActivePoll.php" hash="254e4c67b627e429206f588e89cd7993"/><file name="Poll.php" hash="14ef393cbb51b21c0da136c249a2f06d"/></dir><dir name="Helper"><file name="Data.php" hash="28ad5ee2e890add5454670357cfb1f4d"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Poll"><dir name="Answer"><file name="Collection.php" hash="896656db7f0ceebf41866847db845dff"/></dir><file name="Answer.php" hash="cb3a15c456156ceae68b7a6bf4d34e5f"/><file name="Collection.php" hash="a8c7446cefbbdfcc724780f91976da85"/><file name="Vote.php" hash="b0b9d43bb5b721cd34732920e93c14b2"/></dir><file name="Poll.php" hash="ba6549fb378c210139cbae5511e05171"/></dir><dir name="Poll"><file name="Answer.php" hash="8b2deff169e661a9acf8e82698400515"/><file name="Vote.php" hash="ba7582e4b60d332d54a9888c68b79c35"/></dir><file name="Poll.php" hash="0f646670b02e0a28e9d33fd4ee0c547c"/><dir name="Resource"><dir name="Poll"><dir name="Answer"><file name="Collection.php" hash="ec17b425f80443f0a1de9ff678d487d0"/></dir><file name="Answer.php" hash="ad9fe830786ea59a04bb21144f05c3ab"/><file name="Collection.php" hash="a375e13a62d37f90b418b0781180e4cd"/><file name="Vote.php" hash="b07328698520b5fa6b04086948365f60"/></dir><file name="Poll.php" hash="a6e7382a68703fd3818de79a25035a79"/></dir></dir><dir name="controllers"><file name="VoteController.php" hash="808b67d06bffe3532ae85d8351fee8c4"/></dir><dir name="data"><dir name="poll_setup"><file name="data-install-1.6.0.0.php" hash="a49d377281c50ee4e343c08050b09a17"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="506e81b1176a12e8954cbccf238b69a9"/><file name="config.xml" hash="d5169d78910aa37b8549ce35eef7963a"/><file name="system.xml" hash="6165fc5ad861d8348ae7a2d22bb67823"/></dir><dir name="sql"><dir name="poll_setup"><file name="install-1.6.0.0.php" hash="0290aac27bab616ccee4e881d245743d"/><file name="mysql4-install-0.7.0.php" hash="dd6baa3e698e92912a842dd48dd52a59"/><file name="mysql4-upgrade-0.6.0-0.6.1.php" hash="2c2ac1b2ed8159e887df907e40578908"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="39a968ab7cf9c54ce43b5fd076b1f17f"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="f68feeafc6b066c87f3b3f82e0f5f2dc"/><file name="mysql4-upgrade-1.6.0.0-1.6.0.1.php" hash="58f6256165abb574299497e6bef09626"/></dir></dir></dir><dir name="ProductAlert"><dir name="Block"><dir name="Email"><file name="Abstract.php" hash="180466a4e42fa7b00ec4c167ab84cb71"/><file name="Price.php" hash="199022e844eec73d620c776d411f141f"/><file name="Stock.php" hash="a2a8f094f28e0546d5eea0ce746b29bc"/></dir><file name="Price.php" hash="d2ea30eee3cf0a3e5c4084ecf836102a"/><dir name="Product"><file name="View.php" hash="30d336f7b5fbe5a6e071f452d03c7629"/></dir><file name="Stock.php" hash="f88befba6f33ddf8b9479b927e030236"/></dir><dir name="Helper"><file name="Data.php" hash="afc9d024257d6e19e97adef35d1bfd6f"/></dir><dir name="Model"><file name="Email.php" hash="77d9e1f754c75e0f78468f996ce57d2b"/><dir name="Mysql4"><dir name="Price"><file name="Collection.php" hash="6964afdff4afd3066bc4a6732b52df90"/><dir name="Customer"><file name="Collection.php" hash="29c4afe926176cbd533ca9ee2bd02c13"/></dir></dir><file name="Price.php" hash="1bda8f4a3da6e4329ace884601c9741c"/><dir name="Stock"><file name="Collection.php" hash="593885fb2c4ea2d387394235036d1e4a"/><dir name="Customer"><file name="Collection.php" hash="64ffcce0a6aabc0a63746d06c9e17779"/></dir></dir><file name="Stock.php" hash="67e8dec9681a786c174aa18a0491a613"/></dir><file name="Observer.php" hash="b5366037ff21258e7e3946a1c6ddeb5b"/><file name="Price.php" hash="816eed25a1634ff354596aace36e3bc4"/><dir name="Resource"><file name="Abstract.php" hash="40974792395eb8b961d3b43bd1e0ddd0"/><dir name="Price"><file name="Collection.php" hash="f5bd6c2e575b884086c1d919b9f630e2"/><dir name="Customer"><file name="Collection.php" hash="993462038beef968c4e6a139c9a15083"/></dir></dir><file name="Price.php" hash="c34070d8f2e470cd8a36b3c237f0fa3b"/><dir name="Stock"><file name="Collection.php" hash="109d708f7f86755bcded9afa0cf63f25"/><dir name="Customer"><file name="Collection.php" hash="22db201e6257823f0a7e0d593e3bb086"/></dir></dir><file name="Stock.php" hash="b02fee2a39793c4f5f7b5b7db06b6967"/></dir><file name="Stock.php" hash="033eb55739192ccd341f8be23ce6490f"/></dir><dir name="controllers"><file name="AddController.php" hash="2eb24a257ad8497186b4d15bd1e4010f"/><file name="UnsubscribeController.php" hash="1afd4a2b49a7fc13ab2f8db53b4f2bb7"/></dir><dir name="etc"><file name="config.xml" hash="4cbd97dee3ea55e81c26af8dba7c062f"/><file name="system.xml" hash="8d41f470b63e3bbc9a69edebe21c245f"/></dir><dir name="sql"><dir name="productalert_setup"><file name="install-1.6.0.0.php" hash="f05a601521ddd5347019c0efae234404"/><file name="mysql4-install-0.7.0.php" hash="472fb607fe6444d41fb471d6f82198c7"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="97c9dc1b38d237b6bfaa354401b2db7f"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="9862ccaea6d1d41918d658cd689315ba"/></dir></dir></dir><dir name="Rating"><dir name="Block"><dir name="Entity"><file name="Detailed.php" hash="9808da6eb9e27b1ab3132a553df6be5f"/></dir></dir><dir name="Helper"><file name="Data.php" hash="4a42d0d980c4f23e0e9f293f5e370e52"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Rating"><file name="Collection.php" hash="fe89e510b4a91085104b57ba5e28868e"/><file name="Entity.php" hash="9e29aa9791199f8f73be37231a99de5c"/><dir name="Option"><file name="Collection.php" hash="39f52caa8737126f96cd3407972fe53a"/><dir name="Vote"><file name="Collection.php" hash="663731196577b76086678dbcbd6cee54"/></dir><file name="Vote.php" hash="5744e29099fe9f8323be25ab15f55904"/></dir><file name="Option.php" hash="08c0fd436f320fabdb961a60ebf425f8"/></dir><file name="Rating.php" hash="5e40ad3d9114673e8824e212a7b5982c"/></dir><file name="Observer.php" hash="abd07f006140cc5ec6c59cbd274a8460"/><dir name="Rating"><file name="Entity.php" hash="4412fc6a356e54e433ac0786abea94a5"/><dir name="Option"><file name="Vote.php" hash="2a6eb28fd1017fe0aa15a6a96ebc7787"/></dir><file name="Option.php" hash="d4bf99a32d4732da56a781659586d0fa"/></dir><file name="Rating.php" hash="0564cdbcd61e92649cebdd1c49d80893"/><dir name="Resource"><dir name="Rating"><file name="Collection.php" hash="011f863b98c153de1f941f51ab6a447b"/><file name="Entity.php" hash="685f1ff9b51d0ab69ec43d6d87fdadce"/><dir name="Option"><file name="Collection.php" hash="87e167b305f17900c865da5a9e387492"/><dir name="Vote"><file name="Collection.php" hash="8b51efd07ce00578ee6086d7dcac0de4"/></dir><file name="Vote.php" hash="c48b18e451922310aee15a2c7ba35ccc"/></dir><file name="Option.php" hash="807c82864579de3ec167cee2ce262114"/></dir><file name="Rating.php" hash="3e26013cc1074178421b936a6189c582"/></dir></dir><dir name="data"><dir name="rating_setup"><file name="data-install-1.6.0.0.php" hash="8a98ae770970c8d7dd21c231a154c39b"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="3f7fce2cf5ad8f0fe05a391983f3dd36"/><file name="config.xml" hash="71a51d65f89a44fcb50996df3fbfd78c"/></dir><dir name="sql"><dir name="rating_setup"><file name="install-1.6.0.0.php" hash="b18a5da3ca872ed6b85c27666d28ed15"/><file name="mysql4-install-0.7.0.php" hash="a13b20061c25638ca42d7e0853de62f7"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="3b33707e3f24362cf58962779fc72c93"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="8e1ffbea5a4c7d90120295935b1ce914"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="3cf83182ef097d07619d7751e5f37add"/><file name="mysql4-upgrade-1.6.0.0-1.6.0.1.php" hash="77f60eacd24bc10f17116eafab1a155f"/></dir></dir></dir><dir name="Reports"><dir name="Block"><dir name="Product"><file name="Abstract.php" hash="fbbb106c64faebf13fb51659041a6d34"/><file name="Compared.php" hash="0a39af19b20bc600864888aa77fbe09b"/><file name="Viewed.php" hash="436427d1849c3cf97761c805f33ca66c"/><dir name="Widget"><file name="Compared.php" hash="d8f42dd14dd3d002c33f630195fa9ece"/><file name="Viewed.php" hash="24beb247253ee60d03647e1d324051bd"/></dir></dir></dir><file name="Exception.php" hash="da8b99dfb486b75b46a9743a2732fb27"/><dir name="Helper"><file name="Data.php" hash="3eb61f32253af1804fda358dc1f227d3"/></dir><dir name="Model"><file name="Config.php" hash="cc663fe325525f348d7574a5b5c0c7d2"/><dir name="Event"><file name="Observer.php" hash="61bd0e764cd02c42faed676992821589"/><file name="Type.php" hash="5f73ac0e09697a704c3e6e9f5be95e25"/></dir><file name="Event.php" hash="092ed40e2e6f018544afd1d733d83d12"/><file name="Flag.php" hash="d4643e512bfba12c98a4f9603caa81fc"/><dir name="Grouped"><file name="Collection.php" hash="97d1d5b0f8d7da4a9edcfea6113604bc"/></dir><dir name="Mysql4"><dir name="Accounts"><file name="Collection.php" hash="1c1875d2c084f77c78fe97ca52b79fdd"/></dir><dir name="Coupons"><file name="Collection.php" hash="9c3b6b829a75ad8813b4132255f61456"/></dir><dir name="Customer"><file name="Collection.php" hash="b5c9669ce74a8877ab4a593d2b82919a"/><dir name="Orders"><file name="Collection.php" hash="7f47371908db9f5b77eadf7e988cc824"/></dir><dir name="Totals"><file name="Collection.php" hash="fade9685c8351201c224e4c6fe701bc6"/></dir></dir><dir name="Entity"><dir name="Summary"><dir name="Collection"><file name="Abstract.php" hash="83b5ed1349035ef06e10d4b5e92965f4"/></dir></dir></dir><dir name="Event"><file name="Collection.php" hash="71a5338b1dd71ab110e180693457c8b4"/><dir name="Type"><file name="Collection.php" hash="b7f8318c3d8d5b504e55c2b98710eb6c"/></dir><file name="Type.php" hash="1f79da768c9c15a678f4049e011a646f"/></dir><file name="Event.php" hash="371242c785456ee36d6b5f49c08cd58a"/><dir name="Invoiced"><file name="Collection.php" hash="8664915953e0e451e5681acd1d6acc7c"/></dir><dir name="Order"><file name="Collection.php" hash="90dca9d9d48aaa82609643d712f4cda5"/></dir><dir name="Product"><file name="Collection.php" hash="fe950d67d51a6ad03681a89f1234a96c"/><dir name="Downloads"><file name="Collection.php" hash="3cba0533eb82c653654c5221d669447e"/></dir><dir name="Index"><file name="Abstract.php" hash="20710b44e6b9037a8bb1921f2b1b0c18"/><dir name="Collection"><file name="Abstract.php" hash="7437c80fbaaeb146ac119e9c414bdb69"/></dir><dir name="Compared"><file name="Collection.php" hash="38e9a0bdc91f9ee787009c28391ac670"/></dir><file name="Compared.php" hash="cb8512a55702be7c5b8c57222d8368ca"/><dir name="Viewed"><file name="Collection.php" hash="a33c636144939f7a0d6f2f4c99c9902b"/></dir><file name="Viewed.php" hash="1e7df154169d1c5275f7c270e22eb968"/></dir><dir name="Lowstock"><file name="Collection.php" hash="87bbd2c5813d078ccba23ee95e0b3bf0"/></dir><dir name="Ordered"><file name="Collection.php" hash="a32ab0e3766f913c96bb31e23c886849"/></dir><dir name="Sold"><file name="Collection.php" hash="007ede980f1829d022fb7b82124bf1ca"/></dir><dir name="Viewed"><file name="Collection.php" hash="d8eafef620e8eaef0a92b09c1056263e"/></dir></dir><dir name="Quote"><file name="Collection.php" hash="34ed9230ae3905a50f828367e8556e6d"/></dir><dir name="Refunded"><file name="Collection.php" hash="5b03550cb6210c7194e329e5ed6afd79"/></dir><dir name="Report"><file name="Abstract.php" hash="fe9ea104135ee784228e9e1d7041a4f8"/><file name="Collection.php" hash="e5f5c13c0665830c9f412d49191051a3"/></dir><dir name="Review"><file name="Collection.php" hash="2a552c29e05091838ab8b10c866ee950"/><dir name="Customer"><file name="Collection.php" hash="5db13577519aa4fc48efff97693dd14b"/></dir><dir name="Product"><file name="Collection.php" hash="91776a3d21d06a39eaad123c14f2a249"/></dir></dir><dir name="Shipping"><file name="Collection.php" hash="33a1cd3f1acb06fe961e76ea73a5de35"/></dir><dir name="Shopcart"><dir name="Product"><file name="Collection.php" hash="a406d4470313dc54bcbef3ac4bc57b06"/></dir></dir><dir name="Tag"><file name="Collection.php" hash="6133ccd408135a10c3dea03daaf3dd87"/><dir name="Customer"><file name="Collection.php" hash="152b9938b82326f039cedb958e2ee381"/></dir><dir name="Product"><file name="Collection.php" hash="cba584af6f7be500dac1e2ae9342d7f8"/></dir></dir><dir name="Tax"><file name="Collection.php" hash="0acbb61867ed4cd612efc2cf9c503ead"/></dir><dir name="Wishlist"><file name="Collection.php" hash="4956fe36f4ef4c15b221b28f581091df"/><dir name="Product"><file name="Collection.php" hash="6a984971a61d099a863e5da9a7a8d565"/></dir></dir></dir><dir name="Product"><dir name="Index"><file name="Abstract.php" hash="27e75129a3b08c2b5fca26666b6ab7f8"/><file name="Compared.php" hash="04b1522deb834562fc24a6016072bb58"/><file name="Viewed.php" hash="eb9059d85ba6a2d3ea80d2eba29f6755"/></dir></dir><file name="Report.php" hash="60dfd019b4ea4d0acdddb64f0694c059"/><dir name="Resource"><dir name="Accounts"><file name="Collection.php" hash="4982e3152643b7c968d623b713313041"/></dir><dir name="Coupons"><file name="Collection.php" hash="6f3bae38a02e87ea23e061dcee5a2c43"/></dir><dir name="Customer"><file name="Collection.php" hash="dab25524552120e7ab10aa75c0f93b78"/><dir name="Orders"><file name="Collection.php" hash="98831d00cb9641e2a27eba2f2e9079fa"/></dir><dir name="Totals"><file name="Collection.php" hash="d01b30ec7be167f0cc9a9a48df09e279"/></dir></dir><dir name="Entity"><dir name="Summary"><dir name="Collection"><file name="Abstract.php" hash="466eff8822604dea2fa565d96c344ae8"/></dir></dir></dir><dir name="Event"><file name="Collection.php" hash="6da3c7f128649b505ff190ce398246b8"/><dir name="Type"><file name="Collection.php" hash="a35b69401fb0af2d7b2257b4233bd3ae"/></dir><file name="Type.php" hash="054341a8a2e76ba1458ba6e8ee1be69e"/></dir><file name="Event.php" hash="018c31f9f8943753a0d1ce63172d15f2"/><dir name="Helper"><file name="Interface.php" hash="3bd31b382726e0392b885a5f322447e3"/><file name="Mysql4.php" hash="253638c6aafcd69c441cf0c2f84773aa"/></dir><dir name="Invoiced"><file name="Collection.php" hash="5ee6a60eda1b71c8a5c78b44cef74637"/></dir><dir name="Order"><file name="Collection.php" hash="6ba25321a9f092a59bac1c5e3561a29f"/></dir><dir name="Product"><file name="Collection.php" hash="443cc87b3f1908bcc0a944240cc0c725"/><dir name="Downloads"><file name="Collection.php" hash="a758bc6f4fa03f158d479aad4dc7b8c2"/></dir><dir name="Index"><file name="Abstract.php" hash="0d323595b3c30649935dd0dd17b59e68"/><dir name="Collection"><file name="Abstract.php" hash="2ebf8565c843986fe327e6d404d27377"/></dir><dir name="Compared"><file name="Collection.php" hash="48160635cb831066a1dc4574fc7ab492"/></dir><file name="Compared.php" hash="55b2a8f1176cb40917bfc6638c175433"/><dir name="Viewed"><file name="Collection.php" hash="6ffb976b877d1a1a0be24b20fd0c61e4"/></dir><file name="Viewed.php" hash="630aa8cf7c3ca68768d580e8df4204cf"/></dir><dir name="Lowstock"><file name="Collection.php" hash="902074235d9a9a3d6561bb22f0c4a4ac"/></dir><dir name="Ordered"><file name="Collection.php" hash="6fa111930e34d63d7ceecc66fe82339f"/></dir><dir name="Sold"><file name="Collection.php" hash="54b0599ac7620ea644086362f3651504"/></dir><dir name="Viewed"><file name="Collection.php" hash="e9a68efb6044904da6e559be2066fc8e"/></dir></dir><dir name="Quote"><file name="Collection.php" hash="b17fdfa1934eec92cd8f6aabd116fffa"/></dir><dir name="Refunded"><file name="Collection.php" hash="ecf346d633194f286366e42fc77dbce0"/></dir><dir name="Report"><file name="Abstract.php" hash="4cde830115d9a4118205ef7a18678615"/><dir name="Collection"><file name="Abstract.php" hash="4295a90f9668e10c8323c4e9faf21b01"/></dir><file name="Collection.php" hash="e4611e41c7bc8482ade61c297665934b"/><dir name="Product"><dir name="Viewed"><file name="Collection.php" hash="ec638f6e6e535da277be4a3dfe00e5fa"/></dir><file name="Viewed.php" hash="b28454c797ed92051c70c2ae1a285049"/></dir></dir><dir name="Review"><file name="Collection.php" hash="0ca229c34293ed9c055d89af7ee5769a"/><dir name="Customer"><file name="Collection.php" hash="e228155ddc14b37135978c74110d4bf6"/></dir><dir name="Product"><file name="Collection.php" hash="d28988f84e60eb66f80a9116505f18f7"/></dir></dir><dir name="Shipping"><file name="Collection.php" hash="101977b37120e847295271c403fb54a1"/></dir><dir name="Shopcart"><dir name="Product"><file name="Collection.php" hash="c862f140f24a96f9e985bbf489acbeea"/></dir></dir><dir name="Tag"><file name="Collection.php" hash="6970cb166f35a637027099c8c12e5ca4"/><dir name="Customer"><file name="Collection.php" hash="1579b71d00b8f73a7ffc536d58cdcb0f"/></dir><dir name="Product"><file name="Collection.php" hash="50b41f26ed827217c356a073fb6202f8"/></dir></dir><dir name="Tax"><file name="Collection.php" hash="2e6ff63106cd7a4c785bcd554bfaa885"/></dir><dir name="Wishlist"><file name="Collection.php" hash="f777eae8af507917bcf75527b4c49b3a"/><dir name="Product"><file name="Collection.php" hash="a33471d2b24111d033b6af5872709f6f"/></dir></dir></dir><file name="Session.php" hash="fb5495f724e51d25697d8a0ba415a609"/><file name="Test.php" hash="87799b1b2bb7b6e35c6a40bdd12184b2"/><file name="Totals.php" hash="ceb6c34be077bc4b4c05054260649a28"/></dir><dir name="data"><dir name="reports_setup"><file name="data-install-1.6.0.0.php" hash="e81bcea0ffb79eb52fc86390c70e3979"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="ebd93caf512ee24432a0b0128c51b359"/><file name="config.xml" hash="3b4dfb231a0c6f6247718dc9a51de887"/><file name="system.xml" hash="debcc50171828ac2ad584cd3eb7e2580"/><file name="widget.xml" hash="daa76297cac646560c81c96edfdecaac"/></dir><dir name="sql"><dir name="reports_setup"><file name="install-1.6.0.0.php" hash="acb1917838f06ffe0cde8a4fcbc4c7f2"/><file name="mysql4-install-0.7.1.php" hash="f54c4c6a2cc2533c99f289b292110f10"/><file name="mysql4-install-1.5.0.0.php" hash="a878056ebb99e1d43bacc6e603579d00"/><file name="mysql4-install-1.6.0.0.php" hash="cdfbd790576b26ee8eaba4d9532e737f"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="7429a8261bf298645c9a5c0b47a607ee"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="dc72f48bd7ea4ef83542b53f35c42183"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="f6275eb1825bf13bae28ad8503f35a51"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="9c0b5b8aeda472848a66affdbd8a7eef"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="819ab599a4fe00b60962ee72e3fa30bc"/><file name="mysql4-upgrade-0.7.5-0.7.7.php" hash="c0b72c3aa67011f1a473c269f5210ac9"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="deeb78c94d0c4b97e51422331e2b46e7"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="f205868e82f73bca1ece7da016a05f12"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="45e56a55e8e221eb55a2d01260df08d2"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="4e59fb21fce5202b290c7f240edb674c"/><file name="upgrade-1.6.0.0-1.6.0.0.1.php" hash="e52873b0b0819e87f795046d2f6bdb19"/></dir></dir></dir><dir name="Review"><dir name="Block"><dir name="Customer"><file name="List.php" hash="fbdb9d239a7106325585c41a74b6b162"/><file name="Recent.php" hash="46793e36c3284f03036eb5c5cf5cd893"/><file name="View.php" hash="5bfa491bc2f17965b52b5fcd0082ec26"/></dir><file name="Form.php" hash="2e1a0e92226543cff0e99f886c6ab246"/><file name="Helper.php" hash="936c3ef7c2f6f9370ae75839be4c6f13"/><dir name="Product"><dir name="View"><file name="List.php" hash="af0e35e47b2c2f7fe4f4fa6049515f31"/></dir><file name="View.php" hash="ab25fd0e915cba28e5741aca2e4156fe"/></dir><file name="View.php" hash="7a07751a6aab8883f2fc629f4b3f0788"/></dir><dir name="Helper"><file name="Data.php" hash="c48d607399b2fbe23300301537b036f6"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Review"><file name="Collection.php" hash="83fe47bc9aa743e7374c1f051761004d"/><dir name="Product"><file name="Collection.php" hash="362ed01cd5a138ce481b00d0d0bae334"/></dir><dir name="Status"><file name="Collection.php" hash="f3d2dd3f3ae991c24670a6dee1968d8d"/></dir><dir name="Summary"><file name="Collection.php" hash="68d20fe99fb3f1158fc8dbef9e2ae21d"/></dir><file name="Summary.php" hash="fcddf4ec146f87d2f26a4ed66a58ae08"/></dir><file name="Review.php" hash="d6f58d2b1655e562b862578b045a3875"/></dir><file name="Observer.php" hash="540ca94b28cc4bd83f937ddbbde2b877"/><dir name="Resource"><dir name="Review"><file name="Collection.php" hash="e4a0bfb512fe55880670601532038b23"/><dir name="Product"><file name="Collection.php" hash="73d9da7ea7b6bb576dae492be4393419"/></dir><dir name="Status"><file name="Collection.php" hash="4fafa6b5c658d5beb8d6fb83e6edd38b"/></dir><file name="Status.php" hash="6c53ef509976ae173668d45fd7298f2e"/><dir name="Summary"><file name="Collection.php" hash="302a40923a6a3b65c27cf423760745dc"/></dir><file name="Summary.php" hash="6ec41019b27f5792b49fbecd7b7b16bd"/></dir><file name="Review.php" hash="1f363f6caa57bc0278dc95b0ce221e3c"/></dir><dir name="Review"><file name="Status.php" hash="377f94d597fea31818fb6dd80e735df2"/><file name="Summary.php" hash="09cc58b2f12f0b5baab54d06ce733749"/></dir><file name="Review.php" hash="5ec371c195aea1144276d247dca962f8"/><file name="Session.php" hash="cc0c43877594696daf90b8b5e97f4a24"/></dir><dir name="controllers"><file name="CustomerController.php" hash="397d011785901f734bad8514355b0edc"/><file name="ProductController.php" hash="dd45d26a559def55cace32cf14d34797"/></dir><dir name="data"><dir name="review_setup"><file name="data-install-1.6.0.0.php" hash="3e9cfb48530b5fd59a198fce28b7e838"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="c362ef135c844d96627451e2b2e239e1"/><file name="config.xml" hash="03265cae6f1cdb0459a182811e8774f2"/><file name="system.xml" hash="3ca3f96c86a2a3fcccbeb7eb60248efe"/></dir><dir name="sql"><dir name="review_setup"><file name="install-1.6.0.0.php" hash="fa1f25ad347fcd68907bb48a92ce24b7"/><file name="mysql4-install-0.7.0.php" hash="4b4614355d2343e0622cf6b55ccbbcae"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="fc12775106751910bd71ff087dddf6c7"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="ac880ce89f9ba0fd3816681b3278f62e"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="8360492e50256404cbc5da964faeba53"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="bfdddd2ff4f353170095057eee6cfa8d"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="15faaea195ac780122bd8ea85d033180"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="ce99463545afcfd88550b33b3b874e87"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="c3130ca1398a1ac8d861a7cd7e40a14e"/></dir></dir></dir><dir name="Rss"><dir name="Block"><file name="Abstract.php" hash="cc31ad5349b3d152a7e0cddebaec4e37"/><dir name="Catalog"><file name="Abstract.php" hash="726d7cd2819cd8857fd7e9dc78627580"/><file name="Category.php" hash="e65c816201051ab640729c896688d07d"/><file name="New.php" hash="9fc9d2b5b7045eebe1c94b5d4faad766"/><file name="NotifyStock.php" hash="e9e164c65bfa33bfe0a8ee95e01cfc9b"/><file name="Review.php" hash="ddef1dd1a1a39a2dd9efdfc6e24c95e3"/><file name="Salesrule.php" hash="3ebb9ab8e2d2023645a9c54e54b06ab2"/><file name="Special.php" hash="f5eff97f4abc268a148c86dbabf7bd50"/><file name="Tag.php" hash="3d94c336311e9c7970e8d9be474cbd03"/></dir><file name="List.php" hash="0af069c7b12c06842a4400ab4b14e801"/><dir name="Order"><file name="Details.php" hash="a6ae5526db72457dee64381f8c272a8f"/><file name="New.php" hash="0e319778fa757dee8617f46c2e023436"/><file name="Status.php" hash="ec489d0a6434e94b0f379ac5184b8286"/></dir><file name="Wishlist.php" hash="bd61443c31a553e1e38dd866801efe26"/></dir><dir name="Controller"><file name="Abstract.php" hash="c5eb27eba9246b2fed64bbe3691e83a6"/></dir><dir name="Helper"><file name="Catalog.php" hash="de6650cbfd706fee0cecf4ef2120c25b"/><file name="Data.php" hash="4872f95820294bb1d86ae9db79cc6287"/><file name="Order.php" hash="a22c1fdc9e43240630f9fda94b2b9c60"/></dir><dir name="Model"><dir name="Mysql4"><file name="Order.php" hash="56207b0bb0eff8d6bb37f6ad7d081e4d"/></dir><file name="Observer.php" hash="a983a9071c01591f5953a2d78bbfa9e1"/><dir name="Resource"><file name="Order.php" hash="d88b41a90424438643f951a9a802aa88"/></dir><file name="Rss.php" hash="0ee42d3600e0b51d1bed80d03fbe1c76"/><file name="Session.php" hash="7ee609d4fe89a08c16955c6eeb39f180"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Links.php" hash="0caf83f58b2b1fa4a2ea4813aae73fb6"/></dir></dir></dir></dir><dir name="controllers"><file name="CatalogController.php" hash="2b371c8110a407d423049a1d2836df67"/><file name="IndexController.php" hash="2b57ddcac1f5722ccad8b859e4be9f62"/><file name="OrderController.php" hash="2b452f0cddf06507899514543c6e03ae"/></dir><dir name="data"><dir name="rss_setup"><file name="data-install-1.6.0.0.php" hash="95316a42add6367a0afcc74b46116ade"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="ab2e6ccbbd51a80b25947d5db5af091e"/><file name="config.xml" hash="213cf7bc0350528c5fc63dbc2dc4e894"/><file name="system.xml" hash="a587557c11d778d767c04319ba09ed3f"/></dir></dir><dir name="Rule"><dir name="Block"><file name="Actions.php" hash="8527d1ca709d6c86d7cd35ecafcd2332"/><file name="Conditions.php" hash="dda8cd77e3b3528b8fc1bda8995e384f"/><file name="Editable.php" hash="57f08071e011d08ff49e64bd647a3cbc"/><file name="Newchild.php" hash="4fe32fbf0472a5cb15c2d3fc6e729731"/><file name="Rule.php" hash="1d58782b570adaa5c6e172c91f0f3dd1"/></dir><dir name="Helper"><file name="Data.php" hash="820eb25fd5b03ee2ac47a4d32da4ebd3"/></dir><dir name="Model"><file name="Abstract.php" hash="0e334f91ae2703ad7a3d5ecce656996a"/><dir name="Action"><file name="Abstract.php" hash="ed699ad6a37a404ce305cdcb35094c6b"/><file name="Collection.php" hash="ca0e77dc84ed99a2c00df39838d42ec5"/><file name="Interface.php" hash="fbf8148f637edeca14605e23d34cd933"/></dir><dir name="Condition"><file name="Abstract.php" hash="22b85203b9152db796aa82d5d623e123"/><file name="Combine.php" hash="00ba9531541416718fc898b374358e64"/><file name="Interface.php" hash="6bf7378dda343c6496e1a8d821dc912c"/><dir name="Product"><file name="Abstract.php" hash="11dea89ca226e9e27dcdbd3e2e5d0f6d"/></dir></dir><file name="Environment.php" hash="5ae41a6cd48afcf87f5849c9619ab378"/><dir name="Mysql4"><dir name="Rule"><file name="Collection.php" hash="67e0c3a73038663bc1ba468ab2773d58"/></dir><file name="Rule.php" hash="8d4f1dccc0b6920f3429d0c4db52705b"/></dir><dir name="Renderer"><file name="Actions.php" hash="687bff27756de727b12b416f7e835153"/><file name="Conditions.php" hash="c6a6865bf0d23a2bcbed83d67053bc22"/></dir><dir name="Resource"><file name="Abstract.php" hash="4a4ed5f7a3a74ce28115708eb46f8874"/><dir name="Rule"><dir name="Collection"><file name="Abstract.php" hash="4cb762737ddbe32872ed38bdf07dd6e8"/></dir><file name="Collection.php" hash="6079f3e5d38a6f9d476e5ad49aa14a78"/><dir name="Condition"><file name="SqlBuilder.php" hash="99e1da4401a45597c71e82b4420020a0"/></dir></dir><file name="Rule.php" hash="8d9116c0f91a9792e5d32c4c4cddeeb8"/></dir><file name="Rule.php" hash="a6793176072c406bd1bf82aa4168a305"/></dir><dir name="etc"><file name="config.xml" hash="71515fec86935cbdfc60e4bbeab032d4"/></dir></dir><dir name="Sales"><dir name="Block"><dir name="Adminhtml"><dir name="Billing"><dir name="Agreement"><file name="Grid.php" hash="731a6d4431089d673568fee25a1821c8"/><dir name="View"><file name="Form.php" hash="d55ed07a15a3a40c4e66c316070e56b7"/><dir name="Tab"><file name="Info.php" hash="751162977acc829a4c8239017fc9b445"/><file name="Orders.php" hash="bc2e902543efb90c0e8147513b683301"/></dir><file name="Tabs.php" hash="5dbf53911c137ffd1923856597f32080"/></dir><file name="View.php" hash="b1e643862e56043d27157df71a911427"/></dir><file name="Agreement.php" hash="678c4ca3fc6dcf8d2a910b44ed40ef9a"/></dir><dir name="Customer"><dir name="Edit"><dir name="Tab"><file name="Agreement.php" hash="18308f1ee681be8752ad64dfe687773f"/><dir name="Recurring"><file name="Profile.php" hash="f33d920bfe0ff8d41b87b524ffa90d6c"/></dir></dir></dir></dir><dir name="Recurring"><dir name="Profile"><dir name="Edit"><file name="Form.php" hash="54e253057108760b6c348e1ed5d2f9d1"/></dir><file name="Grid.php" hash="a0af24699ca5afd2ce23bd8fe683c9a7"/><dir name="View"><file name="Getawayinfo.php" hash="6d6904f661356956e5420e7a3a61f57e"/><file name="Info.php" hash="68a4ced850651d0619211358c71fd7ed"/><file name="Items.php" hash="45c9eea4d4d877e8c1621633dc88ca24"/><dir name="Tab"><file name="Info.php" hash="dd2030aadd0df31a58ffed0063ca8baf"/><file name="Orders.php" hash="66722b9e60959c911aa02ed582be90a6"/></dir></dir><file name="View.php" hash="65ce71535a6b4db9665d7c7cc1570cc0"/></dir><file name="Profile.php" hash="0884eb84dbd6b6aca480ea1a9af1e63f"/></dir><dir name="Report"><dir name="Filter"><dir name="Form"><file name="Coupon.php" hash="c868085bbec0d1c84b291b9c18390585"/><file name="Order.php" hash="dbbbab64d3f9266193b374c28a425412"/></dir><file name="Form.php" hash="b7d07bb6e94e68ac123678a2b85977bc"/></dir></dir></dir><dir name="Billing"><dir name="Agreement"><file name="View.php" hash="6b36d0ad7a47beabddc82f949a92e09d"/></dir><file name="Agreements.php" hash="7e78ea7b37c985cfe9bf2844ec3f5daf"/></dir><dir name="Guest"><file name="Links.php" hash="0899e8bb3c88457537d748acdf528896"/></dir><dir name="Items"><file name="Abstract.php" hash="dfabe87497fe5bf6dd80861e225adeef"/></dir><dir name="Order"><file name="Comments.php" hash="4aaa70b4d507cf69e9107230f39ed5c7"/><dir name="Creditmemo"><file name="Items.php" hash="7e786ba61574790c2d662a49ad33088e"/><file name="Totals.php" hash="6b2f159419d11a0e7a01a459ef9b8c91"/></dir><file name="Creditmemo.php" hash="6f1e6573c29b5742f4b1b0b83faa8e7b"/><file name="Details.php" hash="ae9b48d38abc9417ddc38bdd066bb38e"/><dir name="Email"><dir name="Creditmemo"><file name="Items.php" hash="e98c91a726a8cfc31a48058556b2c32f"/></dir><dir name="Invoice"><file name="Items.php" hash="4a459f1ac0d3f977416673b093e28d71"/></dir><dir name="Items"><file name="Default.php" hash="9d1ab96c68eae1aca379fd1d84049adc"/><dir name="Order"><file name="Default.php" hash="5b85990caed894dcf3db88284b230661"/><file name="Grouped.php" hash="7040147c2727c706b09b2aa288dbcd25"/></dir></dir><file name="Items.php" hash="d783506738f74da23e6adf93ab98b828"/><dir name="Shipment"><file name="Items.php" hash="0accfbbac76233b93d35c25ea69216a7"/></dir></dir><file name="History.php" hash="0e95c61fe0d84b3af13e20529942be72"/><dir name="Info"><file name="Buttons.php" hash="56f6c1a100d31d6c7859a7492aecfb83"/></dir><file name="Info.php" hash="262907ea31ba7fbc8985aee0f3005302"/><dir name="Invoice"><file name="Items.php" hash="ecf5652547ffdf624c3432ff1c78ce68"/><file name="Totals.php" hash="f49053546c5ec744d3cc2dbd5ad19883"/></dir><file name="Invoice.php" hash="6631f3550edde0d68b546cce8a9b203e"/><dir name="Item"><dir name="Renderer"><file name="Default.php" hash="0b70309d42e7278fa111f055dc01893d"/><file name="Grouped.php" hash="7adb3eca2aeb5171234ecb8418707aec"/></dir></dir><file name="Items.php" hash="7c5acad96992ab00488e157b557f4d3c"/><dir name="Print"><file name="Creditmemo.php" hash="7d1cb5fb5891168292dd28a5aa69d0ac"/><file name="Invoice.php" hash="e402b1b36280fd107c33a81a9a7b5cb5"/><file name="Shipment.php" hash="026470ae29503dcd21b09d427440f59e"/></dir><file name="Print.php" hash="bc4ea4880868c3ecddef053397f801ed"/><file name="Recent.php" hash="66e8882567122a953f642640d1a38a58"/><dir name="Shipment"><file name="Items.php" hash="ae4e4b77d96ef11241c071da7bb486f6"/></dir><file name="Shipment.php" hash="9cade979e6b84b18e2ff0727ddf2e8b9"/><file name="Tax.php" hash="50eff71972e3a8c0c83aa7fd801f6914"/><file name="Totals.php" hash="c8e155f695ba5ad9b4bf8498b61a2454"/><file name="View.php" hash="938f533f5a2baa8247a1e4dd896c57e5"/></dir><dir name="Payment"><dir name="Form"><dir name="Billing"><file name="Agreement.php" hash="8376c3e4025b7a2183bbcff925ff590d"/></dir></dir><dir name="Info"><dir name="Billing"><file name="Agreement.php" hash="2a6ae5346ecec19d6467d8fc3f049e6f"/></dir></dir></dir><dir name="Recurring"><dir name="Profile"><file name="View.php" hash="62fc9c5817b617f4c885de160fa77bd0"/></dir><file name="Profiles.php" hash="bc2e409f5c868e6308485540e2646371"/></dir><dir name="Reorder"><file name="Sidebar.php" hash="32f59b0b7e9d30ac235dfbc8ae6dd3eb"/></dir><dir name="Widget"><dir name="Guest"><file name="Form.php" hash="6955069b55666a18d7e8b8e33b4dd517"/></dir></dir></dir><dir name="Controller"><file name="Abstract.php" hash="fbef84194f2ccc32e3bbd73f44df8967"/></dir><file name="Exception.php" hash="7e81838388d96cc6968ee4b51bdcbd7d"/><dir name="Helper"><file name="Data.php" hash="3dc4037e0ee40d0341b5c7e79b37d91a"/><file name="Guest.php" hash="7430c8340b742c89f1b9df79ccfd6423"/><file name="Reorder.php" hash="64363e857d1d4f27c52b4a7c37633c9b"/></dir><dir name="Model"><file name="Abstract.php" hash="15c35a95af26282bc3415440d104c4c6"/><dir name="Api"><file name="Resource.php" hash="b6a6e3198dca54321c362e416c29bba2"/></dir><dir name="Api2"><dir name="Order"><dir name="Address"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="a9cd51c52b1fa29f93fd561c41ffb439"/></dir><dir name="Customer"><file name="V1.php" hash="ca81d1c423589c0ddb3f9f8c7a6a24a2"/></dir></dir><file name="Rest.php" hash="6497ac20229b978f7f23e89f53373c72"/></dir><file name="Address.php" hash="7a72bae899c9cd07e6add684ac29c342"/><dir name="Comment"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="a13ae1ad2c5747dcfbac1c8ece1b2c67"/></dir><dir name="Customer"><file name="V1.php" hash="92d399faa510a32aa3ddd63b15cb868a"/></dir></dir><file name="Rest.php" hash="b00787ff671d5cc7d9a05a35dc252c38"/></dir><file name="Comment.php" hash="0d883d8e594866d11f911e0f274aca7a"/><dir name="Item"><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="8dd05e7819e578199076803c095ec4c0"/></dir><dir name="Customer"><file name="V1.php" hash="e142556d3204f557be2a06aec371ef50"/></dir></dir><file name="Rest.php" hash="7f6fa94e2ef5b8e4900c5f01c944c587"/></dir><file name="Item.php" hash="386e1c7c5366391e2583d359a3ed629e"/><dir name="Rest"><dir name="Admin"><file name="V1.php" hash="56f48c0055845c6f30e52d196217972e"/></dir><dir name="Customer"><file name="V1.php" hash="5c610aaaf6a391086403970e0cdcbb6e"/></dir></dir><file name="Rest.php" hash="9559e10500e5ad5f961e1101617620a6"/></dir><file name="Order.php" hash="538a9c85f6469ab63c855a35528fde1b"/></dir><dir name="Billing"><file name="Agreement.php" hash="4e8ea0af2a7495649d8a95009f6e8a23"/></dir><dir name="Config"><file name="Ordered.php" hash="3a4be5b5224d6090674b2627d40b1e54"/></dir><file name="Config.php" hash="959cca427edc9c153e37659cb3997c60"/><dir name="Convert"><file name="Order.php" hash="1d901f03cf4b4334c6f7b72563f38ca8"/><file name="Quote.php" hash="58bb5963b286315939302ef204dadcfa"/></dir><dir name="Email"><file name="Template.php" hash="33194f93d26c4fa733d68d0757747191"/></dir><dir name="Entity"><dir name="Order"><dir name="Address"><file name="Collection.php" hash="a1d3de3d384ddb587c9d5a9deb499832"/></dir><file name="Address.php" hash="0c3d7bd2ac73e2782a5475ea661800e2"/><dir name="Attribute"><dir name="Backend"><file name="Billing.php" hash="3e96c95aa215a7f8c79206f914b40f3f"/><file name="Child.php" hash="2282d7a3861e84186b093889514898f2"/><file name="Parent.php" hash="74c3a37546150dee9e60e74228de60a2"/><file name="Shipping.php" hash="70b7e2e3b01a6de90da6c1430510dfc5"/></dir></dir><file name="Collection.php" hash="1936546dbd1330260f70a6569f0dabfb"/><dir name="Creditmemo"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="dde8b4f5973301eedcbf228dc900be9f"/><file name="Parent.php" hash="3d95b65278357577153c901a37068c57"/></dir></dir><file name="Collection.php" hash="f4b3e0be5100002c61eae38662e4ac3e"/><dir name="Comment"><file name="Collection.php" hash="83fec6b0ce33f8b056625d12b23b2594"/></dir><file name="Comment.php" hash="6fc6f75d606a8ffd015156a42243c193"/><dir name="Item"><file name="Collection.php" hash="abbbfad59483de496dedb3d52c7c7735"/></dir><file name="Item.php" hash="d19aaeee0f812bb6de3d2c7fe701d5e8"/></dir><file name="Creditmemo.php" hash="47ab866823475eaff8086191c9a5241b"/><dir name="Invoice"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="95787d5da966da7a7cd5041fcb9df4f3"/><file name="Item.php" hash="9dcf7d662960b24ab43285ad3d32a2f5"/><file name="Order.php" hash="0e46c7858e143f022b1f4748598ae5d1"/><file name="Parent.php" hash="9a90a6bb7825245279a525898d553e0e"/></dir></dir><file name="Collection.php" hash="5a9fe5f7b03afeac3e274c74501b7817"/><dir name="Comment"><file name="Collection.php" hash="276b1a9138d6b99254c387c4208fa64f"/></dir><file name="Comment.php" hash="ddf9374110059a4a7a998b2efeaca355"/><dir name="Item"><file name="Collection.php" hash="a855f2ec27dbd06377b90894c4f57213"/></dir><file name="Item.php" hash="ca9f19d5344bcec195a9dd7ee4b86c09"/></dir><file name="Invoice.php" hash="a910c4b305b4c703385579bb2111f827"/><dir name="Item"><file name="Collection.php" hash="4c5a4c63df1370502e8181e303daf2d9"/></dir><file name="Item.php" hash="3ab0874949eb9211dd6b12d8e52ef7b3"/><dir name="Payment"><file name="Collection.php" hash="4b303fa1527c0ffb64b1f1b8f1661a90"/></dir><file name="Payment.php" hash="d904e88dd89fc16b14c32731e04ea5bd"/><dir name="Shipment"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="f80aa21caab93911aafb8294bd6583b5"/><file name="Parent.php" hash="5b37ec538416fc102dab6135f6a69d63"/></dir></dir><file name="Collection.php" hash="5340c11df274aa920e2c00fba837905b"/><dir name="Comment"><file name="Collection.php" hash="795f343f4c93a7d1ab0b882afe0dc724"/></dir><file name="Comment.php" hash="0c0d15944721c2b917abec843911f60d"/><dir name="Item"><file name="Collection.php" hash="56978a6a80aaab02413ad45ac2c40c30"/></dir><file name="Item.php" hash="9e0cf544f51a2e9d06a567486f4aee9e"/><dir name="Track"><file name="Collection.php" hash="fc720726b0ec6cb32fa07f70273542d2"/></dir><file name="Track.php" hash="7f5171959b3c1f678eb5117d2ab8aaba"/></dir><file name="Shipment.php" hash="2e49e12ddbd605ba931aa388a6766287"/><dir name="Status"><dir name="History"><file name="Collection.php" hash="853b175b354164b46f87bf6717fa671d"/></dir><file name="History.php" hash="ee6ca00631be940e3c098df66237b4f5"/></dir></dir><file name="Order.php" hash="eb05b004590484129104413d04a3c601"/><dir name="Quote"><dir name="Address"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="9a2c760c600e33050ea97a2eedcf4cc8"/><file name="Parent.php" hash="d94644bd6198bf8f6436fe8291804e21"/><file name="Region.php" hash="8f13224e2a6251347aacb9903238ea8f"/></dir><file name="Backend.php" hash="8d4a77534dc423c6772697010523eaf8"/><dir name="Frontend"><file name="Custbalance.php" hash="9f1ebf6e9277a5fe2df3eac9c08126d1"/><file name="Discount.php" hash="473b55f052b6286a2bdbd5d96b0c56db"/><file name="Grand.php" hash="e44defdee69f52d289d91d0b82c844b4"/><file name="Shipping.php" hash="209f5ec87e9a49293b0d1ae6608720ed"/><file name="Subtotal.php" hash="07047c705f7a52fd7917852a58e4e92e"/><file name="Tax.php" hash="ee70db9daec07ee6ae8638b0e3f30507"/></dir><file name="Frontend.php" hash="45939010f0c761f6d4ae06e3ef58471d"/></dir><file name="Collection.php" hash="35deb968fc321e145a5c5eb83ce639c2"/><dir name="Item"><file name="Collection.php" hash="900b8a0389e7f419e03bdb713a533a4b"/></dir><file name="Item.php" hash="58776decc94a4edef4956e27b3ca6077"/><dir name="Rate"><file name="Collection.php" hash="6a17628c290dbc81c3027ddd715f644b"/></dir><file name="Rate.php" hash="8fc30443edbd5cfc340c95e71cbc9ceb"/></dir><file name="Address.php" hash="8639e86fe505ba92ef0185f4248e9621"/><file name="Collection.php" hash="3ff4299cdf7e767058119014c55b7a1a"/><dir name="Item"><file name="Collection.php" hash="4fb1440ad26709bdd75933d1eed92cb5"/></dir><file name="Item.php" hash="41ff5164f42c7b0be7c7ab04b28b4188"/><dir name="Payment"><file name="Collection.php" hash="bc6f8459aaede8d00b3ac69dba599d4a"/></dir><file name="Payment.php" hash="3f5564e9c0876ead6b73f51d2aa6f899"/></dir><file name="Quote.php" hash="010443001240db9f9a1afa57f99aa847"/><dir name="Sale"><file name="Collection.php" hash="7c6c98916e8304314ad26d6c12e5f102"/></dir><file name="Setup.php" hash="7c18b9ba2558d9f974b2a7bb3d061646"/></dir><dir name="Mysql4"><file name="Abstract.php" hash="a718e6a40264a07ead20c11432c325c6"/><dir name="Billing"><dir name="Agreement"><file name="Collection.php" hash="d3b693b853558d3cf4039881358f9fb0"/></dir><file name="Agreement.php" hash="da7487a0059b3859c2bb7da9a9e81215"/></dir><dir name="Collection"><file name="Abstract.php" hash="490013f187634f6f4b71c1eb4a5a4db9"/></dir><dir name="Order"><file name="Abstract.php" hash="9db4faf82f4c663fcdad7694a26fdc37"/><dir name="Address"><file name="Collection.php" hash="fb7641f9428d0a48766a7f1a8dfc56f9"/></dir><file name="Address.php" hash="7b8718fe6db3696c2cb605c1f512f7e0"/><dir name="Attribute"><dir name="Backend"><file name="Billing.php" hash="4a8a16eb96bbf7aaad8d8188fba60636"/><file name="Child.php" hash="14a2ce8c5af928d659a8e5cf34c83a1f"/><file name="Parent.php" hash="640243255577f17bb262a1bfb6eade84"/><file name="Shipping.php" hash="a4e69f8319ba726ae9791fdaac7a6958"/></dir></dir><dir name="Collection"><file name="Abstract.php" hash="9160a40971710f1adda20239693697aa"/></dir><file name="Collection.php" hash="9996c78cbe27e353bbcb1275e517d402"/><dir name="Comment"><dir name="Collection"><file name="Abstract.php" hash="1d8520f9dc78e945b7f962f5fac9a24e"/></dir></dir><dir name="Creditmemo"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="ef8475ab1d19ee8d8fa315d0aa295386"/><file name="Parent.php" hash="683bd8ae826a8f5383e5146eee4720cf"/></dir></dir><file name="Collection.php" hash="41214d1ae0247e6e3c5f33cfc6b6023f"/><dir name="Comment"><file name="Collection.php" hash="b29dc3ac5eef35d26b869843fff269c7"/></dir><file name="Comment.php" hash="7b7d0c8644dd21343adf7d7bf2cc127f"/><dir name="Grid"><file name="Collection.php" hash="a3d13012f105f22fe2aa00a6f151f030"/></dir><dir name="Item"><file name="Collection.php" hash="4148ad8bd82a520850a2d8712abab0c3"/></dir><file name="Item.php" hash="7984f74e36b28c8c11aaa6943f4473fc"/></dir><file name="Creditmemo.php" hash="988378bfee2b037626163ee5902078dd"/><dir name="Grid"><file name="Collection.php" hash="df27b27ef5085309a2c1fb1e8b168bd3"/></dir><dir name="Invoice"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="317af04acf0b7e69b1cbdd9e3d2faf32"/><file name="Item.php" hash="d0311aff201be97cb557d24fd3754750"/><file name="Order.php" hash="72d3835281c696b3b26928cd7dd278b5"/><file name="Parent.php" hash="a3ac62eeed1dd2f9fc631d07526d6c8d"/></dir></dir><file name="Collection.php" hash="db6d9a454f8f7538ecf7890ea7c2a047"/><dir name="Comment"><file name="Collection.php" hash="a53f5d21071a1b1e74d07d1a49cda0c0"/></dir><file name="Comment.php" hash="3b1e3baef7109740d614b7856dfe841c"/><dir name="Grid"><file name="Collection.php" hash="c351999b5b6c93d8bd1558ebe68e1928"/></dir><dir name="Item"><file name="Collection.php" hash="93d2e9d840b54dba20a78dd3ed9b77a9"/></dir><file name="Item.php" hash="a711548629d54d07e7ff3b9562337cc1"/></dir><file name="Invoice.php" hash="d6337f07169332724c590e12dc000241"/><dir name="Item"><file name="Collection.php" hash="57766f358cae02614da06a56ebf68048"/></dir><file name="Item.php" hash="60c8f04859713c5cfb7330578bf336f3"/><dir name="Payment"><file name="Collection.php" hash="9eab37574da534db4ef22f6345294a23"/><dir name="Transaction"><file name="Collection.php" hash="ccc0e97c4316f95129bd90ebea9ac26f"/></dir><file name="Transaction.php" hash="83fa21cd606358176616b33110b0e13c"/></dir><file name="Payment.php" hash="a64998298c43c70957e56b69e91b4612"/><dir name="Shipment"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="1df7fbf2a3e04ae36b78b142b50477e0"/><file name="Parent.php" hash="d6e321521a5c1996422d9dee59a1a4a1"/></dir></dir><file name="Collection.php" hash="6fd5cd93f34127991c097b70138f4057"/><dir name="Comment"><file name="Collection.php" hash="ec5ea997e5321b3c38d53fb5f051c8e0"/></dir><file name="Comment.php" hash="e5a5ae0ce325a6d8e4dab0dda6a372c4"/><dir name="Grid"><file name="Collection.php" hash="a3a041b5fed571c96c3d5dbc6460bcf2"/></dir><dir name="Item"><file name="Collection.php" hash="810e3353b31c8f6771a709dc66142ac2"/></dir><file name="Item.php" hash="8eaf8b193c2150db1f8311da4a9b6ee3"/><dir name="Track"><file name="Collection.php" hash="aa21f2acdeb0ef781a69301b10833ba3"/></dir><file name="Track.php" hash="ee0457dbf45560ac5911dce55c2fe3b7"/></dir><file name="Shipment.php" hash="4691e9adcb7a03ee4a464d8668bd56f2"/><dir name="Status"><file name="Collection.php" hash="a485ee0868fa12033f24c47639f51d14"/><dir name="History"><file name="Collection.php" hash="dec595caafb8eea44138c6864159b016"/></dir><file name="History.php" hash="134f002dfb8d6b14a26f6b70447de8d2"/></dir><file name="Status.php" hash="6b89b67664dea7f569d37a86d5139ee0"/><dir name="Tax"><file name="Collection.php" hash="6f6bf9dc4458315260ded0ceffa66c74"/></dir><file name="Tax.php" hash="8ac6240b20b5c08e5368d781f319eb3f"/></dir><file name="Order.php" hash="47d2e1636d6a54df38885b7844615353"/><dir name="Quote"><dir name="Address"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="be26c808511a087089aa7e08962791e4"/><file name="Parent.php" hash="fa97e68427448811aaa32d82881109e8"/><file name="Region.php" hash="7482ea51890c4587a1cc93e7ba56b10d"/></dir><file name="Backend.php" hash="805b81cf251ad652e2d208f0e0f7fbd5"/><dir name="Frontend"><file name="Custbalance.php" hash="dfb08b9d0680bddf40a784b1c3652707"/><file name="Discount.php" hash="7fb276ce85e37b894b9ed71e11537d17"/><file name="Grand.php" hash="e79b6a2c4ae1da1fb6f9a0a6a73fc230"/><file name="Shipping.php" hash="58035703127f091113e635f2747fdcb3"/><file name="Subtotal.php" hash="031a748026b4062777afab89a61382ec"/><file name="Tax.php" hash="267aff76937222e3ca525f978325802c"/></dir><file name="Frontend.php" hash="c4de050c924aa561b203f49c9aa77f52"/></dir><file name="Collection.php" hash="cf9a075a8d879ccb813fde325b8ea878"/><dir name="Item"><file name="Collection.php" hash="1764986d570000e1ed051efd4563ae65"/></dir><file name="Item.php" hash="17690376ee9c7581761bb0e83e403420"/><dir name="Rate"><file name="Collection.php" hash="2fccbac4a69ea4a863b06f167b30a5ba"/></dir><file name="Rate.php" hash="355a5a7fa205cd5162938ccd02fe3660"/></dir><file name="Address.php" hash="02074bc356903b060b5ca500a5ed0615"/><file name="Collection.php" hash="8406cd2fe85cf92d99e7b86f77c01649"/><dir name="Item"><file name="Collection.php" hash="1b7cd1e44d6b7e792cc46971f6720cf4"/><dir name="Option"><file name="Collection.php" hash="e772bd35040257d9dedbfcd11a1feaeb"/></dir><file name="Option.php" hash="c23b184da316d5b7f20ef415f260a119"/></dir><file name="Item.php" hash="664390b7e549e0d6f8e19e6e81efef93"/><dir name="Payment"><file name="Collection.php" hash="3f1b159c957342544faf1b8ae0467883"/></dir><file name="Payment.php" hash="a41b3fa7a10728fd2f806dc2abccb3d4"/></dir><file name="Quote.php" hash="543e27fcc1e4d03903360027278032fa"/><dir name="Recurring"><dir name="Profile"><file name="Collection.php" hash="d1395a052ccb3c15218299cc30c1a922"/></dir><file name="Profile.php" hash="34d2a525e68e791028f0c886ad66653a"/></dir><dir name="Report"><file name="Abstract.php" hash="264e7a22582d19fe012b339d82fb28af"/><dir name="Bestsellers"><file name="Collection.php" hash="b9f067c6b59bacda74a3a9edba6f6564"/></dir><file name="Bestsellers.php" hash="fe867b3b2efa3697ccfe9594f28770c4"/><dir name="Collection"><file name="Abstract.php" hash="b3fb0dc1c6a8bd85b9ffb5ccb4c0f13e"/></dir><dir name="Invoiced"><dir name="Collection"><file name="Invoiced.php" hash="cb31bd6a8718c3d9b9e30f7f6ffbdcd0"/><file name="Order.php" hash="c4ea26ba47b4abad683809bdd8fe6e20"/></dir></dir><file name="Invoiced.php" hash="3838e450140aabdaa9a84d18a5680321"/><dir name="Order"><file name="Collection.php" hash="76c2d00b49ecc6479d5272ed520d6ef6"/><dir name="Updatedat"><file name="Collection.php" hash="5ea2acf2e43881c261c371e7d03492d3"/></dir></dir><file name="Order.php" hash="cee72fd4fac73ab28c735b182d3830a0"/><dir name="Refunded"><dir name="Collection"><file name="Order.php" hash="45cdb9a7f4b2aea0a5e92d95906f3f7b"/><file name="Refunded.php" hash="58a714e1193b56714058ebd306415ad9"/></dir></dir><file name="Refunded.php" hash="4cd043f5734d21bf6e650887a23ee1eb"/><dir name="Shipping"><dir name="Collection"><file name="Order.php" hash="c243edc0a166c78c2005e5e0ecebeacb"/><file name="Shipment.php" hash="945e5b66fcde6ebabf1d5d379486980f"/></dir></dir><file name="Shipping.php" hash="8e1b13cacd6ea502187bc5e6660632ab"/></dir><file name="Report.php" hash="ee15aad82166a514b2af7905bb00a4e8"/><dir name="Sale"><file name="Collection.php" hash="f219ebe08f9a11d9dc1304b0ee8b483e"/></dir><file name="Setup.php" hash="2c52c0bb23917998f6e96b0851420280"/></dir><file name="Observer.php" hash="6b3ae0486bb0d6ff4cd6a6d27ce4951d"/><dir name="Order"><file name="Address.php" hash="a3615a36e6213aa81e9faa6bde9780c3"/><dir name="Api"><file name="V2.php" hash="7067acd424538ad5c7bcf2ddaf57a4ff"/></dir><file name="Api.php" hash="3674caa8e6636a7b7e5a8d6607304e37"/><file name="Config.php" hash="16189fa4292a0135999f2e271662e2e6"/><dir name="Creditmemo"><dir name="Api"><file name="V2.php" hash="14079d353e770eb86bca26f4bb3a9fbd"/></dir><file name="Api.php" hash="30c77953cf52796be8085711545505fa"/><file name="Comment.php" hash="51864ddc190da192e6740764b3d8f822"/><file name="Config.php" hash="6c3f23705e98e04c13f8b7e7716f5e1b"/><file name="Item.php" hash="87edae9659a545c3b11a5e04a2722ff5"/><dir name="Total"><file name="Abstract.php" hash="1b6bb665ef2a88693e37dc6dfa63348a"/><file name="Cost.php" hash="f4147f87113140b1e8110dc86f430238"/><file name="Discount.php" hash="05013434cb347a8f1191d6ba4f220ff7"/><file name="Grand.php" hash="7e4e3d77d2f4d9e3c4c85d77aeaa1f5a"/><file name="Shipping.php" hash="8ea84819c3f7f28a563081f7c30a5bbe"/><file name="Subtotal.php" hash="096dca410a51133e58b75f74a7306921"/><file name="Tax.php" hash="10f4834b7f38602b19dcee614abe352c"/></dir></dir><file name="Creditmemo.php" hash="518a9596065ddb64fa63ceb9a4fada41"/><dir name="Invoice"><dir name="Api"><file name="V2.php" hash="1c5cb7dbfad894ecdd710a6501ab00fe"/></dir><file name="Api.php" hash="4d76d08b8d4312bc478d20c916b21b2d"/><file name="Comment.php" hash="d0bf13150f6a0c5c7a61c9ad733c9be0"/><file name="Config.php" hash="db8b79964525f16c624bb1d5dc81df8e"/><file name="Item.php" hash="c2d7a19f2ddbcbf008ff05d331bc4374"/><dir name="Total"><file name="Abstract.php" hash="847070d3c4113d54c8cc999a970ecc55"/><file name="Cost.php" hash="a6b23caa4c456d8ce1ac713a0cce01d2"/><file name="Discount.php" hash="75da9a43578e469699733717dd6dcf94"/><file name="Grand.php" hash="297500b958462e1e22d42c24030425cb"/><file name="Shipping.php" hash="5212cea8bca9d2a48fbe66b8d1730586"/><file name="Subtotal.php" hash="22646f1812eeec3618a243a6747ab2a1"/><file name="Tax.php" hash="22456b1b16cced9d3eafa22f2d36af07"/></dir></dir><file name="Invoice.php" hash="787438946107a4c47ad0b722ac1d65a8"/><file name="Item.php" hash="abe38e10e46622284a2cf35a253fcf14"/><dir name="Payment"><file name="Transaction.php" hash="d7dac2a25750236c45b9beeedcd5fd5c"/></dir><file name="Payment.php" hash="fee69051078badb383ed6b4d4595fcfb"/><dir name="Pdf"><file name="Abstract.php" hash="17bcf72dc9d0998a8d429ddfd95b7c47"/><file name="Creditmemo.php" hash="b5e722b76b6e332feea56e8c1a0ef544"/><file name="Invoice.php" hash="46ded5d0e47f6b11e8256afba29780d4"/><dir name="Items"><file name="Abstract.php" hash="45e20ce44c7806ae65d6959c4d3fdbe2"/><dir name="Creditmemo"><file name="Default.php" hash="dd08cb764624df49c7f939250e539226"/><file name="Grouped.php" hash="d37384547040e88d0132c153400fa61d"/></dir><dir name="Invoice"><file name="Default.php" hash="8ada82c1dbc31d52701480f1902bc047"/><file name="Grouped.php" hash="5bf317fef6242a6e40c7e49c07eddb8b"/></dir><dir name="Shipment"><file name="Default.php" hash="ff3d1db3a86a1bb42544f7b7ef08e3ad"/></dir></dir><dir name="Shipment"><file name="Packaging.php" hash="d94bb45890c005d3e90f10913956f106"/></dir><file name="Shipment.php" hash="6ddbd07c34c77d647875d27c66a9ad4c"/><dir name="Total"><file name="Default.php" hash="388395eaacb6714fbd399787e2115c7b"/></dir></dir><dir name="Shipment"><dir name="Api"><file name="V2.php" hash="6c7aa70683a5b5016a33cb45f07c5f83"/></dir><file name="Api.php" hash="8bfc4007476bf40b7f151ec05b3f2277"/><file name="Comment.php" hash="a4082edca5b999c0c78665790de02cdd"/><file name="Item.php" hash="e6aa9931492b3f5cdf178124ab82b59c"/><file name="Track.php" hash="56f2f0f84f1a3ed8dbd51d86ff103a32"/></dir><file name="Shipment.php" hash="5115b7c8b6f3971d5bf7a9dea5b75190"/><dir name="Status"><file name="History.php" hash="f83b695ff16adaee53b44a4c72cae947"/></dir><file name="Status.php" hash="52f4b3481ea4a178eeb3217f2b0217e5"/><file name="Tax.php" hash="5ec3e6df4cc355e634c88b1fa43ba4bf"/><dir name="Total"><file name="Abstract.php" hash="ab08d63eea14f655d3c0b19c5ec903f5"/><dir name="Config"><file name="Base.php" hash="8c43c43eb05255b24fdc8e31b31efecd"/></dir></dir><file name="Total.php" hash="b205b779b9242f6b19a21afbb733c162"/></dir><file name="Order.php" hash="346d2b0fd980510f97f0498bee35f308"/><dir name="Payment"><dir name="Method"><dir name="Billing"><file name="AgreementAbstract.php" hash="9725b084bbd355e8c221dcc613df41a5"/></dir></dir></dir><dir name="Quote"><dir name="Address"><file name="Item.php" hash="3ae1834f6fe626cbf63410aec2940627"/><file name="Rate.php" hash="14fc3c2112712db9717b4a0a13d15ec3"/><dir name="Total"><file name="Abstract.php" hash="a7f2fe7c03af2c89584b5ae257ec28aa"/><file name="Collector.php" hash="543475b79a9578f126f56ccd52cd6cb0"/><file name="Custbalance.php" hash="9aff8cf0f8e6d563fe89a5e16318aaf0"/><file name="Discount.php" hash="3919a311503fe2bc6f40f27e5fc460cc"/><file name="Grand.php" hash="be1eeabe2ea7af11b4792df4097959a2"/><file name="Msrp.php" hash="47068f636822c3abbc0829fcf421e448"/><dir name="Nominal"><file name="Collector.php" hash="279e887182cf75fc0d02d326e5107dbf"/><dir name="Recurring"><file name="Initial.php" hash="1cac1579ed7eace68b6f3ccd6dd0f6db"/><file name="Trial.php" hash="9bd24e561b17ac910035f1c94e0a66d3"/></dir><file name="RecurringAbstract.php" hash="df3faa2c787706c968e5e040997149f2"/><file name="Shipping.php" hash="024dcf97a900fd8b617ee378c35e0161"/><file name="Subtotal.php" hash="9fd604d4f422ca811a5a4f0eb82a85f7"/></dir><file name="Nominal.php" hash="9d7397526d4aed1fa40791a2dae842d3"/><file name="Shipping.php" hash="90240c3a38456d95cfe14477ff9a0aca"/><file name="Subtotal.php" hash="e45ab96ba686d0f7797c15738bdaf3a8"/><file name="Tax.php" hash="eaad017972debd4ee4b0e84f35528829"/></dir><file name="Total.php" hash="c1c66f97471c41ecc5200162001b30a0"/></dir><file name="Address.php" hash="b302cdb6dd5a26d0653c77426b458eaf"/><file name="Config.php" hash="1a405048ffab0aa9286ef1a9152e4cf4"/><dir name="Item"><file name="Abstract.php" hash="404b546babd7fbca3f4102938c5b10b6"/><file name="Option.php" hash="2354c151737bfa46a68d12fe173690db"/></dir><file name="Item.php" hash="f93885569fb2cd0a3236f43519f4ad97"/><file name="Payment.php" hash="4f48c4140768f66179ecd6384bf3a296"/></dir><file name="Quote.php" hash="976835f2ad40d36b95f16f05397c28ab"/><dir name="Recurring"><file name="Profile.php" hash="2efabc2b8df13eb5fa66c1de41d66afd"/></dir><dir name="Resource"><file name="Abstract.php" hash="ea490ac031b524bea4ba05969fc96e6d"/><dir name="Billing"><dir name="Agreement"><file name="Collection.php" hash="bdb4107917da11c3c6c1af73ba11886c"/></dir><file name="Agreement.php" hash="cd36bc5506d7c761a1b9e7391524d86c"/></dir><dir name="Collection"><file name="Abstract.php" hash="51b42b98ea4c98c529aa08f8315ffc74"/></dir><dir name="Helper"><file name="Interface.php" hash="f76607969a2cfd69a53dfbf05bb925de"/><file name="Mysql4.php" hash="1875b015b52c3560592b6d02db6666a7"/></dir><dir name="Order"><file name="Abstract.php" hash="20dbcdeae97c722938469bbea6438fea"/><dir name="Address"><file name="Collection.php" hash="4a1787b25f7c6e726ba31a2e4f589570"/></dir><file name="Address.php" hash="e46b64d38f40223036f1de1a9c108102"/><dir name="Attribute"><dir name="Backend"><file name="Billing.php" hash="c131e65596d6eebe16994c6448dedfff"/><file name="Child.php" hash="62a4cc6f57097793e50ce0ac88d8ff11"/><file name="Parent.php" hash="0d434c37560203b7ab50bb1302bc8f0e"/><file name="Shipping.php" hash="1e5a30a9c5598387a3e1d737bd4df4f5"/></dir></dir><dir name="Collection"><file name="Abstract.php" hash="dd4c06db4cbd8ed33a0c26207e393c92"/></dir><file name="Collection.php" hash="43dc36f6936b91fc113bff644dbf520a"/><dir name="Comment"><dir name="Collection"><file name="Abstract.php" hash="bb99fec3c7900d0e1eacf7bb13fc437e"/></dir></dir><dir name="Creditmemo"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="85ee4c6d66f60cfe7e35898f90109ca3"/><file name="Parent.php" hash="ce51a4256150044320202e1f6790f6c4"/></dir></dir><file name="Collection.php" hash="8936337edd51b5ff9a117ceffd9486c8"/><dir name="Comment"><file name="Collection.php" hash="2a074d811df831ed3e63db2de9802204"/></dir><file name="Comment.php" hash="24902dcb883850b0addef5b87380c7ae"/><dir name="Grid"><file name="Collection.php" hash="831f3834ab51086b38dce2dc846c61ed"/></dir><dir name="Item"><file name="Collection.php" hash="23cfedfa19cd81c21a08a937696f3ab8"/></dir><file name="Item.php" hash="ce67ef24a2ad12d75764b8c61ff10dd1"/></dir><file name="Creditmemo.php" hash="daa34995c168670ffd3ea174c46613b4"/><dir name="Grid"><file name="Collection.php" hash="6dd70bd3305b924da5c44675c5894f93"/></dir><dir name="Invoice"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="cbb0693ffaf5fa22757eb232b7fbc70c"/><file name="Item.php" hash="413b22e9354b3a07fc7b257670782cef"/><file name="Order.php" hash="1e2fdac3e2c21b76b4f42c9c53dcfda0"/><file name="Parent.php" hash="7fa160f57f4714cb4a18fe33a7388f5b"/></dir></dir><file name="Collection.php" hash="12aac698234ab6fc10ff17034ce8df45"/><dir name="Comment"><file name="Collection.php" hash="0d06272d5576f2b18e7b798c39c7f7e3"/></dir><file name="Comment.php" hash="6915c732d89bde5dc4e4e24cc44472ba"/><dir name="Grid"><file name="Collection.php" hash="c5624a52729803e5c8620337aca171a9"/></dir><dir name="Item"><file name="Collection.php" hash="525b58c10c6c1037ee34c4a79dbe7ad0"/></dir><file name="Item.php" hash="c6585be8f7b1db0e62e2cf8ab6b7874f"/></dir><file name="Invoice.php" hash="8a1a7b0ef68669c7b34fc48c4f0dcddb"/><dir name="Item"><file name="Collection.php" hash="176f717ac739052b6916463790441b8f"/></dir><file name="Item.php" hash="dce1a127f66a9e6428e9f808fdc769c3"/><dir name="Payment"><file name="Collection.php" hash="a8d7e7f56e811a9c36ac0c789dcbed12"/><dir name="Transaction"><file name="Collection.php" hash="0ac39e0c1c389727de0c11879639ba87"/></dir><file name="Transaction.php" hash="298b33cceb85b5a757ff9e2c5e4f5afc"/></dir><file name="Payment.php" hash="118414190d11cc9baaf63cb49828b5b0"/><dir name="Shipment"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="3fa9311faa46ac5f9797131e05db7395"/><file name="Parent.php" hash="42928c2eeb53a7b52a2a07df26985119"/></dir></dir><file name="Collection.php" hash="e12bb87e81e655b5767cc7f93ecaaa93"/><dir name="Comment"><file name="Collection.php" hash="970946b0c0af5604a1206113378e0ebc"/></dir><file name="Comment.php" hash="26b0f55b0d8c8857f8cbee190f2b1d3d"/><dir name="Grid"><file name="Collection.php" hash="e3ac9bc8545d2797a7a05bc299fb3e80"/></dir><dir name="Item"><file name="Collection.php" hash="90ce90a50a2bc64c9c5eda09b87a7f4b"/></dir><file name="Item.php" hash="60b087d1d6af44919efd905e49c3c62e"/><dir name="Track"><file name="Collection.php" hash="b99b08006f31786e0ecbbda2e4caca83"/></dir><file name="Track.php" hash="432355e34939bd400d1b1cbb3b74a32f"/></dir><file name="Shipment.php" hash="68a9a03dd12e76fb449de0967d195efb"/><dir name="Status"><file name="Collection.php" hash="3278d85b3e345f9cb952d62d1de47692"/><dir name="History"><file name="Collection.php" hash="bdef52f9fabb1f71e3edd6b89219ffe8"/></dir><file name="History.php" hash="1b458a7d3e5d271bddd96ef479f132db"/></dir><file name="Status.php" hash="4288eb12408bf67290826cff7df4aa7a"/><dir name="Tax"><file name="Collection.php" hash="fa155762b727314be328312941189d00"/></dir><file name="Tax.php" hash="6129f98bc5b2984e5283b1b650624d8d"/></dir><file name="Order.php" hash="904377587c7a8bd27354b41b23a53d23"/><dir name="Quote"><dir name="Address"><dir name="Attribute"><dir name="Backend"><file name="Child.php" hash="369543a2fa39d232fd4f6646b63e8ec1"/><file name="Parent.php" hash="eda07b62dd8c0a1635029d13a585abbd"/><file name="Region.php" hash="530d94dace10e60b341d1fe7cd6422e5"/></dir><file name="Backend.php" hash="5be4ed862760bc33b3e54a30e996a1d1"/><dir name="Frontend"><file name="Custbalance.php" hash="9be96592493a3ae7b3fda82f209156a5"/><file name="Discount.php" hash="97b4061b4fe3cb688dceb3257666004f"/><file name="Grand.php" hash="2106653f49bda21734a52abe74be249d"/><file name="Shipping.php" hash="4fb2173a120e98fa933552caaf2a6bf3"/><file name="Subtotal.php" hash="e8df507e5e9792d758d839ea9b3bae8f"/><file name="Tax.php" hash="6dcf8738025d2f06effdd58e6dfef27a"/></dir><file name="Frontend.php" hash="2a5b816c2bce98c2b576fa3259354403"/></dir><file name="Collection.php" hash="451ce58ddc5b65f7889fc191b9c4a536"/><dir name="Item"><file name="Collection.php" hash="9e0c3063b4e137a251a66c5c14431343"/></dir><file name="Item.php" hash="20e10524e121cd1bac70064c4c72fd8a"/><dir name="Rate"><file name="Collection.php" hash="b34a0efa65709981133d8399dddcdf28"/></dir><file name="Rate.php" hash="3e61ffad4f72a78e0888a985d8fef8f6"/></dir><file name="Address.php" hash="2cb48cc23d5e5206958745da72d13686"/><file name="Collection.php" hash="01999f2337a532357698782f263fac5c"/><dir name="Item"><file name="Collection.php" hash="2afb7b5b8428e3b51ee78adca7476045"/><dir name="Option"><file name="Collection.php" hash="48e63e2fbba4c374c074e14c06d56338"/></dir><file name="Option.php" hash="4fefd261aebbe023fc107fcac6f0c305"/></dir><file name="Item.php" hash="292c094548d77a4455cf83faf93f0710"/><dir name="Payment"><file name="Collection.php" hash="2e43057411cbc115b82f2c0d303cf97a"/></dir><file name="Payment.php" hash="0130e600e213853660d996f1f1b32ae2"/></dir><file name="Quote.php" hash="486b3ac1533e640724b9afc471b05c1e"/><dir name="Recurring"><dir name="Profile"><file name="Collection.php" hash="e62415bf7f7b0dd9a450713e6c4ac4d4"/></dir><file name="Profile.php" hash="3f70af49f45077f9dd1582119f0eb91d"/></dir><dir name="Report"><file name="Abstract.php" hash="38c9b8c1083e50c351426d3e3031949f"/><dir name="Bestsellers"><file name="Collection.php" hash="c9cde9d55954ba6b9ee7f6f108425446"/></dir><file name="Bestsellers.php" hash="4967fc6ee92b497de0388a1460aacdef"/><dir name="Collection"><file name="Abstract.php" hash="f595f30f74245c975150764709f08d73"/></dir><dir name="Invoiced"><dir name="Collection"><file name="Invoiced.php" hash="4b36243994f78b1b24e3e978d069f9e8"/><file name="Order.php" hash="ffa266b09fa0d97557988e7a03bc07e9"/></dir></dir><file name="Invoiced.php" hash="11e111fce08ce735e56a54c3f8aa6d41"/><dir name="Order"><file name="Collection.php" hash="b2cec0c1f9c36f7a408030e60a01307e"/><file name="Createdat.php" hash="6e1c7e18f82ebd8908e73b2c004cb476"/><dir name="Updatedat"><file name="Collection.php" hash="3fa1df8ad8b1848a097d543b003a85f8"/></dir><file name="Updatedat.php" hash="e58e612a18b802c0b557d7e434e633e8"/></dir><file name="Order.php" hash="7c33ab34a6d11ddc78e61bc683816259"/><dir name="Refunded"><dir name="Collection"><file name="Order.php" hash="13a060a38654076459217de14071fc1c"/><file name="Refunded.php" hash="c54996f3bfa443eef148d392030683ab"/></dir></dir><file name="Refunded.php" hash="ff9b24303743367136d0c2e86d9cfa33"/><dir name="Shipping"><dir name="Collection"><file name="Order.php" hash="4ee344e59e240ffc3e48e2df4e78a9a0"/><file name="Shipment.php" hash="b9dde12fc18d59c1575a4322ef3e7544"/></dir></dir><file name="Shipping.php" hash="e1c416b2401864dd2c0463e2b9fed0f9"/></dir><file name="Report.php" hash="8783521c829f4045b6969502894d544c"/><dir name="Sale"><file name="Collection.php" hash="04f2c47481d7d51db1b1da3b1ac4b4a4"/></dir><file name="Setup.php" hash="3a4b62fef594c0d114153e2855ba1669"/></dir><dir name="Service"><file name="Order.php" hash="f8a7159d6427c7a3680e774aaa009741"/><file name="Quote.php" hash="0be73db6503e7bbd239d719e1b3cab1d"/></dir><dir name="Status"><file name="List.php" hash="aa25608d8612ba8971bd501d0fa94d4d"/></dir></dir><dir name="controllers"><dir name="Billing"><file name="AgreementController.php" hash="97322684834e02e16d64f0c11bfd1fe6"/></dir><file name="DownloadController.php" hash="cee6dfef90a6b58bcca8a764bdc627ae"/><file name="GuestController.php" hash="3bedc09dada50e06d5629f01bb790092"/><file name="OrderController.php" hash="c79c2f10bc284936c4f192d11c762f4a"/><dir name="Recurring"><file name="ProfileController.php" hash="9054131ddbe14d510745b9204c43c0e2"/></dir></dir><dir name="data"><dir name="sales_setup"><file name="data-install-1.6.0.0.php" hash="02cefc47dd017845278948de5b307e6e"/><file name="data-upgrade-1.6.0.4-1.6.0.5.php" hash="46ce4a49f4522436e675252ede79b2bf"/></dir></dir><dir name="doc"><file name="invoice.txt" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="order.txt" hash="5dce876530c94ebbedbba7a234c23846"/><file name="order_actions.HTM" hash="b955e61bff753ea0534f907ef6ba9bb6"/><file name="quote.txt" hash="55ecfbdd576958ff1b1fbf16957ba9df"/><file name="test.php" hash="66d29b9e2fd667710fa7f1b03e588cd2"/></dir><dir name="etc"><file name="adminhtml.xml" hash="b10c4287ee15479510f28a499304ad1f"/><file name="api.xml" hash="dafc425001905db65660a077d77a8082"/><file name="api2.xml" hash="909f2d2b94d1a746ddeee52cca26fb8d"/><file name="config.xml" hash="3ecd88607ae60c576d52da1292869156"/><file name="system.xml" hash="51b69bdf518a615fe6971d7e32e05438"/><file name="widget.xml" hash="a00f4406f3f567e77f360d82a93c1932"/><file name="wsdl.xml" hash="ed13de1dde6408ab508892374ef57b81"/><file name="wsi.xml" hash="6aba2f44765955ec8bcd1afcebfb0800"/></dir><dir name="sql"><dir name="sales_setup"><file name="install-1.6.0.0.php" hash="0bb0f98e83cc59f0a96a245b688876bd"/><file name="mysql4-install-0.7.0.php" hash="462ef3674fe632dded10934e350e132c"/><file name="mysql4-install-0.8.11.php" hash="33eb92bab72ace62f913a1f6a49b10e2"/><file name="mysql4-install-0.9.0.php" hash="aeea2ae2bf3921fb861663ac43890821"/><file name="mysql4-install-1.4.0.0.php" hash="b8e163bec9787ec195214817ccd25aeb"/><file name="mysql4-upgrade-0.6.2-0.7.0.php" hash="b01396fa2d364bf24f31111fbc7480fb"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="7184eaf5301bf86734e27d35af77ec2a"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="3f7c0e697c9156d795a9171ebd2cc6b2"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="60fec48ecd973b0880a7ba0c1601f745"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="e3fb495eeae476ed6ed936d2da080d6a"/><file name="mysql4-upgrade-0.8.0-0.8.1.php" hash="a382796307c879e9978b6e919e06a0ee"/><file name="mysql4-upgrade-0.8.1-0.8.2.php" hash="cb97a875a9de942193d08787e4b5d0ad"/><file name="mysql4-upgrade-0.8.11-0.8.12.php" hash="77aa2ddafb2e56c2810037573704355d"/><file name="mysql4-upgrade-0.8.12-0.8.13.php" hash="9148158224e988cc0cda3c0f9447a676"/><file name="mysql4-upgrade-0.8.13-0.8.14.php" hash="b744d677ef8a3c4d8e7aac727faca09d"/><file name="mysql4-upgrade-0.8.14-0.8.15.php" hash="30f29aab40ee4b16f96137f021959739"/><file name="mysql4-upgrade-0.8.15-0.8.16.php" hash="e9511a88e249699f67b4f299190ffa29"/><file name="mysql4-upgrade-0.8.16-0.8.17.php" hash="923e0d6ffbb167057c5dce8ea0cf9cf6"/><file name="mysql4-upgrade-0.8.17-0.8.18.php" hash="00c5ac7a53fd59f7b1d22984e2961670"/><file name="mysql4-upgrade-0.8.18-0.8.19.php" hash="2a9d7aa03f976fdc19635631a19fb20f"/><file name="mysql4-upgrade-0.8.19-0.8.20.php" hash="4f97ee809943e787c96b4d8face8782e"/><file name="mysql4-upgrade-0.8.2-0.8.3.php" hash="478988a292e5263b88d39701fa246579"/><file name="mysql4-upgrade-0.8.20-0.8.21.php" hash="e57d49e1848d77d691b3eabb8d1cac4e"/><file name="mysql4-upgrade-0.8.21-0.8.22.php" hash="2e95a587381666c511af8e33cc29add9"/><file name="mysql4-upgrade-0.8.22-0.8.23.php" hash="09820b143bd2c14e0f755186ff6dd099"/><file name="mysql4-upgrade-0.8.23-0.8.24.php" hash="e3d5bf92a6338fb36b651729dbf6b5e2"/><file name="mysql4-upgrade-0.8.24-0.8.25.php" hash="3bc697c07cb99afcbcd547421d32a029"/><file name="mysql4-upgrade-0.8.25-0.8.26.php" hash="a2dec68bf46c62e4135a15adc4054a01"/><file name="mysql4-upgrade-0.8.26-0.8.27.php" hash="b659a882629e65e957b070eea0b64e92"/><file name="mysql4-upgrade-0.8.27-0.8.28.php" hash="cee327efb851c3d4c6755a6eb5ebb486"/><file name="mysql4-upgrade-0.8.28-0.8.29.php" hash="3f7df5f348dfd2cd8b5dcca8c7c327eb"/><file name="mysql4-upgrade-0.8.29-0.9.0.php" hash="f908b74ec1d3ca439b68f3e53da73d32"/><file name="mysql4-upgrade-0.8.3-0.8.4.php" hash="5f3bd96bad7a59e1fc5bed3c6a981e18"/><file name="mysql4-upgrade-0.8.6-0.8.7.php" hash="478988a292e5263b88d39701fa246579"/><file name="mysql4-upgrade-0.8.7-0.8.8.php" hash="359d1844bcced0a4990109d5a3e42f0c"/><file name="mysql4-upgrade-0.8.8-0.8.9.php" hash="999bd5a25ecddb2d761b305bb4d72a3c"/><file name="mysql4-upgrade-0.9.0-0.9.1.php" hash="37da657ede40afb7a5182183d5e34c78"/><file name="mysql4-upgrade-0.9.1-0.9.2.php" hash="e38c9cab4a09c709fd753f8dd10172c6"/><file name="mysql4-upgrade-0.9.10-0.9.11.php" hash="f19b6d1077b4a43fdd8242190b9014a1"/><file name="mysql4-upgrade-0.9.11-0.9.12.php" hash="c2f730a54671a4a8d0aff9b20b001bc5"/><file name="mysql4-upgrade-0.9.12-0.9.13.php" hash="7941dce96df5b27e0091a30f7e641384"/><file name="mysql4-upgrade-0.9.13-0.9.14.php" hash="c692b5c3a033952e280c5a3f3ac250d0"/><file name="mysql4-upgrade-0.9.14-0.9.15.php" hash="75c7659a026b12105c775dca9b3a35d8"/><file name="mysql4-upgrade-0.9.15-0.9.16.php" hash="66fbe7eba8efa04618e47798d700cf22"/><file name="mysql4-upgrade-0.9.16-0.9.17.php" hash="b4ad0ba23383895098baf2595e7ed2e8"/><file name="mysql4-upgrade-0.9.17-0.9.18.php" hash="46d2aac6cdcdade35a6cd56470b675d8"/><file name="mysql4-upgrade-0.9.18-0.9.19.php" hash="95fc75c590ef109016d64a7e046c6a0a"/><file name="mysql4-upgrade-0.9.19-0.9.20.php" hash="a3e4c82a24ea923c4172fbf7953c191d"/><file name="mysql4-upgrade-0.9.2-0.9.3.php" hash="6626c9dcd59254a9f7d95f6849974dbc"/><file name="mysql4-upgrade-0.9.20-0.9.21.php" hash="9153e34efed12b4c6c3b7fbd0c835c8e"/><file name="mysql4-upgrade-0.9.21-0.9.22.php" hash="2faf29b7392840fa59e0fc03d96d61ce"/><file name="mysql4-upgrade-0.9.22-0.9.23.php" hash="1eb3ec821367d5f48fd0abbe60fc519d"/><file name="mysql4-upgrade-0.9.23-0.9.24.php" hash="027e9756bc75cf23b6bac1b7332bf4cc"/><file name="mysql4-upgrade-0.9.24-0.9.25.php" hash="fb956ea2ecc81ac02957d988b377cf0a"/><file name="mysql4-upgrade-0.9.25-0.9.26.php" hash="f210bac7762c0e7fdc66f62fb6cbe6b4"/><file name="mysql4-upgrade-0.9.26-0.9.27.php" hash="5253aa7faf062641bf7e556871df8e25"/><file name="mysql4-upgrade-0.9.27-0.9.28.php" hash="c708bfd6a507ecad7fc6c355fd1e4930"/><file name="mysql4-upgrade-0.9.28-0.9.29.php" hash="0a0dc5d23a7e036d936752a62404d4f9"/><file name="mysql4-upgrade-0.9.29-0.9.30.php" hash="38c3ff2b635d8ec6517e9c7dcc5de6f4"/><file name="mysql4-upgrade-0.9.3-0.9.4.php" hash="aafe70d96984e181507705441823d7c0"/><file name="mysql4-upgrade-0.9.30-0.9.31.php" hash="c777f32ef312bdf861b79622e9612bf7"/><file name="mysql4-upgrade-0.9.31-0.9.32.php" hash="76847f4d1f0e1357a895fdd4d0c30e1e"/><file name="mysql4-upgrade-0.9.32-0.9.33.php" hash="dc2296114158ee945deb60843962cde9"/><file name="mysql4-upgrade-0.9.33-0.9.34.php" hash="4114bf6b67bc92d34bfd18ec0810b0d5"/><file name="mysql4-upgrade-0.9.34-0.9.35.php" hash="ab41ec52694af14a35e17dbe43c55c9f"/><file name="mysql4-upgrade-0.9.35-0.9.36.php" hash="8364015ecfe1d5e347c17a5a097d78d8"/><file name="mysql4-upgrade-0.9.36-0.9.37.php" hash="b27b346cef4e4d0b58df197b0a238c2b"/><file name="mysql4-upgrade-0.9.37-0.9.38.php" hash="dbd05460732dc1e06cdc3d1d37907f88"/><file name="mysql4-upgrade-0.9.38-0.9.39.php" hash="0edb44ca7a54e5bcd369d8f314b59ea1"/><file name="mysql4-upgrade-0.9.39-0.9.40.php" hash="f72dcfb2c0753d75a80244c654142391"/><file name="mysql4-upgrade-0.9.4-0.9.5.php" hash="e983567d4a31a6a7774161040ced0632"/><file name="mysql4-upgrade-0.9.40-0.9.41.php" hash="4794a4e83d55fb940f587b4a297dae64"/><file name="mysql4-upgrade-0.9.41-0.9.42.php" hash="5c988af33e6155f36b1a9894f53f98e6"/><file name="mysql4-upgrade-0.9.42-0.9.43.php" hash="df12068b0a9af6431ab71c4c4d7baa9a"/><file name="mysql4-upgrade-0.9.43-0.9.44.php" hash="e2fc0e2fb187f525c3c278e1364294de"/><file name="mysql4-upgrade-0.9.44-0.9.45.php" hash="99a088be09d24560c7680d04eebecb40"/><file name="mysql4-upgrade-0.9.45-0.9.46.php" hash="2e1808631633138ef84167c35087871b"/><file name="mysql4-upgrade-0.9.46-0.9.47.php" hash="a1fbab58b6281d7c73e249b1172fe346"/><file name="mysql4-upgrade-0.9.47-0.9.48.php" hash="160448e66de783cbfa64c13483ea793f"/><file name="mysql4-upgrade-0.9.48-0.9.49.php" hash="5657862f11b8a2ccf05decf6bf651495"/><file name="mysql4-upgrade-0.9.49-0.9.50.php" hash="33e922d769595a4a22257df3288d0b23"/><file name="mysql4-upgrade-0.9.5-0.9.6.php" hash="7534168cbeafd219b913fad70ef0b604"/><file name="mysql4-upgrade-0.9.50-0.9.51.php" hash="727555136eb0ca74c78c0ae605bbcca5"/><file name="mysql4-upgrade-0.9.51-0.9.52.php" hash="fbf3075eb1122eb16a78ab1da6c87280"/><file name="mysql4-upgrade-0.9.52-0.9.53.php" hash="b95803e85855ad53a32036b4e2e422ce"/><file name="mysql4-upgrade-0.9.53-0.9.54.php" hash="ff3d7c4ff6666e38c8694403987358ce"/><file name="mysql4-upgrade-0.9.54-0.9.55.php" hash="221e4d19ff8a3b168ad2a77adb403947"/><file name="mysql4-upgrade-0.9.55-0.9.56.php" hash="0e5d2a62541e8d6f0150515bc95b6e21"/><file name="mysql4-upgrade-0.9.6-0.9.7.php" hash="bb9fe9fc17135267b8dceda66ba573df"/><file name="mysql4-upgrade-0.9.7-0.9.8.php" hash="51f542d4e4dc2eb4d151fa1d199e76c7"/><file name="mysql4-upgrade-0.9.8-0.9.9.php" hash="1ef9eb2e04ff17094c9fbe4dd04dbb43"/><file name="mysql4-upgrade-0.9.9-0.9.10.php" hash="e4c2fd4e25264a59dc4d2c2fed009b55"/><file name="mysql4-upgrade-1.3.99-1.4.0.0.php" hash="064bd9a3a66afbcec73dc6eba2d91aab"/><file name="mysql4-upgrade-1.4.0.0-1.4.0.1.php" hash="58cd3b1e53113ccf8da37272261f5420"/><file name="mysql4-upgrade-1.4.0.1-1.4.0.2.php" hash="abb82596cd80405e68ead6c3f9b118d6"/><file name="mysql4-upgrade-1.4.0.15-1.4.0.16.php" hash="8703f8f8f23ae434e029dc49d28f6724"/><file name="mysql4-upgrade-1.4.0.16-1.4.0.17.php" hash="02a61839f64351389226749ee95f2ac2"/><file name="mysql4-upgrade-1.4.0.17-1.4.0.18.php" hash="bd0e06542f412eb829d14f3a5fe389ba"/><file name="mysql4-upgrade-1.4.0.18-1.4.0.19.php" hash="8a67dcba5b4af5ce97eb6a5960dc37d6"/><file name="mysql4-upgrade-1.4.0.19-1.4.0.20.php" hash="f94a7026618758fcc4410f9cbf395513"/><file name="mysql4-upgrade-1.4.0.2-1.4.0.3.php" hash="7c8baf053e8f385017e5e6d7c9e4fadd"/><file name="mysql4-upgrade-1.4.0.20-1.4.0.21.php" hash="fd6098e114e8c077781ae9a109900e75"/><file name="mysql4-upgrade-1.4.0.21-1.4.0.22.php" hash="eec8bca856f155321127aa16554b6ff5"/><file name="mysql4-upgrade-1.4.0.22-1.4.0.23.php" hash="7dae40e457321e05723eddd332b3f777"/><file name="mysql4-upgrade-1.4.0.23-1.4.0.24.php" hash="ec6aca579e3d8bcdab92be6f0101edd7"/><file name="mysql4-upgrade-1.4.0.24-1.4.0.25.php" hash="90c7bdaa5340eadab0af599d27c26ad7"/><file name="mysql4-upgrade-1.4.0.3-1.4.0.4.php" hash="30ba90e80302ad78fe6ca46966b4ebe0"/><file name="mysql4-upgrade-1.4.0.4-1.4.0.5.php" hash="4d5b5a1832ff24134b7bee78a6347cbb"/><file name="mysql4-upgrade-1.4.0.5-1.4.0.6.php" hash="2eb2af257f342358fe654bc2ed203be0"/><file name="mysql4-upgrade-1.4.0.6-1.4.0.7.php" hash="1092e380e4d97fec73b574f5ca1210d1"/><file name="mysql4-upgrade-1.4.0.7-1.4.0.8.php" hash="321d6f3cac598aebb3a6d5690783bb8d"/><file name="mysql4-upgrade-1.4.0.8-1.4.0.15.php" hash="2605e1f309aaaa83e66e19952de196f1"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="fbb6d6a9211af940a9d09ea7ce124acf"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="1702e52d9327642cf39c787272e00088"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="51a01243c80475b335461fab5b124919"/><file name="upgrade-1.6.0.2-1.6.0.3.php" hash="0c3fc39d972a310d1802bd45d1086478"/><file name="upgrade-1.6.0.3-1.6.0.4.php" hash="d8f56295b53d69f61389f839001c7ead"/><file name="upgrade-1.6.0.4-1.6.0.5.php" hash="3d7df8adc7319e6568f7367e95f7f32e"/><file name="upgrade-1.6.0.5-1.6.0.6.php" hash="b99799afe881cb0c2c31534a4e4ddb51"/><file name="upgrade-1.6.0.6-1.6.0.7.php" hash="d874572b66f8d5893b1d58004cf2093f"/><file name="upgrade-1.6.0.7-1.6.0.8.php" hash="312c728e68f607a869e50e27edc81df8"/><file name="upgrade-1.6.0.8-1.6.0.9.php" hash="5e1ea6e5d77dc8c7ff9776d54007d8e7"/><file name="upgrade-1.6.0.9-1.6.0.10.php" hash="9f3b171078b5bf448639865bb8e759ba"/></dir></dir></dir><dir name="SalesRule"><file name="Exception.php" hash="c684bcb6cf5c1b0a6b652d34be1ef4d8"/><dir name="Helper"><file name="Coupon.php" hash="bec5fdde7197a727a2e2ad2a01d10e95"/><file name="Data.php" hash="56c45ee011ec0f06c7df0e3a88e33764"/></dir><dir name="Model"><dir name="Coupon"><file name="Codegenerator.php" hash="a9137a826ac5b0d94739a4f494616755"/><file name="CodegeneratorInterface.php" hash="50d019dcd547e2d36656037f6e4867e8"/><file name="Massgenerator.php" hash="91159302a81f191f9ecb9aefc6935cfe"/></dir><file name="Coupon.php" hash="d1acd813c8dd00fad47929b2a66964cf"/><dir name="Mysql4"><dir name="Coupon"><file name="Collection.php" hash="3631489bee3c9db6bed33f50dd87188e"/><file name="Usage.php" hash="abef6dd5e2675044255c4847b5ebfa75"/></dir><file name="Coupon.php" hash="481513e97ecba9c1dcbf58c988618dfa"/><dir name="Report"><file name="Collection.php" hash="0e5028d770ba6502e017a548ae3eb9f2"/><file name="Rule.php" hash="10834499b347164af794cbe10e8e5c8a"/><dir name="Updatedat"><file name="Collection.php" hash="ff414b6c919389d524727f245274259d"/></dir></dir><dir name="Rule"><file name="Collection.php" hash="a97146dfb96259d4a80983c9ce8248cb"/><dir name="Customer"><file name="Collection.php" hash="9cc9dfff6b46c35ead43b3fb3f3cec14"/></dir><file name="Customer.php" hash="dceb0116dbcaaac015b52649f87374eb"/><dir name="Product"><file name="Collection.php" hash="fa0176fee491bf06424fd7c97c859f53"/></dir><file name="Product.php" hash="d5fe431e624eb4b1befba2a65e371026"/></dir><file name="Rule.php" hash="94993e080ff63622f8ecd433fde71796"/></dir><file name="Observer.php" hash="de6d39e558f4b7e39ac387733349ec6f"/><dir name="Quote"><file name="Discount.php" hash="905eccf34b5449fbf29d140c99953b23"/><file name="Freeshipping.php" hash="5ddbf5e58d137e2fe770b706a0956a55"/><dir name="Nominal"><file name="Discount.php" hash="341b490273fd5ab1498f7cfc3d15ff0e"/></dir></dir><dir name="Resource"><dir name="Coupon"><file name="Collection.php" hash="5030636a7a7dcc83f9f1c6f94b5cac62"/><file name="Usage.php" hash="7cee04feb2a624612e2cafc0dc192cf1"/></dir><file name="Coupon.php" hash="5f5f7751ea0c29d52981b02e55b07894"/><dir name="Report"><file name="Collection.php" hash="50122478a87fdec2b8a65f2d9aef282e"/><dir name="Rule"><file name="Createdat.php" hash="02466900b021fb1018ea89937fd34943"/><file name="Updatedat.php" hash="fe7b776559cb3dd2c3ca59b4e7043b08"/></dir><file name="Rule.php" hash="45f3ebecfe6f000328bce7c6ec3adebf"/><dir name="Updatedat"><file name="Collection.php" hash="85b1b702a0c934bda4efcb5c8380a830"/></dir></dir><dir name="Rule"><file name="Collection.php" hash="9a70dcc2c97f85fdf47aae7894e0e5c2"/><dir name="Customer"><file name="Collection.php" hash="c119ca2272ba918b13b47d4e96e06f86"/></dir><file name="Customer.php" hash="712cd6ec527d506c00baecd09da49b81"/><dir name="Product"><file name="Collection.php" hash="819f0f9ecc77b8e7f20c4dd9b319f84d"/></dir><file name="Product.php" hash="14853418a21d59e0f8129c80bb88c032"/></dir><file name="Rule.php" hash="91b0b65b1443be890b430e282634d8d0"/></dir><dir name="Rule"><dir name="Action"><file name="Collection.php" hash="6836dfb390954debd9dbd1afe7df7721"/><file name="Product.php" hash="939d551e4e2ee92a5e5a9fbf0dd4c1a0"/></dir><dir name="Condition"><file name="Address.php" hash="32a9e7fd2ebd47d262832981f1317f1e"/><file name="Combine.php" hash="204f588c6cb09327b87267cb5c268577"/><dir name="Product"><dir name="Attribute"><file name="Assigned.php" hash="cea0241d92d0cad9c8d0f173e2f27a8a"/></dir><file name="Combine.php" hash="349d3f8a0f993e734112faf9f4593cca"/><file name="Found.php" hash="869319a13c49152426cd3ffabcf41865"/><file name="Subselect.php" hash="b53651f2371343ecaad1d22c5360b62b"/></dir><file name="Product.php" hash="da818046bf8cb6d85384970da1c4da16"/></dir><file name="Customer.php" hash="c91b48167015da5c26d161bd01d418a1"/><file name="Product.php" hash="be5aa814892976919f2841ad4f593720"/></dir><file name="Rule.php" hash="9ec22daa35075a786027eb387586ea64"/><dir name="System"><dir name="Config"><dir name="Source"><dir name="Coupon"><file name="Format.php" hash="453554268efa272468d5feef8f886a7b"/></dir></dir></dir></dir><file name="Validator.php" hash="5d85e113e95fc4326cbddc640ce17a52"/></dir><dir name="etc"><file name="adminhtml.xml" hash="caca53de6786b3be6da03586579fc893"/><file name="config.xml" hash="628ed6fd7df6d252288d15ce9785f6cf"/><file name="system.xml" hash="cc5d6bd5257f149325ea0feb73521cc1"/></dir><dir name="sql"><dir name="salesrule_setup"><file name="install-1.6.0.0.php" hash="9ab8955322ab4339661c69e0cb9802c6"/><file name="mysql4-install-0.7.0.php" hash="275f88f7f61f6664e0ae6e5d80b0c240"/><file name="mysql4-install-1.4.0.0.0.php" hash="323c4b2e46b3132092bd9b318367fb86"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="739a8b7fa21395aac36a605a553fb93b"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="6b4cb8acdbbc2b2a4d187190c4ea0a91"/><file name="mysql4-upgrade-0.7.10-0.7.11.php" hash="6ad55cf361a23b17b9f36ae3abd0a984"/><file name="mysql4-upgrade-0.7.11-0.7.12.php" hash="d36a365e98e923ba45dcc74ffba18dcf"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="041f91b8c7c1be504f47125fa5ca0bf2"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="14a660771d58b2d182edabef3d38db02"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="c0c8bc7581f4a4eee50d6dde49977897"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="5f666558669daa62735513080fcfffb7"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="cc7329eb9f61f5f6c0d5d2fc098b39aa"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="6cf794be9adc22351a7f6493f6665b1f"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="c4abbb799e56777dbb013727160a89af"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="4ae0398464264e326ce321c2eb7e0ca8"/><file name="mysql4-upgrade-1.4.0.0.0-1.4.0.0.1.php" hash="6536ffb5f313b156479a470894e7d473"/><file name="mysql4-upgrade-1.4.0.0.1-1.4.0.0.2.php" hash="dba49c9eab9fdb487d5ea4b2a9b19a61"/><file name="mysql4-upgrade-1.4.0.0.2-1.4.0.0.3.php" hash="2b430a6577e1e771b493d18b49b05817"/><file name="mysql4-upgrade-1.4.0.0.3-1.4.0.0.4.php" hash="54953e3953f5d0e8b4cdb02a70064e57"/><file name="mysql4-upgrade-1.4.0.0.4-1.4.0.0.5.php" hash="382240c00c8ef6e6da763a9e8cbf9ab6"/><file name="mysql4-upgrade-1.4.0.0.5-1.4.0.0.6.php" hash="9d7c0dfceb59c78a1b6809c69b119ad0"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="622e976224bd8234da9c026118f55849"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="e9c25f97809f2312d577e99eefdd1a43"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="70824ec16e4e39d26578e29917625f0d"/><file name="upgrade-1.6.0.2-1.6.0.3.php" hash="81b3f1ab912631abc90bf4d5ed5596b0"/></dir></dir></dir><dir name="Sendfriend"><dir name="Block"><file name="Send.php" hash="b5f206f06b37f9f01ee3d23d34c4247f"/></dir><dir name="Helper"><file name="Data.php" hash="0d275b6d1e3607b79ec9a367c64c3128"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Sendfriend"><file name="Collection.php" hash="7c248d260e46c38da0961c6a1ab619a0"/></dir><file name="Sendfriend.php" hash="04962b095cc694d104d063772025ab33"/><file name="Setup.php" hash="2bf3e91ecbc58c463c17d58f2c03cacf"/></dir><file name="Observer.php" hash="6c5e9d18af2beaef0197aa284fe16ef6"/><dir name="Resource"><dir name="Sendfriend"><file name="Collection.php" hash="394927238d33f913906cc2ace443cbcd"/></dir><file name="Sendfriend.php" hash="e125543a8af18a8d4b244f3d2b824aa2"/><file name="Setup.php" hash="151a112174b9d83dcc6afc91683f54f2"/></dir><file name="Sendfriend.php" hash="aad537b2bd08139afca049186b0d0af6"/></dir><dir name="controllers"><file name="ProductController.php" hash="90cf4742e2b768696b28a05c9a3c32ae"/></dir><dir name="etc"><file name="config.xml" hash="546188e9ad02740203f9ddc35b58797f"/><file name="system.xml" hash="952f5059081dd3f114048a659b111f59"/></dir><dir name="sql"><dir name="sendfriend_setup"><file name="install-1.6.0.0.php" hash="5b1ae683858942384de97a4cabecb1eb"/><file name="mysql4-install-0.7.0.php" hash="bc16be0aaca8a2b6c50a7e87e9cbff12"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="da7a15eeb941d568818815dfbcaf9162"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="af38b95ee3b76f5acd3269170d93ce1d"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="a7013b2917b9e69fd6ca03c1bb8082db"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="db6d0a1eb02d805f42dcd3756381800c"/><file name="mysql4-upgrade-1.6.0.0-1.6.0.1.php" hash="8b493ea7ab72b583e910a22190295371"/></dir></dir></dir><dir name="Shipping"><dir name="Block"><dir name="Tracking"><file name="Ajax.php" hash="09df05bd55e577bb5260daa3e6caf5c2"/><file name="Popup.php" hash="f1a041dc4a7b17409b1cb343a49e038b"/></dir></dir><file name="Exception.php" hash="7817d908c16effb37641b413e3f07687"/><dir name="Helper"><file name="Data.php" hash="b454fdb55ec1039f9f7b692a0214b491"/></dir><dir name="Model"><dir name="Carrier"><file name="Abstract.php" hash="7191502b6ba0254127afd12521f56080"/><file name="Flatrate.php" hash="397b264a8d1dd04be1166be762c9dc30"/><file name="Freeshipping.php" hash="b41e034f705bd5806f356002421b8e16"/><file name="Interface.php" hash="8ee86ddab84fee146bba67f2f9ad4958"/><file name="Pickup.php" hash="574b87b25e9fcc7b11eb6a302edbc531"/><file name="Tablerate.php" hash="57a55677ba65ee9b31942a7d9ab789e1"/></dir><file name="Config.php" hash="d31ab0d1a4b74c009b08f54112d6b024"/><file name="Info.php" hash="9b396c342b5726b53a74a285bd50dfd8"/><dir name="Mysql4"><dir name="Carrier"><dir name="Tablerate"><file name="Collection.php" hash="6078fa27a483e4a499897fd930d8d6a0"/></dir><file name="Tablerate.php" hash="0e1157a910db560e02c468c292edf81d"/></dir></dir><dir name="Rate"><file name="Abstract.php" hash="61509b986aea96d297a7ad3d86c25f35"/><file name="Request.php" hash="4192d1bb68ec2e6b4ed2335d8ca4fd4f"/><dir name="Result"><file name="Abstract.php" hash="89ce290aa89085499fd46d9548ae1226"/><file name="Error.php" hash="e1576e0070daad2b4ae989afc9f60491"/><file name="Method.php" hash="5130215a38bde7a264574e6bb20d2f7f"/></dir><file name="Result.php" hash="b42c6afee8ed678f56823a4acbfd7c8c"/></dir><dir name="Resource"><dir name="Carrier"><dir name="Tablerate"><file name="Collection.php" hash="3f948b246a012a0014f5105eb4f673db"/></dir><file name="Tablerate.php" hash="dfcbfab619a7d316d2e76ec48621e1ea"/></dir></dir><dir name="Shipment"><file name="Request.php" hash="cd106fae6188411ac722b49ed9514308"/><file name="Return.php" hash="2d0ed8f59eaf9efe0cef5bf1092b8e54"/></dir><file name="Shipping.php" hash="3def0a3b57d1a80b7601bf172b730587"/><dir name="Source"><file name="HandlingAction.php" hash="996710c24691253907f5551fbe640ec2"/><file name="HandlingType.php" hash="b0e707f62445bfdfcd20114b182571a4"/></dir><dir name="Tracking"><dir name="Result"><file name="Abstract.php" hash="caefbcf638339cb3a8a3b029e1283e55"/><file name="Error.php" hash="2e8326379ef3d1065ce37b7e76ec32ee"/><file name="Status.php" hash="2aecb82f4a61a323341a9a52439892dc"/></dir><file name="Result.php" hash="54852fbada70b39109d974281decaaf1"/></dir></dir><dir name="controllers"><file name="ShippingController.php" hash="a5b8bef3ebea80cf2436f69ac91376cb"/><file name="TrackingController.php" hash="914ed8c271764e76146cdf6dba2ae138"/></dir><dir name="etc"><file name="adminhtml.xml" hash="ee7864ea693423dbebbf2117258f4fab"/><file name="config.xml" hash="9c151220072be650f02113efe448bd03"/><file name="system.xml" hash="1b06754dd005ef11249090a54f806217"/></dir><dir name="sql"><dir name="shipping_setup"><file name="install-1.6.0.0.php" hash="fcfb648931efb9d39587d3fc1cc16aa8"/><file name="mysql4-install-0.7.0.php" hash="3ba11142c239180345b133929dd7fe13"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="cd7f1e9d351ef3afeae5d984c906a86b"/></dir></dir></dir><dir name="Sitemap"><dir name="Helper"><file name="Data.php" hash="c270138e049bbb86acc9e1c2035d9ed4"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Catalog"><file name="Category.php" hash="0d61e1bd297c0f0828c8c48c54bc6694"/><file name="Product.php" hash="53b4f1d7a3f61d354d94e13239e0014b"/></dir><dir name="Cms"><file name="Page.php" hash="801f82576eb1b96075c0bd6b3e478ff1"/></dir><dir name="Sitemap"><file name="Collection.php" hash="595975e9005b823585ae7005b8f7dfcf"/></dir><file name="Sitemap.php" hash="4af5f75017fe5bb77b533531604a539b"/></dir><file name="Observer.php" hash="036f0b83fdaedf9286941d553598cba5"/><dir name="Resource"><dir name="Catalog"><file name="Abstract.php" hash="1cd8a377251d312570c5eb3657afd0d5"/><file name="Category.php" hash="05fb05a039d929cf962d7cf5f500e1d1"/><file name="Product.php" hash="134cd9d49b0512786085d262450a6a56"/></dir><dir name="Cms"><file name="Page.php" hash="4c639ea1f9d626b9cdd9e4ac6d0ef9f4"/></dir><dir name="Sitemap"><file name="Collection.php" hash="96b6d4e3e41b9e5fa00fdda474b3d8c2"/></dir><file name="Sitemap.php" hash="cf58c50c4d3f7b2f3c2e3f96e0466066"/></dir><file name="Sitemap.php" hash="500f0f29c85e257c0f38018a5a24e553"/></dir><dir name="etc"><file name="adminhtml.xml" hash="75878bb50b464dc4369ec0eb591bc2da"/><file name="config.xml" hash="0e5e5ea7c4939d57463ebad190b1e983"/><file name="system.xml" hash="dfe986e50cd5a136827d3769400a0d2a"/></dir><dir name="sql"><dir name="sitemap_setup"><file name="install-1.6.0.0.php" hash="37b9bd783871c32a2685a22f2685229a"/><file name="mysql4-install-0.7.0.php" hash="1ff0248cb18bdc7dfc43b148d4aeeeb4"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="387f9d64e5c70357758cfd41f7d2d984"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="add73e139487436a15eaf78041a62eea"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="339be126cf5fecb42ba94c091b6bfaf8"/></dir></dir></dir><dir name="Tag"><dir name="Block"><file name="All.php" hash="2b10c43d0259b15611d361d5aa5f2220"/><dir name="Customer"><file name="Edit.php" hash="38335c42cf669e79300863f2a0ff9a11"/><file name="Recent.php" hash="dc47c04c147be4edf19b470eb9c88002"/><file name="Tags.php" hash="c18cfe297d463576d3e89b3a70317a58"/><file name="View.php" hash="58b6780632baaae5ae284e4993943356"/></dir><file name="Popular.php" hash="c7b7bd0d09459ae8d9e407ee55af6e3c"/><dir name="Product"><file name="List.php" hash="2f468bd086810c64c3fc000e6fa60190"/><file name="Result.php" hash="176d0d0503b3f2b51410666a5e4ec23e"/></dir></dir><dir name="Helper"><file name="Data.php" hash="fd848bd0f6c212495ceb27036e026771"/></dir><dir name="Model"><dir name="Api"><file name="V2.php" hash="08c1314720e17a9d69840bb97e08a3d7"/></dir><file name="Api.php" hash="6f2ae203c0613724468d6547fe53315d"/><dir name="Entity"><dir name="Customer"><file name="Collection.php" hash="13a8174f56f60852e5a244c7b0654e80"/></dir></dir><dir name="Indexer"><file name="Summary.php" hash="055e6136d402a80a304b556582ce4af8"/></dir><dir name="Mysql4"><dir name="Customer"><file name="Collection.php" hash="fcb051b22d3f11807a2d0a265b7fe219"/></dir><dir name="Indexer"><file name="Summary.php" hash="e5eae61043e224555d060352f291dd42"/></dir><dir name="Popular"><file name="Collection.php" hash="925799b24790135bcd9448e551b8e197"/></dir><dir name="Product"><file name="Collection.php" hash="d33a5409c13eb26f009e1374e7cf7efb"/></dir><dir name="Tag"><file name="Collection.php" hash="ae317625d040ce3b88feef9861fef446"/><file name="Relation.php" hash="1686029b634873343ea27813f44cad5a"/></dir><file name="Tag.php" hash="1ae7f46144e78b9e7a03babd7c8b1aec"/></dir><dir name="Resource"><dir name="Customer"><file name="Collection.php" hash="7ee5e5cf14204c1de84f09d17d12b7b9"/></dir><dir name="Indexer"><file name="Summary.php" hash="98d1e87f795799942bc9a38b148cc1a1"/></dir><dir name="Popular"><file name="Collection.php" hash="955c61e8c737b5a7fdf0cdff51f8ad7e"/></dir><dir name="Product"><file name="Collection.php" hash="42d899ed5fd34b4e9c360c8360ebd553"/></dir><dir name="Tag"><file name="Collection.php" hash="01ec18be96cc21e359c20132e8b8c207"/><file name="Relation.php" hash="7656c42494af35d1d5aab8897e5b68b9"/></dir><file name="Tag.php" hash="809e9c5a59411c7d7724945a7d29628f"/></dir><file name="Session.php" hash="8232aef267200f52ca854f23da795d77"/><dir name="Tag"><file name="Relation.php" hash="d9271123737d3597f53ab950f1456642"/></dir><file name="Tag.php" hash="0db7c73371824a990e1e98e3300a905d"/></dir><dir name="controllers"><file name="CustomerController.php" hash="19a82c81c2a407c54baa8c42c6f781af"/><file name="IndexController.php" hash="ed3e6346fc9d9a3d1a4896caf7a6903f"/><file name="ListController.php" hash="59a042865c7156a76625012ed805c15a"/><file name="ProductController.php" hash="d6cac64124e81c6039f8d87b147bf278"/></dir><dir name="etc"><file name="adminhtml.xml" hash="3a5e2d7833e12167bff5538dccb62117"/><file name="api.xml" hash="5ba5cc7e306de8c6f373bb35da19dfa0"/><file name="config.xml" hash="8ba316a8a0494ee3fc5f0967dcbdc59d"/><file name="wsdl.xml" hash="e87343a710e0068dcc555ffc4b302a9b"/><file name="wsi.xml" hash="1d31787826a686590acf89ec2703b76e"/></dir><dir name="sql"><dir name="tag_setup"><file name="install-1.6.0.0.php" hash="b3505685d64341a0aa39e2d3540a113f"/><file name="mysql4-install-0.7.0.php" hash="c80119c3ca8931b21c6f83a4901493ee"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="d025d405e893633c7fa3d843970dbb61"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="62c19aaa204b99e514ac276b2e85a32e"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="9cd101ac643f0e4b411485cf1aed4511"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="e0fce96f5e2a1c7a68d6139a28430a2c"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="d064708fbb9959e46c76cea8577a2902"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="b55c990d52b55f9892b81aa95f603bf6"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="c51a489802c94bb97791a8418f0ef038"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="de16b58fbe072fd9da5ea5d77602daef"/></dir></dir></dir><dir name="Tax"><dir name="Block"><dir name="Adminhtml"><dir name="Frontend"><dir name="Region"><file name="Updater.php" hash="9c539994222b2ccba529ef7523502f66"/></dir></dir><file name="Notifications.php" hash="13e0fea969efa49c9722b8ab03bd3974"/></dir><dir name="Checkout"><file name="Discount.php" hash="127f3423153e2d7f67cfcbaa91766602"/><file name="Grandtotal.php" hash="9acd428450dcd0adbc40a47acbad0b25"/><file name="Shipping.php" hash="fd777c58967613bf5d324250a299becc"/><file name="Subtotal.php" hash="b13f24a02859e66afa218b17eaec243a"/><file name="Tax.php" hash="7f28709d44b0746918988441f8bbf131"/></dir><dir name="Sales"><dir name="Order"><file name="Tax.php" hash="109d897cef41288ec2fe93dec035aeb4"/></dir></dir></dir><file name="Exception.php" hash="137061427d20d97d4c9a9a6818df13a9"/><dir name="Helper"><file name="Data.php" hash="f7dce31baee4fc06401afb241fbc4779"/></dir><dir name="Model"><dir name="Calculation"><dir name="Rate"><file name="Title.php" hash="02bb922f55528ebef509d5e0e9ebae65"/></dir><file name="Rate.php" hash="bbd1308fe0489fb4556a0c806fbf08eb"/><file name="Rule.php" hash="988b1cc47f7d6d228fc6540c3424a8d5"/></dir><file name="Calculation.php" hash="472b71425220842f84ff584883642c65"/><dir name="Class"><dir name="Source"><file name="Customer.php" hash="63b7119885e4ad056e0e2ad057b72d50"/><file name="Product.php" hash="d290546c2bb67c752b99188a8da2f498"/></dir></dir><file name="Class.php" hash="9f2803f07a9ea115414e8a6393d01f0b"/><dir name="Config"><file name="Notification.php" hash="212b1d132571039ec1d5e4704186df67"/><dir name="Price"><file name="Include.php" hash="005b4273aa8924a1a544813baf0614f0"/></dir></dir><file name="Config.php" hash="0b48517dcfcdf7eefb7634085eeeb3df"/><dir name="Mysql4"><dir name="Calculation"><file name="Collection.php" hash="acee2081ff6130c31e803cf7357370fd"/><dir name="Rate"><file name="Collection.php" hash="6639d010cfd018b433d83f8e7a22c59a"/><dir name="Title"><file name="Collection.php" hash="91c99b4433579b91c71269feb6dbbefd"/></dir><file name="Title.php" hash="0e89072d83e4777442040a7574aa83d1"/></dir><file name="Rate.php" hash="313f71cfb3a2bafb2c32a1525826e198"/><dir name="Rule"><file name="Collection.php" hash="7012224a3a48324cd2a150813109886f"/></dir><file name="Rule.php" hash="2b6c704f4c2638a3437ef3a854fc25e8"/></dir><file name="Calculation.php" hash="3456ca2272f2b3cae2da6b6871f30c41"/><dir name="Class"><file name="Collection.php" hash="d7eb62ee3ec9a1c6646b0635d717ea51"/></dir><file name="Class.php" hash="0ed3a7f6a226f1a3a7153ca6edaaa0f0"/><dir name="Report"><file name="Collection.php" hash="7c4f76e0bbab563d0e9500ba29c7c84e"/><file name="Tax.php" hash="9d4663271b07a6ea06f6d2fe050d77a0"/><dir name="Updatedat"><file name="Collection.php" hash="f4e3a896c5ed84b877089aef1c4d80ab"/></dir></dir><dir name="Sales"><dir name="Order"><dir name="Tax"><file name="Collection.php" hash="4f54d51918aa5eb195e6afc8a1eb45a7"/></dir><file name="Tax.php" hash="9acb3b525dac90052b49438a62297eb0"/></dir></dir><file name="Setup.php" hash="e2b2c63fb65d21a63545b6350bcc9ba9"/></dir><file name="Observer.php" hash="435baf91ff86b4bbf951b8fe5c043366"/><dir name="Resource"><dir name="Calculation"><file name="Collection.php" hash="a656ca320a7a842e9e7345e5bf90fe1d"/><dir name="Rate"><file name="Collection.php" hash="a9dad3a3547763d54a6f2e8397ab8939"/><dir name="Title"><file name="Collection.php" hash="71e03bcc404205a2e00508af30059c68"/></dir><file name="Title.php" hash="1799ff0b83154a012e253fd791937746"/></dir><file name="Rate.php" hash="bf5436c06b9739b445ec524d4025b5ea"/><dir name="Rule"><file name="Collection.php" hash="b4e8a702efc1c248a836ddcf2ccf04c6"/></dir><file name="Rule.php" hash="aff96159602561fed62afd38f9363d19"/></dir><file name="Calculation.php" hash="6dbf4e382a27389417ed16649446bce1"/><dir name="Class"><file name="Collection.php" hash="b57891d2fa76e7723cec725c0d9adc89"/></dir><file name="Class.php" hash="6b774638de6d33f5379f12c22481493f"/><dir name="Report"><file name="Collection.php" hash="840ab6e77345d6637c666e7b9aa91e84"/><dir name="Tax"><file name="Createdat.php" hash="453488bd85f0c73489271c209560b862"/><file name="Updatedat.php" hash="438e8ec8a41bb88e05c77b6f465b0bba"/></dir><file name="Tax.php" hash="75c988eb5f91331aff24ea0bcb4bf856"/><dir name="Updatedat"><file name="Collection.php" hash="9df584cdf5b13ecd84a78f33d288f38f"/></dir></dir><dir name="Sales"><dir name="Order"><dir name="Tax"><file name="Collection.php" hash="e3c20cf620eef255710accd7b9da2ff1"/><dir name="Item"><file name="Collection.php" hash="f6522bc0d72f91c690fee45362cf3900"/></dir><file name="Item.php" hash="129e05491979b151ded3b8c07b1e973d"/></dir><file name="Tax.php" hash="ddd7f31e7e0ca5b52d46250c6ee3876d"/></dir></dir><file name="Setup.php" hash="04a2c38ee0899c7a021a9ff6bae13962"/></dir><dir name="Sales"><dir name="Order"><dir name="Tax"><file name="Item.php" hash="0eed1d9b7192bac284302d1a8e91b04d"/></dir><file name="Tax.php" hash="5e710edf3ec7da8ef92b2ce5e5c92c94"/></dir><dir name="Pdf"><file name="Grandtotal.php" hash="4ae9ecc456bf14ac11d1438157dbf141"/><file name="Shipping.php" hash="685e7f8e542622614f8c55107a275de8"/><file name="Subtotal.php" hash="9c4ad817f5ba7efeb4efb4bcbf7995c6"/><file name="Tax.php" hash="b30bf4ee2e5a561e02cbd8a09f60c58b"/></dir><dir name="Total"><dir name="Quote"><file name="Discount.php" hash="a9de231ca3a7f526a59c3d6d0fe2736f"/><dir name="Nominal"><file name="Subtotal.php" hash="b0700ee2ba5ddbaa32f1c52c70446cf4"/><file name="Tax.php" hash="ff57753e8f29c1e643116ee1f9a6be93"/></dir><file name="Shipping.php" hash="72d95e56b11c0894e2665f7c5ce51739"/><file name="Subtotal.php" hash="188127daf6d7caf4e0b19da5406b81b4"/><file name="Tax.php" hash="9ee64046fc7dbe93aa1ca28b78644654"/></dir></dir></dir><dir name="System"><dir name="Config"><dir name="Source"><file name="Algorithm.php" hash="3875a5df6548d2e26dd6094031eb21ba"/><file name="Apply.php" hash="24417cb46b72ae7d786a1287e65c355c"/><file name="PriceType.php" hash="3ad49e466e217f91b7a9cc0215087eae"/><dir name="Tax"><file name="Country.php" hash="4d339243a8b0ea86358c79794fe72f8a"/><dir name="Display"><file name="Type.php" hash="0d10ddfcde7846daf7a5b6289b38913a"/></dir><file name="Region.php" hash="612de787b3edcddda31cd92327f70c43"/></dir></dir></dir></dir></dir><dir name="data"><dir name="tax_setup"><file name="data-install-1.6.0.0.php" hash="72a45a706856b256b33b6a686d6770d5"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="25b715b70e89c7aad2f35837111f8f1c"/><file name="config.xml" hash="a37f7923d9572f694b345508f8f416e6"/><file name="system.xml" hash="9bfb94df858942a543d01e7bb3817b2c"/></dir><dir name="sql"><dir name="tax_setup"><file name="install-1.6.0.0.php" hash="47275f20fcb53b121a26bedd85acf189"/><file name="mysql4-install-0.7.0.php" hash="6af9a3a2032042f0a82061c648a38592"/><file name="mysql4-install-1.4.0.0.php" hash="99d14ce0508bea87cb7e7ff46d7b2ab2"/><file name="mysql4-upgrade-0.6.1-0.7.0.php" hash="65f0465b130ae72a2f5fdd17a9e19133"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="57ebc4d2cec035d195259bba5f2d7bd8"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="fc49129e268c5f491a72a61c06c8ca66"/><file name="mysql4-upgrade-0.7.10-0.7.11.php" hash="a15701c73f006ab7562fc604a7dcba31"/><file name="mysql4-upgrade-0.7.11-0.7.12.php" hash="942696dbd66e7ca015c2df2366f0383e"/><file name="mysql4-upgrade-0.7.12-0.7.13.php" hash="60cc70667b6dfdc8aa6f0a62317d447d"/><file name="mysql4-upgrade-0.7.2-0.7.3.php" hash="5ba42f67dbb39d056faa38e6f5293584"/><file name="mysql4-upgrade-0.7.3-0.7.4.php" hash="efc647f0b3a3e0edb39b5fb17b9726fd"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="73028dccf709d7589fc4fe14dd71b17c"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="5b21e927c01676fae722b6915029ab62"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="44d5d47c89504b2a6bb3bf0927983416"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="74207ee3337c8b8f2bb93c6ab56866b6"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="7a442df7deb26bcaa7398959db63a815"/><file name="mysql4-upgrade-0.7.9-0.7.10.php" hash="4569ddc62d6799b9888b7b5b9b11eef1"/><file name="mysql4-upgrade-1.3.9-1.4.0.php" hash="1c70836736ab8aa8f794e8738d105a25"/><file name="mysql4-upgrade-1.4.0.0-1.4.0.1.php" hash="568f0e58abf4abdd5a976fdf4cc1e33f"/><file name="mysql4-upgrade-1.4.0.1-1.4.0.2.php" hash="39d31a4422cb7a24d12d49c062e25afe"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="77a2a7d24823b1d9e785ebf88e6fefe1"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="e52eff98527c16c3450a4c686c34fae0"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="7c7ccbff4bfc4391c05576b237ba8b65"/><file name="upgrade-1.6.0.2-1.6.0.3.php" hash="32016166d8e4fa6b88503fb58974e90f"/><file name="upgrade-1.6.0.3-1.6.0.4.php" hash="32a7faab02716507b4354cce24265bc5"/></dir></dir></dir><dir name="Uploader"><dir name="Block"><file name="Abstract.php" hash="6e4944e5f0818e7c29fb03d61ef437f7"/><file name="Multiple.php" hash="1dc4aaa49b77b8887cf9262c4e7a823c"/><file name="Single.php" hash="611c3242ac6a31c23e6a83a96acba2fe"/></dir><dir name="Helper"><file name="Data.php" hash="119b14b7e390e1b73d38da8981f1d37f"/><file name="File.php" hash="48ec474f67f69b2deab0f4e3b025a312"/></dir><dir name="Model"><dir name="Config"><file name="Abstract.php" hash="598717f192c3feb8fc5e1c5fd396a853"/><file name="Browsebutton.php" hash="7a4de22abad5e523130109b0ef7e54d1"/><file name="Misc.php" hash="d6608560c74ab5350a3f76a27fa1aa60"/><file name="Uploader.php" hash="e9de9de6797368a7be14e07f6c3272fb"/></dir></dir><dir name="etc"><file name="config.xml" hash="c17cd380e882b6641808f4e52a0d9f10"/><file name="jstranslator.xml" hash="fa97045eb98e4bf7e7f4b76be18df90a"/></dir></dir><dir name="Usa"><dir name="Block"><dir name="Adminhtml"><dir name="Dhl"><file name="Unitofmeasure.php" hash="ba5dfe994d3152b055f9580ac3e58e4d"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="5dbe8f0326ef7a80f9318d0b2707ecd5"/></dir><dir name="Model"><dir name="Shipping"><dir name="Carrier"><dir name="Abstract"><dir name="Backend"><file name="Abstract.php" hash="9e91ce65ec1af0388b0c4456d32e1711"/></dir><dir name="Source"><file name="Mode.php" hash="d8568690e4b84fbf992362bd19ba0961"/><file name="Requesttype.php" hash="68589f59c69d5976fe153c8f4fe7eb82"/></dir></dir><file name="Abstract.php" hash="451f18c7e73d25c156487264b054bbce"/><dir name="Dhl"><file name="Abstract.php" hash="62e61c6a4dfd171a2b65e6fb1259c924"/><dir name="International"><dir name="Source"><file name="Contenttype.php" hash="0a4f3ebda2706ead647430b69e0892e4"/><dir name="Method"><file name="Abstract.php" hash="fb157d1f72ca464e8417ed73c167b5d8"/><file name="Doc.php" hash="4ea8f26b671ed220c32a492d1d1910e3"/><file name="Freedoc.php" hash="af14e65122e6e6e50a3e0dceae59a2c4"/><file name="Freenondoc.php" hash="fe699070755f3bfea90a62332707209e"/><file name="Nondoc.php" hash="f9491acea7b9fcf19a2f80b189580da5"/><file name="Size.php" hash="48e51a58a97be356f6331b3f80669c49"/><file name="Unitofmeasure.php" hash="35d02c4ecf0eac1e2f07bd4fe741ad0c"/></dir></dir></dir><file name="International.php" hash="35db2cb4d784f5a62b46cc478b4fa067"/><dir name="Label"><dir name="Pdf"><file name="Page.php" hash="d7ac2bfa030833fb9cefb76d0a823fba"/><file name="PageBuilder.php" hash="077f7f18f1f31aee2a7ce37a7b206beb"/></dir><file name="Pdf.php" hash="a44414148bf1abce2a07dbb4b3f81fd0"/></dir><dir name="Source"><file name="Dutypaymenttype.php" hash="e09767c041f9bae77700de9098e19a47"/><file name="Freemethod.php" hash="92afb8d13bc722df555df60508f8b835"/><file name="Method.php" hash="6bcf3f33fc6251155ecebb7a2a237539"/><dir name="Protection"><file name="Rounding.php" hash="4e4dc5c4f76b64972d18ecb788fca908"/><file name="Value.php" hash="b47fd2001a57fef4942be3e784382324"/></dir><file name="Shipmenttype.php" hash="5cbfeef6890b5970fc8ccc55f580acc0"/></dir></dir><file name="Dhl.php" hash="477ebaa5f0beda378372c85238c6e93b"/><dir name="Fedex"><dir name="Source"><file name="Dropoff.php" hash="758baf8dd0c2712bff118b2ddce3809d"/><file name="Freemethod.php" hash="fb49427126fd659914106808656031e2"/><file name="Method.php" hash="bd03b725b0d2cefa0f6677c9acf75336"/><file name="Packaging.php" hash="e299e8cee3e12f7c0f2662cb23484abd"/><file name="Unitofmeasure.php" hash="00b65bb159c2d0a786266878dde01def"/></dir></dir><file name="Fedex.php" hash="9c574bcdd34f07d02183b7ff61f34b52"/><dir name="Ups"><dir name="Backend"><file name="Freemethod.php" hash="3facd57849c49291ec969865e79b7395"/><file name="OriginShipment.php" hash="68122e78998b4bfbec768a01b686e161"/><file name="Type.php" hash="bece4019afd10e9ef670a5dbc6bbb41a"/></dir><dir name="Source"><file name="Container.php" hash="f6e18ffbaa876c899fd980672664d23d"/><file name="DestType.php" hash="439d7061f0bac5f42e721e8a044596ea"/><file name="Freemethod.php" hash="345f2366c87e5e7c7a57dd660dfac1ab"/><file name="Method.php" hash="52a37667bc4b0174df75c8e13c507065"/><file name="Mode.php" hash="6ccfd387582e7c1696e2d017ff8fe87f"/><file name="OriginShipment.php" hash="cdba14537c9bc5a25f5eb2b4244f73cc"/><file name="Pickup.php" hash="60cb63ede7fdff5b84e97f4bc07a9b2b"/><file name="Type.php" hash="1ad70d88c013eedcf77235e210fe47cb"/><file name="Unitofmeasure.php" hash="cc8d95a75abe465054260c29e7379c48"/></dir></dir><file name="Ups.php" hash="cfa133745fb5c641f9b40525eca7d161"/><dir name="Usps"><dir name="Source"><file name="Container.php" hash="cef574246f5dc390bb24fb41782b0e20"/><file name="Freemethod.php" hash="94eea66308a014b81c09f380399ff4a8"/><file name="Machinable.php" hash="f9a501780b104ced4e9a17ef3dd5b9a1"/><file name="Method.php" hash="e878c4010f2efedf0705afd7ebe668df"/><file name="Size.php" hash="7dda4a9535dcfbcbb0d93c5f6403b5c9"/></dir></dir><file name="Usps.php" hash="1de3814105ec5c916967a0379820bef1"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="226528ed59016bf1b79898d7a9b1a4a4"/><dir name="dhl"><dir name="international"><file name="countries.xml" hash="f7836aaf1918cb82a65d5abb0adc8699"/></dir></dir><file name="system.xml" hash="a4e17eb8e419c2f05d6da3ae05a2dada"/><dir name="wsdl"><dir name="FedEx"><file name="RateService_v10.wsdl" hash="352ed0cd739b31d42d206aba31bf4c31"/><file name="RateService_v9.wsdl" hash="5e698519a3b3ae3dcea2105545053763"/><file name="ShipService_v10.wsdl" hash="4e661e70491a1af695c27878610054e2"/><file name="ShipService_v9.wsdl" hash="9c3779aa87540dcae41b43b16b724df6"/><file name="TrackService_v5.wsdl" hash="89cc7077a8fc439446e70bac0ca0f0c1"/></dir></dir></dir><dir name="sql"><dir name="usa_setup"><file name="install-1.6.0.0.php" hash="26fbb7e34b87914697cc6871edda22a4"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="197e9bc2a98589def93089b694673615"/><file name="upgrade-1.6.0.0-1.6.0.1.php" hash="13d60fce09900951eae682f8b13fc2a1"/><file name="upgrade-1.6.0.1-1.6.0.2.php" hash="c06b0b3e1f934ad33101607adfe53247"/><file name="upgrade-1.6.0.2-1.6.0.3.php" hash="6711b63165039cfe60cf00e735d5e5ff"/></dir></dir></dir><dir name="Weee"><dir name="Block"><dir name="Element"><dir name="Weee"><file name="Tax.php" hash="dd1d38a54afff3f31078819c31bd5f9f"/></dir></dir><dir name="Renderer"><dir name="Weee"><file name="Tax.php" hash="12f03363dce2e8a1a56ad1c991de6a14"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="65fb35999d1f4c94c230460297249720"/></dir><dir name="Model"><dir name="Attribute"><dir name="Backend"><dir name="Weee"><file name="Tax.php" hash="e3f8dfb51300048782418fd06e08a06d"/></dir></dir></dir><dir name="Config"><dir name="Source"><file name="Display.php" hash="b43c72a43a59c1143912288e12d913b3"/><dir name="Fpt"><file name="Tax.php" hash="9f9d2495c23e82df238b6458f8388ace"/></dir></dir></dir><dir name="Mysql4"><dir name="Attribute"><dir name="Backend"><dir name="Weee"><file name="Tax.php" hash="32c06b72032549792c9638fceed8c587"/></dir></dir></dir><file name="Setup.php" hash="54dca7d7912ba877f6596fbeae69af70"/><file name="Tax.php" hash="0fde280f65cb36288adb2e57cd3eb40c"/></dir><file name="Observer.php" hash="528f551ccda1e7ad35f2a98cc2719060"/><dir name="Resource"><dir name="Attribute"><dir name="Backend"><dir name="Weee"><file name="Tax.php" hash="67d628ba369d04c642e69b150c073c7b"/></dir></dir></dir><file name="Setup.php" hash="d2aae8d090a8bef563e1c763488f063b"/><file name="Tax.php" hash="b23f72ae8ac264ab7fb2c0485d7d2277"/></dir><file name="Tax.php" hash="5863d32ec6ee177a4f77e9b31ed01d14"/><dir name="Total"><dir name="Creditmemo"><file name="Weee.php" hash="b99109bcf0327463824430c6d52b8744"/></dir><dir name="Invoice"><file name="Weee.php" hash="8dba424309d6fe761905d4c8e4021f85"/></dir><dir name="Quote"><dir name="Nominal"><file name="Weee.php" hash="ca2bed0f15d71df9805520cabf028766"/></dir><file name="Weee.php" hash="e7f633d68063d3b7e7fcb486d43a8c0d"/></dir></dir></dir><dir name="etc"><file name="config.xml" hash="564863c962652804d710b50caf40a30f"/><file name="system.xml" hash="6998725f0d5f5ed88d739b19cd62beb5"/></dir><dir name="sql"><dir name="weee_setup"><file name="install-1.6.0.0.php" hash="373aa75567720ce8918d6a8745e72168"/><file name="mysql4-install-0.1.php" hash="8c8bbf4877723d9f2b94f75913f4c597"/><file name="mysql4-upgrade-0.1-0.2.php" hash="79f8c5597c228f4320c23d7f948e75b1"/><file name="mysql4-upgrade-0.10-0.11.php" hash="393eed4a14dc3d1c37676fac2f236cf2"/><file name="mysql4-upgrade-0.11-0.12.php" hash="3431260605a9f5a9ada16b375300d5da"/><file name="mysql4-upgrade-0.12-0.13.php" hash="5bbd8872154955771c80c1977eced612"/><file name="mysql4-upgrade-0.2-0.3.php" hash="778548bda9fe41143db0cf45823a1471"/><file name="mysql4-upgrade-0.3-0.4.php" hash="190f38f67c5f726a93b961e34d7921b6"/><file name="mysql4-upgrade-0.4-0.5.php" hash="757b01b1356c285c04a2e5bc7402c209"/><file name="mysql4-upgrade-0.5-0.6.php" hash="702e2a896807a7b3bc635ba2a1a66a59"/><file name="mysql4-upgrade-0.6-0.7.php" hash="be2e155cde14eb7f8cc4bf638b1d81fd"/><file name="mysql4-upgrade-0.7-0.8.php" hash="0b1ae83118ac099a5560d09e158e996d"/><file name="mysql4-upgrade-0.8-0.9.php" hash="176dbc4942fe2400ea10a2525b017077"/><file name="mysql4-upgrade-0.9-0.10.php" hash="8ead68994714d0b25c5c39047f9fba02"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="19a59139ce909992c07b0425c58cd12d"/></dir></dir></dir><dir name="Widget"><dir name="Block"><dir name="Adminhtml"><dir name="Widget"><file name="Chooser.php" hash="169ce71cc8f5a01ba89ca4ec57c9a8a9"/><file name="Form.php" hash="2a80e1b1767c134726f818f995c78fd3"/><dir name="Instance"><dir name="Edit"><dir name="Chooser"><file name="Block.php" hash="b0c34d86835152a9c3d2afe02c890200"/><file name="Layout.php" hash="9bd8455d73ffba1ee4f8be01eeb9c18c"/><file name="Template.php" hash="447c7fe84f235f1923ebb2db50953cc0"/></dir><file name="Form.php" hash="a37c182ebb8950863dc9a0d776f09dd8"/><dir name="Tab"><dir name="Main"><file name="Layout.php" hash="fff4297f8ddba98eb089243531ebf763"/></dir><file name="Main.php" hash="b82b7774468a5973fa42f9755234f503"/><file name="Properties.php" hash="516dbe2d7b2d7f8756b99b1688e812d0"/><file name="Settings.php" hash="ecd469678157f228c30a9aac78102afb"/></dir><file name="Tabs.php" hash="e59f2b777dd7e94489559e671d803102"/></dir><file name="Edit.php" hash="cecc5b56b71ecffe69f651c050ef4e90"/><file name="Grid.php" hash="69a1c8ec85fd30003de6c5133c117437"/></dir><file name="Instance.php" hash="07b63add76ac1e6dfacb2afacdc05a90"/><file name="Options.php" hash="497fede60bac6b7a216df0a45b33b14a"/></dir><file name="Widget.php" hash="039dde0f995450ca2f9148c71209a996"/></dir><file name="Interface.php" hash="2cb55b8c0d6af5bd2a0758830c004842"/></dir><dir name="Helper"><file name="Data.php" hash="7f013e78ed95a1ad41ffc5f23f0ef5be"/></dir><dir name="Model"><dir name="Mysql4"><dir name="Widget"><dir name="Instance"><file name="Collection.php" hash="6b3febe92ecfd914c98c754a5eb158dd"/></dir><file name="Instance.php" hash="ee0d4cc5636ce4b2651e65b5099587e8"/></dir><file name="Widget.php" hash="e5d40bda5ff5890238d3c3d6e4527acc"/></dir><file name="Observer.php" hash="c3445374fb6906f0efde283488ba9378"/><dir name="Resource"><dir name="Widget"><dir name="Instance"><file name="Collection.php" hash="e3902166a81e8722b641aedd9f95cfce"/></dir><file name="Instance.php" hash="28079677f50b80fac1f6bc488c0b0807"/></dir><file name="Widget.php" hash="3099262fdcfe8a8f16323aa6b1d7ca3f"/></dir><dir name="Template"><file name="Filter.php" hash="c843c67434cd66fbfa6a86f38549536e"/></dir><dir name="Widget"><file name="Config.php" hash="7da77d63701c312fb130a7b0feaa9106"/><file name="Instance.php" hash="9d125f015d1485e51904defdb816974b"/></dir><file name="Widget.php" hash="37c2a2a84f8fb8fcfc515b293ff53f02"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Widget"><file name="InstanceController.php" hash="218860b74b7e0f0c8353bb60ef68beac"/></dir><file name="WidgetController.php" hash="945ca2af03294aec29c45872e6644197"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="b18272a0985c3ac10406d8013faaa000"/><file name="config.xml" hash="1296d4a61cc78b03af7d12e778b0c637"/><file name="jstranslator.xml" hash="15fa15335d56f745e1451a58a6d64304"/></dir><dir name="sql"><dir name="widget_setup"><file name="install-1.6.0.0.php" hash="f5fb5499b6a63d4165afa465cb43d465"/><file name="mysql4-install-1.4.0.0.0.php" hash="d4cbcbd5b184f6f8d88d1de0c0e8d9d3"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="4caf94862163caa778280da0a38918b2"/></dir></dir></dir><dir name="Wishlist"><dir name="Block"><file name="Abstract.php" hash="2a4368fb1240108eb3ca0bf3b969ec7b"/><dir name="Customer"><file name="Sharing.php" hash="456d004729709c8d7c93d1cce98062cb"/><file name="Sidebar.php" hash="773c7e0a34e82902e643d5f6e6ba4d18"/><dir name="Wishlist"><file name="Button.php" hash="08f371025f96b0b5f1a61bf478108a4f"/><dir name="Item"><dir name="Column"><file name="Cart.php" hash="7d83a707cb3ded3870f84b071ced9926"/><file name="Comment.php" hash="f1bb301ffeb315bbc70be80fdbb54682"/><file name="Image.php" hash="ed984449a33f12e4a14bf3ee4ae83283"/><file name="Remove.php" hash="05160b4067a96a0929287540508aa2f2"/></dir><file name="Column.php" hash="c6b2b4381ad3e3379c7fc0c536a12d96"/><file name="Options.php" hash="d73c2dfb807e650368066856fecef77b"/></dir><file name="Items.php" hash="089145c3af734b031ffff57008f6f562"/></dir><file name="Wishlist.php" hash="e4b1ee5fb9f8588ff4f7822ffb98dab0"/></dir><dir name="Item"><file name="Configure.php" hash="d088576750ccf8037a03695d1438087f"/></dir><file name="Links.php" hash="2655dcb3efac4930924e6b58bc5f5075"/><dir name="Render"><dir name="Item"><file name="Price.php" hash="cb0b316c82175eac440a4d6846da4b78"/></dir></dir><dir name="Share"><dir name="Email"><file name="Items.php" hash="9d80a790d02b536963c7e88eae6b95ce"/><file name="Rss.php" hash="0838f3cfec5688655a8642874552b823"/></dir><file name="Wishlist.php" hash="8ff7ff53e213f270377969b3558c0f0e"/></dir></dir><dir name="Controller"><file name="Abstract.php" hash="99a465e8de4587316cdfa8b8ee74620e"/></dir><dir name="Helper"><file name="Data.php" hash="4e16099480123dc7c31a7e58df83289b"/></dir><dir name="Model"><dir name="Config"><dir name="Source"><file name="Summary.php" hash="8db150e8cd58659adb15ba1216d5b864"/></dir></dir><file name="Config.php" hash="9b36ac4d278559067440f0db63584bdb"/><dir name="Item"><file name="Option.php" hash="002538fc6f15eaeff15576e02ff9d5d1"/></dir><file name="Item.php" hash="af65dabdad473bbae1de031daf9f1fb2"/><dir name="Mysql4"><dir name="Item"><file name="Collection.php" hash="a0878abb3d34f513d74d644e5d6a6b5b"/><dir name="Option"><file name="Collection.php" hash="c32c1b96b6cb1a5d220d2f4da4842068"/></dir><file name="Option.php" hash="2cb17ff416a0c3e10fbe5c0f87131a14"/></dir><file name="Item.php" hash="dc6643f16dc4c4b30ebc7b8f40b772fe"/><dir name="Product"><file name="Collection.php" hash="ce35de73b53e36b821d5f39681deed3d"/></dir><dir name="Wishlist"><file name="Collection.php" hash="e3055aa7f4420786d4ab7246a19ce4c9"/></dir><file name="Wishlist.php" hash="ce4a3be4f46f359f8b9e8d97a132dde5"/></dir><file name="Observer.php" hash="eec0fe965db7b03ad718ef5b5431899d"/><dir name="Resource"><dir name="Item"><file name="Collection.php" hash="5859138d39949c65768c8c205fcbae20"/><dir name="Option"><file name="Collection.php" hash="5b509abd69357bd6f4f5bfb4ce1f0a2e"/></dir><file name="Option.php" hash="a9520ad57cd860ef7a6b692f1e495604"/></dir><file name="Item.php" hash="92cb2dd3e24b0e6bd2ef2845d6c7d094"/><dir name="Product"><file name="Collection.php" hash="79761acc3422b92c21b0dae222e8b3b9"/></dir><dir name="Wishlist"><file name="Collection.php" hash="7b9722281bd55802b91ef20eab53255b"/></dir><file name="Wishlist.php" hash="78c5b1d349978896cea12317ed382fdf"/></dir><file name="Session.php" hash="9d74602cc1a45399e7b97f70df2c17b8"/><file name="Wishlist.php" hash="62fa9d7924b61421f382b0c01b6dda92"/></dir><dir name="controllers"><file name="IndexController.php" hash="083239ca58be27c828dbba8a5afb5215"/><file name="SharedController.php" hash="72a145bcb802ea7505c9bcb6f4e85a2f"/></dir><dir name="etc"><file name="adminhtml.xml" hash="027373e7b6da22b634a79733660c267c"/><file name="config.xml" hash="42860b28fefb8230e54b66efc6cca7e1"/><file name="system.xml" hash="b3451ddf7936228ac9c4319d0f896f0c"/></dir><dir name="sql"><dir name="wishlist_setup"><file name="install-1.6.0.0.php" hash="c086bab117e32d9b2a37be6f6841fa8b"/><file name="mysql4-install-0.7.0.php" hash="83b22b61bfe862192d54321cd89ee3e6"/><file name="mysql4-upgrade-0.7.0-0.7.1.php" hash="1fec6213ffc583c317f1cc8b01421f5b"/><file name="mysql4-upgrade-0.7.1-0.7.2.php" hash="fe9e1be0465528dcc9b9f9a4bc33f671"/><file name="mysql4-upgrade-0.7.2-0.7.4.php" hash="6aad117dd4ed68cd7fabfd28f52c5eb3"/><file name="mysql4-upgrade-0.7.4-0.7.5.php" hash="17b24b6b18e8b60c85c2bd24542b18a4"/><file name="mysql4-upgrade-0.7.5-0.7.6.php" hash="1492241a61245378b59422098d922dc5"/><file name="mysql4-upgrade-0.7.6-0.7.7.php" hash="560fde491b85eb08575a212137e4dc77"/><file name="mysql4-upgrade-0.7.7-0.7.8.php" hash="ad907977c112455072ec3877caa6467f"/><file name="mysql4-upgrade-0.7.8-0.7.9.php" hash="6458a21c207db69ec3b0ff16ece201e9"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="e7de27080f47c179fa64044b7c7f01ef"/></dir></dir></dir></dir><dir name="Zend"><dir name="Controller"><dir name="Request"><file name="Http.php" hash="92d5e6e2538a8c23af43faae8200c60b"/></dir></dir><file name="Date.php" hash="95bf218944785f606f22c2ea0c077f5d"/><dir name="Db"><file name="Select.php" hash="28f3efa5f9797af22f899fb525dbb44f"/><file name="Statement.php" hash="4b5b39a1e1c651ab9d6db332c882fdf7"/></dir><dir name="Filter"><file name="PregReplace.php" hash="1b5bbd52c2b2d17f19db273606e5ddfc"/></dir><dir name="Form"><dir name="Decorator"><file name="Form.php" hash="fbd6a6687ef13a8b7ba416c1ca50dd38"/></dir></dir><dir name="Locale"><dir name="Math"><file name="PhpMath.php" hash="a95d7d3d0d7220b47d0e518ffad508f7"/></dir></dir><file name="Mime.php" hash="f216d84221e3d7601822b4c95948aeaf"/><dir name="Serializer"><dir name="Adapter"><file name="PhpCode.php" hash="d19044ca7b67e672bb9627f572f1a069"/></dir></dir><dir name="Validate"><file name="EmailAddress.php" hash="e04917b783b4880bdc984e7774abf7a6"/><dir name="File"><file name="Upload.php" hash="a5de679b71a82a061dbddd3afde626b2"/></dir><file name="Hostname.php" hash="08c032ea8831e62e79c792e274220aa9"/></dir><dir name="Xml"><file name="Security.php" hash="7366a7b9e2dab5551b557f49d900d6a1"/></dir></dir></target><target name="mage"><dir name="app"><file name="Mage.php" hash="757d8a3309bfed2157db4797c9bbb257"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/><file name="bootstrap.php" hash="f4a82f3d5b3e180f6c3edaf54400ce9d"/></dir><dir name="."><file name="cron.php" hash="acaf5a64a15dacb758ac99767e8da6a4"/><file name="LICENSE.txt" hash="59563e7be45096d0833dade102989042"/><file name="index.php.sample" hash="516477ded8fca96db7b7baf32cc12677"/><file name=".htaccess.sample" hash="971c336db60ac86ae96b5c5871be1e8c"/><file name="LICENSE_AFL.txt" hash="45a399f2095030865fb962263ccd7506"/><file name="LICENSE.html" hash="caf0a79ffb5e4719f9f4de286f253a61"/><file name="cron.sh" hash="0fbc521a7d6c9ba5460c3184967e0f12"/><file name="install.php" hash="765ccaa3255ba707420b760e1fc78ffa"/><file name="php.ini.sample" hash="d7412c2f78440a96fc2d9378ccf460cb"/><file name="get.php" hash="72c6c8b5ea9450a46d2852448d39ded3"/><file name="RELEASE_NOTES.txt" hash="7c28dc7c4b41ec8819352e0c97bbdb1c"/><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><file name="api.php" hash="c254de5be8783255e05b7161392ec7ca"/></dir><dir name="errors"><file name="404.php" hash="52eb809b4ac842f5d8b8a0e8162fb87d"/><file name="503.php" hash="ad502fac41a76914095ee504186bb60a"/><dir name="default"><file name="404.phtml" hash="060eed9c360b7f2b7c835e396257697b"/><file name="503.phtml" hash="a4f4cdf8c571de3bee43f3334a5e3236"/><dir name="css"><file name="styles.css" hash="08e8a2dd4953f273a86c6b5105c14956"/></dir><dir name="images"><file name="bkg_body.gif" hash="82bfc5bfe346c8e974cd33b1314b0acf"/><file name="bkg_header.jpg" hash="0211c47be1493bd0ec72949c47932b81"/><file name="bkg_main1.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="bkg_main2.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><file name="i_msg-error.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="i_msg-note.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="i_msg-success.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="logo.gif" hash="48b7eb03807fdf80bdfb19b872cf84b8"/></dir><file name="page.phtml" hash="6cbf2242c9e7c370fd3eca50f3a74a19"/><file name="report.phtml" hash="06f47a20a74d6eb5cfd9f6ab0a3091fa"/></dir><file name="design.xml" hash="92f4586ad3d45a8a05fc342035669d78"/><file name="local.xml.sample" hash="83c646d259d7b0afbcf7878c352dbd1c"/><file name="processor.php" hash="885881c4fa60a3e97f3ae351b8d81110"/><file name="report.php" hash="3de9c5efc110fc6dd30941dedf33ae4d"/><file name=".htaccess" hash="8382e66b40fe15d7a1edfc780f9be92f"/><file name=".htaccess" hash="8382e66b40fe15d7a1edfc780f9be92f"/></dir><dir name="var"><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><dir name="shell"><file name="abstract.php" hash="40f2c3410dfc2a0b676a5e58c696a510"/><file name="compiler.php" hash="f2d926c4a51d2197def3c66c51205d08"/><file name="indexer.php" hash="2284eebdec56889a7de2ebd959757bf2"/><file name="log.php" hash="0544716ccbfa851341951cdd5eae6f7b"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><dir name="lib"><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><dir name="media"><file name=".htaccess" hash="08de5b2f5ea1ce6f51f40a19bacbf42e"/><dir name="dhl"><file name="logo.jpg" hash="68500df59e568e01333ba078a262ca27"/></dir><dir name="downloadable"><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><dir name="customer"><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir></dir></target><target name="mageetc"><dir name="."><file name="config.xml" hash="26e7fcad34e33bf1c86d34aa5229569f"/><file name="local.xml.template" hash="d618514ef235cc0766c28d533a0ff0ae"/><file name="local.xml.additional" hash="dcf73b5a1b54822cdccd79610e4f47ff"/></dir><dir name="modules"><file name="Mage_All.xml" hash="54bb2aced1306adc8062f7faaf463699"/><file name="Mage_Bundle.xml" hash="0427fde4b98189033d22c475bf952aee"/><file name="Mage_Api.xml" hash="099ab4ebf639c4d7e08610a9abacdfef"/><file name="Mage_Downloadable.xml" hash="8e907dc0be6e843acca4cd9ad5183e33"/><file name="Mage_Weee.xml" hash="ed33da8b3c051a2f05cec8691b80a836"/><file name="Mage_Widget.xml" hash="62f954220f02a866f1c195544198b57f"/><file name="Mage_Connect.xml" hash="62fbc51b1e64cb580ebe81e8b89d72fd"/><file name="Mage_ImportExport.xml" hash="e1591ab0bf438c3d2868cfb794fd2716"/><file name="Mage_PageCache.xml" hash="a4ec3cac551d62995c97cedd99a2fdd1"/><file name="Mage_Persistent.xml" hash="3c16a3e0c22c7c2398253afd7f3231d5"/><file name="Mage_Authorizenet.xml" hash="54837c3b1432c6074de7add7da07fc43"/><file name="Mage_Captcha.xml" hash="a38d5a04b956f3f45f50540a1359bfb8"/><file name="Mage_CurrencySymbol.xml" hash="334f1b4b44a8a235da5aa3ff7d693e30"/><file name="Mage_Api2.xml" hash="cb422c0dc04c27e86a481ee1d861c36c"/><file name="Mage_Oauth.xml" hash="3ae635189b55f252c5e94d4a9ee11b6b"/><file name="Mage_ConfigurableSwatches.xml" hash="e2eaeb2cc79a53541fe54aa53c412307"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Lib_Varien</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Google_Checkout</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Js_Calendar</name><channel>community</channel><min>1.51.1.17</min><max>1.51.1.17</max></package><package><name>Lib_Js_Mage</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Js_Prototype</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Phpseclib</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Mage_Locale_en_US</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Mage</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Magento</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Credis</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Pelago</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Unserialize</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_IDNA2</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package><package><name>Lib_Mcryptcompat</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Mage_Downloader-1.9.3.10.xml b/var/package/Mage_Downloader-1.9.3.10.xml
deleted file mode 100644
index 698dae5..0000000
--- a/var/package/Mage_Downloader-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Mage_Downloader</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Magento Downloader</summary>
-    <description>Magento Downloader</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:29</time>
-    <contents><target name="mage"><dir name="downloader"><dir name="js"><file name="prototype.js" hash="3766aeff5778b54f74f93670322ca0df"/></dir><dir name="Maged"><dir name="BruteForce"><file name="Validator.php" hash="e069b1af7148efe26a918ac9225deb81"/></dir><dir name="Connect"><file name="Frontend.php" hash="4fb58e748e68dc9a724f20e94b9f3f29"/></dir><file name="Connect.php" hash="886dc69525312ea3588bfd6b2e2c9505"/><file name="Controller.php" hash="9109093fa70d05dde8134b0e78166a81"/><file name="Exception.php" hash="22bdaa1e2923c77b8d1aabc7767d2875"/><dir name="Model"><dir name="BruteForce"><file name="ConfigIni.php" hash="1935321c98f6be5748e39c0cb4905848"/><file name="ModelConfigInterface.php" hash="7a84c5ce27d4ede6ed9190040b7f4ed2"/><dir name="Resource"><file name="FTP.php" hash="94985f1c1548daa07cdd26aecbf4fbd3"/><file name="File.php" hash="8515b75daceed039dfdcab1c697c1ac0"/><file name="ResourceInterface.php" hash="1c217ef936960724b1e3b2de11232be2"/></dir></dir><dir name="Config"><file name="Abstract.php" hash="30365c47b1af63f6d6b3c392ce78e845"/><file name="Community.php" hash="a6b79a5a248b11b51fa6a05e963fe919"/><file name="Interface.php" hash="33d921215bfb8e9ff7214bfc355b2c19"/></dir><file name="Config.php" hash="a1f3bbb64503cad2a5801c24cc7b9e90"/><dir name="Connect"><file name="Request.php" hash="113c3d2e0afbdf9b1e7bdc9e67ae6f45"/></dir><file name="Connect.php" hash="1fd793d4642826abbdc1517816353934"/><file name="Dowloader.php" hash="fa0e99055534c6c6cbc2c2dd6dc555d0"/><file name="Session.php" hash="264b1c5fd12013f082fb0384508e7ef8"/></dir><file name="Model.php" hash="4387f98b652d73716e2432827d82ebe3"/><file name="View.php" hash="fc141538b3aaa91540d8b876465fe2e9"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><dir name="skin"><file name="boxes.css" hash="c11c2a895c4059441b2c8ebcccbe7886"/><file name="ie7boxes.css" hash="336ffbdd43e7a06700ee92034b343b14"/><file name="ieboxes.css" hash="c178c04d5d5aece3e538740a1fc955c6"/><dir name="images"><file name="Magento_Connect.jpg" hash="20e1378c09506fdc5723abc0115d5f57"/><file name="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="header_bg.gif" hash="8440b04c5cb6b1451bb886bfbef260a5"/><file name="logo.gif" hash="5eb089ecea67d82311d7c91898460104"/><file name="nav_bg.gif" hash="1cb1366f03a9efad6b17e4483aef20cf"/><file name="nav_separator.gif" hash="492011a7de2de84a9c7837bfd879ab95"/></dir><dir name="install"><file name="boxes.css" hash="b8699cb958c92555b463cda59fc3caa7"/><file name="clears.css" hash="2e7bd70ec9da32330f44ffba7a6f1e3d"/><file name="ie7minus.css" hash="a3481034dce2436323f6876a925007b8"/><file name="iestyles.css" hash="ea88e14c32cced73fce9c8a357f346d2"/><dir name="images"><file name="error_msg_icon.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="footer_bg.gif" hash="d59784af16fd95ea82226e5708a89232"/><file name="footer_container_bg.gif" hash="d468e3943943cbbf711586e69d40ca42"/><file name="footer_info_separator.gif" hash="7da64eefaf4da3855ab6ee76dbced0c2"/><file name="footer_informational_bg.gif" hash="72d37f4b2ea747bf8969c2654ad1d1e0"/><file name="footer_left.gif" hash="2b15a54bea9409a75c142d14a62f0149"/><file name="footer_legality_bg.gif" hash="4eb1602e3369dccd901ffe98ea0fd4b3"/><file name="footer_right.gif" hash="a45eaf35c8797d299bd4d9b936528e8f"/><file name="header_bg.gif" hash="795c6de754d0d49717ed08d5cd8168c8"/><file name="header_nav_bg.gif" hash="80c6a18686eb0243e06d6176506a2502"/><file name="header_top_bg.jpg" hash="143f524392ee62fcc8183f5930d7258b"/><file name="header_top_container_bg.jpg" hash="294c18f3f6b838bba06ae41dd3c3d638"/><file name="logo.gif" hash="073a947a39b967af678455a5c7f66e90"/><file name="main_bg.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="main_container_bg.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="note_msg_icon.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="success_msg_icon.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/></dir><file name="reset.css" hash="51580e87ff713eec672a0b364e00121b"/></dir></dir><dir name="template"><dir name="connect"><file name="iframe.phtml" hash="5518f6d1624388e512fe3d20a75e6d30"/><file name="packages.phtml" hash="4802a619698604407e1b2f7f0720edc6"/><file name="packages_prepare.phtml" hash="1ccf6ef001d1d72378d41a10bad27563"/></dir><file name="exception.phtml" hash="d7559437cea821c2b4ab8504767cea24"/><file name="footer.phtml" hash="20e012f224e187ae9f049e59e04ecd35"/><file name="header.phtml" hash="9e7a1da616e1fc788031892d14d0e1eb"/><file name="index.phtml" hash="aa3aa55f6015dc87dc4aa1eff5cabeb1"/><dir name="install"><file name="download.phtml" hash="f5628e0b9cfd0d2758e0417e24d4072d"/><file name="footer.phtml" hash="9de8976ea003732961478c3eca63c51e"/><file name="header.phtml" hash="7c1d89aeda59b956ad3520f0394d3ee8"/><file name="writable.phtml" hash="55142cd8f6d2198e276292d6975a1c01"/></dir><file name="login.phtml" hash="54831d9f4445d88bc7e6e14e4f40a660"/><file name="messages.phtml" hash="e5bfd22e6cb409a894e995d5fefda56a"/><file name="noroute.phtml" hash="6968e31c6e7de3dde2e45910f9601a07"/><file name="settings.phtml" hash="89d4b871915adac450a41ccf24603e79"/><file name="writable.phtml" hash="eb76e591e645ec017d98a197002c982d"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><file name="index.php" hash="74e1f933c81ebcd5b07b31b8c9aaae4f"/><dir name="lib"><dir name="Mage"><dir name="Archive"><file name="Abstract.php" hash="7219e31d44a1ad2263795f24f80fd557"/><file name="Bz.php" hash="ddda0a3dfbb7b81ce9a6e69c6b44e540"/><file name="Gz.php" hash="385b2740aacefcd317273448ed95ef83"/><dir name="Helper"><dir name="File"><file name="Bz.php" hash="e6066c9ad90a71d015329ee2ad342702"/><file name="Gz.php" hash="13c15537156d0293cc86588cca629267"/></dir><file name="File.php" hash="314284e414f094c7e7ea81ffe8f6a9ee"/></dir><file name="Interface.php" hash="212679c1c16ad7e35eff39e55c2ec510"/><file name="Tar.php" hash="1387e79bba7f05f479062113d9c74b49"/></dir><file name="Archive.php" hash="4c21f386cc1e86939e2ef13d6b5944c1"/><dir name="Autoload"><file name="Simple.php" hash="3d7ff27e8bc9e9fbb6acc94d710ed3f0"/></dir><dir name="Backup"><file name="Abstract.php" hash="c3de48d5961070832d1ed0f7177ee4a2"/><dir name="Archive"><file name="Tar.php" hash="8bd53f96d6ba93d5887b0e7aa72f9269"/></dir><file name="Db.php" hash="89f62bd52b21db1dd708a02ae4347248"/><dir name="Exception"><file name="CantLoadSnapshot.php" hash="4f53c1142257ab85784198a402d2f425"/><file name="FtpConnectionFailed.php" hash="5fefd3d3b8be727781a6f5fdb138852f"/><file name="FtpValidationFailed.php" hash="cec68f36cf698a50e41471d46722d57c"/><file name="NotEnoughFreeSpace.php" hash="ccdd5e27479a58a1b3866c64533822c1"/><file name="NotEnoughPermissions.php" hash="3afd5fa76513cc11b55082bab2ebeb26"/></dir><file name="Exception.php" hash="d75dc453d7950a04329ba6309da002a9"/><dir name="Filesystem"><file name="Helper.php" hash="6a1f92a6c37f2c7cc19f5cd17a5a7b24"/><dir name="Iterator"><file name="File.php" hash="c85c788b168fc0a4645a4cdaf10caa80"/><file name="Filter.php" hash="174deec59e7fe57014725a3a623b074c"/></dir><dir name="Rollback"><file name="Abstract.php" hash="271c9e6032f86e8d71e660b9778e71a9"/><file name="Fs.php" hash="c6ca689d7bfd4c0fe4101ccb74a96c97"/><file name="Ftp.php" hash="413393e9b1ba8402a584e0236b839232"/></dir></dir><file name="Filesystem.php" hash="a2ac0ad741f06e862da5cc2a8d0c3a36"/><file name="Interface.php" hash="2550d86498a20a3d5d83672415ae7f91"/><file name="Media.php" hash="dd1f7d5304b53206c6d770ae668d254b"/><file name="Nomedia.php" hash="1d7f11e8507fbba3893be459d331891b"/><file name="Snapshot.php" hash="d3b7c974ed49905937cde4b69075ab4e"/></dir><file name="Backup.php" hash="951e7982ed239d7799e7722ac67435eb"/><dir name="Connect"><file name="Backup.php" hash="09eb3c5d221813cc7c2d57e4314a1722"/><dir name="Channel"><file name="Generator.php" hash="b3dbdf1fdd1d5a462a522c68627d2bba"/><file name="Parser.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="VO.php" hash="38e61a3a3b877639cdeb427f8746ced1"/></dir><dir name="Command"><file name="Channels.php" hash="c13a8190309ee8b816eb044422d02dc4"/><file name="Channels_Header.php" hash="ef497284ed4c24aa7234dbfe48d238dc"/><file name="Config.php" hash="491a98103bd35dbb31a2fb23c55518e4"/><file name="Config_Header.php" hash="11b772152974cbd6be72b76335a91896"/><file name="Install.php" hash="73e0ac5946823c865427df4625e0622f"/><file name="Install_Header.php" hash="5bd1465e62f45dc30cb8f249c399a65e"/><file name="Package.php" hash="e7f21efe6fd8cc46f78d5ab5d6dc40cc"/><file name="Package_Header.php" hash="5997e0606e551537d7f08c32f1a19135"/><file name="Registry.php" hash="1d542d1ed603f768470e70759e63b2e6"/><file name="Registry_Header.php" hash="99724f9b7288ce74ba690b440cbdfe5f"/><file name="Remote.php" hash="49196c939723bc4accca3a54ceb7a804"/><file name="Remote_Header.php" hash="27419e6e322ce60848994cc45bc71bcd"/></dir><file name="Command.php" hash="74cf48a2aa1e2df9e12d1a6c2fdb5b7c"/><file name="Config.php" hash="744d7c6fad41ca12b6e7536b07f6ebeb"/><file name="Converter.php" hash="fea5425f9074136c9fc10d6d7b15a4f8"/><dir name="Frontend"><file name="CLI.php" hash="12ca52168cf666fcdd676d84d2131c9f"/></dir><file name="Frontend.php" hash="dc3c8f852c7c455659010d5073ceceff"/><file name="Ftp.php" hash="24de96a815ff507fb1292fbb4dd69418"/><dir name="Loader"><file name="Ftp.php" hash="fd0e1437083204dfb19f927844a1041d"/></dir><file name="Loader.php" hash="774dfb7d205c130982d6fa6d9894ed4f"/><dir name="Package"><file name="Extension.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Hotfix.php" hash="31f281c8485a8c010230eebc64d2fdc9"/><file name="Maintainer.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Reader.php" hash="94dd06082e803182e7d54a9b6a3a9117"/><file name="Target.php" hash="3769c486343cee9e9c20ab0a7d211288"/><file name="VO.php" hash="bfbe38745c9f36fe9b79aa1c0bf3c106"/><file name="Writer.php" hash="eed2a978a7a7b38aa996116e46a5a6d3"/></dir><file name="Package.php" hash="57bf1ef36925720afee7772a1a8e4d83"/><file name="Packager.php" hash="031af74dbbf15c06446d8a217af83f22"/><dir name="Repository"><file name="Abstract.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><dir name="Channel"><file name="Abstract.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Commercial.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Community.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Core.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/></dir><file name="Channel.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Local.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/></dir><file name="Repository.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><dir name="Rest"><file name="Builder.php" hash="479d68770edd8163ad7f74f5d6d8bb4c"/><file name="Factory.php" hash="474f3a6be5b6d615cb00d81f75e05823"/></dir><file name="Rest.php" hash="e0654ec5cf5fdf39371c5d93096d9656"/><file name="Singleconfig.php" hash="8b736510d2f16c7d33badcc386dd8e5d"/><dir name="Structures"><file name="Graph.php" hash="907ec31e395ed931d3468bab30c8a865"/><file name="Node.php" hash="bfa5cc71b8e0787ddf41917faaa8d859"/></dir><file name="Validator.php" hash="f7dd429ef7b6d3495745377d94506af7"/></dir><dir name="DB"><file name="Exception.php" hash="1651c02af32d13cb09f18e55fe41a454"/><file name="Mysqli.php" hash="1afea21a74a5c95afb3aa0fac88dd8f1"/></dir><file name="Exception.php" hash="77e6ab75c4d3375d41ab444205a401be"/><dir name="HTTP"><dir name="Client"><file name="Curl.php" hash="05ae5ab9cdd02bbee50db4f35108bf44"/><file name="Socket.php" hash="2403f0c937a01759262eca2bd838b13a"/></dir><file name="Client.php" hash="8370d8998e874e5833747eb0085775ca"/><file name="IClient.php" hash="1bb87d5c7b0027db0288a58d2691c1f8"/></dir><dir name="System"><file name="Args.php" hash="c95ce3451a31af33ed0a0987fc007a80"/><file name="Dirs.php" hash="3069e59e595fdd0b30d953c7ea0a291d"/><file name="Ftp.php" hash="044097653f0fad93fdacd5e2a3fe777e"/></dir><dir name="Xml"><file name="Generator.php" hash="dbbf15cac6bef48830f921ece90b4382"/><file name="Parser.php" hash="4dab68fb16c447bf58897b57a9e7f589"/></dir></dir><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><file name="config.ini" hash="a52ba98e71ab19de387b3af1a04c6102"/><file name=".htaccess" hash="520cc012c84739584526b8a9ff098e23"/><file name="mage.php" hash="24b532702775ce1ce3ae1646047d861e"/><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><file name="target.xml" hash="b0f5bc47ce412f7ba12303676dbfce37"/></dir><dir name="."><file name=".htaccess" hash="242b96ab8c820ff12b9e610a8f4352ec"/><file name="index.php" hash="8e678a85bf749549a1f507374bedc273"/><file name="mage" hash="24869e556de9dd46ec8fda89e649af79"/></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Mage_Downloader-1.9.4.0.xml b/var/package/Mage_Downloader-1.9.4.0.xml
new file mode 100644
index 0000000..d2a1607
--- /dev/null
+++ b/var/package/Mage_Downloader-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Mage_Downloader</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/osl-3.0.php">OSL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Magento Downloader</summary>
+    <description>Magento Downloader</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:12</time>
+    <contents><target name="mage"><dir name="downloader"><dir name="js"><file name="prototype.js" hash="3766aeff5778b54f74f93670322ca0df"/></dir><dir name="Maged"><dir name="BruteForce"><file name="Validator.php" hash="e069b1af7148efe26a918ac9225deb81"/></dir><dir name="Connect"><file name="Frontend.php" hash="4fb58e748e68dc9a724f20e94b9f3f29"/></dir><file name="Connect.php" hash="886dc69525312ea3588bfd6b2e2c9505"/><file name="Controller.php" hash="482c54d564f37b3f0cb09ca787194b5f"/><file name="Exception.php" hash="22bdaa1e2923c77b8d1aabc7767d2875"/><dir name="Model"><dir name="BruteForce"><file name="ConfigIni.php" hash="1935321c98f6be5748e39c0cb4905848"/><file name="ModelConfigInterface.php" hash="7a84c5ce27d4ede6ed9190040b7f4ed2"/><dir name="Resource"><file name="FTP.php" hash="94985f1c1548daa07cdd26aecbf4fbd3"/><file name="File.php" hash="8515b75daceed039dfdcab1c697c1ac0"/><file name="ResourceInterface.php" hash="1c217ef936960724b1e3b2de11232be2"/></dir></dir><dir name="Config"><file name="Abstract.php" hash="30365c47b1af63f6d6b3c392ce78e845"/><file name="Community.php" hash="a6b79a5a248b11b51fa6a05e963fe919"/><file name="Interface.php" hash="33d921215bfb8e9ff7214bfc355b2c19"/></dir><file name="Config.php" hash="a1f3bbb64503cad2a5801c24cc7b9e90"/><dir name="Connect"><file name="Request.php" hash="113c3d2e0afbdf9b1e7bdc9e67ae6f45"/></dir><file name="Connect.php" hash="1fd793d4642826abbdc1517816353934"/><file name="Dowloader.php" hash="fa0e99055534c6c6cbc2c2dd6dc555d0"/><file name="Session.php" hash="264b1c5fd12013f082fb0384508e7ef8"/></dir><file name="Model.php" hash="4387f98b652d73716e2432827d82ebe3"/><file name="View.php" hash="fc141538b3aaa91540d8b876465fe2e9"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><dir name="skin"><file name="boxes.css" hash="c11c2a895c4059441b2c8ebcccbe7886"/><file name="ie7boxes.css" hash="336ffbdd43e7a06700ee92034b343b14"/><file name="ieboxes.css" hash="c178c04d5d5aece3e538740a1fc955c6"/><dir name="images"><file name="Magento_Connect.jpg" hash="20e1378c09506fdc5723abc0115d5f57"/><file name="ajax-loader-tr.gif" hash="1ae32bc8232ff2527c627e5b38eb319a"/><file name="btn_bg.gif" hash="37c51a4d48a92da9648dcd3ca011039f"/><file name="header_bg.gif" hash="8440b04c5cb6b1451bb886bfbef260a5"/><file name="logo.gif" hash="5eb089ecea67d82311d7c91898460104"/><file name="nav_bg.gif" hash="1cb1366f03a9efad6b17e4483aef20cf"/><file name="nav_separator.gif" hash="492011a7de2de84a9c7837bfd879ab95"/></dir><dir name="install"><file name="boxes.css" hash="b8699cb958c92555b463cda59fc3caa7"/><file name="clears.css" hash="2e7bd70ec9da32330f44ffba7a6f1e3d"/><file name="ie7minus.css" hash="a3481034dce2436323f6876a925007b8"/><file name="iestyles.css" hash="ea88e14c32cced73fce9c8a357f346d2"/><dir name="images"><file name="error_msg_icon.gif" hash="e4f28607f075a105e53fa3113d84bd26"/><file name="footer_bg.gif" hash="d59784af16fd95ea82226e5708a89232"/><file name="footer_container_bg.gif" hash="d468e3943943cbbf711586e69d40ca42"/><file name="footer_info_separator.gif" hash="7da64eefaf4da3855ab6ee76dbced0c2"/><file name="footer_informational_bg.gif" hash="72d37f4b2ea747bf8969c2654ad1d1e0"/><file name="footer_left.gif" hash="2b15a54bea9409a75c142d14a62f0149"/><file name="footer_legality_bg.gif" hash="4eb1602e3369dccd901ffe98ea0fd4b3"/><file name="footer_right.gif" hash="a45eaf35c8797d299bd4d9b936528e8f"/><file name="header_bg.gif" hash="795c6de754d0d49717ed08d5cd8168c8"/><file name="header_nav_bg.gif" hash="80c6a18686eb0243e06d6176506a2502"/><file name="header_top_bg.jpg" hash="143f524392ee62fcc8183f5930d7258b"/><file name="header_top_container_bg.jpg" hash="294c18f3f6b838bba06ae41dd3c3d638"/><file name="logo.gif" hash="073a947a39b967af678455a5c7f66e90"/><file name="main_bg.gif" hash="cf18ba9f7c7e6b058b439cde1a897e9c"/><file name="main_container_bg.gif" hash="a8f5717873dc6cf8f6bd22924b5838fe"/><file name="note_msg_icon.gif" hash="e774ee481a2820789c1a77112377c4e0"/><file name="success_msg_icon.gif" hash="834dfafd5f8b44c4b24a4c00add56fcf"/><file name="validation_advice_bg.gif" hash="b85432906de8985a8b14eeb2dc652d3c"/></dir><file name="reset.css" hash="51580e87ff713eec672a0b364e00121b"/></dir></dir><dir name="template"><dir name="connect"><file name="iframe.phtml" hash="5518f6d1624388e512fe3d20a75e6d30"/><file name="packages.phtml" hash="4802a619698604407e1b2f7f0720edc6"/><file name="packages_prepare.phtml" hash="1ccf6ef001d1d72378d41a10bad27563"/></dir><file name="exception.phtml" hash="d7559437cea821c2b4ab8504767cea24"/><file name="footer.phtml" hash="20e012f224e187ae9f049e59e04ecd35"/><file name="header.phtml" hash="9e7a1da616e1fc788031892d14d0e1eb"/><file name="index.phtml" hash="aa3aa55f6015dc87dc4aa1eff5cabeb1"/><dir name="install"><file name="download.phtml" hash="f5628e0b9cfd0d2758e0417e24d4072d"/><file name="footer.phtml" hash="9de8976ea003732961478c3eca63c51e"/><file name="header.phtml" hash="7c1d89aeda59b956ad3520f0394d3ee8"/><file name="writable.phtml" hash="55142cd8f6d2198e276292d6975a1c01"/></dir><file name="login.phtml" hash="54831d9f4445d88bc7e6e14e4f40a660"/><file name="messages.phtml" hash="e5bfd22e6cb409a894e995d5fefda56a"/><file name="noroute.phtml" hash="6968e31c6e7de3dde2e45910f9601a07"/><file name="settings.phtml" hash="89d4b871915adac450a41ccf24603e79"/><file name="writable.phtml" hash="eb76e591e645ec017d98a197002c982d"/><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><file name="index.php" hash="74e1f933c81ebcd5b07b31b8c9aaae4f"/><dir name="lib"><dir name="Mage"><dir name="Archive"><file name="Abstract.php" hash="7219e31d44a1ad2263795f24f80fd557"/><file name="Bz.php" hash="ddda0a3dfbb7b81ce9a6e69c6b44e540"/><file name="Gz.php" hash="385b2740aacefcd317273448ed95ef83"/><dir name="Helper"><dir name="File"><file name="Bz.php" hash="e6066c9ad90a71d015329ee2ad342702"/><file name="Gz.php" hash="13c15537156d0293cc86588cca629267"/></dir><file name="File.php" hash="314284e414f094c7e7ea81ffe8f6a9ee"/></dir><file name="Interface.php" hash="212679c1c16ad7e35eff39e55c2ec510"/><file name="Tar.php" hash="1387e79bba7f05f479062113d9c74b49"/></dir><file name="Archive.php" hash="4c21f386cc1e86939e2ef13d6b5944c1"/><dir name="Autoload"><file name="Simple.php" hash="3d7ff27e8bc9e9fbb6acc94d710ed3f0"/></dir><dir name="Backup"><file name="Abstract.php" hash="c3de48d5961070832d1ed0f7177ee4a2"/><dir name="Archive"><file name="Tar.php" hash="8bd53f96d6ba93d5887b0e7aa72f9269"/></dir><file name="Db.php" hash="89f62bd52b21db1dd708a02ae4347248"/><dir name="Exception"><file name="CantLoadSnapshot.php" hash="4f53c1142257ab85784198a402d2f425"/><file name="FtpConnectionFailed.php" hash="5fefd3d3b8be727781a6f5fdb138852f"/><file name="FtpValidationFailed.php" hash="cec68f36cf698a50e41471d46722d57c"/><file name="NotEnoughFreeSpace.php" hash="ccdd5e27479a58a1b3866c64533822c1"/><file name="NotEnoughPermissions.php" hash="3afd5fa76513cc11b55082bab2ebeb26"/></dir><file name="Exception.php" hash="d75dc453d7950a04329ba6309da002a9"/><dir name="Filesystem"><file name="Helper.php" hash="6a1f92a6c37f2c7cc19f5cd17a5a7b24"/><dir name="Iterator"><file name="File.php" hash="c85c788b168fc0a4645a4cdaf10caa80"/><file name="Filter.php" hash="174deec59e7fe57014725a3a623b074c"/></dir><dir name="Rollback"><file name="Abstract.php" hash="271c9e6032f86e8d71e660b9778e71a9"/><file name="Fs.php" hash="c6ca689d7bfd4c0fe4101ccb74a96c97"/><file name="Ftp.php" hash="413393e9b1ba8402a584e0236b839232"/></dir></dir><file name="Filesystem.php" hash="a2ac0ad741f06e862da5cc2a8d0c3a36"/><file name="Interface.php" hash="2550d86498a20a3d5d83672415ae7f91"/><file name="Media.php" hash="dd1f7d5304b53206c6d770ae668d254b"/><file name="Nomedia.php" hash="1d7f11e8507fbba3893be459d331891b"/><file name="Snapshot.php" hash="d3b7c974ed49905937cde4b69075ab4e"/></dir><file name="Backup.php" hash="951e7982ed239d7799e7722ac67435eb"/><dir name="Connect"><file name="Backup.php" hash="09eb3c5d221813cc7c2d57e4314a1722"/><dir name="Channel"><file name="Generator.php" hash="b3dbdf1fdd1d5a462a522c68627d2bba"/><file name="Parser.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="VO.php" hash="38e61a3a3b877639cdeb427f8746ced1"/></dir><dir name="Command"><file name="Channels.php" hash="c13a8190309ee8b816eb044422d02dc4"/><file name="Channels_Header.php" hash="ef497284ed4c24aa7234dbfe48d238dc"/><file name="Config.php" hash="491a98103bd35dbb31a2fb23c55518e4"/><file name="Config_Header.php" hash="11b772152974cbd6be72b76335a91896"/><file name="Install.php" hash="73e0ac5946823c865427df4625e0622f"/><file name="Install_Header.php" hash="5bd1465e62f45dc30cb8f249c399a65e"/><file name="Package.php" hash="e7f21efe6fd8cc46f78d5ab5d6dc40cc"/><file name="Package_Header.php" hash="5997e0606e551537d7f08c32f1a19135"/><file name="Registry.php" hash="1d542d1ed603f768470e70759e63b2e6"/><file name="Registry_Header.php" hash="99724f9b7288ce74ba690b440cbdfe5f"/><file name="Remote.php" hash="49196c939723bc4accca3a54ceb7a804"/><file name="Remote_Header.php" hash="27419e6e322ce60848994cc45bc71bcd"/></dir><file name="Command.php" hash="74cf48a2aa1e2df9e12d1a6c2fdb5b7c"/><file name="Config.php" hash="744d7c6fad41ca12b6e7536b07f6ebeb"/><file name="Converter.php" hash="fea5425f9074136c9fc10d6d7b15a4f8"/><dir name="Frontend"><file name="CLI.php" hash="12ca52168cf666fcdd676d84d2131c9f"/></dir><file name="Frontend.php" hash="dc3c8f852c7c455659010d5073ceceff"/><file name="Ftp.php" hash="24de96a815ff507fb1292fbb4dd69418"/><dir name="Loader"><file name="Ftp.php" hash="fd0e1437083204dfb19f927844a1041d"/></dir><file name="Loader.php" hash="774dfb7d205c130982d6fa6d9894ed4f"/><dir name="Package"><file name="Extension.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Hotfix.php" hash="31f281c8485a8c010230eebc64d2fdc9"/><file name="Maintainer.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Reader.php" hash="94dd06082e803182e7d54a9b6a3a9117"/><file name="Target.php" hash="3769c486343cee9e9c20ab0a7d211288"/><file name="VO.php" hash="bfbe38745c9f36fe9b79aa1c0bf3c106"/><file name="Writer.php" hash="eed2a978a7a7b38aa996116e46a5a6d3"/></dir><file name="Package.php" hash="57bf1ef36925720afee7772a1a8e4d83"/><file name="Packager.php" hash="031af74dbbf15c06446d8a217af83f22"/><dir name="Repository"><file name="Abstract.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><dir name="Channel"><file name="Abstract.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Commercial.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Community.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Core.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/></dir><file name="Channel.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><file name="Local.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/></dir><file name="Repository.php" hash="f4bd67eec5dc2f2deb2c0a800521662f"/><dir name="Rest"><file name="Builder.php" hash="479d68770edd8163ad7f74f5d6d8bb4c"/><file name="Factory.php" hash="474f3a6be5b6d615cb00d81f75e05823"/></dir><file name="Rest.php" hash="e0654ec5cf5fdf39371c5d93096d9656"/><file name="Singleconfig.php" hash="8b736510d2f16c7d33badcc386dd8e5d"/><dir name="Structures"><file name="Graph.php" hash="907ec31e395ed931d3468bab30c8a865"/><file name="Node.php" hash="bfa5cc71b8e0787ddf41917faaa8d859"/></dir><file name="Validator.php" hash="f7dd429ef7b6d3495745377d94506af7"/></dir><dir name="DB"><file name="Exception.php" hash="1651c02af32d13cb09f18e55fe41a454"/><file name="Mysqli.php" hash="1afea21a74a5c95afb3aa0fac88dd8f1"/></dir><file name="Exception.php" hash="77e6ab75c4d3375d41ab444205a401be"/><dir name="HTTP"><dir name="Client"><file name="Curl.php" hash="05ae5ab9cdd02bbee50db4f35108bf44"/><file name="Socket.php" hash="2403f0c937a01759262eca2bd838b13a"/></dir><file name="Client.php" hash="8370d8998e874e5833747eb0085775ca"/><file name="IClient.php" hash="1bb87d5c7b0027db0288a58d2691c1f8"/></dir><dir name="System"><file name="Args.php" hash="c95ce3451a31af33ed0a0987fc007a80"/><file name="Dirs.php" hash="3069e59e595fdd0b30d953c7ea0a291d"/><file name="Ftp.php" hash="044097653f0fad93fdacd5e2a3fe777e"/></dir><dir name="Xml"><file name="Generator.php" hash="dbbf15cac6bef48830f921ece90b4382"/><file name="Parser.php" hash="4dab68fb16c447bf58897b57a9e7f589"/></dir></dir><file name=".htaccess" hash="72617d60821288133a367f70bf39ad93"/></dir><file name="config.ini" hash="a52ba98e71ab19de387b3af1a04c6102"/><file name=".htaccess" hash="520cc012c84739584526b8a9ff098e23"/><file name="mage.php" hash="24b532702775ce1ce3ae1646047d861e"/><file name="favicon.ico" hash="88733ee53676a47fc354a61c32516e82"/><file name="target.xml" hash="b0f5bc47ce412f7ba12303676dbfce37"/></dir><dir name="."><file name=".htaccess" hash="242b96ab8c820ff12b9e610a8f4352ec"/><file name="index.php" hash="8e678a85bf749549a1f507374bedc273"/><file name="mage" hash="24869e556de9dd46ec8fda89e649af79"/></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Mage_Locale_en_US-1.9.3.10.xml b/var/package/Mage_Locale_en_US-1.9.3.10.xml
deleted file mode 100644
index a34295d..0000000
--- a/var/package/Mage_Locale_en_US-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Mage_Locale_en_US</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license uri="http://opensource.org/licenses/afl-3.0.php">AFL v3.0</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>en_US locale</summary>
-    <description>en_US locale</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:29</time>
-    <contents><target name="magelocale"><dir name="en_US"><file name="Mage_AdminNotification.csv" hash="e240a88785e337747afb4d0bc83ccaba"/><file name="Mage_AmazonPayments.csv" hash="00494825779e0ae3f0db0abd30e666b7"/><file name="Mage_Api.csv" hash="5a8919e82128dbd894c8f22c8238384d"/><file name="Mage_Api2.csv" hash="bc4b31da02edb34d29274da37a0a0f60"/><file name="Mage_Authorizenet.csv" hash="56def78c56270d23b57c1c17d3304288"/><file name="Mage_Backup.csv" hash="7fb40353a4c161de2a92edd8dcb35587"/><file name="Mage_Bundle.csv" hash="8a0263be85d7ac77e54d6044dcfc6420"/><file name="Mage_Captcha.csv" hash="de6aef08396245ed644b213ecfcf309b"/><file name="Mage_Catalog.csv" hash="87945c4070628895965263a710648138"/><file name="Mage_CatalogInventory.csv" hash="d3692d562e917fd71b5944aa050648c7"/><file name="Mage_CatalogRule.csv" hash="c7dcdd7d6192fbbbee177aaeb56b1685"/><file name="Mage_CatalogSearch.csv" hash="9a4687677cd0ff4ce75ead38b69fc2fc"/><file name="Mage_Checkout.csv" hash="a547d47e61822e2e35d2a7dcac41da74"/><file name="Mage_Cms.csv" hash="9a538e344acce7afa686fbed65082c63"/><file name="Mage_ConfigurableSwatches.csv" hash="8d9ad57fa2b4012dbb49e6dfebfeadba"/><file name="Mage_Connect.csv" hash="8cd1b22e3bb2b18a59b6bfb6a7e4e7f9"/><file name="Mage_Contacts.csv" hash="7e367e9a924c19b6df2fa5c8adca9be4"/><file name="Mage_Core.csv" hash="58bdb5b4d91944dfdf1f7195c075bc30"/><file name="Mage_Cron.csv" hash="f963e0b41f877519fd8f6e723f25ee3c"/><file name="Mage_CurrencySymbol.csv" hash="2cc13530e2f9387349c6a162d4d22bc9"/><file name="Mage_Customer.csv" hash="9e21dccf81d5f27d3e7ec3ced9b8e65f"/><file name="Mage_Dataflow.csv" hash="342acf10a1911a335f112133bd31b3f5"/><file name="Mage_Directory.csv" hash="83f83f81a84aafce6f0d8e731e87653e"/><file name="Mage_Downloadable.csv" hash="05085f8d10c4df507ad96790a0f4f31a"/><file name="Mage_Eav.csv" hash="9b9e7506f519e45f5a9b44355425f04b"/><file name="Mage_GiftMessage.csv" hash="6cd672267af7f7183f47c58450c2779a"/><file name="Mage_GoogleAnalytics.csv" hash="c8a08b1e094bdf42d8222c97241296c2"/><file name="Mage_GoogleBase.csv" hash="453420e7b2a7c67d983436cd07c3f1c1"/><file name="Mage_GoogleCheckout.csv" hash="218bdb6351129bc11f5fbb7abeff7e18"/><file name="Mage_ImportExport.csv" hash="7f6895b2225a808013a8caeeafb47ffe"/><file name="Mage_Index.csv" hash="a12d6e56dec19a45380375e7ea3f7a7c"/><file name="Mage_Install.csv" hash="ff1231e1db62fc550cac4674d0ba5190"/><file name="Mage_Log.csv" hash="302d7736324e74584e23ea35289e5593"/><file name="Mage_Media.csv" hash="9d16c10b1ba6569a972018353d17f471"/><file name="Mage_Newsletter.csv" hash="85bd38e7b398fed22997f9bd87f7afa1"/><file name="Mage_Oauth.csv" hash="53c0c0f9390456fd1be2df79ed995a61"/><file name="Mage_Page.csv" hash="2938aceaf2a5a590db264da9ed4ca14f"/><file name="Mage_PageCache.csv" hash="365e8f2f9dace7313711e9a27d27cd97"/><file name="Mage_Paygate.csv" hash="311566b283975d5c481046346023026b"/><file name="Mage_Payment.csv" hash="4f42a6296fada9e8a3dbccf19d143fce"/><file name="Mage_Paypal.csv" hash="1df7ff2e0a9957243cdef854551fad70"/><file name="Mage_PaypalUk.csv" hash="d9d163d9c022d37e6bef2bf231469572"/><file name="Mage_Persistent.csv" hash="8df1299e4ddacadd638b7dd2f66749da"/><file name="Mage_Poll.csv" hash="01084dbcb43b1da9de35c5730fabd692"/><file name="Mage_ProductAlert.csv" hash="8ceb95248eeb2e4611d01767a7331840"/><file name="Mage_Rating.csv" hash="88db484c67afdb565255d210044bd034"/><file name="Mage_Reports.csv" hash="c49ae3155e93f7eff90b3058ec8e7b40"/><file name="Mage_Review.csv" hash="a251b73a3f358bcdd93cfde7f0a2f10f"/><file name="Mage_Rss.csv" hash="56b9be44d2cb98a43bf0e04007fa98d6"/><file name="Mage_Rule.csv" hash="a6a968b628d92b7f172801ce05755962"/><file name="Mage_Sales.csv" hash="d819588fd9a0eccc737b8a70ecac6cbc"/><file name="Mage_SalesRule.csv" hash="1703499a655a66855f2fa13597c09587"/><file name="Mage_Sendfriend.csv" hash="b1e310cf2fdaf674de1e7604826146e9"/><file name="Mage_Shipping.csv" hash="1c64b4423ab6fd12c0c9e2d05a80c570"/><file name="Mage_Sitemap.csv" hash="4837691c0e5c8cfbc4d75b10f196eb65"/><file name="Mage_Tag.csv" hash="d37771ca3a2321a6f1dd6c59a378981b"/><file name="Mage_Tax.csv" hash="a0665ad32147d01fec271dc8d2ee12d1"/><file name="Mage_Uploader.csv" hash="044e66927e4a70710e2d5e27105ad308"/><file name="Mage_Usa.csv" hash="dedc63b54ae93cb0f0bb82364e937425"/><file name="Mage_Weee.csv" hash="60f8a4821b2733ba6b16cba691d3ada6"/><file name="Mage_Widget.csv" hash="01127964a87c48113af4b8969e795aa6"/><file name="Mage_Wishlist.csv" hash="95cdb9f8dc1b8a96e0e8e54f7382ba93"/><dir name="template"><dir name="email"><file name="account_new.html" hash="c7516c316c9fd94aeb4a007adb42b47c"/><file name="account_new_confirmation.html" hash="c404affe58ec3947379beabf6cf2dee9"/><file name="account_new_confirmed.html" hash="19223ed36f7076dee12a8fc6f542f00f"/><file name="account_password_reset_confirmation.html" hash="f5d6538ff20ded76d73ef6dbc34c94b0"/><file name="admin_new_user_notification.html" hash="08ed9ba46dc26ef22e4d97f7350564b8"/><file name="admin_password_new.html" hash="e0cb7a16e03f1e57fc42fa3b60920bb2"/><file name="admin_password_reset_confirmation.html" hash="385547f1fd11e85b6cd818e91f519bfd"/><file name="contact_form.html" hash="ee7a957b249d9bf8d2f84787d9276958"/><file name="currency_update_warning.html" hash="be68b2b00692c3071942df42d206575f"/><dir name="html"><file name="footer.html" hash="72d4ef13825ca2143557f5baf67c27cf"/><file name="header.html" hash="739a3ea8e07bbe3be76e4c93237bc5d2"/></dir><file name="log_clean_warning.html" hash="36eb1af6eca088bdafe6e91c5a355a98"/><file name="newsletter_subscr_confirm.html" hash="cc7849aaa2ada032e0d0cbcdc4c15222"/><file name="newsletter_subscr_success.html" hash="83fc3c7d1cae23c24561f803e41ea988"/><file name="newsletter_unsub_success.html" hash="3bd611af2d1fae78622e6217ff2b189e"/><file name="password_new.html" hash="e633e5d80e81549e29b239960f5187cb"/><file name="password_or_email_changed.html" hash="26ce55df2b817a5ed2373c71feff3652"/><file name="payment_failed.html" hash="693051923f748ed9e695c0b300597034"/><file name="product_alert_cron_error.html" hash="8ea80affba71491f4371b0524d0c3399"/><file name="product_price_alert.html" hash="18ff254fcaea714647caf21b39d36e9b"/><file name="product_share.html" hash="02c76a3380f98aaaa9c3ac6a86da3545"/><file name="product_stock_alert.html" hash="6a0fc4ef5203e195d1a0957accc1fca3"/><dir name="sales"><file name="creditmemo_new.html" hash="c487a7c825477974835891019d2b55bd"/><file name="creditmemo_new_guest.html" hash="47dc131ea102b0cf72d1e8bb50df2514"/><file name="creditmemo_update.html" hash="4dd0fedbe075abc51dd3647bedbf051a"/><file name="creditmemo_update_guest.html" hash="d805b77120143a070d44a01866df8f3f"/><file name="invoice_new.html" hash="0bfd2645ebb5289edcef0ae6fc7f93de"/><file name="invoice_new_guest.html" hash="0bfd2645ebb5289edcef0ae6fc7f93de"/><file name="invoice_update.html" hash="1ced4397da53d8a73bfa854b1ce60c24"/><file name="invoice_update_guest.html" hash="f8e7d66c9d607f3a349a9c21544c9854"/><file name="order_new.html" hash="f3ce547016c4d497805360460c6c5ec3"/><file name="order_new_guest.html" hash="f3ce547016c4d497805360460c6c5ec3"/><file name="order_update.html" hash="8d8d3f6a5831909532984817afc81647"/><file name="order_update_guest.html" hash="04ffcc29c74931d5f46b6ecb25cc049e"/><file name="shipment_new.html" hash="1a8e314cada334caffe213efd1e5ce31"/><file name="shipment_new_guest.html" hash="6ba64b3b35a39bfcc4c3d0ff4acc6fad"/><file name="shipment_update.html" hash="4425c3dfceb25ea1a5b80fd054a0f79f"/><file name="shipment_update_guest.html" hash="45b6f10c6853a36879b17f86e761edbf"/></dir><file name="sitemap_generate_warning.html" hash="7eb47e4ddd7eab22272397cff8c9441d"/><file name="token.html" hash="71f392398f6f80481b2e0edba7cefc78"/><file name="wishlist_share.html" hash="8d4d4838c76468c2be6149f5314b27a6"/></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
-</package>
diff --git a/var/package/Mage_Locale_en_US-1.9.4.0.xml b/var/package/Mage_Locale_en_US-1.9.4.0.xml
new file mode 100644
index 0000000..70b9609
--- /dev/null
+++ b/var/package/Mage_Locale_en_US-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Mage_Locale_en_US</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license uri="http://opensource.org/licenses/afl-3.0.php">AFL v3.0</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>en_US locale</summary>
+    <description>en_US locale</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:12</time>
+    <contents><target name="magelocale"><dir name="en_US"><file name="Mage_AdminNotification.csv" hash="e240a88785e337747afb4d0bc83ccaba"/><file name="Mage_AmazonPayments.csv" hash="00494825779e0ae3f0db0abd30e666b7"/><file name="Mage_Api.csv" hash="5a8919e82128dbd894c8f22c8238384d"/><file name="Mage_Api2.csv" hash="bc4b31da02edb34d29274da37a0a0f60"/><file name="Mage_Authorizenet.csv" hash="56def78c56270d23b57c1c17d3304288"/><file name="Mage_Backup.csv" hash="7fb40353a4c161de2a92edd8dcb35587"/><file name="Mage_Bundle.csv" hash="8a0263be85d7ac77e54d6044dcfc6420"/><file name="Mage_Captcha.csv" hash="de6aef08396245ed644b213ecfcf309b"/><file name="Mage_Catalog.csv" hash="975c73c165ccfc226d1032dc64c4ba96"/><file name="Mage_CatalogInventory.csv" hash="d3692d562e917fd71b5944aa050648c7"/><file name="Mage_CatalogRule.csv" hash="c7dcdd7d6192fbbbee177aaeb56b1685"/><file name="Mage_CatalogSearch.csv" hash="9a4687677cd0ff4ce75ead38b69fc2fc"/><file name="Mage_Checkout.csv" hash="a547d47e61822e2e35d2a7dcac41da74"/><file name="Mage_Cms.csv" hash="9a538e344acce7afa686fbed65082c63"/><file name="Mage_ConfigurableSwatches.csv" hash="8d9ad57fa2b4012dbb49e6dfebfeadba"/><file name="Mage_Connect.csv" hash="8cd1b22e3bb2b18a59b6bfb6a7e4e7f9"/><file name="Mage_Contacts.csv" hash="7e367e9a924c19b6df2fa5c8adca9be4"/><file name="Mage_Core.csv" hash="8e371f5da90492ad33e359981efbbdd5"/><file name="Mage_Cron.csv" hash="f963e0b41f877519fd8f6e723f25ee3c"/><file name="Mage_CurrencySymbol.csv" hash="2cc13530e2f9387349c6a162d4d22bc9"/><file name="Mage_Customer.csv" hash="9e21dccf81d5f27d3e7ec3ced9b8e65f"/><file name="Mage_Dataflow.csv" hash="342acf10a1911a335f112133bd31b3f5"/><file name="Mage_Directory.csv" hash="83f83f81a84aafce6f0d8e731e87653e"/><file name="Mage_Downloadable.csv" hash="05085f8d10c4df507ad96790a0f4f31a"/><file name="Mage_Eav.csv" hash="1fd5bcd482e23bffd25b979c4eb8985f"/><file name="Mage_GiftMessage.csv" hash="6cd672267af7f7183f47c58450c2779a"/><file name="Mage_GoogleAnalytics.csv" hash="c8a08b1e094bdf42d8222c97241296c2"/><file name="Mage_GoogleBase.csv" hash="453420e7b2a7c67d983436cd07c3f1c1"/><file name="Mage_GoogleCheckout.csv" hash="218bdb6351129bc11f5fbb7abeff7e18"/><file name="Mage_ImportExport.csv" hash="7f6895b2225a808013a8caeeafb47ffe"/><file name="Mage_Index.csv" hash="a12d6e56dec19a45380375e7ea3f7a7c"/><file name="Mage_Install.csv" hash="ff1231e1db62fc550cac4674d0ba5190"/><file name="Mage_Log.csv" hash="302d7736324e74584e23ea35289e5593"/><file name="Mage_Media.csv" hash="9d16c10b1ba6569a972018353d17f471"/><file name="Mage_Newsletter.csv" hash="85bd38e7b398fed22997f9bd87f7afa1"/><file name="Mage_Oauth.csv" hash="53c0c0f9390456fd1be2df79ed995a61"/><file name="Mage_Page.csv" hash="2938aceaf2a5a590db264da9ed4ca14f"/><file name="Mage_PageCache.csv" hash="365e8f2f9dace7313711e9a27d27cd97"/><file name="Mage_Paygate.csv" hash="311566b283975d5c481046346023026b"/><file name="Mage_Payment.csv" hash="4f42a6296fada9e8a3dbccf19d143fce"/><file name="Mage_Paypal.csv" hash="1df7ff2e0a9957243cdef854551fad70"/><file name="Mage_PaypalUk.csv" hash="d9d163d9c022d37e6bef2bf231469572"/><file name="Mage_Persistent.csv" hash="8df1299e4ddacadd638b7dd2f66749da"/><file name="Mage_Poll.csv" hash="01084dbcb43b1da9de35c5730fabd692"/><file name="Mage_ProductAlert.csv" hash="8ceb95248eeb2e4611d01767a7331840"/><file name="Mage_Rating.csv" hash="88db484c67afdb565255d210044bd034"/><file name="Mage_Reports.csv" hash="c49ae3155e93f7eff90b3058ec8e7b40"/><file name="Mage_Review.csv" hash="a251b73a3f358bcdd93cfde7f0a2f10f"/><file name="Mage_Rss.csv" hash="56b9be44d2cb98a43bf0e04007fa98d6"/><file name="Mage_Rule.csv" hash="a6a968b628d92b7f172801ce05755962"/><file name="Mage_Sales.csv" hash="d819588fd9a0eccc737b8a70ecac6cbc"/><file name="Mage_SalesRule.csv" hash="1703499a655a66855f2fa13597c09587"/><file name="Mage_Sendfriend.csv" hash="b1e310cf2fdaf674de1e7604826146e9"/><file name="Mage_Shipping.csv" hash="1c64b4423ab6fd12c0c9e2d05a80c570"/><file name="Mage_Sitemap.csv" hash="4837691c0e5c8cfbc4d75b10f196eb65"/><file name="Mage_Tag.csv" hash="d37771ca3a2321a6f1dd6c59a378981b"/><file name="Mage_Tax.csv" hash="a0665ad32147d01fec271dc8d2ee12d1"/><file name="Mage_Uploader.csv" hash="044e66927e4a70710e2d5e27105ad308"/><file name="Mage_Usa.csv" hash="dedc63b54ae93cb0f0bb82364e937425"/><file name="Mage_Weee.csv" hash="60f8a4821b2733ba6b16cba691d3ada6"/><file name="Mage_Widget.csv" hash="01127964a87c48113af4b8969e795aa6"/><file name="Mage_Wishlist.csv" hash="b870b694148efc6a75fcc29a88a86924"/><dir name="template"><dir name="email"><file name="account_new.html" hash="c7516c316c9fd94aeb4a007adb42b47c"/><file name="account_new_confirmation.html" hash="c404affe58ec3947379beabf6cf2dee9"/><file name="account_new_confirmed.html" hash="19223ed36f7076dee12a8fc6f542f00f"/><file name="account_password_reset_confirmation.html" hash="f5d6538ff20ded76d73ef6dbc34c94b0"/><file name="admin_new_user_notification.html" hash="08ed9ba46dc26ef22e4d97f7350564b8"/><file name="admin_password_new.html" hash="e0cb7a16e03f1e57fc42fa3b60920bb2"/><file name="admin_password_reset_confirmation.html" hash="385547f1fd11e85b6cd818e91f519bfd"/><file name="contact_form.html" hash="ee7a957b249d9bf8d2f84787d9276958"/><file name="currency_update_warning.html" hash="be68b2b00692c3071942df42d206575f"/><dir name="html"><file name="footer.html" hash="72d4ef13825ca2143557f5baf67c27cf"/><file name="header.html" hash="739a3ea8e07bbe3be76e4c93237bc5d2"/></dir><file name="log_clean_warning.html" hash="36eb1af6eca088bdafe6e91c5a355a98"/><file name="newsletter_subscr_confirm.html" hash="cc7849aaa2ada032e0d0cbcdc4c15222"/><file name="newsletter_subscr_success.html" hash="83fc3c7d1cae23c24561f803e41ea988"/><file name="newsletter_unsub_success.html" hash="3bd611af2d1fae78622e6217ff2b189e"/><file name="password_new.html" hash="e633e5d80e81549e29b239960f5187cb"/><file name="password_or_email_changed.html" hash="26ce55df2b817a5ed2373c71feff3652"/><file name="payment_failed.html" hash="693051923f748ed9e695c0b300597034"/><file name="product_alert_cron_error.html" hash="8ea80affba71491f4371b0524d0c3399"/><file name="product_price_alert.html" hash="18ff254fcaea714647caf21b39d36e9b"/><file name="product_share.html" hash="02c76a3380f98aaaa9c3ac6a86da3545"/><file name="product_stock_alert.html" hash="6a0fc4ef5203e195d1a0957accc1fca3"/><dir name="sales"><file name="creditmemo_new.html" hash="c487a7c825477974835891019d2b55bd"/><file name="creditmemo_new_guest.html" hash="47dc131ea102b0cf72d1e8bb50df2514"/><file name="creditmemo_update.html" hash="4dd0fedbe075abc51dd3647bedbf051a"/><file name="creditmemo_update_guest.html" hash="d805b77120143a070d44a01866df8f3f"/><file name="invoice_new.html" hash="0bfd2645ebb5289edcef0ae6fc7f93de"/><file name="invoice_new_guest.html" hash="0bfd2645ebb5289edcef0ae6fc7f93de"/><file name="invoice_update.html" hash="1ced4397da53d8a73bfa854b1ce60c24"/><file name="invoice_update_guest.html" hash="f8e7d66c9d607f3a349a9c21544c9854"/><file name="order_new.html" hash="f3ce547016c4d497805360460c6c5ec3"/><file name="order_new_guest.html" hash="f3ce547016c4d497805360460c6c5ec3"/><file name="order_update.html" hash="8d8d3f6a5831909532984817afc81647"/><file name="order_update_guest.html" hash="04ffcc29c74931d5f46b6ecb25cc049e"/><file name="shipment_new.html" hash="1a8e314cada334caffe213efd1e5ce31"/><file name="shipment_new_guest.html" hash="6ba64b3b35a39bfcc4c3d0ff4acc6fad"/><file name="shipment_update.html" hash="4425c3dfceb25ea1a5b80fd054a0f79f"/><file name="shipment_update_guest.html" hash="45b6f10c6853a36879b17f86e761edbf"/></dir><file name="sitemap_generate_warning.html" hash="7eb47e4ddd7eab22272397cff8c9441d"/><file name="token.html" hash="71f392398f6f80481b2e0edba7cefc78"/><file name="wishlist_share.html" hash="8d4d4838c76468c2be6149f5314b27a6"/></dir></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php></required></dependencies>
+</package>
diff --git a/var/package/Magento_Mobile-1.9.3.10.xml b/var/package/Magento_Mobile-1.9.3.10.xml
deleted file mode 100644
index e5364fe..0000000
--- a/var/package/Magento_Mobile-1.9.3.10.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Magento_Mobile</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license>mixed</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Magento Mobile Xml Interface</summary>
-    <description>An integration Magento with mobile applications (e.g. iPhone, Android, iPad)</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:29</time>
-    <contents><target name="magecore"><dir name="Mage"><dir name="XmlConnect"><dir><dir name="Block"><dir name="Adminhtml"><dir name="Admin"><dir name="Application"><dir name="Edit"><file name="Form.php" hash="18be6ffdd7c355412d449f81ac516a82"/><dir name="Tab"><file name="Settings.php" hash="3b0f287a051dd8474da4251133c874af"/></dir><file name="Tabs.php" hash="f4f17bd4fc16c3c43c2e5948b58a83f2"/></dir><file name="Edit.php" hash="0f8abb2894eb707e68f4cd89d0fb1506"/></dir></dir><dir name="Connect"><file name="Config.php" hash="87b56d12ae88dd3c07944956add6b567"/><dir name="Dashboard"><file name="BestSellers.php" hash="7134d111d21dd9e81eff4caea27eea93"/><file name="Customers.php" hash="e28988ad7a57f37c8305e0421cd80f22"/><file name="GraphAmountsData.php" hash="eb85575aca52720dd210214e5ba93f44"/><file name="GraphDataAbstract.php" hash="c1bc1a5e031a2025e9f6c439b244b67f"/><file name="GraphInfo.php" hash="c0d817f3e595611be18b41c4105abcb5"/><file name="GraphOrderData.php" hash="94793bf7b079d8425d85a1763335cd89"/><file name="GraphTotalsData.php" hash="1f28a4db91fae0f6b6d83be17619a154"/><file name="LastOrders.php" hash="52841de8394d8ddf950ca75e2aa40d3d"/><file name="LastSearchTerms.php" hash="9ef7916ca93ac249c0e88695abc5ab4e"/><file name="MostViewedProducts.php" hash="7199f30aa2988b3d7cd3e0b7b82231f1"/><file name="NewCustomers.php" hash="e4ee586b7bff72f6dc7272d769115273"/><file name="SalesInfo.php" hash="73ea564da26d72a3d9e0f696605b85eb"/><file name="StoreSwitcher.php" hash="8474457e0c27f3237ab5897c0e7c16e8"/><file name="TopSearchTerms.php" hash="77cab704afffaecc2de1fa426e2b9b99"/></dir><file name="Dashboard.php" hash="c94c16a9043a5cafefaac9dee1883ee5"/><file name="Loginform.php" hash="6d9e82f37f99d50ad9b5733a0ad373b4"/></dir><dir name="History"><file name="Grid.php" hash="b50dcdf47d14b2c1e74b2373051a33e8"/></dir><file name="History.php" hash="9b85bb8d93eeb36d1ec6f1d89479a492"/><dir name="Mobile"><dir name="Edit"><file name="Form.php" hash="b39335871f93126f4c6777012083a1be"/><file name="Submission.php" hash="fed2d742709704afdd431e14c7150ab2"/><dir name="Tab"><file name="Cache.php" hash="d027acb7bbc0523c6e7b98be0380bc17"/><file name="Content.php" hash="2f0dcf3822603c30e19473f499bbac2a"/><dir name="Design"><dir name="Accordion"><file name="Images.php" hash="23892e279d0b704a196746ffa31a0563"/><file name="Tabs.php" hash="d61b92dfa34f8400e4e3634491a90a87"/><file name="Themes.php" hash="c99774552cfb7c3a9900aea547e08097"/></dir><file name="Accordion.php" hash="a3ac8ebe1b141388d66fbc1427013ab6"/><file name="Images.php" hash="8a8aa7d3071d5b2c897d963b9241530b"/><file name="Preview.php" hash="0c09f94658ad2ce54eff498ddbc22d0d"/><file name="Themes.php" hash="ccdfbfb55b1a6546f1a4a6c63bd31fb4"/></dir><file name="Design.php" hash="ce325c4f2a7b4f710c1811ad5af6cfee"/><file name="Flurryanalytics.php" hash="4d5e17172aae5aed0446e01e672e1ae7"/><file name="General.php" hash="0e2874a5f47ca792a71b1c320ea2da4e"/><file name="Notification.php" hash="68989b0f6d1a09c87d1a87a080773a0c"/><file name="OfflineCatalog.php" hash="667ea36b4072d5f05aa6947a28fc99a3"/><file name="Payment.php" hash="da614bd47891075e3b6799c08649d468"/><file name="Settings.php" hash="c145920bbe669e21d1295e1c08ad7163"/><file name="Social.php" hash="c7f35dc8337786a143acd4348ecce7e8"/><dir name="Submission"><file name="History.php" hash="f615d12065b9ac60a7de1dc996dfab0b"/></dir></dir><file name="Tabs.php" hash="8e10429333aa0f9533ccbc015f46b4ba"/></dir><file name="Edit.php" hash="32c191dfd9f0f630b9aaa9a5adb94e44"/><dir name="Form"><dir name="Element"><file name="Addrow.php" hash="2de7e669a33605ada631a1277964aa67"/><file name="Color.php" hash="6ddc0bb0f5101e2d725ca8d48c5bf756"/><file name="Country.php" hash="adb6eddd4501270afcffa02bedbbc112"/><file name="Datetime.php" hash="4d180c7761cec12eb3c7b5d1330e378d"/><file name="Font.php" hash="bedae4f4b7e006cc9a6695dba5a208bf"/><file name="Image.php" hash="828fedd806faf6e7674a8fa12bcdda80"/><file name="Page.php" hash="e4d9a146374e6840440a804b3488951d"/><file name="Tabs.php" hash="68fc1c371a04180873cde4af547a9342"/><file name="Theme.php" hash="4d188f42b28f49119e0bb4a84012c8d4"/></dir></dir><dir name="Grid"><dir name="Renderer"><file name="Bool.php" hash="625dd7a22b19f31639b8ef0ec0c20f4c"/><file name="Type.php" hash="b48290e352e4df28481a162cb631de67"/></dir></dir><file name="Grid.php" hash="87e2b69ee002065bb02beaf39dda089b"/><dir name="Preview"><file name="Content.php" hash="3aa56cd03743ce213aae3a5925f4a08e"/><file name="Tabitems.php" hash="ca925de201e3dc8af3177d130fb87a74"/></dir><dir name="Submission"><file name="Form.php" hash="ec1ceeea6a087983e49651eef19a6dd9"/><dir name="Renderer"><dir name="Country"><file name="Androidmarket.php" hash="4140c6b311419a88e4446411c77f863d"/><file name="Istore.php" hash="ca9c9d39c4685fc93416540ca47eb7b8"/></dir></dir><dir name="Tab"><dir name="Container"><file name="Submission.php" hash="ca2ed4e535597a4dc0dc5f71b03fc390"/></dir><file name="Container.php" hash="3d893b8aaf1b6c0e0966faedacc3e5c2"/></dir><file name="Tabs.php" hash="98d6bf6dccc749544311f23c581a3111"/></dir><file name="Submission.php" hash="490ca37478730072e3f3cb10580d0e0c"/><dir name="Widget"><file name="Form.php" hash="9526cf41e8ab9781fd2a28cf4dbe2bfa"/></dir></dir><file name="Mobile.php" hash="c1960a31775120c9499f1052bb775250"/><dir name="Queue"><dir name="Edit"><file name="Form.php" hash="e9efb1f673b2f21da26446852bd68310"/></dir><file name="Edit.php" hash="c82e2bbee5fd3cf15567d1748ec012bb"/><dir name="Grid"><dir name="Renderer"><file name="Action.php" hash="f1cab5df3efeb224b90ab076dfed9550"/><file name="Application.php" hash="41e1376368264c68cd0cc8332cde0730"/><file name="Id.php" hash="4defece4c272caf2720f2ab0d0c1f0ac"/><file name="Msgtitle.php" hash="d4b69d6a657e7772451ef65c63235ae7"/><file name="Pushtitle.php" hash="948ccdc09722aeb7b5287ae775a218ac"/><file name="Status.php" hash="5591fa63b3b160171d79e71d8d350f1a"/><file name="Template.php" hash="143aaa66af7b276d6d973a904c7cd175"/></dir></dir><file name="Grid.php" hash="d32c1f8686f862f9507db824f06b816b"/></dir><file name="Queue.php" hash="9f0f8ecaffd50949409ea126f56a2e88"/><dir name="Template"><dir name="Edit"><file name="Form.php" hash="dc40630afad3ea8a9dc4ed7b87277716"/></dir><file name="Edit.php" hash="0aa025f155eb299044e3dae8b5ee5579"/><dir name="Grid"><dir name="Renderer"><file name="Application.php" hash="b44b72d5a06cf8e380fefc5edbdf35f5"/><file name="Name.php" hash="9248874c8e7775513a341d5b7e3125c7"/></dir></dir><file name="Grid.php" hash="4b766a3d51516cb3cfed39699d760a14"/><dir name="Preview"><file name="Form.php" hash="9eecc83db65aac8cc0a085dee84ecb50"/></dir><file name="Preview.php" hash="305dfd65e73a3ed898893b170cc12732"/></dir><file name="Template.php" hash="e7220052fb9a0f7ee17a7e007ad80c87"/></dir><dir name="Cart"><dir name="CartTotals"><file name="Default.php" hash="e81662723cc554bf93bb8868dd41b6b1"/><file name="Grandtotal.php" hash="7907f67687320c770cda36f72a26252b"/><dir name="Nodes"><file name="Default.php" hash="982d082903f48e68bb91165a4a5182d8"/><file name="Giftcardaccount.php" hash="0131a57dc306dd6f7280bba3182304d9"/></dir><file name="Shipping.php" hash="181b533a57f48147dce4eafeecb7c5f8"/><file name="Subtotal.php" hash="e42e0617841c0ba3892f781aacddbf1d"/></dir><file name="CartTotals.php" hash="f961282950d5aeb2e4a859ecd89c7f02"/><file name="Crosssell.php" hash="0a83b72fa16d79b63dc4c9fcba0c37c3"/><file name="Info.php" hash="7af98f3c441217e4735a13dcc8d13342"/><dir name="Item"><dir name="Renderer"><file name="Configurable.php" hash="aa04ba5fb52c5b1a858d1e6b14c2d5db"/><file name="Grouped.php" hash="36a290b9624eeea299b4e1f09370ccda"/></dir><file name="Renderer.php" hash="427a01fd7cb099a823f666e0459b92d0"/></dir><file name="Items.php" hash="90094a7c8709cd0f76517e3fe1b8c16d"/><dir name="Paypal"><dir name="Mecl"><file name="Details.php" hash="3474c0cba2c95c53151bee9f782c6c70"/><file name="OrderDetails.php" hash="e700c7004c137aed7770ce99ef112fa3"/><file name="Review.php" hash="ca5ec99a17d2844ad41fab85408e0331"/><file name="Shippingmethods.php" hash="dfd7048ac79b89c984d4d65c2f08de42"/></dir><dir name="Mep"><file name="Totals.php" hash="84f440f6613ee644a12f7585eab02db2"/></dir></dir><file name="Totals.php" hash="5719f0a9c2a79c41fc0b60b40f987d24"/></dir><file name="Cart.php" hash="5b77cf7f3d7bf6ac31b2cab1376a72d5"/><dir name="Catalog"><dir name="Category"><file name="Info.php" hash="fe12a230101c361a41b3d9cd6758f094"/></dir><file name="Category.php" hash="c4583d3ef50819761144f1158b5b2b6a"/><file name="Filters.php" hash="5916239aaa999dfedff7145525ad3ac2"/><dir name="Product"><file name="Attributes.php" hash="352ea45e2818bd8775421a88966378aa"/><file name="Gallery.php" hash="54ad61285abcc3b29d11a237a7f41b78"/><dir name="ItemPrice"><file name="Bundle.php" hash="934691fb8c805ac45a7112a8268be658"/><file name="Default.php" hash="bbed8ec56060f70dd0bb4466390a2098"/><file name="Giftcard.php" hash="39cb9ef1fae797bab979b414da2697b4"/></dir><file name="ItemPrice.php" hash="01aa1b430438c1422ddd9e864e2401d4"/><file name="List.php" hash="8dd1e301a4c00895d6987a60b424f1ab"/><dir name="Options"><file name="Bundle.php" hash="0b55a73ccb10bd0296d10d6c31811712"/><file name="Configurable.php" hash="832f951702911ed9f7dbb6ab1b95184d"/><file name="Downloadable.php" hash="0555d353b7fef2a23bab5c62237bc816"/><file name="Giftcard.php" hash="e4f9f5deae7ec418a2ccf210738811d0"/><file name="Grouped.php" hash="f47c95399047ca31fe7b124dafeb2336"/><file name="Simple.php" hash="cf5df8515ada2bdcbde11c5c4f3bc1c0"/><file name="Virtual.php" hash="d779fb0b7c5a3a36eb949725f6066de6"/></dir><file name="Options.php" hash="26b51c5e2349d5714ef1ac11166200bb"/><dir name="Price"><file name="Bundle.php" hash="3c5664b73fd679722e28210cb45b4e1a"/><file name="Default.php" hash="93b76d312b7c403dc99653752628ea38"/><file name="Giftcard.php" hash="f7d79e2d2384c732c33d77831d669f58"/></dir><file name="Price.php" hash="e6272f9b2c349ed9aa7c0bbc4e14ba1a"/><file name="Related.php" hash="5a426f5e5cfa50680766ce585732d450"/><dir name="Review"><file name="List.php" hash="6b2d364d67f3ff46478d0512027bb198"/></dir><file name="Review.php" hash="876a30958acdf8f4597335807c8f1814"/></dir><file name="Product.php" hash="e045c7a7b2490e814cb83f889bc76433"/><dir name="Search"><file name="Suggest.php" hash="97341e9253e8b53008849bc18b4d9c15"/></dir><file name="Search.php" hash="2799e12ea33e91c79c737755115953ab"/></dir><file name="Catalog.php" hash="2c2954ced5c922ac6fbb2a7ed94feb02"/><dir name="Checkout"><dir name="Address"><file name="Billing.php" hash="235ece5a9acefc903bf26a449f7696c2"/><file name="Form.php" hash="c50b6b1f7a04f1710d26aa76bdb83b20"/><file name="Shipping.php" hash="6b2b3df4296b82504c91789300336b7d"/></dir><file name="Agreements.php" hash="248e853db9436b7353e2823cb37d3e24"/><dir name="Cart"><dir name="Item"><dir name="Renderer"><file name="Bundle.php" hash="35c5daea28048a29f025cd483e846638"/><file name="Configurable.php" hash="718da5a76f2fb30c72a3b87d42f088a2"/><file name="Downloadable.php" hash="333e998a37991e7d66324b56d75d003a"/><file name="Giftcard.php" hash="ca7535b1cbf6fd929da88c1eb55e9fab"/><file name="Grouped.php" hash="258a71d41ea9c8d9305c18a86f6db427"/></dir><file name="Renderer.php" hash="dc0070a52a5ddedbfb6d9d81bfb5091d"/></dir></dir><dir name="Onepage"><dir name="Address"><file name="Form.php" hash="f51cf393e7a88ddf07fb6689ac0131f1"/><file name="List.php" hash="aaa1389a6374653b6870a803162a0962"/></dir><file name="Address.php" hash="071bcf36fc462d10497c6b78af6d1f89"/><file name="Review.php" hash="9f1f63c81a4ba8c23f9bdbb2b328d29a"/></dir><dir name="Order"><dir name="Review"><file name="Info.php" hash="68e610e2236ac0ed526f5a6d76d9aea7"/></dir><file name="Review.php" hash="795a47724af069613738848478df714b"/></dir><dir name="Payment"><dir name="Method"><file name="Authorizenet.php" hash="aebd18a2aa07609f2fe07ea9c6033a9c"/><file name="Ccsave.php" hash="32c7844e003ed81fc36ab0f0b2984f9d"/><file name="Checkmo.php" hash="d34d3ad863b6236f67e9a5bed1167287"/><dir name="Info"><file name="Authorizenet.php" hash="3ee20e52608afff657ca7977bc9c7d8c"/><file name="Ccsave.php" hash="59281ffc690044f961490679b9eeaa83"/><file name="Checkmo.php" hash="26bee7db3c9d9ec4a2be154d298e6e80"/><file name="Free.php" hash="1928bf8c13732d359c9a3399a5697a99"/><dir name="Paypal"><file name="Abstract.php" hash="d4ca56c7e7b0434cf78f4aa745602da0"/><file name="Express.php" hash="3e5aaf65696b402ca7c44dd3656fc611"/><file name="Mecl.php" hash="2205fb1f735278fded252542545cba8d"/></dir><dir name="Pbridge"><file name="Authorizenet.php" hash="de462e278ceb51696e8e8f347860edf8"/><dir name="Paypal"><file name="Direct.php" hash="d4a745ccf3eb6234b3e6b2ac68d912e6"/></dir><dir name="Paypaluk"><file name="Direct.php" hash="cbb23c943b4dfd8f2f03bd5a6d23277c"/></dir><file name="Verisign.php" hash="936073039408b25322914bcd3e9173bc"/></dir><file name="Purchaseorder.php" hash="ebc9440844b88830d99422abb0719ee6"/></dir><file name="List.php" hash="8e648b7be94f4d9185012829207bb443"/><file name="ListApi23.php" hash="9224c0fd6a9e77031abbb064d7cf5513"/><dir name="Paypal"><file name="Direct.php" hash="099c3529fb5444c50a9d0671f910df14"/><file name="Payflow.php" hash="07be42249281b35a425f4bf15d6bd4de"/></dir><dir name="Pbridge"><file name="Abstract.php" hash="098fa28d25c3d9a27f1145820024fc0f"/><file name="Authorizenet.php" hash="23265f73b0756da01ddf9b652be7677b"/><file name="Paypal.php" hash="b70198d4d55cc58bbb1df4d756f8270e"/><file name="Paypaluk.php" hash="867d1c9e376ab55ad2f740f3a1dc0e50"/><file name="Verisign.php" hash="ef4f28a565a3c8c4eeb3582538f99ed9"/></dir><file name="Purchaseorder.php" hash="ea64ee616a535e4a79cab9ec443430a4"/></dir></dir><dir name="Pbridge"><file name="Result.php" hash="833edb3d936fba72ad611b61d55c9dc8"/></dir><dir name="Shipping"><dir name="Method"><file name="Available.php" hash="e29e91a545cd7a63e653a09be622c792"/><file name="AvailableList.php" hash="7b2eaab0e3366288483052dedf66b1f5"/></dir></dir></dir><dir name="Cms"><file name="Page.php" hash="66d86a57c216b1575b7714b94dbe7231"/></dir><file name="Configuration.php" hash="b7f7301648fdb249b7b4ad162779756a"/><dir name="Customer"><dir name="Address"><file name="Form.php" hash="0b02c6a2eebb0b4a3048eb9757dc98f8"/><file name="List.php" hash="d7c3509d0fc978f0936c04d46e9c9129"/></dir><file name="Downloads.php" hash="e1340b1f0629a9ebf651c79042e688aa"/><dir name="Form"><dir name="Renderer"><file name="Boolean.php" hash="814c293b8d543a8acc618cf4dd448ece"/><file name="Date.php" hash="63690b28d76a20d4c88915d207901c3c"/><file name="File.php" hash="a009b01dca404d38b8fe792b1895c2d4"/><file name="Image.php" hash="eb2e63a8a4cc719e72d2af1e3453354f"/><file name="Multiline.php" hash="15502166fe772ae59b139692ca6c80ca"/><file name="Multiselect.php" hash="8a42000f230d7f2674cb9e422665fa13"/><file name="Select.php" hash="e598ac63fe4ca05a6d313556251624c2"/><file name="Text.php" hash="40879381558845259cbc174a7349c6b6"/><file name="Textarea.php" hash="5da94ac937bd6565b55de6c9e2de4a6c"/></dir></dir><file name="Form.php" hash="e2c00f4ec6a0004193358a110c88cdf8"/><file name="GiftcardCheck.php" hash="b3797d939644ed5ab34f8b8b05454133"/><dir name="Order"><file name="Details.php" hash="69d7f0dd6f79fc090b7ebcfcb7387962"/><dir name="Item"><dir name="Renderer"><file name="Bundle.php" hash="3f3fecde3c64e48899f8055e4c7c093b"/><file name="Default.php" hash="1c51709757db243c3bc99d4989fc11b7"/><file name="Downloadable.php" hash="3b26206355e81d315dca5e8661c06fe1"/><file name="Giftcard.php" hash="8614dd8ad1a3ba75939024726a5eab35"/><file name="Grouped.php" hash="b78c5b229a86e711e8eca236d2c769e0"/></dir></dir><file name="Items.php" hash="b6e76778d4ba432f2d0817615ad47ebc"/><file name="List.php" hash="37f0f7707c65542c14a7ea8faa3cf0fa"/><dir name="Totals"><dir name="Customerbalance"><file name="Refunded.php" hash="3ed573470f738c977a2c622a2f1c61c3"/></dir><file name="Customerbalance.php" hash="b8d4ed847d6572d761392d47ab0b92ce"/><file name="Giftcards.php" hash="6d33c6ad16511d3493b6bcb45e3f2f4b"/><file name="Tax.php" hash="6ec05ef126716a9016a4d8d5cbd79c67"/></dir><file name="Totals.php" hash="0753a87dbdb6f20f20d01110433fa2cc"/></dir><file name="Storecredit.php" hash="38a6534993df649b8980191489f85234"/></dir><file name="Home.php" hash="0171e134d103453d5efa9c28b1a5a98e"/><file name="Homebanners.php" hash="cd43276610e43cb05317be3266829b12"/><file name="Localization.php" hash="13a1440efbe0708d8745e098ff2fbde8"/><dir name="Review"><file name="Form.php" hash="719df761030dce75d34620cffbc22eef"/></dir><file name="ShoppingCart.php" hash="8740a15f227063ee93fd062439182838"/><file name="Wishlist.php" hash="c35e5cbcb2c2fc2b73f9119059004abd"/></dir><dir name="Controller"><file name="Action.php" hash="aa28af4f890fa7bd98f09c62174a7b47"/><file name="AdminAction.php" hash="c113ab27904827ac00f42c1ec56453cf"/></dir><dir name="Helper"><file name="AdminApplication.php" hash="a6a346728711a616a20ac208b97b4208"/><dir name="Adminhtml"><dir name="Dashboard"><file name="Order.php" hash="34bbd403a942aa9067add45539eba21c"/></dir></dir><file name="Android.php" hash="7b607ec61ab3d8037087a75a3dc20367"/><dir name="Catalog"><dir name="Category"><file name="Image.php" hash="a1181040f6a5ae2b61155229914bad90"/></dir><dir name="Product"><file name="Image.php" hash="a580b197c858ae4f86f0c76933d09b3b"/></dir></dir><dir name="Customer"><dir name="Form"><file name="Renderer.php" hash="b5dc3f5225fdac80c05dfe8c8f02073a"/></dir><file name="Order.php" hash="2fb69e79641bca8f1ab60e71db754380"/></dir><file name="Data.php" hash="ae1445dc639814841ed7d51aeffb8c3f"/><dir name="Device"><file name="Abstract.php" hash="ab62df36a04511db7f8206b2806a5b35"/></dir><file name="Image.php" hash="e169e856e7eb7502e0afa2dd0fcb6473"/><file name="Ipad.php" hash="a1c6010a148024f6e9f9371e5a0e4514"/><file name="Iphone.php" hash="db438395e4c39ddf6b08fa6e19f58837"/><file name="OfflineCatalog.php" hash="5d4586f34454d52e702a9a2c8c79209e"/><file name="Payment.php" hash="f9e55cd314d8a84304192083c3278ba7"/><file name="Theme.php" hash="fcc83009fc28d8ec70e97ab68415cca0"/><file name="Translate.php" hash="ea693f28b867e58b8a89f94b37fa7306"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="Search"><file name="Catalog.php" hash="2e6af877121f1f6206b0dff3de4351d4"/><file name="Category.php" hash="7344300c925f43df7cd1d87885cfd3ea"/></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Baseurl.php" hash="df19169e6a42dda126784f789d4ca489"/><dir name="Currency"><file name="Default.php" hash="3d89d67b2f6a577d1d17f9f8137df07f"/></dir></dir></dir></dir></dir><file name="Application.php" hash="30bdb5b50cb7574980a47f28485ef544"/><dir name="Catalog"><dir name="Category"><file name="Image.php" hash="acd1b1cf0d949616daeabaea12ae3bab"/><dir name="Media"><file name="Config.php" hash="bfe9fdf79473026783f9307591c039b7"/></dir></dir></dir><file name="ConfigData.php" hash="1b2026535bc234c289d606884912dcac"/><file name="Configuration.php" hash="d6d8bdd4c79aaa1affa9a8c71776aa27"/><dir name="Device"><file name="Abstract.php" hash="efb12adbe5626df1f03a58e1ea761760"/><file name="Android.php" hash="3edf0f598b61a3d0bb74967473c5422a"/><file name="Ipad.php" hash="ce7f5ea81ea71feb4fee7a13e2822952"/><file name="Iphone.php" hash="a52717c33a4b25056fc3cfeb49c03db9"/></dir><file name="History.php" hash="2235f24899f77bb20019f30cd5b43461"/><file name="ImageAction.php" hash="51ead1214bd38f35c947c9a9a410199f"/><dir name="ImageLimits"><file name="Abstract.php" hash="ed2bac8df20078a88c199862988b51fd"/></dir><file name="ImageLimits.php" hash="5463b50b15bf317dadbc8853bec61a55"/><file name="Images.php" hash="2d646c61ab2f0bc751f735a0f902d517"/><dir name="Mysql4"><dir name="Application"><file name="Collection.php" hash="9d2ff8db89101e153cff566a4dcd49c2"/></dir><file name="Application.php" hash="12bb5e198d9c5dff257ee6f4e0a63165"/><dir name="Cms"><dir name="Page"><file name="Collection.php" hash="da36e2bb02ce9b1b490a61e22825098b"/></dir></dir><dir name="ConfigData"><file name="Collection.php" hash="d910362570917ba3d066239901325c50"/></dir><file name="ConfigData.php" hash="e3f2172a3bd7bb7d358905c29c9aebc5"/><dir name="Filter"><file name="Collection.php" hash="da42e91c731132e8d32bda10bee05e9b"/></dir><dir name="History"><file name="Collection.php" hash="d1d9b6735cf2aaa6cccfe5bea1cfd646"/></dir><file name="History.php" hash="5403dc5cc4d58c7d66168eb7212dff5f"/><dir name="Queue"><file name="Collection.php" hash="10f054092e5fd65e17a484dbc06adba3"/></dir><file name="Queue.php" hash="214361aa7960e141d44a525bab2b5ab6"/><file name="Setup.php" hash="ca9337c48d1a1168bbf76036f8bcf72d"/><dir name="Template"><file name="Collection.php" hash="cef8ced8e5d16bdb475b2493f8d3c12f"/></dir><file name="Template.php" hash="8722c9769dc835607e332387aa5d6bd7"/></dir><file name="Observer.php" hash="bca103d97f859a57afcb20434004bc05"/><dir name="OfflineCatalog"><file name="Abstract.php" hash="65fa4eb5b0c583d29db761e5249f9269"/><dir name="Category"><file name="Category.php" hash="28887645eee8fdda480adb926d333820"/><file name="IndexCategory.php" hash="3d7deb0329ac5580356b116048823755"/></dir><file name="Category.php" hash="c240b6e64b36d7d547b03fbff52a6004"/><file name="Config.php" hash="27e0a9b70fcf4e6f28395f2d06f551ce"/><file name="Home.php" hash="5fec268bfb2d8fa8bb5e3d3cd17df6cf"/><file name="Homebanners.php" hash="5dd2c18d679451e659e2b6ffd34cf088"/><dir name="Product"><file name="Gallery.php" hash="67b9cac501378c6256bc7876c0a8a08d"/><file name="Product.php" hash="ce4b25b1862bea8cd624f918d74df8e4"/><file name="Review.php" hash="e1c0877d850f86ff7b2adccd68ab679d"/></dir><file name="Product.php" hash="13c2f6c7dda49e3b668ba77c42af6ce3"/></dir><file name="OfflineCatalog.php" hash="3652212af08998ff06d90345e2bed0db"/><dir name="Payment"><dir name="Method"><dir name="Paypal"><file name="Config.php" hash="eba57e1172a75bac4d96dbd590bcac54"/><file name="Mecl.php" hash="c3cb6d931a124ccb1b5e1c6ec704c134"/><file name="Mep.php" hash="2c8e4f6d1150addbe76b52cab54c4ecb"/><file name="Pro.php" hash="0c6086ffcef35a99e31a92460719de07"/></dir></dir></dir><dir name="Paypal"><dir name="Mecl"><file name="Checkout.php" hash="2fe903d0a69743a3beda6dabdf7779c9"/></dir><dir name="Mep"><file name="Checkout.php" hash="8cc405987b24e6937ac106643940b352"/></dir></dir><dir name="Preview"><file name="Abstract.php" hash="d7441ed91eb8bb8264eb091405473619"/><file name="Android.php" hash="1b753f745d9a3a21ac6655b5f3c29511"/><file name="Ipad.php" hash="dd9263af5283abbe471270b204171f1c"/><file name="Iphone.php" hash="2ff9d89170d89c5e4fafacd6c2d26837"/></dir><file name="Queue.php" hash="a1e2d93c7648ab9f1a2cbecda5dc0c63"/><dir name="Resource"><dir name="Application"><file name="Collection.php" hash="8c9ebfc544abd8bbd5351e16ca71173b"/></dir><file name="Application.php" hash="1326f94db59dc30f645ec4143a7e4c88"/><dir name="CategorySearch"><file name="Collection.php" hash="09c91216af434f8333aeac96434cb4ca"/></dir><dir name="Cms"><dir name="Page"><file name="Collection.php" hash="9784becabf9a30e8ea6eaf843d5e3866"/></dir></dir><dir name="ConfigData"><file name="Collection.php" hash="a357f235f37aecf20cc5a13b59ea3239"/></dir><file name="ConfigData.php" hash="84c30e8759f80b50385bee026de963db"/><dir name="Filter"><file name="Collection.php" hash="38231b2d6de6b1a2e5d7da2c05fcee92"/></dir><dir name="History"><file name="Collection.php" hash="5ac9d983c37fdbf908272edba35da72e"/></dir><file name="History.php" hash="656be7ec06a9a0d21d02411fdaa6b878"/><dir name="Images"><file name="Collection.php" hash="1fa3ec8d6e718b0a4dc2f666317cc8af"/></dir><file name="Images.php" hash="4045d7981f9e8231a41f5073c26157c4"/><dir name="Queue"><file name="Collection.php" hash="168c85c2649c0931644ce663f6e47a6b"/></dir><file name="Queue.php" hash="86a49be4c913e256d669909a098900dc"/><file name="Setup.php" hash="e65c040707309bcfcf4afa769c41594d"/><dir name="Template"><file name="Collection.php" hash="9fefe8ef407cffe7f762ad3c5f04c1c0"/></dir><file name="Template.php" hash="df69d55cbd43c3126916b775974275c4"/></dir><dir name="Simplexml"><file name="Element.php" hash="85eda8f850af7f2b0e5bb744eb24b9ce"/><dir name="Form"><file name="Abstract.php" hash="58953feebdc7574e47cc24febdfd6cca"/><dir name="Element"><file name="Abstract.php" hash="52489a893ed654b1356d93f9bedbb7fb"/><file name="Checkbox.php" hash="734e125419a6206baa224aef5b25d507"/><file name="Collection.php" hash="786f39e9a5e2ff90ccdd7787b11cd132"/><file name="CountryListSelect.php" hash="3c36ec543a347075f139d0421a7f2e51"/><file name="Custom.php" hash="493bb8b95f70f80d4606628dd27c651c"/><file name="Date.php" hash="26bcfbd4540194dcca491a550bd9d386"/><file name="Email.php" hash="5eb3e7d979518048ec46dff03e2a74a1"/><file name="Fieldset.php" hash="8823f98606c7baa0ede0e73e21e02ac7"/><file name="File.php" hash="f50c9023c37a165e9c85d8bf8adcea22"/><file name="Image.php" hash="cdc0508a3f47729b8e65c1b29ef1d468"/><file name="Multiline.php" hash="e43a266f39214ccb359d21447aba0433"/><file name="Multiselect.php" hash="e35ee1d08e5cf3cd40fe2ac0441e16e1"/><file name="Password.php" hash="6439ab336ff5ca6c32b768cd91c38376"/><dir name="Renderer"><file name="Interface.php" hash="70e0d05d72803afe580a55ca12a5ad4a"/></dir><file name="Select.php" hash="316c403364f954a588de35021c0b1a76"/><file name="Text.php" hash="a83e5f7d24345aa97e231c51f7fdffe3"/><file name="Textarea.php" hash="d92e6646075009741222ace78ae9fe1c"/><dir name="Validator"><file name="Abstract.php" hash="5f495e595a11928ae153bca79ac2ed0a"/><file name="Rule.php" hash="ed20d66918f3718981847ad4940d3722"/></dir><file name="Validator.php" hash="d0f110a77b89d1bd9244d707bfcb8627"/></dir></dir><file name="Form.php" hash="9a38fef2158d667ac59ef58b0a2a4184"/><dir name="Message"><file name="Abstract.php" hash="632ef61eed496c67ca2c31faba088fa0"/><file name="Error.php" hash="380f13e3bbdbace690ecd7350faf0a36"/><file name="Success.php" hash="8dd8a2df3a7d0e1ac974626e98eb9ae2"/></dir><file name="Message.php" hash="e3ea79eca24bc725c9cd3df1a1fb6188"/></dir><file name="Tabs.php" hash="282fc6a6103c91b6bd5cc3ea7524adea"/><file name="Template.php" hash="063b3699e6ba48c4d301de5fedb737f8"/><file name="Theme.php" hash="541352f9b1a96673f366b980b4aaf232"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Admin"><file name="ApplicationController.php" hash="7154aabbf015aa133e6d924b2b147392"/></dir><dir name="Connect"><file name="ConfigController.php" hash="1bb1b0ef95ef191e0fcd7519aff761d1"/><file name="DashboardController.php" hash="dcb1688f5c7ce4aa5a494988e740ea31"/><file name="UserController.php" hash="265923431772ab92fa0c81f72a027c04"/></dir><file name="MobileController.php" hash="f411b283681d962e7bf56dd13d6ae681"/></dir><file name="CartController.php" hash="5adcd8840b904b088d5b9e5411b9f0ad"/><file name="CatalogController.php" hash="86362c2d85e99bb7099142f6a7d3b67f"/><file name="CheckoutController.php" hash="7599d30a4c8759aa24185d1fe597f583"/><file name="CmsController.php" hash="32143c3d9b6facc655837787df3be1fb"/><file name="ConfigurationController.php" hash="962fc5e176c6df506628ece18eac9a28"/><file name="CustomerController.php" hash="ff3e84d086739dbb6f8b13ad9377ef35"/><file name="HomebannersController.php" hash="24212153f5d52004076049d8bbd34937"/><file name="IndexController.php" hash="1aefb4fbffa158d206da6b87ee24d96f"/><file name="LocalizationController.php" hash="4c258955073f4655ff5576dcab06e548"/><file name="OfflineCatalogController.php" hash="8a1890da0f5295968ce840e59a301320"/><dir name="Paypal"><file name="MeclController.php" hash="c0d3c1197373674d20235de1a925bb76"/><file name="MepController.php" hash="e74221e124abdf52ae3093965e0313fb"/></dir><file name="PbridgeController.php" hash="c410e18aa7e5a94d12bd650b42b0a2dd"/><file name="ReviewController.php" hash="ac34d14c2f9d1640200d99876e47eb45"/><file name="WishlistController.php" hash="6ffe6b32ff7ef85feafd74e4323238db"/></dir><dir name="etc"><file name="adminhtml.xml" hash="41a0eee0ff8ccc97791fca3984583b10"/><file name="config.xml" hash="0d09a634d1207e56f851ae9f4ec763eb"/><file name="system.xml" hash="60e071b734b4cd4cad9104308d4194f2"/><dir name="themes"><file name="custom.xml" hash="14fc8ad9b2b3d7e573e71aa7d68346f6"/><file name="default.xml" hash="3176577e6bbb1366b281e9e9645540ff"/><file name="funk_leaf.xml" hash="e88f9debf8ce7d072add428589ab8dac"/><file name="hot_red.xml" hash="91256c9132bca710e3392530149d85dc"/><file name="sky_blue.xml" hash="313ba8de5835b597911d6f8307a4b886"/></dir></dir><dir name="sql"><dir name="xmlconnect_setup"><file name="install-1.6.0.0.php" hash="bfa8161a83d387752fe3304945e4f902"/><file name="mysql4-data-upgrade-1.4.0.13-1.4.0.14.php" hash="868ccb802d0827a7cbd9f44192c0d2b9"/><file name="mysql4-data-upgrade-1.5.9.9-1.6.0.0.php" hash="1bedcf73c1fa646f2ae2f1fa04df558b"/><file name="mysql4-data-upgrade-1.6.0.0-1.6.0.0.1.php" hash="48a7cc742843624292f1971985a88679"/><file name="mysql4-install-1.4.0.8.php" hash="9f9e15de94aa8973996adea3944238f5"/><file name="mysql4-upgrade-1.4.0.10-1.4.0.11.php" hash="954f56443e96a25c07e78215c7e99f12"/><file name="mysql4-upgrade-1.4.0.11-1.4.0.12.php" hash="92a411920731b922db4ab8f2af503b11"/><file name="mysql4-upgrade-1.4.0.12-1.4.0.13.php" hash="a650fba5fd52ddc46600258310771dba"/><file name="mysql4-upgrade-1.4.0.13-1.4.0.14.php" hash="41fddc2b9601a81745b918cb36126044"/><file name="mysql4-upgrade-1.4.0.8-1.4.0.9.php" hash="dd5ca9ac54e429a22bc60cea44915985"/><file name="mysql4-upgrade-1.4.0.9-1.4.0.10.php" hash="ef96cdb8d2e38faa3b6f987ee4a683ef"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="639c80838a314daa3d591a7c7dbdf4a8"/><file name="upgrade-1.6.0.0-1.6.0.0.1.php" hash="4634743a3374bff5a5476b27b224b67f"/></dir></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="xmlconnect.xml" hash="fb2334dc39e13ef93f0681d4e524831e"/></dir><dir name="template"><dir name="xmlconnect"><dir><dir name="centinel"><file name="authentication.phtml" hash="d91b808dd1e35943da6a98029d2473eb"/></dir><dir name="pbridge"><file name="result.phtml" hash="b1b8bbd1290f37c838fa7f444d6ecb59"/></dir></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="xmlconnect.xml" hash="5e24fb559ca14f2ef0a450564bcd3afc"/></dir><dir name="template"><dir name="xmlconnect"><dir><dir name="edit"><dir name="tab"><file name="content.phtml" hash="56551d499302bcc380de3bb93919887f"/><dir name="design"><file name="autocomplete.phtml" hash="b44f7193e354ae434de9e27f3fa8581f"/><file name="image_edit.phtml" hash="5c4a33b3722f5080db8783b12d3d83a4"/><file name="images_android.phtml" hash="4e5080a1743b18d1c6c0a6c0be7bc62b"/><file name="images_ipad.phtml" hash="b224f7a1d06f548499c792ef006be6e0"/><file name="images_iphone.phtml" hash="137a3ee34d0bf2a5c6dc80fa557e6580"/><dir name="preview"><file name="banner_rotator.phtml" hash="9344b3fa99e7366d643375d00575af1b"/><file name="catalog_android.phtml" hash="fd8c6f2e795223829c5d6a307aec45f4"/><file name="catalog_hor_ipad.phtml" hash="e60ea7d98d03fa30ed54de3f75793c19"/><file name="catalog_ipad.phtml" hash="d721dd136eefcfc9d10dc8c84b5e85c7"/><file name="catalog_iphone.phtml" hash="5751eb24402061706e1c38d4656a0055"/><file name="home_android.phtml" hash="8bb911cb0fd3ccb0a6a37cf46c1a12c6"/><file name="home_hor_ipad.phtml" hash="90a93d056928407b20ab848b7a78bc88"/><file name="home_ipad.phtml" hash="aadde2d0a5cc1f49571b8aed8f426d14"/><file name="home_iphone.phtml" hash="41490d6e60cda7b22cdb80e0c03271bf"/><file name="productinfo_iphone.phtml" hash="d0339da69754129a8f0a657bc7ba6bd7"/><file name="tab_items_android.phtml" hash="49c3b831da3079379a1f72ccb82350ad"/><file name="tab_items_ipad.phtml" hash="52b6b823508df6eb8857298a2d256dba"/><file name="tab_items_iphone.phtml" hash="862f3e4d6b5628361853458f5567c7d0"/></dir><file name="preview_android.phtml" hash="4d46079265bdac87bd80e635614d6543"/><file name="preview_ipad.phtml" hash="d6f3605c9b92df3718f4dd746557f57e"/><file name="preview_iphone.phtml" hash="b9bdb4a39efb45f83212502bf85fb020"/></dir><file name="design.phtml" hash="5219b884a2e198a9568606d32fc5795d"/><file name="offlinecatalog.phtml" hash="46a17407498e5ac909aab2adbe8d79c0"/></dir></dir><dir name="form"><dir name="element"><file name="addrow.phtml" hash="b9970e1bee9a2999286f63fef9ce9313"/><file name="app_tabs_android.phtml" hash="2135734b73cc0548638895cf41e9d3a0"/><file name="app_tabs_ipad.phtml" hash="85def73314a97942d7c2ae7d4f9836f4"/><file name="app_tabs_iphone.phtml" hash="9699edaeb66c47cbc7155260ff8b5762"/><dir name="country"><file name="androidmarket.phtml" hash="8c61f192c7372ab4e7009abaeaa8275e"/><file name="istore.phtml" hash="2ff59da9c26acf87d240b337961a8ad5"/></dir><file name="themes.phtml" hash="b0daadcde0d8f2d00d43997bd2ff4412"/></dir></dir><dir name="mobile"><file name="notification_helper.phtml" hash="f39f0b298a81201dcbcee02465885a83"/></dir><dir name="submission"><file name="app_icons_preview.phtml" hash="28677e2cbdb2b61f4025e00477e37b57"/><file name="container.phtml" hash="9427981ebb6994de95186abff3c7d35c"/></dir><dir name="template"><file name="preview.phtml" hash="1d24efc926e5beab76c51bb7e61b17fc"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Mage_XmlConnect.xml" hash="f403b961a6f5a99ee7bfe9b1f71f2396"/></dir></target><target name="magelocale"><dir name="en_US"><file name="Mage_XmlConnect.csv" hash="50e9493da78f8e6591fd3fad1311047c"/></dir></target><target name="magemedia"><dir name="xmlconnect"><dir><dir name="custom"><file name="ok.gif" hash="398f81b3983f802a99932eaf97ee0806"/></dir><dir name="original"><file name="ok.gif" hash="398f81b3983f802a99932eaf97ee0806"/></dir><dir name="system"><file name="ok.gif" hash="398f81b3983f802a99932eaf97ee0806"/></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="xmlconnect"><file name="boxes.css" hash="b4818201fb27765bd5aa21940ce9feab"/><file name="dropdown.css" hash="909dbc9fea8fdc9b12388427397b440b"/><dir><dir name="fonts"><file name="android_icons-webfont.eot" hash="2fc917efbfb3c933ccfddc108ef05f33"/><file name="android_icons-webfont.svg" hash="e8cb2b5ef019bbc2885c97ed0caaf2a0"/><file name="android_icons-webfont.ttf" hash="bc567dd7a381093fbb652c58cbad9430"/><file name="android_icons-webfont.woff" hash="8310b54d55bf84a8a3f3a86c22a51aef"/><file name="stars-webfont.eot" hash="019beb4b8ec19447657cf3106138bbe3"/><file name="stars-webfont.svg" hash="20cf0312c0b951d173d4531ea18abc6f"/><file name="stars-webfont.ttf" hash="d63d95e9adaf775f410437535622bf60"/><file name="stars-webfont.woff" hash="526d9756131c94139f0f1df5272197fd"/></dir></dir><file name="iestyles.css" hash="043c38df2eb106524cac069c4cbfd4fe"/><file name="mobile-android.css" hash="c93c13a2f4e8ab35a3fa4f615f82fbf6"/><file name="mobile-catalog.css" hash="644c6178ae97ca892cd0bb23037fce0e"/><file name="mobile-home.css" hash="f6afa2a72cf41176f5f80d983483036e"/><file name="mobile-ipad-catalog.css" hash="f4245ec57c89a1c17a1ba2d58a9307d1"/><file name="mobile-ipad-home.css" hash="f234af2678977a92e6575a5fd6b841e6"/><file name="remove.png" hash="b4903936d44dc498d2f32b72d9161ff0"/><file name="styles.css" hash="f71c5abb274a13b6bfeb1e0cadaeb08a"/></dir><dir name="images"><dir name="xmlconnect"><file name="btn_edit.gif" hash="e7ecc9fea5c3813957814050508507a5"/><dir><dir name="design_default"><file name="accordion_open.png" hash="4c89d903ebbc61ee295ef64a60724b10"/><file name="accordion_open_android.png" hash="7ef2f1d193990c3f4c2c90aae9ab3281"/><file name="accordion_open_android_l.png" hash="bc27688afbfd866c618477ea2c7bf0ee"/><file name="accordion_open_android_p.png" hash="2e4549cba575c12ef2a39c12e9ffe173"/><file name="accordion_open_ipad_l.png" hash="dcdda97da6556393b972d6dae8d6bac5"/><file name="accordion_open_ipad_p.png" hash="55cca08a0ab79047961858789ff8c3a7"/><file name="banner_1_2.png" hash="0637d31df6b5a434c9a332ee46122ef4"/><file name="banner_android.png" hash="02695661b8e50e1a001c3369622f322f"/><file name="banner_ipad.png" hash="c1d59a6ec67da1bb76c5142453da7acf"/><file name="banner_ipad_l.png" hash="04e850d481a9ae902f33fd8c1f89cbf0"/><file name="smallIcon_1_6.png" hash="c1ce9e289eaf2c0504d502928693bd89"/></dir><dir name="mobile_preview"><file name="1.gif" hash="817fd84187db3eee00799b0acf316457"/><file name="2.gif" hash="1a842d8f3ac25cfcdeab6c86dd8fea89"/><file name="3.gif" hash="207cd55e968c284bd52c86efdcdda1c7"/><file name="actionsBackground.png" hash="11faa8baee72f3e6a9a02a83915c8658"/><file name="actionsBg.png" hash="9acccd1980f17006942d74a718ebd7da"/><dir name="android"><file name="background_home_landscape.jpg" hash="1f79a1f42ca4e2cf6010ab6c3ef66aa4"/><file name="background_portrait.jpg" hash="197b15e6455ad1a85e1bad6595371fa3"/><file name="bg_button_up.gif" hash="204f590a88933c930b7fc92963accfab"/><file name="bg_cat_item.png" hash="2859b45c387b66243d4af2ba973b2ae1"/><file name="bg_catalog_filters.png" hash="7464191ebaf576b73a3c021eb1cfcc25"/><file name="bg_catalog_filters_shadow.png" hash="5021ad60917190026d85fae1d33bdaa9"/><file name="bg_content.jpg" hash="70ddfc8959d878d1231dc7cbee4a063c"/><file name="bg_frame.gif" hash="7062ed9b7563fc658f49ce7cfdd34f1c"/><file name="bg_header.png" hash="d4a46c8850d1d89259921b1c28b5bce1"/><file name="bg_header_catalog.png" hash="c1080cd18a89e21da18fdc6955bf6230"/><file name="bg_header_home.png" hash="dfce0445ca7c7a45c7914a986b596ce0"/><file name="bg_home_content.jpg" hash="1d55a198279e4f2b163c98c18f699646"/><file name="bg_home_header.png" hash="8bc1887a0c5760cc47b77b8a7a320426"/><file name="bg_logo.png" hash="02695661b8e50e1a001c3369622f322f"/><file name="bg_page.png" hash="d65f1d123655c2eaf3bb4a1e6035a08d"/><file name="bg_star.png" hash="fc6de6c4e0ed3478b8840e1ab81da725"/><file name="bg_star_empty.png" hash="3f0421fb8c8f6c4be6ca501168a881e8"/><file name="bg_status_bar.png" hash="52b41106451ac34672f82338bbc5370c"/><file name="ico_account.png" hash="c1fd338c74fcf483155acbd37c430807"/><file name="ico_home.png" hash="2de37f640463b354d68945320bfe3e4f"/><file name="ico_search.png" hash="8b0dd17a3e9c3328e66204fe379c66aa"/><file name="logo_big.png" hash="693bb9d118155a146b21ce9fcfba08da"/><file name="product_image.png" hash="dd975b128ba303e0ae2adc9772e0433c"/><file name="product_image_1.jpg" hash="8994979d4dcc1f339c73cd1f44398a7d"/><file name="product_image_2.jpg" hash="26d6599bdb35d80b25a1e903b40cfa19"/><file name="product_image_3.jpg" hash="d7c6d05196a84341afe0025d01b9dc61"/><file name="product_image_4.jpg" hash="2a88ead3dbbeff1d40168db692841f2f"/></dir><file name="arrow.png" hash="837259a7c365e46034dca728bffe9070"/><file name="background.gif" hash="bd92833eb2eb32e4a0282cea153ac13f"/><file name="background.png" hash="3717f4b4ba725701e2a0604129a3a815"/><file name="banner.png" hash="0637d31df6b5a434c9a332ee46122ef4"/><file name="btn-l.png" hash="92b2454528e9d39119038777cf53329c"/><file name="btn-r.png" hash="8c6aa9fd9203bc10822e0505f11e0c4d"/><file name="circle.png" hash="f4c116cb0554bf936d3b9ee38b7f3d1f"/><dir name="custom_icons"><file name="account.png" hash="0498d73e47ed47179e5546dc15c17dc7"/><file name="actionsBg.jpg" hash="ee3db742cbec9a436ba46118c8a01303"/><file name="addToCart.png" hash="e33876648546e99d875ca92bd2cd78e9"/><file name="addToWishlist.png" hash="1018602b7c5e0e11f0427ace96fd7d52"/><file name="background.gif" hash="bd92833eb2eb32e4a0282cea153ac13f"/><file name="buttons.gif" hash="0cd19a9d9178976906161ea100cba958"/><file name="cart.png" hash="815b4c64fae21b4c162525ece76dc44d"/><file name="home.png" hash="9e473791b022b7c2dfc7d29b1b6de887"/><file name="image-bg.png" hash="14bde5cf8b00dc5f6c60e52a0fa964dc"/><file name="logo-small.png" hash="9b3477a4552bcb878b4943aae5351622"/><file name="rowBgIcon.gif" hash="9ee89b961ae2bb047672ba5d2d2677c6"/><file name="search.png" hash="10bfa7ec3361ce7cbcc5d25087f181eb"/><file name="shop.png" hash="e6639a9fdc143363da82a7d78e126f1c"/><file name="star-active.png" hash="d4ab959a92bda610527a3e3942c4c0b0"/><file name="star-inactive.png" hash="f7fb99710be4c03ac23b1206f20e761d"/><file name="tellAFriend.png" hash="46f8ef48b29f245977d66d9312d87e70"/><file name="viewDetails.png" hash="9bacc63bcc483d3db5614a026d9391f6"/><file name="viewGallery.png" hash="304f3d03949d07055bc056359fe17763"/></dir><dir name="gradients"><file name="footer.png" hash="31a2feed50ef9c8637b412c4211f8300"/><file name="header.png" hash="5386da930a944cd75562216249cce08a"/><file name="header2.png" hash="ad5a2dc6ec93914e925cfe2d43fb30a2"/><file name="header3.png" hash="920ad8c6903e90323a57fb02dca37280"/><file name="item-bg.png" hash="a14886d1f9e14284ac6b4f1b61e68646"/><file name="sort-bg.png" hash="b8053bb772e849909e5b87e4fd1ebbe4"/></dir><file name="grid.png" hash="23faa3f5572cdeb597c2bceedd93a7f8"/><dir name="icons"><file name="account.png" hash="0498d73e47ed47179e5546dc15c17dc7"/><file name="cart.png" hash="815b4c64fae21b4c162525ece76dc44d"/><file name="home.png" hash="9e473791b022b7c2dfc7d29b1b6de887"/><file name="more.png" hash="f3662ae29923b87eba3a729192aa3df3"/><file name="page.png" hash="2291d77f21de042040bc0864be40138b"/><file name="search.png" hash="10bfa7ec3361ce7cbcc5d25087f181eb"/><file name="shop.png" hash="e6639a9fdc143363da82a7d78e126f1c"/></dir><file name="image-bg.png" hash="a588b9cced95a25fc18e28c775d9a001"/><file name="info.png" hash="3f0d2ed85b81e8251f294457c6bfa404"/><dir name="ipad"><file name="background_home_landscape.jpg" hash="9e3ef117985113b804531142d539b60a"/><file name="background_portrait.jpg" hash="bdf9e034fd30b923086e6c622ea10451"/><file name="banner_image.png" hash="693bb9d118155a146b21ce9fcfba08da"/><file name="banner_image_l.png" hash="a070a40d57610b5cc7160fe894482a1c"/><file name="bg_catalog_header_hor.png" hash="f61a67aa288e1b8a8df7b4d4527c662e"/><file name="bg_content.jpg" hash="70ddfc8959d878d1231dc7cbee4a063c"/><file name="bg_filter_button.png" hash="728f1cd358446881ffd863eff12204a1"/><file name="bg_filters_buttons.png" hash="02fcb0ed7a7268e9f64ebaf06235bc09"/><file name="bg_filters_tooltip.png" hash="3b05ca6e585acd3d766be01eeaa23d47"/><file name="bg_filters_wrap.png" hash="31288784fe95c67de9b45b44458b4155"/><file name="bg_header.png" hash="e2cf5a575a27e6e4533e3c85e3472a82"/><file name="bg_home_content.jpg" hash="1d55a198279e4f2b163c98c18f699646"/><file name="bg_home_header.png" hash="00f2fbf96d2b915dcbcd921b0301ef3f"/><file name="bg_home_header_hor.png" hash="9bfef728ece003d5b3433d2623ea168c"/><file name="bg_home_products.png" hash="ac6a8a79b959a0c8298b1f607c0f0af8"/><file name="bg_home_shadow.png" hash="c54b071ca3e97a6ee67588ef74b7b44e"/><file name="bg_home_shadow_hor.png" hash="0d21a99c5c749d0e5070e3585ff4a23f"/><file name="bg_product_image.png" hash="4da74325c1a4ee1ca19b414e5d590f75"/><file name="bg_search.png" hash="6ee08d05d0c4ef9ed64b9914b821f408"/><file name="bg_sections.jpg" hash="0ee90005663aced09a9ce6385bdbce2c"/><file name="bg_status_bar.png" hash="17124d9d392bb8e37b202c80a595df54"/><file name="bg_status_bar_hor.png" hash="bd4a9f11ecb1c896145267731d8a951d"/><file name="i_cart.png" hash="1bbe0a0e54eed5bb14b9bfcce83da758"/><file name="i_info.png" hash="3f0fda8b294b67bf698badbcaa99150b"/><file name="i_login.png" hash="deb4089bdc61582c78c90ef192d577e8"/><file name="i_remove.png" hash="4923eb5e76b3c6ba6df5c667db816a0c"/><file name="logo.png" hash="49c19f59b459b6c0b3b99daa3fe7f932"/><file name="logo_big.png" hash="693bb9d118155a146b21ce9fcfba08da"/><file name="product_image.jpg" hash="2bb6c69129bcb18dc93e9f48605647c6"/><file name="sections_arrow.png" hash="7db7144083a31882e8a62cb9579f478f"/><file name="stars.png" hash="70d38cd9883d70e4f6b21ac4874b9868"/></dir><file name="lightStar.png" hash="b5dc40d5b793dae6a069357f49cccc24"/><file name="lightStar2.png" hash="75928926a6112540c9cb073157cb7d95"/><file name="lines-h.png" hash="ea3d95812c9838affc6df2f3a3cb1977"/><file name="lines-v.png" hash="9e3ffee29ba28477d50da9642019bc0a"/><file name="login-btn-left-alt.png" hash="71bb6c7d24252aace27bee711d7616f4"/><file name="login-btn-left.png" hash="cbbf9afc6e9fc433f57270e88b63f351"/><file name="login-btn-right.png" hash="438fcc598d012bf6d33184e95accfd24"/><file name="login-btn.png" hash="051ee2c1a8ce3f7b8de3293cd2e2ed85"/><file name="logo-small.png" hash="9b3477a4552bcb878b4943aae5351622"/><file name="logo_25.png" hash="ba41ed568d916175c32803b614442447"/><file name="men.png" hash="46d7d1773118ef0a27353e8a9f6719fe"/><file name="mm-frame.gif" hash="eebf30806f1dbf2118e7ec39a016c86d"/><file name="mobile-catalog.css" hash="cfcfc3b0785a57b707731b661d4d559b"/><file name="mobile-home.css" hash="3dd556688b8c578be295b16ebba934b5"/><file name="rowBgIcon.gif" hash="9ee89b961ae2bb047672ba5d2d2677c6"/><dir name="slider"><file name="actionsBg.jpg" hash="ee3db742cbec9a436ba46118c8a01303"/><file name="addToCart.png" hash="2a146be4bc63713df19cc353e030d44f"/><file name="addToWishlist.png" hash="9b23a4e0d9acfc79f314e9082f14c4de"/><file name="tellAFriend.png" hash="b7600fa2ae52bdb1d6bb86fe4d9f1773"/><file name="viewDetails.png" hash="90cf37c6dbbee1861350b4c05469e3ae"/><file name="viewGallery.png" hash="304f3d03949d07055bc056359fe17763"/></dir><file name="slider.gif" hash="c6b87bf15b85b18c0515e2cbefaabe60"/><file name="smallIcon.png" hash="e76d2a6364042f41b3f35fc8cdc9c0ee"/><dir name="sort_buttons"><file name="bg_button.png" hash="87d0f1b123f01c3aea3cb8a2b146306e"/><file name="button_up.gif" hash="7ad527f99b9975d5634fb2d5cc99e6b3"/><file name="buttons.gif" hash="2f14f1a3f0fb38790779c992a58654ae"/><file name="buttons.png" hash="b4a3f17370e03bf5d2a5cdf7800c25a7"/><file name="center-active.png" hash="5903988cd458cd794f23a212d51aa725"/><file name="center-inactive.png" hash="135b46aaa5c3b131a5a7e9c45c004e06"/><file name="filters.png" hash="3837ab6fcfe959833dd998533db1ca7f"/><file name="left-active.png" hash="86e94441b96a0d27d0b0a7e5108f86ed"/><file name="left-inactive.png" hash="0ddcb75aa9971cca39a5a65b4bdff8c4"/><file name="right-active.png" hash="320740ff608187301b06a96eab2f9e8e"/><file name="right-inactive.png" hash="cac4b39ab380353ffd5fdbcedb6e0a0a"/></dir><file name="star-active.png" hash="d4ab959a92bda610527a3e3942c4c0b0"/><file name="star-inactive.png" hash="f7fb99710be4c03ac23b1206f20e761d"/><file name="t-shirt.gif" hash="7505efdaabf13c4f8e26f7cfe15c8c96"/><file name="t-shirt.png" hash="46d7d1773118ef0a27353e8a9f6719fe"/><file name="women.png" hash="46d7d1773118ef0a27353e8a9f6719fe"/><file name="youth.png" hash="46d7d1773118ef0a27353e8a9f6719fe"/></dir></dir><file name="dropdown-arrow.gif" hash="332e99ca6b4d1e0d39972e04fb0b2395"/><file name="empty.png" hash="23dc9dc3c4751f83c2df7a5c42668824"/><file name="full-arrow-left.gif" hash="8ec91b60d38d1a16cba7670f2088a5c7"/><file name="full-arrow.gif" hash="36ddff0fca1c7d8900cb3633e0a30cea"/><file name="gel_green.png" hash="591959d831e8e42c9175d12a88f0bae2"/><file name="gel_red.png" hash="db442c023014df9da32b84bc1bb5a39f"/><file name="l-arrow.gif" hash="ee49f7eab64657b5131953acef0238fd"/><file name="loading.gif" hash="5d25806dac7cbee5f894b13144783866"/><file name="r-arrow.gif" hash="d0429a9781e915fc9d9ca8875c470d32"/><file name="remove.png" hash="ee9497c5f31933eaab3e9e352495ee12"/><file name="small_logo.gif" hash="d5c8be7c0f16aac2549759c0228492d6"/><file name="swatch_black.gif" hash="fd31d6a3a435c8ad1f7c43f346bb47e4"/><file name="swatch_custom.gif" hash="fb34791a48366957a141e12b563888c2"/><file name="swatch_default.gif" hash="fb34791a48366957a141e12b563888c2"/><file name="swatch_funk_leaf.gif" hash="f1d3ba87efb742b47da879a6f48909c4"/><file name="swatch_hot_red.gif" hash="d9363d45dc2993c2fdc3ea43c5b6f71c"/><file name="swatch_sky_blue.gif" hash="ded1455db119d09a3aedd7474fd1875a"/><file name="swatch_user_custom.gif" hash="a24f31421a1ff56d1be0845f9a7c7020"/><file name="switch-arrow.gif" hash="dc7243962b341f366cd072d486687e6a"/><file name="tab_account.png" hash="27101fbaa78a07426be4768acc4c53ff"/><file name="tab_account_android.png" hash="77605cbc87f75ca17e91a5393765ceb1"/><file name="tab_account_ipad.png" hash="2997de5402195d0720309b73c6446fab"/><file name="tab_cart.png" hash="e803f760ee81cb35183f1122f388b774"/><file name="tab_cart_android.png" hash="477e97f8d03ea8aa674e952709f86578"/><file name="tab_empty.png" hash="bdd4cc355566e8861b2c45424ad94516"/><file name="tab_home.png" hash="dfa104e4da74e4a55d3c98d6ee0f7122"/><file name="tab_home_active.png" hash="bba5eb9bb724c84c1ede9e6f4bec3575"/><file name="tab_home_android.png" hash="1fefc6b070cc21b31b43194a7d85f9d9"/><file name="tab_info_android.png" hash="67fc19d8d926f7aede482f5a7083fc71"/><file name="tab_more.png" hash="2803359cb3e795bf67457e727aa16020"/><file name="tab_page.png" hash="ca05dbc42f944b8d4255f6675f6dd93a"/><file name="tab_search.png" hash="2cf29dbe325558353621b4241543204f"/><file name="tab_search_android.png" hash="932c2c568872fd9e119367c887f0539a"/><file name="tab_shop.png" hash="f36be0d3d27f2b37626247d3f6a55e2a"/><file name="tab_shop_active.png" hash="de907d6a52d477d4319649f9b0e2e4aa"/><file name="tab_shop_android.png" hash="e119fcd20f8cba856d550a64d775ddbb"/><file name="tmp-icon.gif" hash="58b759aecf3bdae26d5aaff7a0be5c90"/><file name="xmlconnect_tab.png" hash="cd99a7e01a42a6c82d866f7684faeb95"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="xmlconnect"><dir><dir name="catalog"><dir name="category"><dir name="placeholder"><file name="image.jpg" hash="097ab8a3051bc037ea3de0e17f440540"/><file name="small_image.jpg" hash="f825d16f97a640453553c79c48ebaa73"/><file name="thumbnail.jpg" hash="b2b682d28a08a748a73d2cda70ab5a57"/></dir></dir></dir></dir><file name="tab_account.png" hash="0498d73e47ed47179e5546dc15c17dc7"/><file name="tab_cart.png" hash="9055ba76e256a51d3fee53a8c41d5226"/><file name="tab_home.png" hash="07d0af93e167b9366d3d4fb3d6cdb31c"/><file name="tab_more.png" hash="b9fc21feb8d7655bc9c2985c37b0de2f"/><file name="tab_page.png" hash="ca05dbc42f944b8d4255f6675f6dd93a"/><file name="tab_search.png" hash="25e880eb2a4d06828e2e1c3f32d22400"/><file name="tab_shop.png" hash="fe602fc2e7093efef5ecc0b027a32d91"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="jscolor"><file name="arrow.gif" hash="5034704a76cd55c1cbcbc58ea6bf523f"/><file name="cross.gif" hash="ba9a274b9323753cd95bc3b1eb2f4e5f"/><file name="demo.html" hash="edf71251cb2be20322d2efb00aee86a6"/><file name="hs.png" hash="fefa1a03d92ebad25c88dca94a0b63db"/><file name="hv.png" hash="990d71cada17da100653636cf8490884"/><file name="jscolor.js" hash="b65a1505390592ac6c0177d6b84774e0"/></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Magento_Mobile-1.9.4.0.xml b/var/package/Magento_Mobile-1.9.4.0.xml
new file mode 100644
index 0000000..cf03c44
--- /dev/null
+++ b/var/package/Magento_Mobile-1.9.4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0"?>
+<package>
+    <name>Magento_Mobile</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license>mixed</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Magento Mobile Xml Interface</summary>
+    <description>An integration Magento with mobile applications (e.g. iPhone, Android, iPad)</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:12</time>
+    <contents><target name="magecore"><dir name="Mage"><dir name="XmlConnect"><dir><dir name="Block"><dir name="Adminhtml"><dir name="Admin"><dir name="Application"><dir name="Edit"><file name="Form.php" hash="18be6ffdd7c355412d449f81ac516a82"/><dir name="Tab"><file name="Settings.php" hash="3b0f287a051dd8474da4251133c874af"/></dir><file name="Tabs.php" hash="f4f17bd4fc16c3c43c2e5948b58a83f2"/></dir><file name="Edit.php" hash="0f8abb2894eb707e68f4cd89d0fb1506"/></dir></dir><dir name="Connect"><file name="Config.php" hash="87b56d12ae88dd3c07944956add6b567"/><dir name="Dashboard"><file name="BestSellers.php" hash="7134d111d21dd9e81eff4caea27eea93"/><file name="Customers.php" hash="e28988ad7a57f37c8305e0421cd80f22"/><file name="GraphAmountsData.php" hash="eb85575aca52720dd210214e5ba93f44"/><file name="GraphDataAbstract.php" hash="c1bc1a5e031a2025e9f6c439b244b67f"/><file name="GraphInfo.php" hash="c0d817f3e595611be18b41c4105abcb5"/><file name="GraphOrderData.php" hash="94793bf7b079d8425d85a1763335cd89"/><file name="GraphTotalsData.php" hash="1f28a4db91fae0f6b6d83be17619a154"/><file name="LastOrders.php" hash="52841de8394d8ddf950ca75e2aa40d3d"/><file name="LastSearchTerms.php" hash="9ef7916ca93ac249c0e88695abc5ab4e"/><file name="MostViewedProducts.php" hash="7199f30aa2988b3d7cd3e0b7b82231f1"/><file name="NewCustomers.php" hash="e4ee586b7bff72f6dc7272d769115273"/><file name="SalesInfo.php" hash="73ea564da26d72a3d9e0f696605b85eb"/><file name="StoreSwitcher.php" hash="8474457e0c27f3237ab5897c0e7c16e8"/><file name="TopSearchTerms.php" hash="77cab704afffaecc2de1fa426e2b9b99"/></dir><file name="Dashboard.php" hash="c94c16a9043a5cafefaac9dee1883ee5"/><file name="Loginform.php" hash="6d9e82f37f99d50ad9b5733a0ad373b4"/></dir><dir name="History"><file name="Grid.php" hash="b50dcdf47d14b2c1e74b2373051a33e8"/></dir><file name="History.php" hash="9b85bb8d93eeb36d1ec6f1d89479a492"/><dir name="Mobile"><dir name="Edit"><file name="Form.php" hash="b39335871f93126f4c6777012083a1be"/><file name="Submission.php" hash="fed2d742709704afdd431e14c7150ab2"/><dir name="Tab"><file name="Cache.php" hash="d027acb7bbc0523c6e7b98be0380bc17"/><file name="Content.php" hash="2f0dcf3822603c30e19473f499bbac2a"/><dir name="Design"><dir name="Accordion"><file name="Images.php" hash="23892e279d0b704a196746ffa31a0563"/><file name="Tabs.php" hash="d61b92dfa34f8400e4e3634491a90a87"/><file name="Themes.php" hash="c99774552cfb7c3a9900aea547e08097"/></dir><file name="Accordion.php" hash="a3ac8ebe1b141388d66fbc1427013ab6"/><file name="Images.php" hash="8a8aa7d3071d5b2c897d963b9241530b"/><file name="Preview.php" hash="0c09f94658ad2ce54eff498ddbc22d0d"/><file name="Themes.php" hash="ccdfbfb55b1a6546f1a4a6c63bd31fb4"/></dir><file name="Design.php" hash="ce325c4f2a7b4f710c1811ad5af6cfee"/><file name="Flurryanalytics.php" hash="4d5e17172aae5aed0446e01e672e1ae7"/><file name="General.php" hash="0e2874a5f47ca792a71b1c320ea2da4e"/><file name="Notification.php" hash="68989b0f6d1a09c87d1a87a080773a0c"/><file name="OfflineCatalog.php" hash="667ea36b4072d5f05aa6947a28fc99a3"/><file name="Payment.php" hash="da614bd47891075e3b6799c08649d468"/><file name="Settings.php" hash="c145920bbe669e21d1295e1c08ad7163"/><file name="Social.php" hash="c7f35dc8337786a143acd4348ecce7e8"/><dir name="Submission"><file name="History.php" hash="f615d12065b9ac60a7de1dc996dfab0b"/></dir></dir><file name="Tabs.php" hash="8e10429333aa0f9533ccbc015f46b4ba"/></dir><file name="Edit.php" hash="32c191dfd9f0f630b9aaa9a5adb94e44"/><dir name="Form"><dir name="Element"><file name="Addrow.php" hash="2de7e669a33605ada631a1277964aa67"/><file name="Color.php" hash="6ddc0bb0f5101e2d725ca8d48c5bf756"/><file name="Country.php" hash="adb6eddd4501270afcffa02bedbbc112"/><file name="Datetime.php" hash="4d180c7761cec12eb3c7b5d1330e378d"/><file name="Font.php" hash="bedae4f4b7e006cc9a6695dba5a208bf"/><file name="Image.php" hash="828fedd806faf6e7674a8fa12bcdda80"/><file name="Page.php" hash="e4d9a146374e6840440a804b3488951d"/><file name="Tabs.php" hash="68fc1c371a04180873cde4af547a9342"/><file name="Theme.php" hash="4d188f42b28f49119e0bb4a84012c8d4"/></dir></dir><dir name="Grid"><dir name="Renderer"><file name="Bool.php" hash="625dd7a22b19f31639b8ef0ec0c20f4c"/><file name="Type.php" hash="b48290e352e4df28481a162cb631de67"/></dir></dir><file name="Grid.php" hash="87e2b69ee002065bb02beaf39dda089b"/><dir name="Preview"><file name="Content.php" hash="3aa56cd03743ce213aae3a5925f4a08e"/><file name="Tabitems.php" hash="ca925de201e3dc8af3177d130fb87a74"/></dir><dir name="Submission"><file name="Form.php" hash="ec1ceeea6a087983e49651eef19a6dd9"/><dir name="Renderer"><dir name="Country"><file name="Androidmarket.php" hash="4140c6b311419a88e4446411c77f863d"/><file name="Istore.php" hash="ca9c9d39c4685fc93416540ca47eb7b8"/></dir></dir><dir name="Tab"><dir name="Container"><file name="Submission.php" hash="ca2ed4e535597a4dc0dc5f71b03fc390"/></dir><file name="Container.php" hash="3d893b8aaf1b6c0e0966faedacc3e5c2"/></dir><file name="Tabs.php" hash="98d6bf6dccc749544311f23c581a3111"/></dir><file name="Submission.php" hash="490ca37478730072e3f3cb10580d0e0c"/><dir name="Widget"><file name="Form.php" hash="9526cf41e8ab9781fd2a28cf4dbe2bfa"/></dir></dir><file name="Mobile.php" hash="c1960a31775120c9499f1052bb775250"/><dir name="Queue"><dir name="Edit"><file name="Form.php" hash="e9efb1f673b2f21da26446852bd68310"/></dir><file name="Edit.php" hash="c82e2bbee5fd3cf15567d1748ec012bb"/><dir name="Grid"><dir name="Renderer"><file name="Action.php" hash="f1cab5df3efeb224b90ab076dfed9550"/><file name="Application.php" hash="41e1376368264c68cd0cc8332cde0730"/><file name="Id.php" hash="4defece4c272caf2720f2ab0d0c1f0ac"/><file name="Msgtitle.php" hash="d4b69d6a657e7772451ef65c63235ae7"/><file name="Pushtitle.php" hash="948ccdc09722aeb7b5287ae775a218ac"/><file name="Status.php" hash="5591fa63b3b160171d79e71d8d350f1a"/><file name="Template.php" hash="143aaa66af7b276d6d973a904c7cd175"/></dir></dir><file name="Grid.php" hash="d32c1f8686f862f9507db824f06b816b"/></dir><file name="Queue.php" hash="9f0f8ecaffd50949409ea126f56a2e88"/><dir name="Template"><dir name="Edit"><file name="Form.php" hash="dc40630afad3ea8a9dc4ed7b87277716"/></dir><file name="Edit.php" hash="0aa025f155eb299044e3dae8b5ee5579"/><dir name="Grid"><dir name="Renderer"><file name="Application.php" hash="b44b72d5a06cf8e380fefc5edbdf35f5"/><file name="Name.php" hash="9248874c8e7775513a341d5b7e3125c7"/></dir></dir><file name="Grid.php" hash="4b766a3d51516cb3cfed39699d760a14"/><dir name="Preview"><file name="Form.php" hash="9eecc83db65aac8cc0a085dee84ecb50"/></dir><file name="Preview.php" hash="305dfd65e73a3ed898893b170cc12732"/></dir><file name="Template.php" hash="e7220052fb9a0f7ee17a7e007ad80c87"/></dir><dir name="Cart"><dir name="CartTotals"><file name="Default.php" hash="e81662723cc554bf93bb8868dd41b6b1"/><file name="Grandtotal.php" hash="7907f67687320c770cda36f72a26252b"/><dir name="Nodes"><file name="Default.php" hash="982d082903f48e68bb91165a4a5182d8"/><file name="Giftcardaccount.php" hash="0131a57dc306dd6f7280bba3182304d9"/></dir><file name="Shipping.php" hash="181b533a57f48147dce4eafeecb7c5f8"/><file name="Subtotal.php" hash="e42e0617841c0ba3892f781aacddbf1d"/></dir><file name="CartTotals.php" hash="f961282950d5aeb2e4a859ecd89c7f02"/><file name="Crosssell.php" hash="0a83b72fa16d79b63dc4c9fcba0c37c3"/><file name="Info.php" hash="7af98f3c441217e4735a13dcc8d13342"/><dir name="Item"><dir name="Renderer"><file name="Configurable.php" hash="aa04ba5fb52c5b1a858d1e6b14c2d5db"/><file name="Grouped.php" hash="36a290b9624eeea299b4e1f09370ccda"/></dir><file name="Renderer.php" hash="427a01fd7cb099a823f666e0459b92d0"/></dir><file name="Items.php" hash="90094a7c8709cd0f76517e3fe1b8c16d"/><dir name="Paypal"><dir name="Mecl"><file name="Details.php" hash="3474c0cba2c95c53151bee9f782c6c70"/><file name="OrderDetails.php" hash="e700c7004c137aed7770ce99ef112fa3"/><file name="Review.php" hash="ca5ec99a17d2844ad41fab85408e0331"/><file name="Shippingmethods.php" hash="dfd7048ac79b89c984d4d65c2f08de42"/></dir><dir name="Mep"><file name="Totals.php" hash="84f440f6613ee644a12f7585eab02db2"/></dir></dir><file name="Totals.php" hash="5719f0a9c2a79c41fc0b60b40f987d24"/></dir><file name="Cart.php" hash="5b77cf7f3d7bf6ac31b2cab1376a72d5"/><dir name="Catalog"><dir name="Category"><file name="Info.php" hash="fe12a230101c361a41b3d9cd6758f094"/></dir><file name="Category.php" hash="c4583d3ef50819761144f1158b5b2b6a"/><file name="Filters.php" hash="5916239aaa999dfedff7145525ad3ac2"/><dir name="Product"><file name="Attributes.php" hash="352ea45e2818bd8775421a88966378aa"/><file name="Gallery.php" hash="54ad61285abcc3b29d11a237a7f41b78"/><dir name="ItemPrice"><file name="Bundle.php" hash="934691fb8c805ac45a7112a8268be658"/><file name="Default.php" hash="bbed8ec56060f70dd0bb4466390a2098"/><file name="Giftcard.php" hash="39cb9ef1fae797bab979b414da2697b4"/></dir><file name="ItemPrice.php" hash="01aa1b430438c1422ddd9e864e2401d4"/><file name="List.php" hash="8dd1e301a4c00895d6987a60b424f1ab"/><dir name="Options"><file name="Bundle.php" hash="0b55a73ccb10bd0296d10d6c31811712"/><file name="Configurable.php" hash="832f951702911ed9f7dbb6ab1b95184d"/><file name="Downloadable.php" hash="0555d353b7fef2a23bab5c62237bc816"/><file name="Giftcard.php" hash="e4f9f5deae7ec418a2ccf210738811d0"/><file name="Grouped.php" hash="f47c95399047ca31fe7b124dafeb2336"/><file name="Simple.php" hash="cf5df8515ada2bdcbde11c5c4f3bc1c0"/><file name="Virtual.php" hash="d779fb0b7c5a3a36eb949725f6066de6"/></dir><file name="Options.php" hash="26b51c5e2349d5714ef1ac11166200bb"/><dir name="Price"><file name="Bundle.php" hash="3c5664b73fd679722e28210cb45b4e1a"/><file name="Default.php" hash="93b76d312b7c403dc99653752628ea38"/><file name="Giftcard.php" hash="f7d79e2d2384c732c33d77831d669f58"/></dir><file name="Price.php" hash="e6272f9b2c349ed9aa7c0bbc4e14ba1a"/><file name="Related.php" hash="5a426f5e5cfa50680766ce585732d450"/><dir name="Review"><file name="List.php" hash="6b2d364d67f3ff46478d0512027bb198"/></dir><file name="Review.php" hash="876a30958acdf8f4597335807c8f1814"/></dir><file name="Product.php" hash="e045c7a7b2490e814cb83f889bc76433"/><dir name="Search"><file name="Suggest.php" hash="97341e9253e8b53008849bc18b4d9c15"/></dir><file name="Search.php" hash="2799e12ea33e91c79c737755115953ab"/></dir><file name="Catalog.php" hash="2c2954ced5c922ac6fbb2a7ed94feb02"/><dir name="Checkout"><dir name="Address"><file name="Billing.php" hash="235ece5a9acefc903bf26a449f7696c2"/><file name="Form.php" hash="c50b6b1f7a04f1710d26aa76bdb83b20"/><file name="Shipping.php" hash="6b2b3df4296b82504c91789300336b7d"/></dir><file name="Agreements.php" hash="248e853db9436b7353e2823cb37d3e24"/><dir name="Cart"><dir name="Item"><dir name="Renderer"><file name="Bundle.php" hash="35c5daea28048a29f025cd483e846638"/><file name="Configurable.php" hash="718da5a76f2fb30c72a3b87d42f088a2"/><file name="Downloadable.php" hash="333e998a37991e7d66324b56d75d003a"/><file name="Giftcard.php" hash="ca7535b1cbf6fd929da88c1eb55e9fab"/><file name="Grouped.php" hash="258a71d41ea9c8d9305c18a86f6db427"/></dir><file name="Renderer.php" hash="dc0070a52a5ddedbfb6d9d81bfb5091d"/></dir></dir><dir name="Onepage"><dir name="Address"><file name="Form.php" hash="f51cf393e7a88ddf07fb6689ac0131f1"/><file name="List.php" hash="aaa1389a6374653b6870a803162a0962"/></dir><file name="Address.php" hash="071bcf36fc462d10497c6b78af6d1f89"/><file name="Review.php" hash="9f1f63c81a4ba8c23f9bdbb2b328d29a"/></dir><dir name="Order"><dir name="Review"><file name="Info.php" hash="68e610e2236ac0ed526f5a6d76d9aea7"/></dir><file name="Review.php" hash="795a47724af069613738848478df714b"/></dir><dir name="Payment"><dir name="Method"><file name="Authorizenet.php" hash="aebd18a2aa07609f2fe07ea9c6033a9c"/><file name="Ccsave.php" hash="32c7844e003ed81fc36ab0f0b2984f9d"/><file name="Checkmo.php" hash="d34d3ad863b6236f67e9a5bed1167287"/><dir name="Info"><file name="Authorizenet.php" hash="3ee20e52608afff657ca7977bc9c7d8c"/><file name="Ccsave.php" hash="59281ffc690044f961490679b9eeaa83"/><file name="Checkmo.php" hash="26bee7db3c9d9ec4a2be154d298e6e80"/><file name="Free.php" hash="1928bf8c13732d359c9a3399a5697a99"/><dir name="Paypal"><file name="Abstract.php" hash="d4ca56c7e7b0434cf78f4aa745602da0"/><file name="Express.php" hash="3e5aaf65696b402ca7c44dd3656fc611"/><file name="Mecl.php" hash="2205fb1f735278fded252542545cba8d"/></dir><dir name="Pbridge"><file name="Authorizenet.php" hash="de462e278ceb51696e8e8f347860edf8"/><dir name="Paypal"><file name="Direct.php" hash="d4a745ccf3eb6234b3e6b2ac68d912e6"/></dir><dir name="Paypaluk"><file name="Direct.php" hash="cbb23c943b4dfd8f2f03bd5a6d23277c"/></dir><file name="Verisign.php" hash="936073039408b25322914bcd3e9173bc"/></dir><file name="Purchaseorder.php" hash="ebc9440844b88830d99422abb0719ee6"/></dir><file name="List.php" hash="8e648b7be94f4d9185012829207bb443"/><file name="ListApi23.php" hash="9224c0fd6a9e77031abbb064d7cf5513"/><dir name="Paypal"><file name="Direct.php" hash="099c3529fb5444c50a9d0671f910df14"/><file name="Payflow.php" hash="07be42249281b35a425f4bf15d6bd4de"/></dir><dir name="Pbridge"><file name="Abstract.php" hash="098fa28d25c3d9a27f1145820024fc0f"/><file name="Authorizenet.php" hash="23265f73b0756da01ddf9b652be7677b"/><file name="Paypal.php" hash="b70198d4d55cc58bbb1df4d756f8270e"/><file name="Paypaluk.php" hash="867d1c9e376ab55ad2f740f3a1dc0e50"/><file name="Verisign.php" hash="ef4f28a565a3c8c4eeb3582538f99ed9"/></dir><file name="Purchaseorder.php" hash="ea64ee616a535e4a79cab9ec443430a4"/></dir></dir><dir name="Pbridge"><file name="Result.php" hash="833edb3d936fba72ad611b61d55c9dc8"/></dir><dir name="Shipping"><dir name="Method"><file name="Available.php" hash="e29e91a545cd7a63e653a09be622c792"/><file name="AvailableList.php" hash="7b2eaab0e3366288483052dedf66b1f5"/></dir></dir></dir><dir name="Cms"><file name="Page.php" hash="66d86a57c216b1575b7714b94dbe7231"/></dir><file name="Configuration.php" hash="b7f7301648fdb249b7b4ad162779756a"/><dir name="Customer"><dir name="Address"><file name="Form.php" hash="0b02c6a2eebb0b4a3048eb9757dc98f8"/><file name="List.php" hash="d7c3509d0fc978f0936c04d46e9c9129"/></dir><file name="Downloads.php" hash="e1340b1f0629a9ebf651c79042e688aa"/><dir name="Form"><dir name="Renderer"><file name="Boolean.php" hash="814c293b8d543a8acc618cf4dd448ece"/><file name="Date.php" hash="63690b28d76a20d4c88915d207901c3c"/><file name="File.php" hash="a009b01dca404d38b8fe792b1895c2d4"/><file name="Image.php" hash="eb2e63a8a4cc719e72d2af1e3453354f"/><file name="Multiline.php" hash="15502166fe772ae59b139692ca6c80ca"/><file name="Multiselect.php" hash="8a42000f230d7f2674cb9e422665fa13"/><file name="Select.php" hash="e598ac63fe4ca05a6d313556251624c2"/><file name="Text.php" hash="40879381558845259cbc174a7349c6b6"/><file name="Textarea.php" hash="5da94ac937bd6565b55de6c9e2de4a6c"/></dir></dir><file name="Form.php" hash="e2c00f4ec6a0004193358a110c88cdf8"/><file name="GiftcardCheck.php" hash="b3797d939644ed5ab34f8b8b05454133"/><dir name="Order"><file name="Details.php" hash="69d7f0dd6f79fc090b7ebcfcb7387962"/><dir name="Item"><dir name="Renderer"><file name="Bundle.php" hash="3f3fecde3c64e48899f8055e4c7c093b"/><file name="Default.php" hash="1c51709757db243c3bc99d4989fc11b7"/><file name="Downloadable.php" hash="3b26206355e81d315dca5e8661c06fe1"/><file name="Giftcard.php" hash="8614dd8ad1a3ba75939024726a5eab35"/><file name="Grouped.php" hash="b78c5b229a86e711e8eca236d2c769e0"/></dir></dir><file name="Items.php" hash="b6e76778d4ba432f2d0817615ad47ebc"/><file name="List.php" hash="37f0f7707c65542c14a7ea8faa3cf0fa"/><dir name="Totals"><dir name="Customerbalance"><file name="Refunded.php" hash="3ed573470f738c977a2c622a2f1c61c3"/></dir><file name="Customerbalance.php" hash="b8d4ed847d6572d761392d47ab0b92ce"/><file name="Giftcards.php" hash="6d33c6ad16511d3493b6bcb45e3f2f4b"/><file name="Tax.php" hash="6ec05ef126716a9016a4d8d5cbd79c67"/></dir><file name="Totals.php" hash="0753a87dbdb6f20f20d01110433fa2cc"/></dir><file name="Storecredit.php" hash="38a6534993df649b8980191489f85234"/></dir><file name="Home.php" hash="0171e134d103453d5efa9c28b1a5a98e"/><file name="Homebanners.php" hash="cd43276610e43cb05317be3266829b12"/><file name="Localization.php" hash="13a1440efbe0708d8745e098ff2fbde8"/><dir name="Review"><file name="Form.php" hash="719df761030dce75d34620cffbc22eef"/></dir><file name="ShoppingCart.php" hash="8740a15f227063ee93fd062439182838"/><file name="Wishlist.php" hash="c35e5cbcb2c2fc2b73f9119059004abd"/></dir><dir name="Controller"><file name="Action.php" hash="aa28af4f890fa7bd98f09c62174a7b47"/><file name="AdminAction.php" hash="c113ab27904827ac00f42c1ec56453cf"/></dir><dir name="Helper"><file name="AdminApplication.php" hash="a6a346728711a616a20ac208b97b4208"/><dir name="Adminhtml"><dir name="Dashboard"><file name="Order.php" hash="34bbd403a942aa9067add45539eba21c"/></dir></dir><file name="Android.php" hash="7b607ec61ab3d8037087a75a3dc20367"/><dir name="Catalog"><dir name="Category"><file name="Image.php" hash="a1181040f6a5ae2b61155229914bad90"/></dir><dir name="Product"><file name="Image.php" hash="a580b197c858ae4f86f0c76933d09b3b"/></dir></dir><dir name="Customer"><dir name="Form"><file name="Renderer.php" hash="b5dc3f5225fdac80c05dfe8c8f02073a"/></dir><file name="Order.php" hash="2fb69e79641bca8f1ab60e71db754380"/></dir><file name="Data.php" hash="ae1445dc639814841ed7d51aeffb8c3f"/><dir name="Device"><file name="Abstract.php" hash="ab62df36a04511db7f8206b2806a5b35"/></dir><file name="Image.php" hash="e169e856e7eb7502e0afa2dd0fcb6473"/><file name="Ipad.php" hash="a1c6010a148024f6e9f9371e5a0e4514"/><file name="Iphone.php" hash="db438395e4c39ddf6b08fa6e19f58837"/><file name="OfflineCatalog.php" hash="5d4586f34454d52e702a9a2c8c79209e"/><file name="Payment.php" hash="f9e55cd314d8a84304192083c3278ba7"/><file name="Theme.php" hash="fcc83009fc28d8ec70e97ab68415cca0"/><file name="Translate.php" hash="ea693f28b867e58b8a89f94b37fa7306"/></dir><dir name="Model"><dir name="Adminhtml"><dir name="Search"><file name="Catalog.php" hash="2e6af877121f1f6206b0dff3de4351d4"/><file name="Category.php" hash="7344300c925f43df7cd1d87885cfd3ea"/></dir><dir name="System"><dir name="Config"><dir name="Backend"><file name="Baseurl.php" hash="df19169e6a42dda126784f789d4ca489"/><dir name="Currency"><file name="Default.php" hash="3d89d67b2f6a577d1d17f9f8137df07f"/></dir></dir></dir></dir></dir><file name="Application.php" hash="30bdb5b50cb7574980a47f28485ef544"/><dir name="Catalog"><dir name="Category"><file name="Image.php" hash="acd1b1cf0d949616daeabaea12ae3bab"/><dir name="Media"><file name="Config.php" hash="bfe9fdf79473026783f9307591c039b7"/></dir></dir></dir><file name="ConfigData.php" hash="1b2026535bc234c289d606884912dcac"/><file name="Configuration.php" hash="d6d8bdd4c79aaa1affa9a8c71776aa27"/><dir name="Device"><file name="Abstract.php" hash="efb12adbe5626df1f03a58e1ea761760"/><file name="Android.php" hash="3edf0f598b61a3d0bb74967473c5422a"/><file name="Ipad.php" hash="ce7f5ea81ea71feb4fee7a13e2822952"/><file name="Iphone.php" hash="a52717c33a4b25056fc3cfeb49c03db9"/></dir><file name="History.php" hash="2235f24899f77bb20019f30cd5b43461"/><file name="ImageAction.php" hash="51ead1214bd38f35c947c9a9a410199f"/><dir name="ImageLimits"><file name="Abstract.php" hash="ed2bac8df20078a88c199862988b51fd"/></dir><file name="ImageLimits.php" hash="5463b50b15bf317dadbc8853bec61a55"/><file name="Images.php" hash="2d646c61ab2f0bc751f735a0f902d517"/><dir name="Mysql4"><dir name="Application"><file name="Collection.php" hash="9d2ff8db89101e153cff566a4dcd49c2"/></dir><file name="Application.php" hash="12bb5e198d9c5dff257ee6f4e0a63165"/><dir name="Cms"><dir name="Page"><file name="Collection.php" hash="da36e2bb02ce9b1b490a61e22825098b"/></dir></dir><dir name="ConfigData"><file name="Collection.php" hash="d910362570917ba3d066239901325c50"/></dir><file name="ConfigData.php" hash="e3f2172a3bd7bb7d358905c29c9aebc5"/><dir name="Filter"><file name="Collection.php" hash="da42e91c731132e8d32bda10bee05e9b"/></dir><dir name="History"><file name="Collection.php" hash="d1d9b6735cf2aaa6cccfe5bea1cfd646"/></dir><file name="History.php" hash="5403dc5cc4d58c7d66168eb7212dff5f"/><dir name="Queue"><file name="Collection.php" hash="10f054092e5fd65e17a484dbc06adba3"/></dir><file name="Queue.php" hash="214361aa7960e141d44a525bab2b5ab6"/><file name="Setup.php" hash="ca9337c48d1a1168bbf76036f8bcf72d"/><dir name="Template"><file name="Collection.php" hash="cef8ced8e5d16bdb475b2493f8d3c12f"/></dir><file name="Template.php" hash="8722c9769dc835607e332387aa5d6bd7"/></dir><file name="Observer.php" hash="bca103d97f859a57afcb20434004bc05"/><dir name="OfflineCatalog"><file name="Abstract.php" hash="65fa4eb5b0c583d29db761e5249f9269"/><dir name="Category"><file name="Category.php" hash="28887645eee8fdda480adb926d333820"/><file name="IndexCategory.php" hash="3d7deb0329ac5580356b116048823755"/></dir><file name="Category.php" hash="c240b6e64b36d7d547b03fbff52a6004"/><file name="Config.php" hash="27e0a9b70fcf4e6f28395f2d06f551ce"/><file name="Home.php" hash="5fec268bfb2d8fa8bb5e3d3cd17df6cf"/><file name="Homebanners.php" hash="5dd2c18d679451e659e2b6ffd34cf088"/><dir name="Product"><file name="Gallery.php" hash="67b9cac501378c6256bc7876c0a8a08d"/><file name="Product.php" hash="ce4b25b1862bea8cd624f918d74df8e4"/><file name="Review.php" hash="e1c0877d850f86ff7b2adccd68ab679d"/></dir><file name="Product.php" hash="13c2f6c7dda49e3b668ba77c42af6ce3"/></dir><file name="OfflineCatalog.php" hash="3652212af08998ff06d90345e2bed0db"/><dir name="Payment"><dir name="Method"><dir name="Paypal"><file name="Config.php" hash="eba57e1172a75bac4d96dbd590bcac54"/><file name="Mecl.php" hash="c3cb6d931a124ccb1b5e1c6ec704c134"/><file name="Mep.php" hash="2c8e4f6d1150addbe76b52cab54c4ecb"/><file name="Pro.php" hash="0c6086ffcef35a99e31a92460719de07"/></dir></dir></dir><dir name="Paypal"><dir name="Mecl"><file name="Checkout.php" hash="2fe903d0a69743a3beda6dabdf7779c9"/></dir><dir name="Mep"><file name="Checkout.php" hash="8cc405987b24e6937ac106643940b352"/></dir></dir><dir name="Preview"><file name="Abstract.php" hash="d7441ed91eb8bb8264eb091405473619"/><file name="Android.php" hash="1b753f745d9a3a21ac6655b5f3c29511"/><file name="Ipad.php" hash="dd9263af5283abbe471270b204171f1c"/><file name="Iphone.php" hash="2ff9d89170d89c5e4fafacd6c2d26837"/></dir><file name="Queue.php" hash="a1e2d93c7648ab9f1a2cbecda5dc0c63"/><dir name="Resource"><dir name="Application"><file name="Collection.php" hash="8c9ebfc544abd8bbd5351e16ca71173b"/></dir><file name="Application.php" hash="1326f94db59dc30f645ec4143a7e4c88"/><dir name="CategorySearch"><file name="Collection.php" hash="09c91216af434f8333aeac96434cb4ca"/></dir><dir name="Cms"><dir name="Page"><file name="Collection.php" hash="9784becabf9a30e8ea6eaf843d5e3866"/></dir></dir><dir name="ConfigData"><file name="Collection.php" hash="a357f235f37aecf20cc5a13b59ea3239"/></dir><file name="ConfigData.php" hash="84c30e8759f80b50385bee026de963db"/><dir name="Filter"><file name="Collection.php" hash="38231b2d6de6b1a2e5d7da2c05fcee92"/></dir><dir name="History"><file name="Collection.php" hash="5ac9d983c37fdbf908272edba35da72e"/></dir><file name="History.php" hash="656be7ec06a9a0d21d02411fdaa6b878"/><dir name="Images"><file name="Collection.php" hash="1fa3ec8d6e718b0a4dc2f666317cc8af"/></dir><file name="Images.php" hash="4045d7981f9e8231a41f5073c26157c4"/><dir name="Queue"><file name="Collection.php" hash="168c85c2649c0931644ce663f6e47a6b"/></dir><file name="Queue.php" hash="86a49be4c913e256d669909a098900dc"/><file name="Setup.php" hash="e65c040707309bcfcf4afa769c41594d"/><dir name="Template"><file name="Collection.php" hash="9fefe8ef407cffe7f762ad3c5f04c1c0"/></dir><file name="Template.php" hash="df69d55cbd43c3126916b775974275c4"/></dir><dir name="Simplexml"><file name="Element.php" hash="85eda8f850af7f2b0e5bb744eb24b9ce"/><dir name="Form"><file name="Abstract.php" hash="58953feebdc7574e47cc24febdfd6cca"/><dir name="Element"><file name="Abstract.php" hash="52489a893ed654b1356d93f9bedbb7fb"/><file name="Checkbox.php" hash="734e125419a6206baa224aef5b25d507"/><file name="Collection.php" hash="786f39e9a5e2ff90ccdd7787b11cd132"/><file name="CountryListSelect.php" hash="3c36ec543a347075f139d0421a7f2e51"/><file name="Custom.php" hash="493bb8b95f70f80d4606628dd27c651c"/><file name="Date.php" hash="26bcfbd4540194dcca491a550bd9d386"/><file name="Email.php" hash="5eb3e7d979518048ec46dff03e2a74a1"/><file name="Fieldset.php" hash="8823f98606c7baa0ede0e73e21e02ac7"/><file name="File.php" hash="f50c9023c37a165e9c85d8bf8adcea22"/><file name="Image.php" hash="cdc0508a3f47729b8e65c1b29ef1d468"/><file name="Multiline.php" hash="e43a266f39214ccb359d21447aba0433"/><file name="Multiselect.php" hash="e35ee1d08e5cf3cd40fe2ac0441e16e1"/><file name="Password.php" hash="6439ab336ff5ca6c32b768cd91c38376"/><dir name="Renderer"><file name="Interface.php" hash="70e0d05d72803afe580a55ca12a5ad4a"/></dir><file name="Select.php" hash="316c403364f954a588de35021c0b1a76"/><file name="Text.php" hash="a83e5f7d24345aa97e231c51f7fdffe3"/><file name="Textarea.php" hash="d92e6646075009741222ace78ae9fe1c"/><dir name="Validator"><file name="Abstract.php" hash="5f495e595a11928ae153bca79ac2ed0a"/><file name="Rule.php" hash="ed20d66918f3718981847ad4940d3722"/></dir><file name="Validator.php" hash="d0f110a77b89d1bd9244d707bfcb8627"/></dir></dir><file name="Form.php" hash="9a38fef2158d667ac59ef58b0a2a4184"/><dir name="Message"><file name="Abstract.php" hash="632ef61eed496c67ca2c31faba088fa0"/><file name="Error.php" hash="380f13e3bbdbace690ecd7350faf0a36"/><file name="Success.php" hash="8dd8a2df3a7d0e1ac974626e98eb9ae2"/></dir><file name="Message.php" hash="e3ea79eca24bc725c9cd3df1a1fb6188"/></dir><file name="Tabs.php" hash="282fc6a6103c91b6bd5cc3ea7524adea"/><file name="Template.php" hash="063b3699e6ba48c4d301de5fedb737f8"/><file name="Theme.php" hash="541352f9b1a96673f366b980b4aaf232"/></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Admin"><file name="ApplicationController.php" hash="7154aabbf015aa133e6d924b2b147392"/></dir><dir name="Connect"><file name="ConfigController.php" hash="1bb1b0ef95ef191e0fcd7519aff761d1"/><file name="DashboardController.php" hash="dcb1688f5c7ce4aa5a494988e740ea31"/><file name="UserController.php" hash="265923431772ab92fa0c81f72a027c04"/></dir><file name="MobileController.php" hash="f411b283681d962e7bf56dd13d6ae681"/></dir><file name="CartController.php" hash="5adcd8840b904b088d5b9e5411b9f0ad"/><file name="CatalogController.php" hash="86362c2d85e99bb7099142f6a7d3b67f"/><file name="CheckoutController.php" hash="7599d30a4c8759aa24185d1fe597f583"/><file name="CmsController.php" hash="32143c3d9b6facc655837787df3be1fb"/><file name="ConfigurationController.php" hash="962fc5e176c6df506628ece18eac9a28"/><file name="CustomerController.php" hash="ff3e84d086739dbb6f8b13ad9377ef35"/><file name="HomebannersController.php" hash="24212153f5d52004076049d8bbd34937"/><file name="IndexController.php" hash="1aefb4fbffa158d206da6b87ee24d96f"/><file name="LocalizationController.php" hash="4c258955073f4655ff5576dcab06e548"/><file name="OfflineCatalogController.php" hash="8a1890da0f5295968ce840e59a301320"/><dir name="Paypal"><file name="MeclController.php" hash="c0d3c1197373674d20235de1a925bb76"/><file name="MepController.php" hash="e74221e124abdf52ae3093965e0313fb"/></dir><file name="PbridgeController.php" hash="c410e18aa7e5a94d12bd650b42b0a2dd"/><file name="ReviewController.php" hash="ac34d14c2f9d1640200d99876e47eb45"/><file name="WishlistController.php" hash="6ffe6b32ff7ef85feafd74e4323238db"/></dir><dir name="etc"><file name="adminhtml.xml" hash="41a0eee0ff8ccc97791fca3984583b10"/><file name="config.xml" hash="0d09a634d1207e56f851ae9f4ec763eb"/><file name="system.xml" hash="60e071b734b4cd4cad9104308d4194f2"/><dir name="themes"><file name="custom.xml" hash="14fc8ad9b2b3d7e573e71aa7d68346f6"/><file name="default.xml" hash="3176577e6bbb1366b281e9e9645540ff"/><file name="funk_leaf.xml" hash="e88f9debf8ce7d072add428589ab8dac"/><file name="hot_red.xml" hash="91256c9132bca710e3392530149d85dc"/><file name="sky_blue.xml" hash="313ba8de5835b597911d6f8307a4b886"/></dir></dir><dir name="sql"><dir name="xmlconnect_setup"><file name="install-1.6.0.0.php" hash="bfa8161a83d387752fe3304945e4f902"/><file name="mysql4-data-upgrade-1.4.0.13-1.4.0.14.php" hash="868ccb802d0827a7cbd9f44192c0d2b9"/><file name="mysql4-data-upgrade-1.5.9.9-1.6.0.0.php" hash="1bedcf73c1fa646f2ae2f1fa04df558b"/><file name="mysql4-data-upgrade-1.6.0.0-1.6.0.0.1.php" hash="48a7cc742843624292f1971985a88679"/><file name="mysql4-install-1.4.0.8.php" hash="9f9e15de94aa8973996adea3944238f5"/><file name="mysql4-upgrade-1.4.0.10-1.4.0.11.php" hash="954f56443e96a25c07e78215c7e99f12"/><file name="mysql4-upgrade-1.4.0.11-1.4.0.12.php" hash="92a411920731b922db4ab8f2af503b11"/><file name="mysql4-upgrade-1.4.0.12-1.4.0.13.php" hash="a650fba5fd52ddc46600258310771dba"/><file name="mysql4-upgrade-1.4.0.13-1.4.0.14.php" hash="41fddc2b9601a81745b918cb36126044"/><file name="mysql4-upgrade-1.4.0.8-1.4.0.9.php" hash="dd5ca9ac54e429a22bc60cea44915985"/><file name="mysql4-upgrade-1.4.0.9-1.4.0.10.php" hash="ef96cdb8d2e38faa3b6f987ee4a683ef"/><file name="mysql4-upgrade-1.5.9.9-1.6.0.0.php" hash="639c80838a314daa3d591a7c7dbdf4a8"/><file name="upgrade-1.6.0.0-1.6.0.0.1.php" hash="4634743a3374bff5a5476b27b224b67f"/></dir></dir></dir></dir></dir></target><target name="magedesign"><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="xmlconnect.xml" hash="fb2334dc39e13ef93f0681d4e524831e"/></dir><dir name="template"><dir name="xmlconnect"><dir><dir name="centinel"><file name="authentication.phtml" hash="d91b808dd1e35943da6a98029d2473eb"/></dir><dir name="pbridge"><file name="result.phtml" hash="b1b8bbd1290f37c838fa7f444d6ecb59"/></dir></dir></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="xmlconnect.xml" hash="5e24fb559ca14f2ef0a450564bcd3afc"/></dir><dir name="template"><dir name="xmlconnect"><dir><dir name="edit"><dir name="tab"><file name="content.phtml" hash="56551d499302bcc380de3bb93919887f"/><dir name="design"><file name="autocomplete.phtml" hash="b44f7193e354ae434de9e27f3fa8581f"/><file name="image_edit.phtml" hash="5c4a33b3722f5080db8783b12d3d83a4"/><file name="images_android.phtml" hash="4e5080a1743b18d1c6c0a6c0be7bc62b"/><file name="images_ipad.phtml" hash="b224f7a1d06f548499c792ef006be6e0"/><file name="images_iphone.phtml" hash="137a3ee34d0bf2a5c6dc80fa557e6580"/><dir name="preview"><file name="banner_rotator.phtml" hash="9344b3fa99e7366d643375d00575af1b"/><file name="catalog_android.phtml" hash="fd8c6f2e795223829c5d6a307aec45f4"/><file name="catalog_hor_ipad.phtml" hash="e60ea7d98d03fa30ed54de3f75793c19"/><file name="catalog_ipad.phtml" hash="d721dd136eefcfc9d10dc8c84b5e85c7"/><file name="catalog_iphone.phtml" hash="5751eb24402061706e1c38d4656a0055"/><file name="home_android.phtml" hash="8bb911cb0fd3ccb0a6a37cf46c1a12c6"/><file name="home_hor_ipad.phtml" hash="90a93d056928407b20ab848b7a78bc88"/><file name="home_ipad.phtml" hash="aadde2d0a5cc1f49571b8aed8f426d14"/><file name="home_iphone.phtml" hash="41490d6e60cda7b22cdb80e0c03271bf"/><file name="productinfo_iphone.phtml" hash="d0339da69754129a8f0a657bc7ba6bd7"/><file name="tab_items_android.phtml" hash="49c3b831da3079379a1f72ccb82350ad"/><file name="tab_items_ipad.phtml" hash="52b6b823508df6eb8857298a2d256dba"/><file name="tab_items_iphone.phtml" hash="862f3e4d6b5628361853458f5567c7d0"/></dir><file name="preview_android.phtml" hash="4d46079265bdac87bd80e635614d6543"/><file name="preview_ipad.phtml" hash="d6f3605c9b92df3718f4dd746557f57e"/><file name="preview_iphone.phtml" hash="b9bdb4a39efb45f83212502bf85fb020"/></dir><file name="design.phtml" hash="5219b884a2e198a9568606d32fc5795d"/><file name="offlinecatalog.phtml" hash="46a17407498e5ac909aab2adbe8d79c0"/></dir></dir><dir name="form"><dir name="element"><file name="addrow.phtml" hash="b9970e1bee9a2999286f63fef9ce9313"/><file name="app_tabs_android.phtml" hash="2135734b73cc0548638895cf41e9d3a0"/><file name="app_tabs_ipad.phtml" hash="85def73314a97942d7c2ae7d4f9836f4"/><file name="app_tabs_iphone.phtml" hash="9699edaeb66c47cbc7155260ff8b5762"/><dir name="country"><file name="androidmarket.phtml" hash="8c61f192c7372ab4e7009abaeaa8275e"/><file name="istore.phtml" hash="2ff59da9c26acf87d240b337961a8ad5"/></dir><file name="themes.phtml" hash="b0daadcde0d8f2d00d43997bd2ff4412"/></dir></dir><dir name="mobile"><file name="notification_helper.phtml" hash="f39f0b298a81201dcbcee02465885a83"/></dir><dir name="submission"><file name="app_icons_preview.phtml" hash="28677e2cbdb2b61f4025e00477e37b57"/><file name="container.phtml" hash="9427981ebb6994de95186abff3c7d35c"/></dir><dir name="template"><file name="preview.phtml" hash="1d24efc926e5beab76c51bb7e61b17fc"/></dir></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Mage_XmlConnect.xml" hash="f403b961a6f5a99ee7bfe9b1f71f2396"/></dir></target><target name="magelocale"><dir name="en_US"><file name="Mage_XmlConnect.csv" hash="50e9493da78f8e6591fd3fad1311047c"/></dir></target><target name="magemedia"><dir name="xmlconnect"><dir><dir name="custom"><file name="ok.gif" hash="398f81b3983f802a99932eaf97ee0806"/></dir><dir name="original"><file name="ok.gif" hash="398f81b3983f802a99932eaf97ee0806"/></dir><dir name="system"><file name="ok.gif" hash="398f81b3983f802a99932eaf97ee0806"/></dir></dir></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="xmlconnect"><file name="boxes.css" hash="b4818201fb27765bd5aa21940ce9feab"/><file name="dropdown.css" hash="909dbc9fea8fdc9b12388427397b440b"/><dir><dir name="fonts"><file name="android_icons-webfont.eot" hash="2fc917efbfb3c933ccfddc108ef05f33"/><file name="android_icons-webfont.svg" hash="e8cb2b5ef019bbc2885c97ed0caaf2a0"/><file name="android_icons-webfont.ttf" hash="bc567dd7a381093fbb652c58cbad9430"/><file name="android_icons-webfont.woff" hash="8310b54d55bf84a8a3f3a86c22a51aef"/><file name="stars-webfont.eot" hash="019beb4b8ec19447657cf3106138bbe3"/><file name="stars-webfont.svg" hash="20cf0312c0b951d173d4531ea18abc6f"/><file name="stars-webfont.ttf" hash="d63d95e9adaf775f410437535622bf60"/><file name="stars-webfont.woff" hash="526d9756131c94139f0f1df5272197fd"/></dir></dir><file name="iestyles.css" hash="043c38df2eb106524cac069c4cbfd4fe"/><file name="mobile-android.css" hash="c93c13a2f4e8ab35a3fa4f615f82fbf6"/><file name="mobile-catalog.css" hash="644c6178ae97ca892cd0bb23037fce0e"/><file name="mobile-home.css" hash="f6afa2a72cf41176f5f80d983483036e"/><file name="mobile-ipad-catalog.css" hash="f4245ec57c89a1c17a1ba2d58a9307d1"/><file name="mobile-ipad-home.css" hash="f234af2678977a92e6575a5fd6b841e6"/><file name="remove.png" hash="b4903936d44dc498d2f32b72d9161ff0"/><file name="styles.css" hash="f71c5abb274a13b6bfeb1e0cadaeb08a"/></dir><dir name="images"><dir name="xmlconnect"><file name="btn_edit.gif" hash="e7ecc9fea5c3813957814050508507a5"/><dir><dir name="design_default"><file name="accordion_open.png" hash="4c89d903ebbc61ee295ef64a60724b10"/><file name="accordion_open_android.png" hash="7ef2f1d193990c3f4c2c90aae9ab3281"/><file name="accordion_open_android_l.png" hash="bc27688afbfd866c618477ea2c7bf0ee"/><file name="accordion_open_android_p.png" hash="2e4549cba575c12ef2a39c12e9ffe173"/><file name="accordion_open_ipad_l.png" hash="dcdda97da6556393b972d6dae8d6bac5"/><file name="accordion_open_ipad_p.png" hash="55cca08a0ab79047961858789ff8c3a7"/><file name="banner_1_2.png" hash="0637d31df6b5a434c9a332ee46122ef4"/><file name="banner_android.png" hash="02695661b8e50e1a001c3369622f322f"/><file name="banner_ipad.png" hash="c1d59a6ec67da1bb76c5142453da7acf"/><file name="banner_ipad_l.png" hash="04e850d481a9ae902f33fd8c1f89cbf0"/><file name="smallIcon_1_6.png" hash="c1ce9e289eaf2c0504d502928693bd89"/></dir><dir name="mobile_preview"><file name="1.gif" hash="817fd84187db3eee00799b0acf316457"/><file name="2.gif" hash="1a842d8f3ac25cfcdeab6c86dd8fea89"/><file name="3.gif" hash="207cd55e968c284bd52c86efdcdda1c7"/><file name="actionsBackground.png" hash="11faa8baee72f3e6a9a02a83915c8658"/><file name="actionsBg.png" hash="9acccd1980f17006942d74a718ebd7da"/><dir name="android"><file name="background_home_landscape.jpg" hash="1f79a1f42ca4e2cf6010ab6c3ef66aa4"/><file name="background_portrait.jpg" hash="197b15e6455ad1a85e1bad6595371fa3"/><file name="bg_button_up.gif" hash="204f590a88933c930b7fc92963accfab"/><file name="bg_cat_item.png" hash="2859b45c387b66243d4af2ba973b2ae1"/><file name="bg_catalog_filters.png" hash="7464191ebaf576b73a3c021eb1cfcc25"/><file name="bg_catalog_filters_shadow.png" hash="5021ad60917190026d85fae1d33bdaa9"/><file name="bg_content.jpg" hash="70ddfc8959d878d1231dc7cbee4a063c"/><file name="bg_frame.gif" hash="7062ed9b7563fc658f49ce7cfdd34f1c"/><file name="bg_header.png" hash="d4a46c8850d1d89259921b1c28b5bce1"/><file name="bg_header_catalog.png" hash="c1080cd18a89e21da18fdc6955bf6230"/><file name="bg_header_home.png" hash="dfce0445ca7c7a45c7914a986b596ce0"/><file name="bg_home_content.jpg" hash="1d55a198279e4f2b163c98c18f699646"/><file name="bg_home_header.png" hash="8bc1887a0c5760cc47b77b8a7a320426"/><file name="bg_logo.png" hash="02695661b8e50e1a001c3369622f322f"/><file name="bg_page.png" hash="d65f1d123655c2eaf3bb4a1e6035a08d"/><file name="bg_star.png" hash="fc6de6c4e0ed3478b8840e1ab81da725"/><file name="bg_star_empty.png" hash="3f0421fb8c8f6c4be6ca501168a881e8"/><file name="bg_status_bar.png" hash="52b41106451ac34672f82338bbc5370c"/><file name="ico_account.png" hash="c1fd338c74fcf483155acbd37c430807"/><file name="ico_home.png" hash="2de37f640463b354d68945320bfe3e4f"/><file name="ico_search.png" hash="8b0dd17a3e9c3328e66204fe379c66aa"/><file name="logo_big.png" hash="693bb9d118155a146b21ce9fcfba08da"/><file name="product_image.png" hash="dd975b128ba303e0ae2adc9772e0433c"/><file name="product_image_1.jpg" hash="8994979d4dcc1f339c73cd1f44398a7d"/><file name="product_image_2.jpg" hash="26d6599bdb35d80b25a1e903b40cfa19"/><file name="product_image_3.jpg" hash="d7c6d05196a84341afe0025d01b9dc61"/><file name="product_image_4.jpg" hash="2a88ead3dbbeff1d40168db692841f2f"/></dir><file name="arrow.png" hash="837259a7c365e46034dca728bffe9070"/><file name="background.gif" hash="bd92833eb2eb32e4a0282cea153ac13f"/><file name="background.png" hash="3717f4b4ba725701e2a0604129a3a815"/><file name="banner.png" hash="0637d31df6b5a434c9a332ee46122ef4"/><file name="btn-l.png" hash="92b2454528e9d39119038777cf53329c"/><file name="btn-r.png" hash="8c6aa9fd9203bc10822e0505f11e0c4d"/><file name="circle.png" hash="f4c116cb0554bf936d3b9ee38b7f3d1f"/><dir name="custom_icons"><file name="account.png" hash="0498d73e47ed47179e5546dc15c17dc7"/><file name="actionsBg.jpg" hash="ee3db742cbec9a436ba46118c8a01303"/><file name="addToCart.png" hash="e33876648546e99d875ca92bd2cd78e9"/><file name="addToWishlist.png" hash="1018602b7c5e0e11f0427ace96fd7d52"/><file name="background.gif" hash="bd92833eb2eb32e4a0282cea153ac13f"/><file name="buttons.gif" hash="0cd19a9d9178976906161ea100cba958"/><file name="cart.png" hash="815b4c64fae21b4c162525ece76dc44d"/><file name="home.png" hash="9e473791b022b7c2dfc7d29b1b6de887"/><file name="image-bg.png" hash="14bde5cf8b00dc5f6c60e52a0fa964dc"/><file name="logo-small.png" hash="9b3477a4552bcb878b4943aae5351622"/><file name="rowBgIcon.gif" hash="9ee89b961ae2bb047672ba5d2d2677c6"/><file name="search.png" hash="10bfa7ec3361ce7cbcc5d25087f181eb"/><file name="shop.png" hash="e6639a9fdc143363da82a7d78e126f1c"/><file name="star-active.png" hash="d4ab959a92bda610527a3e3942c4c0b0"/><file name="star-inactive.png" hash="f7fb99710be4c03ac23b1206f20e761d"/><file name="tellAFriend.png" hash="46f8ef48b29f245977d66d9312d87e70"/><file name="viewDetails.png" hash="9bacc63bcc483d3db5614a026d9391f6"/><file name="viewGallery.png" hash="304f3d03949d07055bc056359fe17763"/></dir><dir name="gradients"><file name="footer.png" hash="31a2feed50ef9c8637b412c4211f8300"/><file name="header.png" hash="5386da930a944cd75562216249cce08a"/><file name="header2.png" hash="ad5a2dc6ec93914e925cfe2d43fb30a2"/><file name="header3.png" hash="920ad8c6903e90323a57fb02dca37280"/><file name="item-bg.png" hash="a14886d1f9e14284ac6b4f1b61e68646"/><file name="sort-bg.png" hash="b8053bb772e849909e5b87e4fd1ebbe4"/></dir><file name="grid.png" hash="23faa3f5572cdeb597c2bceedd93a7f8"/><dir name="icons"><file name="account.png" hash="0498d73e47ed47179e5546dc15c17dc7"/><file name="cart.png" hash="815b4c64fae21b4c162525ece76dc44d"/><file name="home.png" hash="9e473791b022b7c2dfc7d29b1b6de887"/><file name="more.png" hash="f3662ae29923b87eba3a729192aa3df3"/><file name="page.png" hash="2291d77f21de042040bc0864be40138b"/><file name="search.png" hash="10bfa7ec3361ce7cbcc5d25087f181eb"/><file name="shop.png" hash="e6639a9fdc143363da82a7d78e126f1c"/></dir><file name="image-bg.png" hash="a588b9cced95a25fc18e28c775d9a001"/><file name="info.png" hash="3f0d2ed85b81e8251f294457c6bfa404"/><dir name="ipad"><file name="background_home_landscape.jpg" hash="9e3ef117985113b804531142d539b60a"/><file name="background_portrait.jpg" hash="bdf9e034fd30b923086e6c622ea10451"/><file name="banner_image.png" hash="693bb9d118155a146b21ce9fcfba08da"/><file name="banner_image_l.png" hash="a070a40d57610b5cc7160fe894482a1c"/><file name="bg_catalog_header_hor.png" hash="f61a67aa288e1b8a8df7b4d4527c662e"/><file name="bg_content.jpg" hash="70ddfc8959d878d1231dc7cbee4a063c"/><file name="bg_filter_button.png" hash="728f1cd358446881ffd863eff12204a1"/><file name="bg_filters_buttons.png" hash="02fcb0ed7a7268e9f64ebaf06235bc09"/><file name="bg_filters_tooltip.png" hash="3b05ca6e585acd3d766be01eeaa23d47"/><file name="bg_filters_wrap.png" hash="31288784fe95c67de9b45b44458b4155"/><file name="bg_header.png" hash="e2cf5a575a27e6e4533e3c85e3472a82"/><file name="bg_home_content.jpg" hash="1d55a198279e4f2b163c98c18f699646"/><file name="bg_home_header.png" hash="00f2fbf96d2b915dcbcd921b0301ef3f"/><file name="bg_home_header_hor.png" hash="9bfef728ece003d5b3433d2623ea168c"/><file name="bg_home_products.png" hash="ac6a8a79b959a0c8298b1f607c0f0af8"/><file name="bg_home_shadow.png" hash="c54b071ca3e97a6ee67588ef74b7b44e"/><file name="bg_home_shadow_hor.png" hash="0d21a99c5c749d0e5070e3585ff4a23f"/><file name="bg_product_image.png" hash="4da74325c1a4ee1ca19b414e5d590f75"/><file name="bg_search.png" hash="6ee08d05d0c4ef9ed64b9914b821f408"/><file name="bg_sections.jpg" hash="0ee90005663aced09a9ce6385bdbce2c"/><file name="bg_status_bar.png" hash="17124d9d392bb8e37b202c80a595df54"/><file name="bg_status_bar_hor.png" hash="bd4a9f11ecb1c896145267731d8a951d"/><file name="i_cart.png" hash="1bbe0a0e54eed5bb14b9bfcce83da758"/><file name="i_info.png" hash="3f0fda8b294b67bf698badbcaa99150b"/><file name="i_login.png" hash="deb4089bdc61582c78c90ef192d577e8"/><file name="i_remove.png" hash="4923eb5e76b3c6ba6df5c667db816a0c"/><file name="logo.png" hash="49c19f59b459b6c0b3b99daa3fe7f932"/><file name="logo_big.png" hash="693bb9d118155a146b21ce9fcfba08da"/><file name="product_image.jpg" hash="2bb6c69129bcb18dc93e9f48605647c6"/><file name="sections_arrow.png" hash="7db7144083a31882e8a62cb9579f478f"/><file name="stars.png" hash="70d38cd9883d70e4f6b21ac4874b9868"/></dir><file name="lightStar.png" hash="b5dc40d5b793dae6a069357f49cccc24"/><file name="lightStar2.png" hash="75928926a6112540c9cb073157cb7d95"/><file name="lines-h.png" hash="ea3d95812c9838affc6df2f3a3cb1977"/><file name="lines-v.png" hash="9e3ffee29ba28477d50da9642019bc0a"/><file name="login-btn-left-alt.png" hash="71bb6c7d24252aace27bee711d7616f4"/><file name="login-btn-left.png" hash="cbbf9afc6e9fc433f57270e88b63f351"/><file name="login-btn-right.png" hash="438fcc598d012bf6d33184e95accfd24"/><file name="login-btn.png" hash="051ee2c1a8ce3f7b8de3293cd2e2ed85"/><file name="logo-small.png" hash="9b3477a4552bcb878b4943aae5351622"/><file name="logo_25.png" hash="ba41ed568d916175c32803b614442447"/><file name="men.png" hash="46d7d1773118ef0a27353e8a9f6719fe"/><file name="mm-frame.gif" hash="eebf30806f1dbf2118e7ec39a016c86d"/><file name="mobile-catalog.css" hash="cfcfc3b0785a57b707731b661d4d559b"/><file name="mobile-home.css" hash="3dd556688b8c578be295b16ebba934b5"/><file name="rowBgIcon.gif" hash="9ee89b961ae2bb047672ba5d2d2677c6"/><dir name="slider"><file name="actionsBg.jpg" hash="ee3db742cbec9a436ba46118c8a01303"/><file name="addToCart.png" hash="2a146be4bc63713df19cc353e030d44f"/><file name="addToWishlist.png" hash="9b23a4e0d9acfc79f314e9082f14c4de"/><file name="tellAFriend.png" hash="b7600fa2ae52bdb1d6bb86fe4d9f1773"/><file name="viewDetails.png" hash="90cf37c6dbbee1861350b4c05469e3ae"/><file name="viewGallery.png" hash="304f3d03949d07055bc056359fe17763"/></dir><file name="slider.gif" hash="c6b87bf15b85b18c0515e2cbefaabe60"/><file name="smallIcon.png" hash="e76d2a6364042f41b3f35fc8cdc9c0ee"/><dir name="sort_buttons"><file name="bg_button.png" hash="87d0f1b123f01c3aea3cb8a2b146306e"/><file name="button_up.gif" hash="7ad527f99b9975d5634fb2d5cc99e6b3"/><file name="buttons.gif" hash="2f14f1a3f0fb38790779c992a58654ae"/><file name="buttons.png" hash="b4a3f17370e03bf5d2a5cdf7800c25a7"/><file name="center-active.png" hash="5903988cd458cd794f23a212d51aa725"/><file name="center-inactive.png" hash="135b46aaa5c3b131a5a7e9c45c004e06"/><file name="filters.png" hash="3837ab6fcfe959833dd998533db1ca7f"/><file name="left-active.png" hash="86e94441b96a0d27d0b0a7e5108f86ed"/><file name="left-inactive.png" hash="0ddcb75aa9971cca39a5a65b4bdff8c4"/><file name="right-active.png" hash="320740ff608187301b06a96eab2f9e8e"/><file name="right-inactive.png" hash="cac4b39ab380353ffd5fdbcedb6e0a0a"/></dir><file name="star-active.png" hash="d4ab959a92bda610527a3e3942c4c0b0"/><file name="star-inactive.png" hash="f7fb99710be4c03ac23b1206f20e761d"/><file name="t-shirt.gif" hash="7505efdaabf13c4f8e26f7cfe15c8c96"/><file name="t-shirt.png" hash="46d7d1773118ef0a27353e8a9f6719fe"/><file name="women.png" hash="46d7d1773118ef0a27353e8a9f6719fe"/><file name="youth.png" hash="46d7d1773118ef0a27353e8a9f6719fe"/></dir></dir><file name="dropdown-arrow.gif" hash="332e99ca6b4d1e0d39972e04fb0b2395"/><file name="empty.png" hash="23dc9dc3c4751f83c2df7a5c42668824"/><file name="full-arrow-left.gif" hash="8ec91b60d38d1a16cba7670f2088a5c7"/><file name="full-arrow.gif" hash="36ddff0fca1c7d8900cb3633e0a30cea"/><file name="gel_green.png" hash="591959d831e8e42c9175d12a88f0bae2"/><file name="gel_red.png" hash="db442c023014df9da32b84bc1bb5a39f"/><file name="l-arrow.gif" hash="ee49f7eab64657b5131953acef0238fd"/><file name="loading.gif" hash="5d25806dac7cbee5f894b13144783866"/><file name="r-arrow.gif" hash="d0429a9781e915fc9d9ca8875c470d32"/><file name="remove.png" hash="ee9497c5f31933eaab3e9e352495ee12"/><file name="small_logo.gif" hash="d5c8be7c0f16aac2549759c0228492d6"/><file name="swatch_black.gif" hash="fd31d6a3a435c8ad1f7c43f346bb47e4"/><file name="swatch_custom.gif" hash="fb34791a48366957a141e12b563888c2"/><file name="swatch_default.gif" hash="fb34791a48366957a141e12b563888c2"/><file name="swatch_funk_leaf.gif" hash="f1d3ba87efb742b47da879a6f48909c4"/><file name="swatch_hot_red.gif" hash="d9363d45dc2993c2fdc3ea43c5b6f71c"/><file name="swatch_sky_blue.gif" hash="ded1455db119d09a3aedd7474fd1875a"/><file name="swatch_user_custom.gif" hash="a24f31421a1ff56d1be0845f9a7c7020"/><file name="switch-arrow.gif" hash="dc7243962b341f366cd072d486687e6a"/><file name="tab_account.png" hash="27101fbaa78a07426be4768acc4c53ff"/><file name="tab_account_android.png" hash="77605cbc87f75ca17e91a5393765ceb1"/><file name="tab_account_ipad.png" hash="2997de5402195d0720309b73c6446fab"/><file name="tab_cart.png" hash="e803f760ee81cb35183f1122f388b774"/><file name="tab_cart_android.png" hash="477e97f8d03ea8aa674e952709f86578"/><file name="tab_empty.png" hash="bdd4cc355566e8861b2c45424ad94516"/><file name="tab_home.png" hash="dfa104e4da74e4a55d3c98d6ee0f7122"/><file name="tab_home_active.png" hash="bba5eb9bb724c84c1ede9e6f4bec3575"/><file name="tab_home_android.png" hash="1fefc6b070cc21b31b43194a7d85f9d9"/><file name="tab_info_android.png" hash="67fc19d8d926f7aede482f5a7083fc71"/><file name="tab_more.png" hash="2803359cb3e795bf67457e727aa16020"/><file name="tab_page.png" hash="ca05dbc42f944b8d4255f6675f6dd93a"/><file name="tab_search.png" hash="2cf29dbe325558353621b4241543204f"/><file name="tab_search_android.png" hash="932c2c568872fd9e119367c887f0539a"/><file name="tab_shop.png" hash="f36be0d3d27f2b37626247d3f6a55e2a"/><file name="tab_shop_active.png" hash="de907d6a52d477d4319649f9b0e2e4aa"/><file name="tab_shop_android.png" hash="e119fcd20f8cba856d550a64d775ddbb"/><file name="tmp-icon.gif" hash="58b759aecf3bdae26d5aaff7a0be5c90"/><file name="xmlconnect_tab.png" hash="cd99a7e01a42a6c82d866f7684faeb95"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="xmlconnect"><dir><dir name="catalog"><dir name="category"><dir name="placeholder"><file name="image.jpg" hash="097ab8a3051bc037ea3de0e17f440540"/><file name="small_image.jpg" hash="f825d16f97a640453553c79c48ebaa73"/><file name="thumbnail.jpg" hash="b2b682d28a08a748a73d2cda70ab5a57"/></dir></dir></dir></dir><file name="tab_account.png" hash="0498d73e47ed47179e5546dc15c17dc7"/><file name="tab_cart.png" hash="9055ba76e256a51d3fee53a8c41d5226"/><file name="tab_home.png" hash="07d0af93e167b9366d3d4fb3d6cdb31c"/><file name="tab_more.png" hash="b9fc21feb8d7655bc9c2985c37b0de2f"/><file name="tab_page.png" hash="ca05dbc42f944b8d4255f6675f6dd93a"/><file name="tab_search.png" hash="25e880eb2a4d06828e2e1c3f32d22400"/><file name="tab_shop.png" hash="fe602fc2e7093efef5ecc0b027a32d91"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="jscolor"><file name="arrow.gif" hash="5034704a76cd55c1cbcbc58ea6bf523f"/><file name="cross.gif" hash="ba9a274b9323753cd95bc3b1eb2f4e5f"/><file name="demo.html" hash="edf71251cb2be20322d2efb00aee86a6"/><file name="hs.png" hash="fefa1a03d92ebad25c88dca94a0b63db"/><file name="hv.png" hash="990d71cada17da100653636cf8490884"/><file name="jscolor.js" hash="b65a1505390592ac6c0177d6b84774e0"/></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
diff --git a/var/package/Phoenix_Moneybookers-1.9.3.10.xml b/var/package/Phoenix_Moneybookers-1.9.3.10.xml
deleted file mode 100644
index 301cd24..0000000
--- a/var/package/Phoenix_Moneybookers-1.9.3.10.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0"?>
-<package>
-    <name>Phoenix_Moneybookers</name>
-    <version>1.9.3.10</version>
-    <stability>stable</stability>
-    <license>mixed</license>
-    <channel>community</channel>
-    <extends/>
-    <summary>Moneybookers payment gateway integration</summary>
-    <description>Moneybookers payment gateway official integration, implemented by Phoenix Medien GmbH. Provides integration for payment options powered by Moneybookers, as separate payment methods:
-All Credit Cards / Visa, Mastercard, AMEX, JCB, Diners - International
-CartaSi - Italy
-Lastschrift (ELV) - Germany
-Dankort - Denmark
-Nordea Solo - Sweden
-eNETS - Singapore
-Carte Bleue - France
-Giropay - Germany
-iDeal - Netherlands
-Laser - Ireland
-EPS Online-&#xDC;berweisung - Austria
-POLi - Australia
-Postepay - Italy
-Przelewy24 - Poland
-Sofort&#xFC;berweisung - Germany
-Nordea Solo - Finland
-Moneybookers eWallet</description>
-    <notes>1.9.3.10</notes>
-    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
-    <date>2018-08-17</date>
-    <time>11:00:30</time>
-    <contents><target name="magecommunity"><dir name="Phoenix"><dir name="Moneybookers"><dir name="Block"><file name="Form.php" hash="eeb9f4cbf40ad3f8ea246949df42f20f"/><file name="Info.php" hash="60f403368d869fb9bf981481183caf81"/><file name="Jsinit.php" hash="57b2647a06c41529a39fbb8267304426"/><file name="Payment.php" hash="3241b0e2e8fd1044e99b26d4417fb896"/><file name="Placeform.php" hash="55cdc50e646485e6add807906edfd9bd"/><file name="Redirect.php" hash="a74bdf41523e0f5b7f112a672bc35c0f"/></dir><dir name="Helper"><file name="Data.php" hash="405dd62f4d5034fbdd50c97c5811198a"/></dir><dir name="Model"><file name="Abstract.php" hash="a2183c3e41570d18d3fb15622f849e54"/><file name="Acc.php" hash="b336c73a891716054e731cfab7f8b82f"/><file name="Csi.php" hash="6d1bc7db413067924845ede03ef471e3"/><file name="Did.php" hash="5ecd119d337421684527d4cf6325626a"/><file name="Dnk.php" hash="81b6e59112fc18529ecfae11be4c2ade"/><file name="Ebt.php" hash="0495a2003b91cf1a618539754e721e92"/><file name="Ent.php" hash="99b33941105262ea72cf542264c25299"/><file name="Event.php" hash="8b541b7549244a79b582c63ae258016d"/><file name="Gcb.php" hash="da261d1db5ad469514d64ea5294f0b44"/><file name="Gir.php" hash="ccd8d7f1156367b82de68c495f4577e7"/><file name="Idl.php" hash="420ad97f061ccccd7649dfbd173d7b58"/><file name="Lsr.php" hash="f25ec4b47251ea8169df227a476a0475"/><file name="Mae.php" hash="438caefcb78939ea0bd484103bed860b"/><file name="Npy.php" hash="a6b60d739312b6f6c3e53060c1db0fe4"/><file name="Obt.php" hash="0e54d523afa9e0638d95e76742bc475b"/><file name="Pli.php" hash="be52cfaf911d86185da583ecd2433173"/><file name="Psp.php" hash="b8dcb8feb62b25b57982bfb23fc8d17d"/><file name="Pwy.php" hash="a5fa1665f2acf05775bb8dcdca99438f"/><file name="Sft.php" hash="5330414049131f7c889b4d7f6b95f18c"/><file name="So2.php" hash="dcc30139c5758812c42d1e90b5af5c83"/><file name="Wlt.php" hash="2fa4aafc62988eb84d2764922a23a5f5"/></dir><dir name="controllers"><file name="MoneybookersController.php" hash="bcc56ba3c6792864ba14fb8908762736"/><file name="ProcessingController.php" hash="c0550d579088c6c0c082c95f7c8899e8"/></dir><dir name="etc"><file name="config.xml" hash="dac9f28a414ad9bf9cd029e5f0ad1c79"/><file name="system.xml" hash="00d8a898760e1a18870f08cec00e9342"/></dir><dir name="sql"><dir name="moneybookers_setup"><file name="install-1.6.0.0.php" hash="15cfc5aa9d469e45eb276d5eb5226116"/><file name="mysql4-upgrade-1.2-1.2.0.1.php" hash="33737aa54286d733e363cc94b12aefba"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Phoenix_Moneybookers.xml" hash="a0715f3a3f42397529d8952ee1c03491"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="moneybookers"><file name="info.phtml" hash="a630df889916a60485b8f95a034888f7"/><file name="jsinit.phtml" hash="410d8d395f085fa8d305dafc25c0593b"/><dir name="pdf"><file name="info.phtml" hash="3cb1f4ba8ba6d8fefb9f3103115a059a"/></dir></dir></dir><dir name="layout"><file name="moneybookers.xml" hash="16ab3cdfd84ecac3bd2707d577a7625c"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="moneybookers"><file name="blank.phtml" hash="d9f6fea50514645e5b55ed217c58b603"/><file name="form.phtml" hash="8b2d2d8a0798aeb04584a1691f483c7c"/><file name="info.phtml" hash="54f4bed61d0540555616d3f586491503"/><file name="payment.phtml" hash="57cdfee41897ee704578d5321e0f3e6a"/><file name="placeform.phtml" hash="85abb1fb706056a43c400ee9f4a2a3fb"/><file name="redirect.phtml" hash="a17c5ed6c574f55f46e16f756b0df224"/></dir></dir><dir name="layout"><file name="moneybookers.xml" hash="773b844ae29d9eeadbd5e16a9744084b"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Phoenix_Moneybookers.csv" hash="c92cee5c0ca36fdedfbab70e95a91983"/><dir name="template"><dir name="email"><file name="moneybookers_activateemail.html" hash="035d73b26c54c8042e03e7551df49457"/></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="moneybookers"><file name="banner_120_de.gif" hash="74815117bf378543e5b3496bb5bc4e8a"/><file name="banner_120_de.png" hash="6c3f708fcb6dac92e53472d4c2246c68"/><file name="banner_120_dk.gif" hash="2106bd994d188d40474bf2a2e8d62a8d"/><file name="banner_120_fr.gif" hash="a84241eef7bc38fb38567e7aa8ca245a"/><file name="banner_120_fr.png" hash="8994d1dc3b4f5c9e5efc67ce3f9f55a9"/><file name="banner_120_int.gif" hash="e23ddcf71e15f0a9300062ef9cdea512"/><file name="banner_120_int.png" hash="f9dfbc26041e52b34eea65348707d64f"/><file name="banner_120_pl.gif" hash="44313c7d27cdcf59c2f66708c6c5abd5"/><file name="banner_120_pl.png" hash="67d3385f93bc9113880305ee7c7da9de"/><file name="banner_120_sp.gif" hash="a003ed8db63620672ae945682b1e1e39"/><file name="banner_120_sp.png" hash="f9c4a653d6814ab3f8c535da706f5f77"/><file name="moneybookers_acc.png" hash="a3e639a68fafdffaca81e91985127735"/><file name="moneybookers_csi.gif" hash="4eec4ed7c494d01d518a3c6c691128e9"/><file name="moneybookers_did.gif" hash="6a3a3365894e9cdb199647a5b74ba35b"/><file name="moneybookers_dnk.gif" hash="7d4b8d27784f8a6fa6ef81c4e911831b"/><file name="moneybookers_ebt.gif" hash="9911d8cc223e7f3d9ec12f50c280ec61"/><file name="moneybookers_ent.gif" hash="704e9551ed4aff82b67114242b9fba1a"/><file name="moneybookers_gcb.gif" hash="e2e7c0f501e5ab0136f859ca5f57abc2"/><file name="moneybookers_gir.gif" hash="f16e949bc60bbd812f803d5e377d47f6"/><file name="moneybookers_idl.gif" hash="fe0ad1efc12d43df6c9ff3ffdd9dd59b"/><file name="moneybookers_lsr.gif" hash="58cdadfa20b6d37aeaa19e50995e4baf"/><file name="moneybookers_mae.gif" hash="4d4b5f0cf3377939c7738fc7e416d25f"/><file name="moneybookers_npy.gif" hash="01242c5ad7bc667e7493b550b6397fab"/><file name="moneybookers_obt_de.png" hash="ce44fd2974b8d279401778292e2c4484"/><file name="moneybookers_obt_dk.png" hash="2985e8cb472d1886d584fa31d56bee92"/><file name="moneybookers_obt_ee.png" hash="cb186be1c7595544f61d3737c7bf85aa"/><file name="moneybookers_obt_en.png" hash="eee098a06e3ea34f33e276724b084774"/><file name="moneybookers_obt_fl.png" hash="6c3766df052d875ce399e62ad8a435f8"/><file name="moneybookers_obt_lt.png" hash="adf61f248fc6d5985840db3e0c23391e"/><file name="moneybookers_obt_lv.png" hash="4e7f16b4988ea30f049942d4dcdb5f78"/><file name="moneybookers_obt_pl.png" hash="fb2c43c18ba73d390e5b5f5261261f4a"/><file name="moneybookers_obt_se.png" hash="9028412e9c3f25d114bf40bb2049d225"/><file name="moneybookers_pli.gif" hash="93989e85caff760af7a61838db0300bf"/><file name="moneybookers_psp.gif" hash="7abffc2246f172625be2ce31f4315cb2"/><file name="moneybookers_pwy.gif" hash="b4a0b9db9a031855e6e3899592012fae"/><file name="moneybookers_sft.gif" hash="e9e774163c99a8ab4deb18d37feaf658"/><file name="moneybookers_so2.gif" hash="9911d8cc223e7f3d9ec12f50c280ec61"/><file name="moneybookers_wlt.gif" hash="4b9cbc5aa5c32f3015ce7bec98da2670"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="images"><dir name="moneybookers"><file name="banner.jpg" hash="382b1eea5550ce6c1b88cd4444058362"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="mage"><dir name="adminhtml"><file name="moneybookers.js" hash="c9581fb17c9aa5d406c698788336cebd"/></dir></dir></dir></target></contents>
-    <compatible/>
-    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.3.10</min><max>1.9.3.10</max></package></required></dependencies>
-</package>
diff --git a/var/package/Phoenix_Moneybookers-1.9.4.0.xml b/var/package/Phoenix_Moneybookers-1.9.4.0.xml
new file mode 100644
index 0000000..7d0fbf0
--- /dev/null
+++ b/var/package/Phoenix_Moneybookers-1.9.4.0.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0"?>
+<package>
+    <name>Phoenix_Moneybookers</name>
+    <version>1.9.4.0</version>
+    <stability>stable</stability>
+    <license>mixed</license>
+    <channel>community</channel>
+    <extends/>
+    <summary>Moneybookers payment gateway integration</summary>
+    <description>Moneybookers payment gateway official integration, implemented by Phoenix Medien GmbH. Provides integration for payment options powered by Moneybookers, as separate payment methods:
+All Credit Cards / Visa, Mastercard, AMEX, JCB, Diners - International
+CartaSi - Italy
+Lastschrift (ELV) - Germany
+Dankort - Denmark
+Nordea Solo - Sweden
+eNETS - Singapore
+Carte Bleue - France
+Giropay - Germany
+iDeal - Netherlands
+Laser - Ireland
+EPS Online-&#xDC;berweisung - Austria
+POLi - Australia
+Postepay - Italy
+Przelewy24 - Poland
+Sofort&#xFC;berweisung - Germany
+Nordea Solo - Finland
+Moneybookers eWallet</description>
+    <notes>1.9.4.0</notes>
+    <authors><author><name>Magento Core Team</name><user>core</user><email>core@magentocommerce.com</email></author></authors>
+    <date>2018-11-23</date>
+    <time>15:32:13</time>
+    <contents><target name="magecommunity"><dir name="Phoenix"><dir name="Moneybookers"><dir name="Block"><file name="Form.php" hash="eeb9f4cbf40ad3f8ea246949df42f20f"/><file name="Info.php" hash="60f403368d869fb9bf981481183caf81"/><file name="Jsinit.php" hash="57b2647a06c41529a39fbb8267304426"/><file name="Payment.php" hash="3241b0e2e8fd1044e99b26d4417fb896"/><file name="Placeform.php" hash="55cdc50e646485e6add807906edfd9bd"/><file name="Redirect.php" hash="a74bdf41523e0f5b7f112a672bc35c0f"/></dir><dir name="Helper"><file name="Data.php" hash="405dd62f4d5034fbdd50c97c5811198a"/></dir><dir name="Model"><file name="Abstract.php" hash="a2183c3e41570d18d3fb15622f849e54"/><file name="Acc.php" hash="b336c73a891716054e731cfab7f8b82f"/><file name="Csi.php" hash="6d1bc7db413067924845ede03ef471e3"/><file name="Did.php" hash="5ecd119d337421684527d4cf6325626a"/><file name="Dnk.php" hash="81b6e59112fc18529ecfae11be4c2ade"/><file name="Ebt.php" hash="0495a2003b91cf1a618539754e721e92"/><file name="Ent.php" hash="99b33941105262ea72cf542264c25299"/><file name="Event.php" hash="8b541b7549244a79b582c63ae258016d"/><file name="Gcb.php" hash="da261d1db5ad469514d64ea5294f0b44"/><file name="Gir.php" hash="ccd8d7f1156367b82de68c495f4577e7"/><file name="Idl.php" hash="420ad97f061ccccd7649dfbd173d7b58"/><file name="Lsr.php" hash="f25ec4b47251ea8169df227a476a0475"/><file name="Mae.php" hash="438caefcb78939ea0bd484103bed860b"/><file name="Npy.php" hash="a6b60d739312b6f6c3e53060c1db0fe4"/><file name="Obt.php" hash="0e54d523afa9e0638d95e76742bc475b"/><file name="Pli.php" hash="be52cfaf911d86185da583ecd2433173"/><file name="Psp.php" hash="b8dcb8feb62b25b57982bfb23fc8d17d"/><file name="Pwy.php" hash="a5fa1665f2acf05775bb8dcdca99438f"/><file name="Sft.php" hash="5330414049131f7c889b4d7f6b95f18c"/><file name="So2.php" hash="dcc30139c5758812c42d1e90b5af5c83"/><file name="Wlt.php" hash="2fa4aafc62988eb84d2764922a23a5f5"/></dir><dir name="controllers"><file name="MoneybookersController.php" hash="bcc56ba3c6792864ba14fb8908762736"/><file name="ProcessingController.php" hash="c0550d579088c6c0c082c95f7c8899e8"/></dir><dir name="etc"><file name="config.xml" hash="dac9f28a414ad9bf9cd029e5f0ad1c79"/><file name="system.xml" hash="00d8a898760e1a18870f08cec00e9342"/></dir><dir name="sql"><dir name="moneybookers_setup"><file name="install-1.6.0.0.php" hash="15cfc5aa9d469e45eb276d5eb5226116"/><file name="mysql4-upgrade-1.2-1.2.0.1.php" hash="33737aa54286d733e363cc94b12aefba"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Phoenix_Moneybookers.xml" hash="a0715f3a3f42397529d8952ee1c03491"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="moneybookers"><file name="info.phtml" hash="a630df889916a60485b8f95a034888f7"/><file name="jsinit.phtml" hash="410d8d395f085fa8d305dafc25c0593b"/><dir name="pdf"><file name="info.phtml" hash="3cb1f4ba8ba6d8fefb9f3103115a059a"/></dir></dir></dir><dir name="layout"><file name="moneybookers.xml" hash="16ab3cdfd84ecac3bd2707d577a7625c"/></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="template"><dir name="moneybookers"><file name="blank.phtml" hash="d9f6fea50514645e5b55ed217c58b603"/><file name="form.phtml" hash="8b2d2d8a0798aeb04584a1691f483c7c"/><file name="info.phtml" hash="54f4bed61d0540555616d3f586491503"/><file name="payment.phtml" hash="57cdfee41897ee704578d5321e0f3e6a"/><file name="placeform.phtml" hash="85abb1fb706056a43c400ee9f4a2a3fb"/><file name="redirect.phtml" hash="a17c5ed6c574f55f46e16f756b0df224"/></dir></dir><dir name="layout"><file name="moneybookers.xml" hash="773b844ae29d9eeadbd5e16a9744084b"/></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Phoenix_Moneybookers.csv" hash="c92cee5c0ca36fdedfbab70e95a91983"/><dir name="template"><dir name="email"><file name="moneybookers_activateemail.html" hash="035d73b26c54c8042e03e7551df49457"/></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="images"><dir name="moneybookers"><file name="banner_120_de.gif" hash="74815117bf378543e5b3496bb5bc4e8a"/><file name="banner_120_de.png" hash="6c3f708fcb6dac92e53472d4c2246c68"/><file name="banner_120_dk.gif" hash="2106bd994d188d40474bf2a2e8d62a8d"/><file name="banner_120_fr.gif" hash="a84241eef7bc38fb38567e7aa8ca245a"/><file name="banner_120_fr.png" hash="8994d1dc3b4f5c9e5efc67ce3f9f55a9"/><file name="banner_120_int.gif" hash="e23ddcf71e15f0a9300062ef9cdea512"/><file name="banner_120_int.png" hash="f9dfbc26041e52b34eea65348707d64f"/><file name="banner_120_pl.gif" hash="44313c7d27cdcf59c2f66708c6c5abd5"/><file name="banner_120_pl.png" hash="67d3385f93bc9113880305ee7c7da9de"/><file name="banner_120_sp.gif" hash="a003ed8db63620672ae945682b1e1e39"/><file name="banner_120_sp.png" hash="f9c4a653d6814ab3f8c535da706f5f77"/><file name="moneybookers_acc.png" hash="a3e639a68fafdffaca81e91985127735"/><file name="moneybookers_csi.gif" hash="4eec4ed7c494d01d518a3c6c691128e9"/><file name="moneybookers_did.gif" hash="6a3a3365894e9cdb199647a5b74ba35b"/><file name="moneybookers_dnk.gif" hash="7d4b8d27784f8a6fa6ef81c4e911831b"/><file name="moneybookers_ebt.gif" hash="9911d8cc223e7f3d9ec12f50c280ec61"/><file name="moneybookers_ent.gif" hash="704e9551ed4aff82b67114242b9fba1a"/><file name="moneybookers_gcb.gif" hash="e2e7c0f501e5ab0136f859ca5f57abc2"/><file name="moneybookers_gir.gif" hash="f16e949bc60bbd812f803d5e377d47f6"/><file name="moneybookers_idl.gif" hash="fe0ad1efc12d43df6c9ff3ffdd9dd59b"/><file name="moneybookers_lsr.gif" hash="58cdadfa20b6d37aeaa19e50995e4baf"/><file name="moneybookers_mae.gif" hash="4d4b5f0cf3377939c7738fc7e416d25f"/><file name="moneybookers_npy.gif" hash="01242c5ad7bc667e7493b550b6397fab"/><file name="moneybookers_obt_de.png" hash="ce44fd2974b8d279401778292e2c4484"/><file name="moneybookers_obt_dk.png" hash="2985e8cb472d1886d584fa31d56bee92"/><file name="moneybookers_obt_ee.png" hash="cb186be1c7595544f61d3737c7bf85aa"/><file name="moneybookers_obt_en.png" hash="eee098a06e3ea34f33e276724b084774"/><file name="moneybookers_obt_fl.png" hash="6c3766df052d875ce399e62ad8a435f8"/><file name="moneybookers_obt_lt.png" hash="adf61f248fc6d5985840db3e0c23391e"/><file name="moneybookers_obt_lv.png" hash="4e7f16b4988ea30f049942d4dcdb5f78"/><file name="moneybookers_obt_pl.png" hash="fb2c43c18ba73d390e5b5f5261261f4a"/><file name="moneybookers_obt_se.png" hash="9028412e9c3f25d114bf40bb2049d225"/><file name="moneybookers_pli.gif" hash="93989e85caff760af7a61838db0300bf"/><file name="moneybookers_psp.gif" hash="7abffc2246f172625be2ce31f4315cb2"/><file name="moneybookers_pwy.gif" hash="b4a0b9db9a031855e6e3899592012fae"/><file name="moneybookers_sft.gif" hash="e9e774163c99a8ab4deb18d37feaf658"/><file name="moneybookers_so2.gif" hash="9911d8cc223e7f3d9ec12f50c280ec61"/><file name="moneybookers_wlt.gif" hash="4b9cbc5aa5c32f3015ce7bec98da2670"/></dir></dir></dir></dir></dir><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="images"><dir name="moneybookers"><file name="banner.jpg" hash="382b1eea5550ce6c1b88cd4444058362"/></dir></dir></dir></dir></dir></target><target name="mageweb"><dir name="js"><dir name="mage"><dir name="adminhtml"><file name="moneybookers.js" hash="c9581fb17c9aa5d406c698788336cebd"/></dir></dir></dir></target></contents>
+    <compatible/>
+    <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><package><name>Mage_Core_Modules</name><channel>community</channel><min>1.9.4.0</min><max>1.9.4.0</max></package></required></dependencies>
+</package>
