diff --git a/composer.lock b/composer.lock
index 8460ee826d5b23a8c913c694127466fc717960d5..cd5fe0287766a545bed58973f742a7f2ffe9b7ba 100644
--- a/composer.lock
+++ b/composer.lock
@@ -137,16 +137,16 @@
         },
         {
             "name": "ocramius/proxy-manager",
-            "version": "0.5.2",
+            "version": "1.0.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Ocramius/ProxyManager.git",
-                "reference": "0ac0eb3e8e04c7fa75caaf1a43c5405623abf8f5"
+                "reference": "a80a39fac4fbd771aea7d3871929933a3a1bbf3e"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/0ac0eb3e8e04c7fa75caaf1a43c5405623abf8f5",
-                "reference": "0ac0eb3e8e04c7fa75caaf1a43c5405623abf8f5",
+                "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/a80a39fac4fbd771aea7d3871929933a3a1bbf3e",
+                "reference": "a80a39fac4fbd771aea7d3871929933a3a1bbf3e",
                 "shasum": ""
             },
             "require": {
@@ -168,7 +168,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "0.6.x-dev"
+                    "dev-master": "2.0.x-dev"
                 }
             },
             "autoload": {
@@ -196,7 +196,7 @@
                 "proxy pattern",
                 "service proxies"
             ],
-            "time": "2014-09-28 14:18:11"
+            "time": "2014-12-12 10:59:05"
         },
         {
             "name": "oyejorge/less.php",
@@ -448,7 +448,7 @@
             "include-path": [
                 "/"
             ],
-            "description": "Package contains ISPN (International Standard Product Numbers) validations such as:\n * ISSN\n * ISBN\n * ISMN\n * ISRC (International Standard Recording Code)\n * EAN8\n * EAN13\n * EAN14\n * UCC12\n * SSCC"
+            "description": "Package containes ISPN (International Standard Product Numbers) validations such as:\n * ISSN\n * ISBN\n * ISMN\n * ISRC (International Standard Recording Code)\n * EAN8\n * EAN13\n * EAN14\n * UCC12\n * SSCC"
         },
         {
             "name": "pear-pear.php.net/XML_Util",
@@ -512,17 +512,17 @@
         },
         {
             "name": "symfony/yaml",
-            "version": "v2.5.6",
+            "version": "v2.6.1",
             "target-dir": "Symfony/Component/Yaml",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Yaml.git",
-                "reference": "2d9f527449cabfa8543dd7fa3a466d6ae83d6726"
+                "reference": "3346fc090a3eb6b53d408db2903b241af51dcb20"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Yaml/zipball/2d9f527449cabfa8543dd7fa3a466d6ae83d6726",
-                "reference": "2d9f527449cabfa8543dd7fa3a466d6ae83d6726",
+                "url": "https://api.github.com/repos/symfony/Yaml/zipball/3346fc090a3eb6b53d408db2903b241af51dcb20",
+                "reference": "3346fc090a3eb6b53d408db2903b241af51dcb20",
                 "shasum": ""
             },
             "require": {
@@ -531,7 +531,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.5-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -555,7 +555,7 @@
             ],
             "description": "Symfony Yaml Component",
             "homepage": "http://symfony.com",
-            "time": "2014-10-01 05:50:18"
+            "time": "2014-12-02 20:19:20"
         },
         {
             "name": "vufind-org/vufindcode",
@@ -1068,17 +1068,17 @@
         },
         {
             "name": "symfony/css-selector",
-            "version": "v2.5.6",
+            "version": "v2.6.1",
             "target-dir": "Symfony/Component/CssSelector",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/CssSelector.git",
-                "reference": "7cdf543a3f31935aae58de4e6e607d4bdeb3f5dc"
+                "reference": "93eb315b545b60a908271762fb4bfa1f9954b851"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/CssSelector/zipball/7cdf543a3f31935aae58de4e6e607d4bdeb3f5dc",
-                "reference": "7cdf543a3f31935aae58de4e6e607d4bdeb3f5dc",
+                "url": "https://api.github.com/repos/symfony/CssSelector/zipball/93eb315b545b60a908271762fb4bfa1f9954b851",
+                "reference": "93eb315b545b60a908271762fb4bfa1f9954b851",
                 "shasum": ""
             },
             "require": {
@@ -1087,7 +1087,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.5-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -1115,21 +1115,21 @@
             ],
             "description": "Symfony CssSelector Component",
             "homepage": "http://symfony.com",
-            "time": "2014-10-09 16:00:03"
+            "time": "2014-12-02 20:19:20"
         },
         {
             "name": "symfony/process",
-            "version": "v2.5.6",
+            "version": "v2.6.1",
             "target-dir": "Symfony/Component/Process",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony/Process.git",
-                "reference": "9bbacbb3a7a27b17c0d51e2f126f59e0e588ad3a"
+                "reference": "bf0c9bd625f13b0b0bbe39919225cf145dfb935a"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony/Process/zipball/9bbacbb3a7a27b17c0d51e2f126f59e0e588ad3a",
-                "reference": "9bbacbb3a7a27b17c0d51e2f126f59e0e588ad3a",
+                "url": "https://api.github.com/repos/symfony/Process/zipball/bf0c9bd625f13b0b0bbe39919225cf145dfb935a",
+                "reference": "bf0c9bd625f13b0b0bbe39919225cf145dfb935a",
                 "shasum": ""
             },
             "require": {
@@ -1138,7 +1138,7 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "2.5-dev"
+                    "dev-master": "2.6-dev"
                 }
             },
             "autoload": {
@@ -1162,7 +1162,7 @@
             ],
             "description": "Symfony Process Component",
             "homepage": "http://symfony.com",
-            "time": "2014-10-01 05:50:18"
+            "time": "2014-12-02 20:19:20"
         }
     ],
     "aliases": [],
diff --git a/vendor/autoload.php b/vendor/autoload.php
index 83ec3a8ef3e89f1bddad399f89afb8fdf2c534c5..dc9c17e67117ad3e5515ec44f1fa15471431da29 100644
--- a/vendor/autoload.php
+++ b/vendor/autoload.php
@@ -4,4 +4,4 @@
 
 require_once __DIR__ . '/composer' . '/autoload_real.php';
 
-return ComposerAutoloaderInitc4a65bc36a0c8ed2b8f3216ed09d18dc::getLoader();
+return ComposerAutoloaderInitf4acc9fe958f13f4ed1b60de39066403::getLoader();
diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php
index 443364959a541bf85ac0e77476f1ded4feb93747..4a56396af559e9917b4239e6c02f469a852a7a6c 100644
--- a/vendor/composer/ClassLoader.php
+++ b/vendor/composer/ClassLoader.php
@@ -56,7 +56,10 @@ class ClassLoader
 
     public function getPrefixes()
     {
-        return call_user_func_array('array_merge', $this->prefixesPsr0);
+        if (!empty($this->prefixesPsr0)) {
+            return call_user_func_array('array_merge', $this->prefixesPsr0);
+        }
+        return array();
     }
 
     public function getPrefixesPsr4()
diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php
index 269d2176092ca2000e3861c66f7d5ff94147fa55..ba171a1ff9fe147064b9216469839f8e20c81b2d 100644
--- a/vendor/composer/autoload_real.php
+++ b/vendor/composer/autoload_real.php
@@ -2,7 +2,7 @@
 
 // autoload_real.php @generated by Composer
 
-class ComposerAutoloaderInitc4a65bc36a0c8ed2b8f3216ed09d18dc
+class ComposerAutoloaderInitf4acc9fe958f13f4ed1b60de39066403
 {
     private static $loader;
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInitc4a65bc36a0c8ed2b8f3216ed09d18dc
             return self::$loader;
         }
 
-        spl_autoload_register(array('ComposerAutoloaderInitc4a65bc36a0c8ed2b8f3216ed09d18dc', 'loadClassLoader'), true, true);
+        spl_autoload_register(array('ComposerAutoloaderInitf4acc9fe958f13f4ed1b60de39066403', 'loadClassLoader'), true, true);
         self::$loader = $loader = new \Composer\Autoload\ClassLoader();
-        spl_autoload_unregister(array('ComposerAutoloaderInitc4a65bc36a0c8ed2b8f3216ed09d18dc', 'loadClassLoader'));
+        spl_autoload_unregister(array('ComposerAutoloaderInitf4acc9fe958f13f4ed1b60de39066403', 'loadClassLoader'));
 
         $includePaths = require __DIR__ . '/include_paths.php';
         array_push($includePaths, get_include_path());
@@ -48,7 +48,7 @@ class ComposerAutoloaderInitc4a65bc36a0c8ed2b8f3216ed09d18dc
     }
 }
 
-function composerRequirec4a65bc36a0c8ed2b8f3216ed09d18dc($file)
+function composerRequiref4acc9fe958f13f4ed1b60de39066403($file)
 {
     require $file;
 }
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 277252f985a01cdb1acd1fe510d6d73da3fd43f7..6618bffed0446e8c418311e3010d2712ecf8122f 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -790,71 +790,6 @@
             "issues": "https://github.com/zendframework/ZendService_ReCaptcha/issues"
         }
     },
-    {
-        "name": "ocramius/proxy-manager",
-        "version": "0.5.2",
-        "version_normalized": "0.5.2.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/Ocramius/ProxyManager.git",
-            "reference": "0ac0eb3e8e04c7fa75caaf1a43c5405623abf8f5"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/0ac0eb3e8e04c7fa75caaf1a43c5405623abf8f5",
-            "reference": "0ac0eb3e8e04c7fa75caaf1a43c5405623abf8f5",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.3",
-            "zendframework/zend-code": ">2.2.5,<3.0"
-        },
-        "require-dev": {
-            "ext-phar": "*",
-            "phpunit/phpunit": "~4.0",
-            "squizlabs/php_codesniffer": "1.5.*"
-        },
-        "suggest": {
-            "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects",
-            "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)",
-            "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)",
-            "zendframework/zend-stdlib": "To use the hydrator proxy",
-            "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)"
-        },
-        "time": "2014-09-28 14:18:11",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "0.6.x-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "ProxyManager\\": "src"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Marco Pivetta",
-                "email": "ocramius@gmail.com",
-                "homepage": "http://ocramius.github.com/"
-            }
-        ],
-        "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies",
-        "homepage": "https://github.com/Ocramius/ProxyManager",
-        "keywords": [
-            "aop",
-            "lazy loading",
-            "proxy",
-            "proxy pattern",
-            "service proxies"
-        ]
-    },
     {
         "name": "vufind-org/vufindhttp",
         "version": "v1.0.0",
@@ -942,35 +877,41 @@
         "description": "Class for representing ISBNs (a VuFind support library)"
     },
     {
-        "name": "symfony/yaml",
-        "version": "v2.5.6",
-        "version_normalized": "2.5.6.0",
-        "target-dir": "Symfony/Component/Yaml",
+        "name": "behat/mink",
+        "version": "v1.6.0",
+        "version_normalized": "1.6.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Yaml.git",
-            "reference": "2d9f527449cabfa8543dd7fa3a466d6ae83d6726"
+            "url": "https://github.com/Behat/Mink.git",
+            "reference": "090900a0049c441f1e072bbd837db4079b2250c5"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Yaml/zipball/2d9f527449cabfa8543dd7fa3a466d6ae83d6726",
-            "reference": "2d9f527449cabfa8543dd7fa3a466d6ae83d6726",
+            "url": "https://api.github.com/repos/Behat/Mink/zipball/090900a0049c441f1e072bbd837db4079b2250c5",
+            "reference": "090900a0049c441f1e072bbd837db4079b2250c5",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.1",
+            "symfony/css-selector": "~2.0"
         },
-        "time": "2014-10-01 05:50:18",
+        "suggest": {
+            "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
+            "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation",
+            "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)",
+            "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)"
+        },
+        "time": "2014-09-26 09:25:05",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.5-dev"
+                "dev-master": "1.6.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Symfony\\Component\\Yaml\\": ""
+                "Behat\\Mink": "src/"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -979,47 +920,121 @@
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
+                "name": "Konstantin Kudryashov",
+                "email": "ever.zet@gmail.com",
+                "homepage": "http://everzet.com"
+            }
+        ],
+        "description": "Web acceptance testing framework for PHP 5.3",
+        "homepage": "http://mink.behat.org/",
+        "keywords": [
+            "browser",
+            "testing",
+            "web"
+        ]
+    },
+    {
+        "name": "behat/mink-zombie-driver",
+        "version": "v1.2.0",
+        "version_normalized": "1.2.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/Behat/MinkZombieDriver.git",
+            "reference": "cf15a3a0cc4865bb55253cd033a03a20cee6d2d1"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/Behat/MinkZombieDriver/zipball/cf15a3a0cc4865bb55253cd033a03a20cee6d2d1",
+            "reference": "cf15a3a0cc4865bb55253cd033a03a20cee6d2d1",
+            "shasum": ""
+        },
+        "require": {
+            "behat/mink": "~1.6@dev",
+            "php": ">=5.3.1",
+            "symfony/process": "~2.1"
+        },
+        "time": "2014-09-26 12:26:25",
+        "type": "mink-driver",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.2.x-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-0": {
+                "Behat\\Mink\\Driver": "src/"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Konstantin Kudryashov",
+                "email": "ever.zet@gmail.com",
+                "homepage": "http://everzet.com"
             },
             {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Pascal Cremer",
+                "email": "b00gizm@gmail.com",
+                "homepage": "http://github.com/b00gizm"
             }
         ],
-        "description": "Symfony Yaml Component",
-        "homepage": "http://symfony.com"
+        "description": "Zombie.js driver for Mink framework",
+        "homepage": "http://mink.behat.org/",
+        "keywords": [
+            "ajax",
+            "browser",
+            "headless",
+            "javascript",
+            "testing",
+            "zombie"
+        ]
     },
     {
-        "name": "symfony/process",
-        "version": "v2.5.6",
-        "version_normalized": "2.5.6.0",
-        "target-dir": "Symfony/Component/Process",
+        "name": "ocramius/proxy-manager",
+        "version": "1.0.0",
+        "version_normalized": "1.0.0.0",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/Process.git",
-            "reference": "9bbacbb3a7a27b17c0d51e2f126f59e0e588ad3a"
+            "url": "https://github.com/Ocramius/ProxyManager.git",
+            "reference": "a80a39fac4fbd771aea7d3871929933a3a1bbf3e"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/Process/zipball/9bbacbb3a7a27b17c0d51e2f126f59e0e588ad3a",
-            "reference": "9bbacbb3a7a27b17c0d51e2f126f59e0e588ad3a",
+            "url": "https://api.github.com/repos/Ocramius/ProxyManager/zipball/a80a39fac4fbd771aea7d3871929933a3a1bbf3e",
+            "reference": "a80a39fac4fbd771aea7d3871929933a3a1bbf3e",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.3"
+            "php": ">=5.3.3",
+            "zendframework/zend-code": ">2.2.5,<3.0"
+        },
+        "require-dev": {
+            "ext-phar": "*",
+            "phpunit/phpunit": "~4.0",
+            "squizlabs/php_codesniffer": "1.5.*"
         },
-        "time": "2014-10-01 05:50:18",
+        "suggest": {
+            "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects",
+            "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)",
+            "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)",
+            "zendframework/zend-stdlib": "To use the hydrator proxy",
+            "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)"
+        },
+        "time": "2014-12-12 10:59:05",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.5-dev"
+                "dev-master": "2.0.x-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Symfony\\Component\\Process\\": ""
+                "ProxyManager\\": "src"
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -1028,47 +1043,51 @@
         ],
         "authors": [
             {
-                "name": "Symfony Community",
-                "homepage": "http://symfony.com/contributors"
-            },
-            {
-                "name": "Fabien Potencier",
-                "email": "fabien@symfony.com"
+                "name": "Marco Pivetta",
+                "email": "ocramius@gmail.com",
+                "homepage": "http://ocramius.github.com/"
             }
         ],
-        "description": "Symfony Process Component",
-        "homepage": "http://symfony.com"
+        "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies",
+        "homepage": "https://github.com/Ocramius/ProxyManager",
+        "keywords": [
+            "aop",
+            "lazy loading",
+            "proxy",
+            "proxy pattern",
+            "service proxies"
+        ]
     },
     {
-        "name": "symfony/css-selector",
-        "version": "v2.5.6",
-        "version_normalized": "2.5.6.0",
-        "target-dir": "Symfony/Component/CssSelector",
+        "name": "symfony/yaml",
+        "version": "v2.6.1",
+        "version_normalized": "2.6.1.0",
+        "target-dir": "Symfony/Component/Yaml",
         "source": {
             "type": "git",
-            "url": "https://github.com/symfony/CssSelector.git",
-            "reference": "7cdf543a3f31935aae58de4e6e607d4bdeb3f5dc"
+            "url": "https://github.com/symfony/Yaml.git",
+            "reference": "3346fc090a3eb6b53d408db2903b241af51dcb20"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/symfony/CssSelector/zipball/7cdf543a3f31935aae58de4e6e607d4bdeb3f5dc",
-            "reference": "7cdf543a3f31935aae58de4e6e607d4bdeb3f5dc",
+            "url": "https://api.github.com/repos/symfony/Yaml/zipball/3346fc090a3eb6b53d408db2903b241af51dcb20",
+            "reference": "3346fc090a3eb6b53d408db2903b241af51dcb20",
             "shasum": ""
         },
         "require": {
             "php": ">=5.3.3"
         },
-        "time": "2014-10-09 16:00:03",
+        "time": "2014-12-02 20:19:20",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "2.5-dev"
+                "dev-master": "2.6-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Symfony\\Component\\CssSelector\\": ""
+                "Symfony\\Component\\Yaml\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -1080,54 +1099,44 @@
                 "name": "Symfony Community",
                 "homepage": "http://symfony.com/contributors"
             },
-            {
-                "name": "Jean-François Simon",
-                "email": "jeanfrancois.simon@sensiolabs.com"
-            },
             {
                 "name": "Fabien Potencier",
                 "email": "fabien@symfony.com"
             }
         ],
-        "description": "Symfony CssSelector Component",
+        "description": "Symfony Yaml Component",
         "homepage": "http://symfony.com"
     },
     {
-        "name": "behat/mink",
-        "version": "v1.6.0",
-        "version_normalized": "1.6.0.0",
+        "name": "symfony/css-selector",
+        "version": "v2.6.1",
+        "version_normalized": "2.6.1.0",
+        "target-dir": "Symfony/Component/CssSelector",
         "source": {
             "type": "git",
-            "url": "https://github.com/Behat/Mink.git",
-            "reference": "090900a0049c441f1e072bbd837db4079b2250c5"
+            "url": "https://github.com/symfony/CssSelector.git",
+            "reference": "93eb315b545b60a908271762fb4bfa1f9954b851"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/Behat/Mink/zipball/090900a0049c441f1e072bbd837db4079b2250c5",
-            "reference": "090900a0049c441f1e072bbd837db4079b2250c5",
+            "url": "https://api.github.com/repos/symfony/CssSelector/zipball/93eb315b545b60a908271762fb4bfa1f9954b851",
+            "reference": "93eb315b545b60a908271762fb4bfa1f9954b851",
             "shasum": ""
         },
         "require": {
-            "php": ">=5.3.1",
-            "symfony/css-selector": "~2.0"
-        },
-        "suggest": {
-            "behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
-            "behat/mink-goutte-driver": "fast headless driver for any app without JS emulation",
-            "behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)",
-            "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)"
+            "php": ">=5.3.3"
         },
-        "time": "2014-09-26 09:25:05",
+        "time": "2014-12-02 20:19:20",
         "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.6.x-dev"
+                "dev-master": "2.6-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Behat\\Mink": "src/"
+                "Symfony\\Component\\CssSelector\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -1136,50 +1145,51 @@
         ],
         "authors": [
             {
-                "name": "Konstantin Kudryashov",
-                "email": "ever.zet@gmail.com",
-                "homepage": "http://everzet.com"
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
+            },
+            {
+                "name": "Jean-François Simon",
+                "email": "jeanfrancois.simon@sensiolabs.com"
+            },
+            {
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             }
         ],
-        "description": "Web acceptance testing framework for PHP 5.3",
-        "homepage": "http://mink.behat.org/",
-        "keywords": [
-            "browser",
-            "testing",
-            "web"
-        ]
+        "description": "Symfony CssSelector Component",
+        "homepage": "http://symfony.com"
     },
     {
-        "name": "behat/mink-zombie-driver",
-        "version": "v1.2.0",
-        "version_normalized": "1.2.0.0",
+        "name": "symfony/process",
+        "version": "v2.6.1",
+        "version_normalized": "2.6.1.0",
+        "target-dir": "Symfony/Component/Process",
         "source": {
             "type": "git",
-            "url": "https://github.com/Behat/MinkZombieDriver.git",
-            "reference": "cf15a3a0cc4865bb55253cd033a03a20cee6d2d1"
+            "url": "https://github.com/symfony/Process.git",
+            "reference": "bf0c9bd625f13b0b0bbe39919225cf145dfb935a"
         },
         "dist": {
             "type": "zip",
-            "url": "https://api.github.com/repos/Behat/MinkZombieDriver/zipball/cf15a3a0cc4865bb55253cd033a03a20cee6d2d1",
-            "reference": "cf15a3a0cc4865bb55253cd033a03a20cee6d2d1",
+            "url": "https://api.github.com/repos/symfony/Process/zipball/bf0c9bd625f13b0b0bbe39919225cf145dfb935a",
+            "reference": "bf0c9bd625f13b0b0bbe39919225cf145dfb935a",
             "shasum": ""
         },
         "require": {
-            "behat/mink": "~1.6@dev",
-            "php": ">=5.3.1",
-            "symfony/process": "~2.1"
+            "php": ">=5.3.3"
         },
-        "time": "2014-09-26 12:26:25",
-        "type": "mink-driver",
+        "time": "2014-12-02 20:19:20",
+        "type": "library",
         "extra": {
             "branch-alias": {
-                "dev-master": "1.2.x-dev"
+                "dev-master": "2.6-dev"
             }
         },
         "installation-source": "dist",
         "autoload": {
             "psr-0": {
-                "Behat\\Mink\\Driver": "src/"
+                "Symfony\\Component\\Process\\": ""
             }
         },
         "notification-url": "https://packagist.org/downloads/",
@@ -1188,25 +1198,15 @@
         ],
         "authors": [
             {
-                "name": "Konstantin Kudryashov",
-                "email": "ever.zet@gmail.com",
-                "homepage": "http://everzet.com"
+                "name": "Symfony Community",
+                "homepage": "http://symfony.com/contributors"
             },
             {
-                "name": "Pascal Cremer",
-                "email": "b00gizm@gmail.com",
-                "homepage": "http://github.com/b00gizm"
+                "name": "Fabien Potencier",
+                "email": "fabien@symfony.com"
             }
         ],
-        "description": "Zombie.js driver for Mink framework",
-        "homepage": "http://mink.behat.org/",
-        "keywords": [
-            "ajax",
-            "browser",
-            "headless",
-            "javascript",
-            "testing",
-            "zombie"
-        ]
+        "description": "Symfony Process Component",
+        "homepage": "http://symfony.com"
     }
 ]
diff --git a/vendor/ocramius/proxy-manager/.gitignore b/vendor/ocramius/proxy-manager/.gitignore
index c12b0ce954b79a0932abb13d2b29af6a4e291b77..7cf18feca40fe27a3d9185c65d1c547c877614c2 100644
--- a/vendor/ocramius/proxy-manager/.gitignore
+++ b/vendor/ocramius/proxy-manager/.gitignore
@@ -4,3 +4,4 @@ composer.phar
 phpunit.xml
 phpmd.xml
 phpdox.xml
+clover.xml
diff --git a/vendor/ocramius/proxy-manager/.scrutinizer-ci.phpunit.xml.dist b/vendor/ocramius/proxy-manager/.scrutinizer-ci.phpunit.xml.dist
deleted file mode 100644
index 7a55711925cf80f70c99612632342b43ea288667..0000000000000000000000000000000000000000
--- a/vendor/ocramius/proxy-manager/.scrutinizer-ci.phpunit.xml.dist
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0"?>
-<phpunit
-    bootstrap="./tests/Bootstrap.php"
-    colors="true"
-    convertErrorsToExceptions="true"
-    convertNoticesToExceptions="true"
-    convertWarningsToExceptions="true"
-    verbose="true"
-    stopOnFailure="false"
-    processIsolation="false"
-    backupGlobals="false"
-    syntaxCheck="true"
->
-    <testsuite name="ProxyManager tests">
-        <directory>./tests/ProxyManagerTest</directory>
-    </testsuite>
-    <groups>
-        <exclude>
-            <group>Functional</group>
-            <group>Performance</group>
-        </exclude>
-    </groups>
-    <filter>
-        <whitelist addUncoveredFilesFromWhitelist="true">
-            <directory suffix=".php">./src</directory>
-        </whitelist>
-    </filter>
-</phpunit>
diff --git a/vendor/ocramius/proxy-manager/.scrutinizer.yml b/vendor/ocramius/proxy-manager/.scrutinizer.yml
index 717d725bc8fc96531cdd11a34549195593d0b912..dbaa05c3db1a8c6e541428703190f3b8402cba01 100644
--- a/vendor/ocramius/proxy-manager/.scrutinizer.yml
+++ b/vendor/ocramius/proxy-manager/.scrutinizer.yml
@@ -6,7 +6,6 @@ tools:
         timeout: 600
     php_code_coverage:
         enabled: true
-        test_command: phpunit -c .scrutinizer-ci.phpunit.xml.dist
     php_code_sniffer:
         enabled: true
         config:
@@ -15,7 +14,7 @@ tools:
             paths: ["src/*", "tests/*"]
     php_cpd:
         enabled: true
-        excluded_dirs: ["build/*", "docs", "examples", "tests", "vendor"]
+        excluded_dirs: ["docs", "examples", "tests", "vendor"]
     php_cs_fixer:
         enabled: true
         config:
@@ -24,7 +23,7 @@ tools:
             paths: ["src/*", "tests/*"]
     php_loc:
         enabled: true
-        excluded_dirs: ["build", "docs", "examples", "tests", "vendor"]
+        excluded_dirs: ["docs", "examples", "tests", "vendor"]
     php_mess_detector:
         enabled: true
         config:
@@ -34,13 +33,13 @@ tools:
             paths: ["src/*"]
     php_pdepend:
         enabled: true
-        excluded_dirs: ["build", "docs", "examples", "tests", "vendor"]
+        excluded_dirs: ["docs", "examples", "tests", "vendor"]
     php_analyzer:
         enabled: true
         filter:
-            paths: ["src/*", "tests/*", "examples/*"]
+            paths: ["src/*", "tests/*"]
     php_hhvm:
         enabled: true
         filter:
-            paths: ["src/*", "tests/*", "examples/*"]
+            paths: ["src/*", "tests/*"]
     sensiolabs_security_checker: true
diff --git a/vendor/ocramius/proxy-manager/.travis.yml b/vendor/ocramius/proxy-manager/.travis.yml
index 2191faaf1c504235c755852aa7ea73328adbe38d..5f42dac8274057da136ba0867e4efced37f20cc1 100644
--- a/vendor/ocramius/proxy-manager/.travis.yml
+++ b/vendor/ocramius/proxy-manager/.travis.yml
@@ -13,7 +13,8 @@ before_script:
   - sh .travis.install.sh
 
 script:
-  - ./vendor/bin/phpunit --coverage-clover ./build/logs/clover.xml --exclude-group Performance
+  - ./vendor/bin/phpunit --disallow-test-output --report-useless-tests --coverage-clover ./clover.xml --group=Coverage
+  - ./vendor/bin/phpunit --disallow-test-output --report-useless-tests --strict --exclude-group=Performance,Coverage
   - php -n ./vendor/bin/phpunit --group=Performance
   - ./vendor/bin/phpcs --standard=PSR2 ./src/ ./tests/
 
@@ -24,4 +25,4 @@ matrix:
 
 after_script:
   - wget https://scrutinizer-ci.com/ocular.phar
-  - php ocular.phar code-coverage:upload --format=php-clover ./build/logs/clover.xml
+  - php ocular.phar code-coverage:upload --format=php-clover ./clover.xml
diff --git a/vendor/ocramius/proxy-manager/README.md b/vendor/ocramius/proxy-manager/README.md
index c4848795c02e995a6fe58ec5a024b67bf387b19f..c377830f6464edbbdcb77d56c44ede6731f483fd 100644
--- a/vendor/ocramius/proxy-manager/README.md
+++ b/vendor/ocramius/proxy-manager/README.md
@@ -16,19 +16,22 @@ This library aims at providing abstraction for generating various kinds of [prox
 [![Latest Stable Version](https://poser.pugx.org/ocramius/proxy-manager/v/stable.png)](https://packagist.org/packages/ocramius/proxy-manager)
 [![Latest Unstable Version](https://poser.pugx.org/ocramius/proxy-manager/v/unstable.png)](https://packagist.org/packages/ocramius/proxy-manager)
 
+
+## Documentation
+
+You can learn about the proxy pattern and how to use the **ProxyManager** on the [online documentation](http://ocramius.github.io/ProxyManager).
+
 ## Installation
 
 The suggested installation method is via [composer](https://getcomposer.org/):
 
 ```sh
-php composer.phar require ocramius/proxy-manager:0.5.*
+php composer.phar require ocramius/proxy-manager:1.0.*
 ```
 
-## Lazy Loading Value Holders (Virtual Proxy)
+## Proxy example
 
-ProxyManager can generate [lazy loading value holders](http://www.martinfowler.com/eaaCatalog/lazyLoad.html),
-which are virtual proxies capable of saving performance and memory for objects that require a lot of dependencies or
-CPU cycles to be loaded: particularly useful when you may not always need the object, but are constructing it anyways.
+Here's how you build a lazy loadable object with ProxyManager using a *Virtual Proxy*
 
 ```php
 $factory = new \ProxyManager\Factory\LazyLoadingValueHolderFactory();
@@ -38,147 +41,10 @@ $proxy = $factory->createProxy(
     function (& $wrappedObject, $proxy, $method, $parameters, & $initializer) {
         $wrappedObject = new HeavyComplexObject(); // instantiation logic here
         $initializer   = null; // turning off further lazy initialization
-    
-        return true;
-    }
-);
-
-$proxy->doFoo();
-```
-
-See the [complete documentation about lazy loading value holders](/docs/lazy-loading-value-holder.md)
-in the `docs/` directory.
-
-## Access Interceptor Value Holder
-
-An access interceptor value holder is a smart reference that allows you to execute logic before
-and after a particular method is executed or a particular property is accessed, and it allows to
-manipulate parameters and return values depending on your needs.
-
-```php
-$factory = new \ProxyManager\Factory\AccessInterceptorValueHolderFactory();
-
-$proxy = $factory->createProxy(
-    new \My\Db\Connection(),
-    array('query' => function () { echo "Query being executed!\n"; }),
-    array('query' => function () { echo "Query completed!\n"; })
-);
-
-$proxy->query(); // produces "Query being executed!\nQuery completed!\n"
-```
-
-See the [complete documentation about access interceptor value holders](/docs/access-interceptor-value-holder.md)
-in the `docs/` directory.
-
-## Access Interceptor Scope Localizer
-
-An access interceptor scope localizer works exactly like an access interceptor value holder,
-but it is safe to use to proxy fluent interfaces.
-
-See the [complete documentation about access interceptor scope localizer](/docs/access-interceptor-scope-localizer.md)
-in the `docs/` directory.
-
-## Null Objects
-
-A Null Object proxy implements the [null object pattern](http://en.wikipedia.org/wiki/Null_Object_pattern).
-
-This kind of proxy allows you to have fallback logic in case loading of the wrapped value failed.
-
-```php
-$factory = new \ProxyManager\Factory\NullObjectFactory();
-
-$proxy = $factory->createProxy('My\EntityObject');
-
-$proxy->getName(); // empty return
-```
-
-A Null Object Proxy can be created from an object, a class name or an interface name:
-
-```php
-$factory = new \ProxyManager\Factory\NullObjectFactory();
-
-$proxy = $factory->createProxy('My\EntityObjectInterface');
-$proxy->getName(); // empty return
-
-$proxy = $factory->createProxy($entity); // created from object
-$proxy->getName(); // empty return
-```
-
-See the [complete documentation about null object proxy](/docs/null-object.md)
-in the `docs/` directory.
-
-## Ghost Objects
-
-
-Similar to value holder, a ghost object is usually created to handle lazy loading.
-
-The difference between a value holder and a ghost object is that the ghost object does not contain a real instance of
-the required object, but handles lazy loading by initializing its own inherited properties.
-
-ProxyManager can generate [lazy loading ghost objects](http://www.martinfowler.com/eaaCatalog/lazyLoad.html),
-which are proxies used to save performance and memory for large datasets and graphs representing relational data.
-Ghost objects are particularly useful when building data-mappers.
-
-Additionally, the overhead introduced by ghost objects is very low when compared to the memory and performance overhead
-caused by virtual proxies.
-
-```php
-$factory = new \ProxyManager\Factory\LazyLoadingGhostFactory();
-
-$proxy = $factory->createProxy(
-    'MyApp\HeavyComplexObject',
-    function ($proxy, $method, $parameters, & $initializer) {
-        $initializer   = null; // turning off further lazy initialization
-
-        // modify the proxy instance
-        $proxy->setFoo('foo');
-        $proxy->setBar('bar');
-
-        return true;
     }
 );
 
 $proxy->doFoo();
 ```
 
-See the [complete documentation about lazy loading ghost objects](/docs/lazy-loading-ghost-object.md)
-in the `docs/` directory.
-
-## Remote Object
-
-A remote object proxy is an object that is located on a different system, but is used as if it was available locally.
-There's various possible remote proxy implementations, which could be based on xmlrpc/jsonrpc/soap/dnode/etc.
-
-This example uses the XML-RPC client of Zend Framework 2:
-
-```php
-interface FooServiceInterface
-{
-    public function foo();
-}
-
-$factory = new \ProxyManager\Factory\RemoteObjectFactory(
-    new \ProxyManager\Factory\RemoteObject\Adapter\XmlRpc(
-        new \Zend\XmlRpc\Client('https://example.com/rpc-endpoint')
-    )
-);
-
-// proxy is your remote implementation
-$proxy = $factory->createProxy('FooServiceInterface');
-
-var_dump($proxy->foo());
-```
-
-See the [complete documentation about remote objects](https://github.com/Ocramius/ProxyManager/tree/master/docs/remote-object.md)
-in the `docs/` directory.
-
-## Contributing
-
-Please read the [CONTRIBUTING.md](https://github.com/Ocramius/ProxyManager/blob/master/CONTRIBUTING.md) contents if you
-wish to help out!
-
-## Credits
-
-The idea was originated by a [talk about Proxies in PHP OOP](http://marco-pivetta.com/proxy-pattern-in-php/) that I gave
-at the [@phpugffm](https://twitter.com/phpugffm) in January 2013.
-
+See the [online documentation](http://ocramius.github.io/ProxyManager) for more supported proxy types and examples. 
diff --git a/vendor/ocramius/proxy-manager/STABILITY.md b/vendor/ocramius/proxy-manager/STABILITY.md
new file mode 100644
index 0000000000000000000000000000000000000000..6da8cb6bcefafdd62e646572f9f93df2c49fede4
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/STABILITY.md
@@ -0,0 +1,19 @@
+This is a list of supported versions, with their expected release/support time-frames:
+
+# 0.5.x
+
+ * Release date: 2013-12-01
+ * Bug fixes: till 2015-03-11
+ * Security fixes: till 2015-12-11
+
+# 1.0.x
+
+ * Release date: 2014-12-12
+ * Bug fixes: till 2015-12-11
+ * Security fixes: till 2016-12-11
+
+# 2.0.x
+
+ * Release date: TBA
+ * Bug fixes: TBA
+ * Security fixes: TBA
diff --git a/vendor/ocramius/proxy-manager/build/.gitignore b/vendor/ocramius/proxy-manager/build/.gitignore
deleted file mode 100644
index 6d8e8bfe3bee0f04034151c3031be7d8bc6caa3c..0000000000000000000000000000000000000000
--- a/vendor/ocramius/proxy-manager/build/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-*
-!logs
-!.gitignore
-!coverage-checker.php
\ No newline at end of file
diff --git a/vendor/ocramius/proxy-manager/composer.json b/vendor/ocramius/proxy-manager/composer.json
index cde5eca13c8a7aad61faa711fdb25f3b76c0d24c..0c5d2062278dac54cd474579cb51bb053aaff55b 100644
--- a/vendor/ocramius/proxy-manager/composer.json
+++ b/vendor/ocramius/proxy-manager/composer.json
@@ -47,7 +47,7 @@
     },
     "extra": {
         "branch-alias": {
-            "dev-master": "0.6.x-dev"
+            "dev-master": "2.0.x-dev"
         }
     }
 }
diff --git a/vendor/ocramius/proxy-manager/html-docs/access-interceptor-scope-localizer-proxy.html b/vendor/ocramius/proxy-manager/html-docs/access-interceptor-scope-localizer-proxy.html
new file mode 100644
index 0000000000000000000000000000000000000000..6e62a678947ca543417bc7047aa8ad7056edc111
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/access-interceptor-scope-localizer-proxy.html
@@ -0,0 +1,197 @@
+<!DOCTYPE html>
+<html class="no-js" id="top">
+<head>
+    <title>ProxyManager - Tuning the ProxyManager for production</title>
+
+    <meta name="description" content="A proxyManager write in php" />
+    <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php, production" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
+    <link href="css/styles.css" rel="stylesheet" />
+    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/default.min.css">
+    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script>
+    <script>hljs.initHighlightingOnLoad();</script>
+    <link rel="shortcut icon" href="favicon.ico">
+</head>
+<body>
+
+<header class="site-header">
+<div class="container">
+<h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
+
+<nav class="main-nav" role="navigation">
+<ul>
+    <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
+    <div class="bcms-clearfix"></div>
+</li>
+</ul>
+</nav>
+</div>
+</header>
+<main role="main">
+<section class="component-content">
+
+<div class="component-demo" id="live-demo">
+    <div class="container">
+            <div class="main-wrapper" style="text-align: right">
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
+
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
+
+            </div>
+        <div class="bcms-clearfix bcms-clearfix"></div>
+    </div>
+</div>
+<div class="component-info">
+<div class="container">
+<aside class="sidebar">
+    <nav class="spy-nav">
+        <ul>
+            <li><a href="index.html">Intro</a></li>
+            <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
+            <li><a href="null-object.html">Null Objects</a></li>
+            <li><a href="ghost-object.html">Ghost Objects</a></li>
+            <li><a href="remote-object.html">Remote Object</a></li>
+            <li><a href="contributing.html">Contributing</a></li>
+            <li><a href="credits.html">Credits</a></li>
+            <li><a href="copyright.html">Copyright</a></li>
+        </ul>
+    </nav>
+<div class="bcms-clearfix bcms-clearfix"></div>
+<a class="btn btn-action btn-full download-component"
+    href="download.html">Download</a>
+    <div class="bcms-clearfix"></div>
+</aside>
+
+<div class="content">
+    <div class="bcms-clearfix"></div>
+    <h3 class="section-title">Access Interceptor Scope Localizer Proxy</h3>
+
+    <p>An access interceptor scope localizer is a smart reference proxy that allows you to dynamically define logic to be executed before or after any of the proxied object's methods' logic.</p>
+    
+    <p>It works exactly like the <a href="access-interceptor-value-holder-proxy.html">access interceptor value holder</a>, with some minor differences in behavior.</p>
+
+    <p>The working concept of an access interceptor scope localizer is to localize scope of a proxied object:</p>
+   
+    <pre>
+        <code class="php">
+class Example
+{
+    protected $foo;
+    protected $bar;
+    protected $baz;
+
+    public function doFoo()
+    {
+        // ...
+    }
+}
+
+class ExampleProxy extends Example
+{
+    public function __construct(Example $example)
+    {
+        $this->foo = &amp; $example->foo;
+        $this->bar = &amp; $example->bar;
+        $this->baz = &amp; $example->baz;
+    }
+
+    public function doFoo()
+    {
+        return parent::doFoo();
+    }
+}
+        </code>
+    </pre>
+
+    <p>This allows to create a mirror copy of the real instance, where any change in the proxy or in the real instance is reflected in both objects.</p>
+
+    <p>The main advantage of this approach is that the proxy is now safe against fluent interfaces, which would break an <a href="access-interceptor-value-holder-proxy.html">access interceptor value holder</a> instead.</p>
+<hr />    
+    <h3>Differences with <a href="access-interceptor-value-holder-proxy.html">access interceptor value holder</a>:</h3>
+    
+    <ul>
+        <li>It does <strong>NOT</strong> implement the <code>ProxyManager\Proxy\ValueHolderInterface</code>, since the proxy itself does not keep a reference to the original object being proxied</li>
+        <li>In all interceptor methods (see <a href="access-interceptor-value-holder-proxy.html">access interceptor value holder</a>), the $instance passed in is the proxy itself. There is no way to gather a reference to the original object right now, and that's mainly to protect from misuse.</li>
+    </ul>
+<hr />
+
+    <h3>Known limitations</h3>
+
+    <ul>
+        <li>It is <strong>NOT</strong> possible to intercept access to public properties</li>
+        <li>It is <strong>NOT</strong> possible to proxy interfaces, since this proxy relies on <code>parent::method()</code> calls. Interfaces obviously don't provide a parent method implementation.</li>
+        <li>calling unset on a property of an access interceptor scope localizer (or the real instance) will cause the two objects to be un-synchronized, with possible unexpected behaviour.</li>
+        <li>serializing or un-serializing an access interceptor scope localizer (or the real instance) will not cause the real instance (or the proxy) to be serialized or un-serialized</li>
+        <li>if a proxied object contains private properties, then an exception will be thrown if you use PHP <code>&lt; 5.4.0</code>.</li>
+    </ul>
+<hr />
+    <h3>Example</h3>
+
+    <p>Here's an example of how you can create and use an access interceptor scope localizer :</p>
+
+    <pre>
+        <code class="php">
+&lt;?php
+
+use ProxyManager\Factory\AccessInterceptorScopeLocalizerFactory as Factory;
+
+require_once __DIR__ . '/vendor/autoload.php';
+
+class Foo
+{
+    public function doFoo()
+    {
+        echo "Foo!\n";
+    }
+}
+
+$factory = new Factory();
+
+$proxy = $factory->createProxy(
+    new Foo(),
+    array('doFoo' => function () { echo "PreFoo!\n"; }),
+    array('doFoo' => function () { echo "PostFoo!\n"; })
+);
+
+$proxy->doFoo();
+        </code>
+    </pre>
+
+    <p>This send something like following to your output:</p>
+
+    <pre>
+        <code class="php">
+PreFoo!
+Foo!
+PostFoo!
+        </code>
+    </pre>
+
+    <p>This is pretty much the same logic that you can find in <a href="access-interceptor-value-holder-proxy.html">access interceptor value holder</a>.</p>
+    
+</main>
+
+    <footer class="site-footer" role="contentinfo">
+        <div class="container">
+            <div class="footer-logos">
+                <ul>
+                    <li><a href="index.html">Intro</a> | </li>
+                    <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
+                    <li><a href="null-object.html">Null Objects</a> | </li>
+                    <li><a href="ghost-object.html">Ghost Objects</a> | </li>
+                    <li><a href="remote-object.html">Remote Object</a> | </li>
+                    <li><a href="contributing.html">Contributing</a> | </li>
+                    <li><a href="credits.html">Credits</a> | </li>
+                    <li><a href="copyright.html">Copyright</a></li>
+                </ul>
+            </div>
+        </div>
+
+        <div class="bcms-clearfix"></div>
+    </footer>
+    <div class="bcms-clearfix"></div>
+    </body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/html-docs/access-interceptor-value-holder-proxy.html b/vendor/ocramius/proxy-manager/html-docs/access-interceptor-value-holder-proxy.html
new file mode 100644
index 0000000000000000000000000000000000000000..30633e402d25398fc1240fa61626f19cbd8b6385
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/access-interceptor-value-holder-proxy.html
@@ -0,0 +1,208 @@
+<!DOCTYPE html>
+<html class="no-js" id="top">
+<head>
+    <title>ProxyManager - Tuning the ProxyManager for production</title>
+
+    <meta name="description" content="A proxyManager write in php" />
+    <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php, production" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
+    <link href="css/styles.css" rel="stylesheet" />
+    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/default.min.css">
+    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script>
+    <script>hljs.initHighlightingOnLoad();</script>
+    <link rel="shortcut icon" href="favicon.ico">
+</head>
+<body>
+
+<header class="site-header">
+<div class="container">
+<h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
+
+<nav class="main-nav" role="navigation">
+<ul>
+    <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
+    <div class="bcms-clearfix"></div>
+</li>
+</ul>
+</nav>
+</div>
+</header>
+<main role="main">
+<section class="component-content">
+
+<div class="component-demo" id="live-demo">
+    <div class="container">
+            <div class="main-wrapper" style="text-align: right">
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
+
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
+
+            </div>
+        <div class="bcms-clearfix bcms-clearfix"></div>
+    </div>
+</div>
+<div class="component-info">
+<div class="container">
+<aside class="sidebar">
+    <nav class="spy-nav">
+        <ul>
+            <li><a href="index.html">Intro</a></li>
+            <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
+            <li><a href="null-object.html">Null Objects</a></li>
+            <li><a href="ghost-object.html">Ghost Objects</a></li>
+            <li><a href="remote-object.html">Remote Object</a></li>
+            <li><a href="contributing.html">Contributing</a></li>
+            <li><a href="credits.html">Credits</a></li>
+            <li><a href="copyright.html">Copyright</a></li>
+        </ul>
+    </nav>
+<div class="bcms-clearfix bcms-clearfix"></div>
+<a class="btn btn-action btn-full download-component"
+    href="download.html">Download</a>
+    <div class="bcms-clearfix"></div>
+</aside>
+
+<div class="content">
+    <div class="bcms-clearfix"></div>
+    <h3 class="section-title">Access Interceptor Value Holder Proxy</h3>
+
+    <p>An access interceptor value holder is a smart reference proxy that allows you to dynamically define logic to be executed before or after any of the wrapped object's methods logic.</p>
+    
+    <p>It wraps around a real instance of the object to be proxied, and can be useful for things like:</p>
+
+    <ul>
+        <li>caching execution of slow and heavy methods</li>
+        <li>log method calls</li>
+        <li>debugging</li>
+        <li>event triggering</li>
+        <li>handling of orthogonal logic, and <a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming" target="_blank">AOP</a> in general</li>
+    </ul>
+<hr />    
+    <h3>Example</h3>
+
+    <p>Here's an example of how you can create and use an access interceptor value holder:</p>
+
+    <pre>
+        <code class="php">
+&lt;?php
+
+use ProxyManager\Factory\AccessInterceptorValueHolderFactory as Factory;
+
+require_once __DIR__ . '/vendor/autoload.php';
+
+class Foo
+{
+    public function doFoo()
+    {
+        echo "Foo!\n";
+    }
+}
+
+$factory = new Factory();
+
+$proxy = $factory->createProxy(
+    new Foo(),
+    array('doFoo' => function () { echo "PreFoo!\n"; }),
+    array('doFoo' => function () { echo "PostFoo!\n"; })
+);
+
+$proxy->doFoo();
+        </code>
+    </pre>
+
+    <p>This send something like following to your output:</p>
+
+    <pre>
+        <code class="php">
+PreFoo!
+Foo!
+PostFoo!
+        </code>
+    </pre>
+
+<hr />
+    <h3>Implementing pre- and post- access interceptors</h3>
+
+    <p>A proxy produced by the <code><a href="https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Factory/AccessInterceptorValueHolderFactory.php" target="_blank">ProxyManager\Factory\AccessInterceptorValueHolderFactory</a></code> implements both the <code><a href="https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/ValueHolderInterface.php" target="_blank">ProxyManager\Proxy\ValueHolderInterface</a></code> and the <code><a href="https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/ValueHolderInterface.php" target="_blank">ProxyManager\Proxy\AccessInterceptorInterface</a></code>.</p>
+
+
+    <p>Therefore, you can set an access interceptor callback by calling:</p>
+
+    <pre>
+        <code class="php">
+$proxy->setMethodPrefixInterceptor('methodName', function () { echo 'pre'; });
+$proxy->setMethodSuffixInterceptor('methodName', function () { echo 'post'; });
+        </code>
+    </pre>
+
+    <p>You can also listen to public properties access by attaching interceptors to <code>__get</code>, <code>__set</code>, <code>__isset</code> and <code>__unset</code>.</p>
+
+    <p>A prefix interceptor (executed before method logic) should have following signature:</p>
+
+    <pre>
+        <code class="php">
+/**
+ * @var object $proxy       the proxy that intercepted the method call
+ * @var object $instance    the wrapped instance within the proxy
+ * @var string $method      name of the called method
+ * @var array  $params      sorted array of parameters passed to the intercepted
+ *                          method, indexed by parameter name
+ * @var bool   $returnEarly flag to tell the interceptor proxy to return early, returning
+ *                          the interceptor's return value instead of executing the method logic
+ *
+ * @return mixed
+ */
+$prefixInterceptor = function ($proxy, $instance, $method, $params, &amp; $returnEarly) {};
+        </code>
+    </pre>
+
+    A suffix interceptor (executed after method logic) should have following signature:
+
+    <pre>
+        <code class="php">
+/**
+ * @var object $proxy       the proxy that intercepted the method call
+ * @var object $instance    the wrapped instance within the proxy
+ * @var string $method      name of the called method
+ * @var array  $params      sorted array of parameters passed to the intercepted
+ *                          method, indexed by parameter name
+ * @var mixed  $returnValue the return value of the intercepted method
+ * @var bool   $returnEarly flag to tell the proxy to return early, returning the interceptor's
+ *                          return value instead of the value produced by the method
+ *
+ * @return mixed
+ */
+$suffixInterceptor = function ($proxy, $instance, $method, $params, $returnValue, & $returnEarly) {};
+        </code>
+    </pre>
+
+<hr />
+    <h3>Tuning performance for production</h3>
+
+    <p>See <a href="production.html">Tuning ProxyManager for Production</a>.</p>
+</main>
+
+    <footer class="site-footer" role="contentinfo">
+        <div class="container">
+            <div class="footer-logos">
+                <ul>
+                    <li><a href="index.html">Intro</a> | </li>
+                    <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
+                    <li><a href="null-object.html">Null Objects</a> | </li>
+                    <li><a href="ghost-object.html">Ghost Objects</a> | </li>
+                    <li><a href="remote-object.html">Remote Object</a> | </li>
+                    <li><a href="contributing.html">Contributing</a> | </li>
+                    <li><a href="credits.html">Credits</a> | </li>
+                    <li><a href="copyright.html">Copyright</a></li>
+                </ul>
+            </div>
+        </div>
+
+        <div class="bcms-clearfix"></div>
+    </footer>
+    <div class="bcms-clearfix"></div>
+    </body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/html-docs/contributing.html b/vendor/ocramius/proxy-manager/html-docs/contributing.html
new file mode 100644
index 0000000000000000000000000000000000000000..fd77f342e126dbfb8ba77a07c051e5e6a347b56d
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/contributing.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html class="no-js" id="top">
+<head>
+    <title>ProxyManager - Contributing</title>
+
+    <meta name="description" content="A proxyManager write in php" />
+    <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php, contributing" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
+    <link href="css/styles.css" rel="stylesheet" />
+    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/default.min.css">
+    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script>
+    <script>hljs.initHighlightingOnLoad();</script>
+    <link rel="shortcut icon" href="favicon.ico">
+</head>
+<body>
+
+<header class="site-header">
+<div class="container">
+<h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
+
+<nav class="main-nav" role="navigation">
+<ul>
+    <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
+    <div class="bcms-clearfix"></div>
+</li>
+</ul>
+</nav>
+</div>
+</header>
+<main role="main">
+<section class="component-content">
+
+<div class="component-demo" id="live-demo">
+    <div class="container">
+            <div class="main-wrapper" style="text-align: right">
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
+
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
+
+            </div>
+        <div class="bcms-clearfix bcms-clearfix"></div>
+    </div>
+</div>
+<div class="component-info">
+<div class="container">
+<aside class="sidebar">
+    <nav class="spy-nav">
+        <ul>
+            <li><a href="index.html">Intro</a></li>
+            <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
+            <li><a href="null-object.html">Null Objects</a></li>
+            <li><a href="ghost-object.html">Ghost Objects</a></li>
+            <li><a href="remote-object.html">Remote Object</a></li>
+            <li><a href="contributing.html">Contributing</a></li>
+            <li><a href="credits.html">Credits</a></li>
+            <li><a href="copyright.html">Copyright</a></li>
+        </ul>
+    </nav>
+<div class="bcms-clearfix bcms-clearfix"></div>
+<a class="btn btn-action btn-full download-component"
+    href="download.html">Download</a>
+    <div class="bcms-clearfix"></div>
+</aside>
+
+<div class="content">
+    <div class="bcms-clearfix"></div>
+    <h3 class="section-title">Contributing</h3>
+
+    <ul>
+        <li>Coding standard for the project is <a href="https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-2-coding-style-guide.md" target-"_blank">PSR-2</a></li>
+        <li>The project will follow strict <a href="http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php" target-"_blank">object calisthenics</a></li>
+        <li>Any contribution must provide tests for additional introduced conditions</li>
+        <li>Any un-confirmed issue needs a failing test case before being accepted</li>
+        <li>Pull requests must be sent from a new hotfix/feature branch, not from master.</li>
+    </ul>
+
+    
+<hr />
+
+    <h3 class="section-title">Installation</h3>
+
+    <p>To install the project and run the tests, you need to clone it first:</p>
+
+    <pre>
+        <code class="sh">
+$ git clone git://github.com/Ocramius/ProxyManager.git
+            </code>
+    </pre>
+
+    <p>You will then need to run a composer installation:</p>
+
+    <pre>
+        <code class="sh">
+$ cd ProxyManager
+$ curl -s https://getcomposer.org/installer | php
+$ php composer.phar update
+        </code>
+    </pre>
+
+<hr />
+
+    <h3 class="section-title">Testing</h3>
+
+    <p>The PHPUnit version to be used is the one installed as a dev- dependency via composer:</p>
+    
+    <pre>
+        <code class="sh">
+$ ./vendor/bin/phpunit
+        </code>
+    </pre>
+
+    <p>Accepted coverage for new contributions is 80%. Any contribution not satisfying this requirement won't be merged.</p>
+
+</main>
+
+    <footer class="site-footer" role="contentinfo">
+        <div class="container">
+            <div class="footer-logos">
+                <ul>
+                    <li><a href="index.html">Intro</a> | </li>
+                    <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
+                    <li><a href="null-object.html">Null Objects</a> | </li>
+                    <li><a href="ghost-object.html">Ghost Objects</a> | </li>
+                    <li><a href="remote-object.html">Remote Object</a> | </li>
+                    <li><a href="contributing.html">Contributing</a> | </li>
+                    <li><a href="credits.html">Credits</a> | </li>
+                    <li><a href="copyright.html">Copyright</a></li>
+                </ul>
+            </div>
+        </div>
+
+        <div class="bcms-clearfix"></div>
+    </footer>
+    <div class="bcms-clearfix"></div>
+    </body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/html-docs/copyright.html b/vendor/ocramius/proxy-manager/html-docs/copyright.html
new file mode 100644
index 0000000000000000000000000000000000000000..9eaafb30f2b010a0d11b951e54b9d6790e275499
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/copyright.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<html class="no-js" id="top">
+<head>
+    <title>ProxyManager</title>
+
+    <meta name="description" content="A proxyManager write in php" />
+    <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
+    <link href="css/styles.css" rel="stylesheet" />
+
+    <link rel="shortcut icon" href="favicon.ico">
+</head>
+<body>
+
+<header class="site-header">
+<div class="container">
+<h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
+
+<nav class="main-nav" role="navigation">
+<ul>
+    <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
+    <div class="bcms-clearfix"></div>
+</li>
+</ul>
+</nav>
+</div>
+</header>
+<main role="main">
+<section class="component-content">
+
+<div class="component-demo" id="live-demo">
+    <div class="container">
+            <div class="main-wrapper" style="text-align: right">
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
+
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
+
+            </div>
+        <div class="bcms-clearfix bcms-clearfix"></div>
+    </div>
+</div>
+<div class="component-info">
+<div class="container">
+<aside class="sidebar">
+    <nav class="spy-nav">
+        <ul>
+            <li><a href="index.html">Intro</a></li>
+            <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
+            <li><a href="null-object.html">Null Objects</a></li>
+            <li><a href="ghost-object.html">Ghost Objects</a></li>
+            <li><a href="remote-object.html">Remote Object</a></li>
+            <li><a href="contributing.html">Contributing</a></li>
+            <li><a href="credits.html">Credits</a></li>
+            <li><a href="copyright.html">Copyright</a></li>
+        </ul>
+    </nav>
+<div class="bcms-clearfix bcms-clearfix"></div>
+<a class="btn btn-action btn-full download-component"
+    href="download.html">Download</a>
+    <div class="bcms-clearfix"></div>
+</aside>
+
+<div class="content">
+    <div class="bcms-clearfix"></div>
+    <h3 class="section-title">License</h3>
+    <p>Copyright (c) 2013 Marco Pivetta</p>
+
+    <p>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:</p>
+
+    <p>The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.</p>
+
+    <p>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.</p>
+<hr />
+
+</main>
+
+    <footer class="site-footer" role="contentinfo">
+        <div class="container">
+            <div class="footer-logos">
+                <ul>
+                    <li><a href="index.html">Intro</a> | </li>
+                    <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
+                    <li><a href="null-object.html">Null Objects</a> | </li>
+                    <li><a href="ghost-object.html">Ghost Objects</a> | </li>
+                    <li><a href="remote-object.html">Remote Object</a> | </li>
+                    <li><a href="contributing.html">Contributing</a> | </li>
+                    <li><a href="credits.html">Credits</a> | </li>
+                    <li><a href="copyright.html">Copyright</a></li>
+                </ul>
+            </div>
+        </div>
+
+        <div class="bcms-clearfix"></div>
+    </footer>
+    <div class="bcms-clearfix"></div>
+    </body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/html-docs/credits.html b/vendor/ocramius/proxy-manager/html-docs/credits.html
new file mode 100644
index 0000000000000000000000000000000000000000..673543920ada0245c32df78534004f6766d048d6
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/credits.html
@@ -0,0 +1,113 @@
+<!DOCTYPE html>
+<html class="no-js" id="top">
+<head>
+    <title>ProxyManager - Credits</title>
+
+    <meta name="description" content="A proxyManager write in php" />
+    <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php, credits" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
+    <link href="css/styles.css" rel="stylesheet" />
+
+    <link rel="shortcut icon" href="favicon.ico">
+</head>
+<body>
+
+<header class="site-header">
+<div class="container">
+<h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
+
+<nav class="main-nav" role="navigation">
+<ul>
+    <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
+    <div class="bcms-clearfix"></div>
+</li>
+</ul>
+</nav>
+</div>
+</header>
+<main role="main">
+<section class="component-content">
+
+<div class="component-demo" id="live-demo">
+    <div class="container">
+            <div class="main-wrapper" style="text-align: right">
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
+
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
+
+            </div>
+        <div class="bcms-clearfix bcms-clearfix"></div>
+    </div>
+</div>
+<div class="component-info">
+<div class="container">
+<aside class="sidebar">
+    <nav class="spy-nav">
+        <ul>
+            <li><a href="index.html">Intro</a></li>
+            <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
+            <li><a href="null-object.html">Null Objects</a></li>
+            <li><a href="ghost-object.html">Ghost Objects</a></li>
+            <li><a href="remote-object.html">Remote Object</a></li>
+            <li><a href="contributing.html">Contributing</a></li>
+            <li><a href="credits.html">Credits</a></li>
+            <li><a href="copyright.html">Copyright</a></li>
+        </ul>
+    </nav>
+<div class="bcms-clearfix bcms-clearfix"></div>
+<a class="btn btn-action btn-full download-component"
+    href="download.html">Download</a>
+    <div class="bcms-clearfix"></div>
+</aside>
+
+<div class="content">
+    <div class="bcms-clearfix"></div>
+    <h3 class="section-title">Credits</h3>
+
+    <p>The idea was originated by a <a href="http://marco-pivetta.com/proxy-pattern-in-php/" target="_blank">talk about Proxies in PHP OOP</a> that I gave at the <a href="https://twitter.com/phpugffm" target="_blank">@phpugffm</a> in January 2013.</p>
+<hr />
+    <h3>Contributors</h3>
+
+    <ul>
+        <li><a href="https://github.com/Ocramius" target="_blank">Marco Pivetta</a></li>
+        <li><a href="https://github.com/malukenho" target="_blank">Jefersson Nathan</a></li>
+        <li><a href="https://github.com/blanchonvincent" target="_blank">Blanchon Vincent</a></li>
+        <li><a href="https://github.com/staabm" target="_blank">Markus Staab</a></li>
+        <li><a href="https://github.com/gws" target="_blank">Gordon Stratton</a></li>
+        <li><a href="https://github.com/prolic" target="_blank">Prolic</a></li>
+        <li><a href="https://github.com/guilro" target="_blank">Guillaume Royer</a></li>
+        <li><a href="https://github.com/reiz" target="_blank">Robert Reiz</a></li>
+        <li><a href="https://github.com/leedavis81" target="_blank">Lee Davis</a></li>
+        <li><a href="https://github.com/flip111" target="_blank">flip111</a></li>
+        <li><a href="https://github.com/krymen" target="_blank">Krzysztof Menzyk</a></li>
+        <li><a href="https://github.com/Xerkus" target="_blank">Aleksey Khudyakov</a></li>
+        <li><a href="https://github.com/asm89" target="_blank">Alexander</a></li>
+        <li><a href="https://github.com/raulfraile" target="_blank">Raul Fraile</a></li>
+    </ul>
+
+</main>
+
+    <footer class="site-footer" role="contentinfo">
+        <div class="container">
+            <div class="footer-logos">
+                <ul>
+                    <li><a href="index.html">Intro</a> | </li>
+                    <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
+                    <li><a href="null-object.html">Null Objects</a> | </li>
+                    <li><a href="ghost-object.html">Ghost Objects</a> | </li>
+                    <li><a href="remote-object.html">Remote Object</a> | </li>
+                    <li><a href="contributing.html">Contributing</a> | </li>
+                    <li><a href="credits.html">Credits</a> | </li>
+                    <li><a href="copyright.html">Copyright</a></li>
+                </ul>
+            </div>
+        </div>
+
+        <div class="bcms-clearfix"></div>
+    </footer>
+    <div class="bcms-clearfix"></div>
+    </body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/html-docs/css/styles.css b/vendor/ocramius/proxy-manager/html-docs/css/styles.css
new file mode 100644
index 0000000000000000000000000000000000000000..ae1dceb55b7919eb7223f88329abab3a0099e334
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/css/styles.css
@@ -0,0 +1,203 @@
+html { font-family: sans-serif; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; }
+body { margin: 0; }
+article, aside, details, figcaption, figure, footer, header, hgroup, main, nav, section, summary { display: block; }
+audio, canvas, progress, video { display: inline-block; vertical-align: baseline; }
+audio:not([controls]) { display: none; height: 0; }
+[hidden], template { display: none; }
+a { background: transparent; }
+a:active, a:hover { outline: 0; }
+abbr[title] { border-bottom: 1px dotted; }
+b, strong { font-weight: bold; }
+dfn { font-style: italic; }
+h1 { font-size: 2em; margin: 0.67em 0; }
+mark { background: #ff0; color: #000; }
+small { font-size: 80%; }
+sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
+sup { top: -0.5em; }
+sub { bottom: -0.25em; }
+img { border: 0; }
+svg:not(:root) { overflow: hidden; }
+figure { margin: 1em 40px; }
+hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; }
+pre { overflow: auto; }
+code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; }
+button, input, optgroup, select, textarea { color: inherit; font: inherit; margin: 0; }
+button { overflow: visible; }
+button, select { text-transform: none; }
+button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; cursor: pointer; }
+button[disabled], html input[disabled] { cursor: default; }
+button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
+input { line-height: normal; }
+input[type="checkbox"], input[type="radio"] { box-sizing: border-box; padding: 0; }
+input[type="number"]::-webkit-inner-spin-button, input[type="number"]::-webkit-outer-spin-button { height: auto; }
+input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
+input[type="search"]::-webkit-search-cancel-button, input[type="search"]::-webkit-search-decoration { -webkit-appearance: none; }
+fieldset { border: 1px solid #c0c0c0; margin: 0 2px; padding: 0.35em 0.625em 0.75em; }
+legend { border: 0; padding: 0; }
+textarea { overflow: auto; }
+optgroup { font-weight: bold; }
+table { border-collapse: collapse; border-spacing: 0; }
+td, th { padding: 0; }
+h1, h2, h3, h4, h5, h6, p, ul, ol, li { margin: 0; padding: 0; line-height: normal; }
+a { color: #31811D; text-decoration: none; }
+a:hover { color: #2F611C; text-decoration: none; }
+strong { font-weight: 600; }
+h3 { margin-bottom: 1em; color: #17324f; font-weight: 400; font-size: 3em; }
+h4 { margin-bottom: 1em; font-weight: 400; font-size: 1.375em; }
+p { margin-bottom: 1.5em; font-size: 1.125em; }
+hr { margin: 2.5em 0; padding: 0; width: 100%; height: 3px; border: 0; background: #e6eaef; }
+pre code { padding: 20px; border: 1px solid #EBEBEB; background: #F5F5F5; color: #08468a; font-weight: 200; font-size: .875em; }
+code { background: transparent; color: #08468a; font-size: .875em; }
+form { margin: 0; }
+label { display: block; color: #18324f; font-weight: 400; font-size: 1.5em; margin-bottom: 2em; }
+legend { position: static; margin: 0; padding: 0; font-weight: normal; }
+legend span { position: absolute; top: 0; right: 0; left: 0; display: block; padding: 7px 0; border-bottom: 1px solid #e0dede; color: #ed4a21; font-size: 18px; line-height: 1em; }
+
+/* Menu Sidebar*/ 
+.button-block { padding-top: 15px; }
+.button-block .btn-1 { margin-right: 6px; }
+.btn, .spy-nav a { position: relative; display: inline-block; margin: 0; padding: 0 20px; height: 57px; border: 0; vertical-align: top; text-align: center; text-transform: uppercase; font-weight: 400; font-size: 1.125em; transitionP: all .2s; line-height: 57px; }
+.btn.btn-action, .spy-nav a.btn-action { background: #ee2d4d; color: #fff; }
+.btn.btn-action:hover, .spy-nav a.btn-action:hover { background: #bf0f2d; }
+.btn.btn-default, .spy-nav a { background: #31811D; color: #fff; }
+.btn.btn-default:hover, .spy-nav a:hover { background: #2F611C; color: #fff; }
+.btn.btn-text, .spy-nav a.btn-text { color: #18324f; font-weight: 600; }
+.btn.btn-full, .spy-nav a { display: block; }
+@media only screen and (max-width: 480px) { 
+	.site-header{ position: fixed !important; top: 0; z-index: 999999}
+	.page-title-wrapper{ margin-top: 70px;}
+	.main-wrapper iframe{ width: 42% !important; float: left; margin-left: 8%;}
+	.content iframe{width: 100%; height: 100%;}
+}
+
+.btn-top { position: relative; display: inline-block; float: right; margin: 20px 0 0; padding: 0 30px 0 50px; height: 57px; border: 2px solid ##31811D; color: #31811D; vertical-align: top; text-align: center; text-transform: uppercase; font-weight: 600; font-size: 1.125em; line-height: 53px; transition: all .2s; }
+.btn-top:before { background-position: 0 -140px; width: 52px; height: 52px; position: absolute; top: 0; left: 0; content: ''; }
+@media only screen and (min-resolution: 2dppx), (-webkit-min-device-pixel-ratio: 2) { .btn-top:before { background-position: 0 -140px; background-size: 152px auto; width: 52px; height: 52px; } }
+.btn-top:hover { border-color: #2F611C; color: #2F611C; }
+@media only screen and (max-width: 768px) { .btn-top { float: none; margin-top: 0; margin-bottom: 30px; white-space: nowrap; } }
+@media only screen and (max-width: 480px) { .btn-top { font-size: 0.9em; line-height: 46px; height: 48px; padding-right: 22px; padding-left: 47px; } }
+
+.btn-download { float: right; padding-left: 50px; }
+.btn-download:before { background-position: -18px -116px; width: 16px; height: 16px; position: absolute; top: 50%; left: 20px; margin-top: -7px; content: ''; }
+@media only screen and (min-resolution: 2dppx), (-webkit-min-device-pixel-ratio: 2) { .btn-download:before { background-position: -18px -116px; background-size: 152px auto; width: 16px; height: 16px; } }
+
+.btn-done { float: right; padding-left: 50px; }
+.btn-done:before { background-position: 0 -116px; width: 18px; height: 14px; position: absolute; top: 50%; margin-top: -7px; left: 20px; content: ''; }
+@media only screen and (min-resolution: 2dppx), (-webkit-min-device-pixel-ratio: 2) { .btn-done:before { background-position: 0 -116px; background-size: 152px auto; width: 18px; height: 13.5px; margin-top: -6.75px; } }
+
+.btn-cancel { float: right; }
+
+*, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; }
+
+html { -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; min-width: 280px; }
+@media only screen and (min-width: 64.063em) and (max-width: 90em) { html { min-width: 960px; } }
+
+body { font-size: 16px; font-family: 'Source Sans Pro', sans-serif; min-width: 290px; }
+@media only screen and (max-width: 480px) { body.page-home { background-image: none; } }
+
+img { max-width: 100%; height: auto !important; }
+
+input { -webkit-appearance: none; -webkit-border-radius: 0; border-radius: 0; }
+
+main { overflow: hidden; }
+
+.clearfix:after { content: ""; display: table; clear: both; }
+
+.container { width: 60em; margin-left: auto; margin-right: auto; }
+.container:after { content: " "; display: block; clear: both; }
+@media only screen and (max-width: 1024px) { .container { margin-left: 15px; margin-right: 15px; width: auto; } }
+
+.content ul { padding-left: 19px; list-style-type: square; margin-top: 15px; }
+
+/* Menu top */
+.main-nav { float: right; }
+.fixed-wrapper .main-nav { display: none; }
+.active .main-nav { display: block; }
+.main-nav > ul { list-style: none; }
+.main-nav > ul > li { float: left; }
+.main-nav > ul > li > a { display: block; padding: 22px 30px; color: #fff; text-decoration: none; text-transform: uppercase; font-weight: 600; font-size: 1.375em; line-height: 29px; transition: all .2s; }
+.main-nav > ul > li > a:hover { color: #bfe5f1; background-color: #2F611C; }
+.main-nav > ul > li > a.active { background-color: #2F611C; color: #fff; }
+.main-nav > ul > li > a.opened { background-color: #18324f; }
+@media only screen and (max-width: 600px) { .main-nav { font-size: 0.86em; }
+  .main-nav > ul > li > a { padding-left: 18px; padding-right: 18px; } }
+@media only screen and (max-width: 480px) { .main-nav > ul > li > a { font-size: 0.95em; padding: 22px 6px; } }
+
+.site-header { position: relative; width: 100%; background: #31811D; }
+.site-header h1 { float: left; margin: 15px 0; }
+.site-header h1 a { display: block; }
+.site-header h1 img { display: block; max-height: 42px; }
+@media only screen and (max-width: 480px) { .site-header h1 img { max-height: 42px; } }
+
+.page-title-wrapper { position: relative; padding: 26px 0 55px; text-align: center; }
+.page-title-wrapper .page-title { margin-top: 44px; color: #17324f; font-weight: 400; font-size: 3.75em; }
+.page-title-wrapper .linguistics { padding: 0 2em 13px; border-bottom: 1px solid #D4DBE3; color: #18324f; text-transform: uppercase; font-weight: 400; font-size: 1.25em; }
+@media only screen and (max-width: 768px) { .page-title-wrapper { font-size: 0.8em; } }
+@media only screen and (max-width: 480px) { .page-title-wrapper { font-size: 0.65em; } }
+
+.site-footer { margin-top: 20px; padding-top: 50px; padding-bottom: 50px; background: #18324f; color: #7c8ea3; text-align: center; }
+.site-footer .container { position: relative; }
+.site-footer + .bcms-clearfix:after { content: ""; }
+.about + .site-footer .main { padding-top: 150px; }
+.footer-logos ul li{ list-style: none; display: inline-block;}
+.footer-logos ul li a{ padding-left: 10px; padding-right: 10px}
+.site-footer a{ color: white !important;}
+.site-footer p { text-align: left; display: block; margin-bottom: 1.5em; font-size: 1.125em; }
+@media only screen and (max-width: 1024px) { .site-footer p { margin-left: 0; } }
+@media only screen and (max-width: 768px) { .site-footer p { text-align: center; margin-left: auto; } }
+@media only screen and (max-width: 600px) { .site-footer { font-size: 0.9em; } }
+
+.main-logo { display: block; float: left; margin: 30px 0; }
+.fixed-wrapper .main-logo { display: none; }
+.main-logo img { display: block; }
+.main-logo figure { position: relative; margin: 0; max-width: 56px; }
+.main-logo figcaption { position: absolute; width: 160px; top: 20px; left: 68px; }
+.active .main-logo { display: block; margin: 0; }
+.active .main-logo figure { max-width: 42px; }
+.active .main-logo figcaption { width: 120px; top: 15px; left: 55px; }
+@media only screen and (max-width: 480px) { .main-logo figcaption { display: none; } }
+
+.container { width: 60em; margin-left: auto; margin-right: auto; }
+.container:after { content: " "; display: block; clear: both; }
+@media only screen and (max-width: 1024px) { .container { margin-left: 15px; margin-right: 15px; width: auto; } }
+
+.component-demo { position: relative; padding: 1px 0 0; background: #e6eaef; }
+.component-demo:before { background-image: url("../img/enf.png"); }
+@media only screen and (max-width: 480px) { .component-demo { padding: 40px 0 0; } }
+
+.component-info .container { position: relative; }
+.component-info .sidebar { width: 220px; float: left; margin-top: 75px; }
+.component-info .sidebar .component-meta { margin-top: 10px; font-size: 1.125em; }
+.component-info .sidebar .component-meta span { white-space: nowrap; margin-bottom: 10px; padding-left: 25px; color: #18324f; }
+.component-info .sidebar.sticky { position: fixed; margin-top: 38px; }
+.component-info .content { width: 64.58333333%; float: right; margin-top: 60px; margin-bottom: 75px; }
+.component-info .content h3 { margin-bottom: .75em; font-size: 2.75em; }
+.component-info .content p { margin-bottom: 1.75em; line-height: 1.45; }
+@media only screen and (max-width: 480px) { .component-info .content .section-title { font-size: 2.1em; } }
+@media only screen and (max-width: 768px) { .component-info .sidebar { float: none; margin-left: auto; margin-right: auto; }
+  .component-info .sidebar .component-meta { margin-top: 30px; text-align: center; }
+  .component-info .sidebar.sticky { position: relative; margin-top: 75px; }
+  .component-info .content { float: none; width: 100%; } }
+@media only screen and (max-width: 480px) { .component-info .content { margin-bottom: 0; } }
+
+.spy-nav { margin-bottom: 10px; }
+.spy-nav ul { list-style: none; }
+.spy-nav a { padding-top: 9px; padding-bottom: 10px; height: auto; border-bottom: 1px solid #4B8B20; text-align: left; text-transform: none; font-size: 1.375em; line-height: normal; }
+.spy-nav .active a { border-bottom-color: #fff; background: #fff; color: #17324f; }
+@media only screen and (max-width: 768px) { /*.spy-nav { display: none; } */}
+
+.main-wrapper { margin: 44px auto 44px; max-width: 600px; }
+.main-wrapper label { display: block; margin-bottom: .75em; color: #3f4e5e; font-size: 1.25em; }
+.main-wrapper .text-field { padding: 0 15px; width: 100%; height: 40px; border: 1px solid #CBD3DD; font-size: 1.125em; }
+.main-wrapper ::-webkit-input-placeholder { color: #CBD3DD; font-style: italic; font-size: 18px; }
+.main-wrapper :-moz-placeholder { color: #CBD3DD; font-style: italic; font-size: 18px; }
+.main-wrapper ::-moz-placeholder { color: #CBD3DD; font-style: italic; font-size: 18px; }
+.main-wrapper :-ms-input-placeholder { color: #CBD3DD; font-style: italic; font-size: 18px; }
+
+.page-icon-wrapper:before, .page-icon-wrapper .logo-asp:before, .page-icon-wrapper .logo-hibernate:before, .page-icon-wrapper .logo-angularjs:before, .page-icon-wrapper .logo-requirejs:before, .page-icon-wrapper .logo-reward:before, .component-demo:before {background-repeat: no-repeat; background-size: 100%; width: 92px; height: 108px; position: absolute; left: 50%; margin-left: -46px; top: 0; bottom: auto; margin-top: -28px; content: ''; }
+
+.container { width: 60em; margin-left: auto; margin-right: auto; }
+.container:after { content: " "; display: block; clear: both; }
+@media only screen and (max-width: 1024px) { .container { margin-left: 15px; margin-right: 15px; width: auto; } }
+
+.bcms-clearfix:after {content: ""; visibility: hidden; display: block; height: 0; clear: both; }
diff --git a/vendor/ocramius/proxy-manager/html-docs/download.html b/vendor/ocramius/proxy-manager/html-docs/download.html
new file mode 100644
index 0000000000000000000000000000000000000000..07e9def216a69755368266703704857452c4238b
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/download.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<html class="no-js" id="top">
+<head>
+    <title>ProxyManager</title>
+
+    <meta name="description" content="A proxyManager write in php" />
+    <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
+    <link href="css/styles.css" rel="stylesheet" />
+    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/default.min.css">
+    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script>
+    <script>hljs.initHighlightingOnLoad();</script>
+    <link rel="shortcut icon" href="favicon.ico">
+</head>
+<body>
+
+<header class="site-header">
+<div class="container">
+<h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
+
+<nav class="main-nav" role="navigation">
+<ul>
+    <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
+    <div class="bcms-clearfix"></div>
+</li>
+</ul>
+</nav>
+</div>
+</header>
+<main role="main">
+<section class="component-content">
+
+<div class="component-demo" id="live-demo">
+    <div class="container">
+            <div class="main-wrapper" style="text-align: right">
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
+
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
+
+            </div>
+        <div class="bcms-clearfix bcms-clearfix"></div>
+    </div>
+</div>
+<div class="component-info">
+<div class="container">
+<aside class="sidebar">
+    <nav class="spy-nav">
+        <ul>
+            <li><a href="index.html">Intro</a></li>
+            <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
+            <li><a href="null-object.html">Null Objects</a></li>
+            <li><a href="ghost-object.html">Ghost Objects</a></li>
+            <li><a href="remote-object.html">Remote Object</a></li>
+            <li><a href="contributing.html">Contributing</a></li>
+            <li><a href="credits.html">Credits</a></li>
+            <li><a href="copyright.html">Copyright</a></li>
+        </ul>
+    </nav>
+<div class="bcms-clearfix bcms-clearfix"></div>
+<a class="btn btn-action btn-full download-component"
+    href="download.html">Download</a>
+    <div class="bcms-clearfix"></div>
+</aside>
+
+<div class="content">
+    <div class="bcms-clearfix"></div>
+    <h3 class="section-title">Installation</h3>
+    <p>The suggested installation method is via <a href="https://getcomposer.org/" target="_blank">composer</a>.</p>
+    <pre><code class="sh">php composer.phar require ocramius/proxy-manager:1.0.*</code></pre>
+<hr />
+
+</main>
+
+    <footer class="site-footer" role="contentinfo">
+        <div class="container">
+            <div class="footer-logos">
+                <ul>
+                    <li><a href="index.html">Intro</a> | </li>
+                    <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
+                    <li><a href="null-object.html">Null Objects</a> | </li>
+                    <li><a href="ghost-object.html">Ghost Objects</a> | </li>
+                    <li><a href="remote-object.html">Remote Object</a> | </li>
+                    <li><a href="contributing.html">Contributing</a> | </li>
+                    <li><a href="credits.html">Credits</a> | </li>
+                    <li><a href="copyright.html">Copyright</a></li>
+                </ul>
+            </div>
+        </div>
+
+        <div class="bcms-clearfix"></div>
+    </footer>
+    <div class="bcms-clearfix"></div>
+    </body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/html-docs/favicon.ico b/vendor/ocramius/proxy-manager/html-docs/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..1eb8d69efd190f50a37efab69ad16a5e1226cdaf
Binary files /dev/null and b/vendor/ocramius/proxy-manager/html-docs/favicon.ico differ
diff --git a/vendor/ocramius/proxy-manager/html-docs/ghost-object.html b/vendor/ocramius/proxy-manager/html-docs/ghost-object.html
new file mode 100644
index 0000000000000000000000000000000000000000..d9c96d4fa8a52e15531274034772f3606c7f3049
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/ghost-object.html
@@ -0,0 +1,314 @@
+<!DOCTYPE html>
+<html class="no-js" id="top">
+<head>
+    <title>ProxyManager - Ghost object</title>
+
+    <meta name="description" content="A proxyManager write in php" />
+    <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php, ghost object" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
+    <link href="css/styles.css" rel="stylesheet" />
+    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/default.min.css">
+    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script>
+    <script>hljs.initHighlightingOnLoad();</script>
+    <link rel="shortcut icon" href="favicon.ico">
+</head>
+<body>
+
+<header class="site-header">
+<div class="container">
+<h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
+
+<nav class="main-nav" role="navigation">
+<ul>
+    <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
+    <div class="bcms-clearfix"></div>
+</li>
+</ul>
+</nav>
+</div>
+</header>
+<main role="main">
+<section class="component-content">
+
+<div class="component-demo" id="live-demo">
+    <div class="container">
+            <div class="main-wrapper" style="text-align: right">
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
+
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
+
+            </div>
+        <div class="bcms-clearfix bcms-clearfix"></div>
+    </div>
+</div>
+<div class="component-info">
+<div class="container">
+<aside class="sidebar">
+    <nav class="spy-nav">
+        <ul>
+            <li><a href="index.html">Intro</a></li>
+            <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
+            <li><a href="null-object.html">Null Objects</a></li>
+            <li><a href="ghost-object.html">Ghost Objects</a></li>
+            <li><a href="remote-object.html">Remote Object</a></li>
+            <li><a href="contributing.html">Contributing</a></li>
+            <li><a href="credits.html">Credits</a></li>
+            <li><a href="copyright.html">Copyright</a></li>
+        </ul>
+    </nav>
+<div class="bcms-clearfix bcms-clearfix"></div>
+<a class="btn btn-action btn-full download-component"
+    href="download.html">Download</a>
+    <div class="bcms-clearfix"></div>
+</aside>
+
+<div class="content">
+    <div class="bcms-clearfix"></div>
+    <h3 class="section-title">Lazy Loading Ghost Object Proxies</h3>
+
+    <p>A lazy loading ghost object proxy is a ghost proxy that looks exactly like the real instance of the proxied subject, but which has all properties nulled before initialization.</p>
+<hr />
+
+    <h3 class="section-title">Lazy loading with the Ghost Object</h3>
+
+    <p>In pseudo-code, in userland, <a href="http://www.martinfowler.com/eaaCatalog/lazyLoad.html" target="_blank">lazy loading</a> in a ghost object looks like following:</p>
+
+    <pre>
+        <code class="php">
+class MyObjectProxy
+{
+    private $initialized = false;
+    private $name;
+    private $surname;
+
+    public function doFoo()
+    {
+        $this->init();
+
+        // Perform doFoo routine using loaded variables
+    }
+
+    private function init()
+    {
+        if (! $this->initialized) {
+            $data          = some_logic_that_loads_data();
+
+            $this->name    = $data['name'];
+            $this->surname = $data['surname'];
+
+            $this->initialized = true;
+        }
+    }
+}
+        </code>
+    </pre>
+
+    <p>Ghost objects work similarly to virtual proxies, but since they don't wrap around a "real" instance of the proxied subject, they are better suited for representing dataset rows.</p>
+    
+<hr />
+
+    <h3 class="section-title">When do I use a ghost object?</h3>
+
+    <p>You usually need a ghost object in cases where following applies</p>
+    
+    <ul>
+        <li>you are building a small data-mapper and want to lazily load data across associations in your object graph</li>
+        <li>you want to initialize objects representing rows in a large dataset</li>
+        <li>you want to compare instances of lazily initialized objects without the risk of comparing a proxy with a real subject</li>
+        <li>you are aware of the internal state of the object and are confident in working with its internals via reflection or direct property access</li>
+    </ul>  
+
+<hr />
+
+    <h3 class="section-title">Usage examples</h3>
+
+    <p><a href="https://github.com/Ocramius/ProxyManager" target="_blank">ProxyManager</a> provides a factory that creates lazy loading ghost objects. To use it, follow these steps:</p>
+
+    <p>First of all, define your object's logic without taking care of lazy loading:</p>
+    
+    <pre>
+        <code class="php">
+namespace MyApp;
+
+class Customer
+{
+    private $name;
+    private $surname;
+
+    // just write your business logic or generally logic
+    // don't worry about how complex this object will be!
+    // don't code lazy-loading oriented optimizations in here!
+    public function getName() { return $this->name; }
+    public function setName($name) { $this->name = (string) $name; }
+    public function getSurname() { return $this->surname; }
+    public function setSurname($surname) { $this->surname = (string) $surname; }
+}
+        </code>
+    </pre>
+
+    <p>Then use the proxy manager to create a ghost object of it. You will be responsible of setting its state during lazy loading:</p>
+    
+    <pre>
+        <code class="php">
+namespace MyApp;
+
+use ProxyManager\Factory\LazyLoadingGhostFactory;
+use ProxyManager\Proxy\LazyLoadingInterface;
+
+require_once __DIR__ . '/vendor/autoload.php';
+
+$factory     = new LazyLoadingGhostFactory();
+$initializer = function (LazyLoadingInterface $proxy, $method, array $parameters, & $initializer) {
+    $initializer   = null; // disable initialization
+
+    // load data and modify the object here
+    $proxy->setName('Agent');
+    $proxy->setSurname('Smith');
+
+    return true; // confirm that initialization occurred correctly
+};
+
+$instance = $factory->createProxy('MyApp\Customer', $initializer);
+        </code>
+    </pre>
+
+    <p>You can now simply use your object as before:</p>
+
+    <pre>
+        <code class="php">
+// this will just work as before
+echo $proxy->getName() . ' ' . $proxy->getSurname(); // Agent Smith
+        </code>
+    </pre>
+<hr />
+
+    <h3 class="section-title">Lazy Initialization</h3>
+
+    <p>As you can see, we use a closure to handle lazy initialization of the proxy instance at runtime. The initializer closure signature for ghost objects should be as following:</p>
+
+    <pre>
+        <code class="php">
+/**
+ * @var object  $proxy         the instance the ghost object proxy that is being initialized
+ * @var string  $method        the name of the method that triggered lazy initialization
+ * @var array   $parameters    an ordered list of parameters passed to the method that
+ *                             triggered initialization, indexed by parameter name
+ * @var Closure $initializer   a reference to the property that is the initializer for the
+ *                             proxy. Set it to null to disable further initialization
+ *
+ * @return bool true on success
+ */
+$initializer = function ($proxy, $method, $parameters, &amp; $initializer) {};
+        </code>
+    </pre>
+
+    <p>The initializer closure should usually be coded like following:</p>
+
+    <pre>
+        <code class="php">
+$initializer = function ($proxy, $method, $parameters, & $initializer) {
+    $initializer = null; // disable initializer for this proxy instance
+
+    // modify the object with loaded data
+    $proxy->setFoo(/* ... */);
+    $proxy->setBar(/* ... */);
+
+    return true; // report success
+};
+        </code>
+    </pre>
+
+    <p>The <code>ProxyManager\Factory\LazyLoadingGhostFactory</code> produces proxies that implement both the <code>ProxyManager\Proxy\GhostObjectInterface</code> and the <code>ProxyManager\Proxy\LazyLoadingInterface</code>.</p>
+
+    <p>At any point in time, you can set a new initializer for the proxy:</p>
+
+    <pre>
+        <code class="php">
+$proxy->setProxyInitializer($initializer);
+        </code>
+    </pre>
+
+    <p>In your initializer, you <strong>MUST</strong> turn off any further initialization:</p>
+
+    <pre>
+        <code class="php">
+$proxy->setProxyInitializer(null);
+        </code>
+    </pre>
+
+    <p>or</p>
+
+    <pre>
+        <code class="php">
+$initializer = null; // if you use the initializer passed by reference to the closure
+        </code>
+    </pre>
+<hr />
+
+    <h3 class="section-title">Triggering Initialization</h3>
+
+    <p>A lazy loading ghost object is initialized whenever you access any property or method of it. Any of the following interactions would trigger lazy initialization:</p>
+
+    <pre>
+        <code class="php">
+// calling a method
+$proxy->someMethod();
+
+// reading a property
+echo $proxy->someProperty;
+
+// writing a property
+$proxy->someProperty = 'foo';
+
+// checking for existence of a property
+isset($proxy->someProperty);
+
+// removing a property
+unset($proxy->someProperty);
+
+// cloning the entire proxy
+clone $proxy;
+
+// serializing the proxy
+$unserialized = unserialize(serialize($proxy));
+        </code>
+    </pre>
+
+    <p>Remember to call <code>$proxy->setProxyInitializer(null);</code> to disable initialization of your proxy, or it will happen more than once.</p>
+
+<hr />
+    
+    <h3 class="section-title">Proxying interfaces</h3>
+    
+    <p>You can also generate proxies from an interface FQCN. By proxying an interface, you will only be able to access the methods defined by the interface itself, even if the <code>wrappedObject</code> implements more methods. This will anyway save some memory since the proxy won't contain any properties.</p>
+
+    <p>Tuning performance for production</p>
+
+    <p>See <a href="production.html">Tuning ProxyManager for Production.</a></p>
+
+</main>
+
+    <footer class="site-footer" role="contentinfo">
+        <div class="container">
+            <div class="footer-logos">
+                <ul>
+                    <li><a href="index.html">Intro</a> | </li>
+                    <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
+                    <li><a href="null-object.html">Null Objects</a> | </li>
+                    <li><a href="ghost-object.html">Ghost Objects</a> | </li>
+                    <li><a href="remote-object.html">Remote Object</a> | </li>
+                    <li><a href="contributing.html">Contributing</a> | </li>
+                    <li><a href="credits.html">Credits</a> | </li>
+                    <li><a href="copyright.html">Copyright</a></li>
+                </ul>
+            </div>
+        </div>
+
+        <div class="bcms-clearfix"></div>
+    </footer>
+    <div class="bcms-clearfix"></div>
+    </body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/html-docs/img/block.png b/vendor/ocramius/proxy-manager/html-docs/img/block.png
new file mode 100644
index 0000000000000000000000000000000000000000..fb8f17aaf8479d5e92fb9715d81f5f7c1b262c04
Binary files /dev/null and b/vendor/ocramius/proxy-manager/html-docs/img/block.png differ
diff --git a/vendor/ocramius/proxy-manager/html-docs/img/enf.png b/vendor/ocramius/proxy-manager/html-docs/img/enf.png
new file mode 100644
index 0000000000000000000000000000000000000000..7e15bdda716cc1ce495de59800877f4965ce335e
Binary files /dev/null and b/vendor/ocramius/proxy-manager/html-docs/img/enf.png differ
diff --git a/vendor/ocramius/proxy-manager/html-docs/index.html b/vendor/ocramius/proxy-manager/html-docs/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..a1b2113679c72aa267fffd7cf3f31f5c23d81114
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/index.html
@@ -0,0 +1,295 @@
+<!DOCTYPE html>
+<html class="no-js" id="top">
+<head>
+    <title>ProxyManager</title>
+
+    <meta name="description" content="A proxyManager write in php" />
+    <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
+    <link href="css/styles.css" rel="stylesheet" />
+    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/default.min.css">
+    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script>
+    <script>hljs.initHighlightingOnLoad();</script>
+    <link rel="shortcut icon" href="favicon.ico">
+</head>
+<body>
+
+<header class="site-header">
+<div class="container">
+<h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
+
+<nav class="main-nav" role="navigation">
+<ul>
+    <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
+    <div class="bcms-clearfix"></div>
+</li>
+</ul>
+</nav>
+</div>
+</header>
+<main role="main">
+<section class="component-content"><div class="page-title-wrapper">
+<div class="container">
+    <img src="https://github.com/Ocramius/ProxyManager/raw/master/proxy-manager.png">
+    <h2 class="page-title">Proxy Manager</h2>
+</div>
+</div>
+
+<div class="component-demo" id="live-demo">
+    <div class="container">
+            <div class="main-wrapper" style="text-align: right">
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
+
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
+
+            </div>
+        <div class="bcms-clearfix bcms-clearfix"></div>
+    </div>
+</div>
+<div class="component-info">
+<div class="container">
+
+<aside class="sidebar">
+    <nav class="spy-nav">
+        <ul>
+            <li><a href="index.html">Intro</a></li>
+            <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
+            <li><a href="null-object.html">Null Objects</a></li>
+            <li><a href="ghost-object.html">Ghost Objects</a></li>
+            <li><a href="remote-object.html">Remote Object</a></li>
+            <li><a href="contributing.html">Contributing</a></li>
+            <li><a href="credits.html">Credits</a></li>
+            <li><a href="copyright.html">Copyright</a></li>
+        </ul>
+    </nav>
+<div class="bcms-clearfix bcms-clearfix"></div>
+<a class="btn btn-action btn-full download-component"
+    href="download.html">Download</a>
+    <div class="bcms-clearfix"></div>
+</aside>
+
+<div class="content">
+    <h3>Proxy Manager</h3>
+    <p>This library aims at providing abstraction for generating various kinds of <a href="http://ocramius.github.io/presentations/proxy-pattern-in-php/" target="_blank">proxy classes</a>.</p>
+    <p>If you want to learn more about proxy pattern watch this video:</p>
+
+    <iframe width="640" height="390" src="//www.youtube.com/embed/Ka8wlV8M6Vg" frameborder="0" allowfullscreen></iframe>
+<hr />
+    <div class="bcms-clearfix"></div>
+    <h3 class="section-title">Installation</h3>
+    <p>The suggested installation method is via <a href="https://getcomposer.org/" target="_blank">composer</a>.</p>
+    <pre><code class="sh">php composer.phar require ocramius/proxy-manager:1.0.*</code></pre>
+<hr />
+
+    <h3 class="section-title" id="virtualproxy">Lazy Loading Value Holders (Virtual Proxy)</h3>
+
+    <p>ProxyManager can generate
+        <a href="http://www.martinfowler.com/eaaCatalog/lazyLoad.html" target="_blank">lazy loading value holders</a>,
+         which are virtual proxies capable of saving performance and memory for objects that
+        require a lot of dependencies or CPU cycles to be loaded:
+        particularly useful when you may not always need the object,
+        but are constructing it anyways.</p>
+
+    <pre>
+        <code class="php">
+$factory = new \ProxyManager\Factory\LazyLoadingValueHolderFactory();
+
+$proxy = $factory->createProxy(
+    'MyApp\HeavyComplexObject',
+    function (&amp; $wrappedObject, $proxy, $method, $parameters, &amp; $initializer) {
+        $wrappedObject = new HeavyComplexObject(); // instantiation logic here
+        $initializer   = null; // turning off further lazy initialization
+
+        return true;
+    }
+);
+
+$proxy->doFoo();
+        </code>
+    </pre>
+
+    <p>See the <a href="virtual-proxy.html">complete documentation about lazy loading value holders</a>.</p>
+<hr />
+
+    <h3 class="section-title">Access Interceptor Value Holder</h3>
+
+    <p>An access interceptor value holder is a smart reference that allows you to execute
+     logic before and after a particular method is executed or a particular property is
+     accessed, and it allows to manipulate parameters and return values depending on
+     your needs.</p>
+
+    <pre>
+        <code class="php">
+$factory = new \ProxyManager\Factory\AccessInterceptorValueHolderFactory();
+
+$proxy = $factory->createProxy(
+    new \My\Db\Connection(),
+    array('query' => function () { echo "Query being executed!\n"; }),
+    array('query' => function () { echo "Query completed!\n"; })
+);
+
+$proxy->query(); // produces "Query being executed!\nQuery completed!\n"
+        </code>
+    </pre>
+
+    <p>See the <a href="access-interceptor-value-holder-proxy.html">complete documentation about access interceptor value holders</a>.</p>
+<hr />
+
+    <h3 class="section-title">Access Interceptor Scope Localizer</h3>
+
+    <p>An access interceptor scope localizer works exactly like an access interceptor
+     value holder, but it is safe to use to proxy fluent interfaces.</p>
+
+    <p>See the <a href="access-interceptor-scope-localizer-proxy.html">complete documentation about access interceptor scope localizer</a>.</p>
+<hr />
+
+
+    <h3 class="section-title">Null Objects</h3>
+
+    <p>A Null Object proxy implements the null object pattern.</p>
+
+    <p>This kind of proxy allows you to have fallback logic in case loading of the wrapped value failed.</p>
+    <pre>
+        <code class="php">
+$factory = new \ProxyManager\Factory\NullObjectFactory();
+
+$proxy = $factory->createProxy('My\EntityObject');
+
+$proxy->getName(); // empty return
+        </code>
+    </pre>
+
+    <p>A Null Object Proxy can be created from an object, a class name or an interface name:</p>
+    <pre>
+        <code class="php">
+$factory = new \ProxyManager\Factory\NullObjectFactory();
+
+$proxy = $factory->createProxy('My\EntityObjectInterface');
+$proxy->getName(); // empty return
+
+$proxy = $factory->createProxy($entity); // created from object
+$proxy->getName(); // empty return
+        </code>
+    </pre>
+
+    <p>See the <a href="null-object.html">complete documentation about null object proxy</a>.</p>
+
+<hr />
+
+    <h3 class="section-title">Ghost Objects</h3>
+
+    <p>Similar to value holder, a ghost object is usually created to handle lazy loading.</p>
+
+    <p>The difference between a value holder and a ghost object is that the ghost
+        object does not contain a real instance of the required object, but handles
+        lazy loading by initializing its own inherited properties.</p>
+
+    <p>ProxyManager can generate
+        <a href="http://www.martinfowler.com/eaaCatalog/lazyLoad.html" target="_blank">lazy loading ghost objects</a>,
+         which are proxies used to save performance and memory for large datasets and
+         graphs representing relational data. Ghost objects are particularly useful
+         when building data-mappers.</p>
+
+    <p>Additionally, the overhead introduced by ghost objects is very low when
+        compared to the memory and performance overhead caused by virtual proxies.</p>
+
+    <pre>
+        <code class="php">
+$factory = new \ProxyManager\Factory\LazyLoadingGhostFactory();
+
+$proxy = $factory->createProxy(
+    'MyApp\HeavyComplexObject',
+    function ($proxy, $method, $parameters, & $initializer) {
+        $initializer   = null; // turning off further lazy initialization
+
+        // modify the proxy instance
+        $proxy->setFoo('foo');
+        $proxy->setBar('bar');
+
+        return true;
+    }
+);
+
+$proxy->doFoo();
+        </code>
+    </pre>
+
+    <p>See the <a href="ghost-object.html">complete documentation about lazy loading ghost objects</a>.</p>
+
+<hr />
+
+    <h3 class="section-title">Remote Object</h3>
+
+    <p>A remote object proxy is an object that is located on a different system,
+        but is used as if it was available locally. There's various possible
+        remote proxy implementations, which could be based on xmlrpc/jsonrpc/soap/dnode/etc.</p>
+
+    <p>This example uses the XML-RPC client of Zend Framework 2:</p>
+
+    <pre>
+        <code class="php">
+interface FooServiceInterface
+{
+    public function foo();
+}
+
+$factory = new \ProxyManager\Factory\RemoteObjectFactory(
+    new \ProxyManager\Factory\RemoteObject\Adapter\XmlRpc(
+        new \Zend\XmlRpc\Client('https://example.com/rpc-endpoint')
+    )
+);
+
+// proxy is your remote implementation
+$proxy = $factory->createProxy('FooServiceInterface');
+
+var_dump($proxy->foo());
+        </code>
+    </pre>
+
+    <p>See the <a href="remote-object.html">complete documentation about remote objects</a>.</p>
+<hr />
+
+
+<h3 class="section-title">Contributing</h3>
+    <p>Please read the <a href="contributing.html">CONTRIBUTING</a> contents if you wish to help out!</p>
+
+<hr />
+
+<h3 class="section-title">Credits</h3>
+
+    <p>The idea was originated by a <a href="http://marco-pivetta.com/proxy-pattern-in-php/" target="_blank">talk about Proxies in PHP OOP</a> that I gave at the <a href="https://twitter.com/phpugffm" target="_blank">@phpugffm</a> in January 2013.</p>
+
+
+    <div class="bcms-clearfix"></div>
+
+    </div>
+    </div>
+</div>
+
+
+</main>
+
+    <footer class="site-footer" role="contentinfo">
+        <div class="container">
+            <div class="footer-logos">
+                <ul>
+                    <li><a href="index.html">Intro</a> | </li>
+                    <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
+                    <li><a href="null-object.html">Null Objects</a> | </li>
+                    <li><a href="ghost-object.html">Ghost Objects</a> | </li>
+                    <li><a href="remote-object.html">Remote Object</a> | </li>
+                    <li><a href="contributing.html">Contributing</a> | </li>
+                    <li><a href="credits.html">Credits</a> | </li>
+                    <li><a href="copyright.html">Copyright</a></li>
+                </ul>
+            </div>
+        </div>
+
+        <div class="bcms-clearfix"></div>
+    </footer>
+    <div class="bcms-clearfix"></div>
+    </body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/html-docs/null-object.html b/vendor/ocramius/proxy-manager/html-docs/null-object.html
new file mode 100644
index 0000000000000000000000000000000000000000..c0f5395ba58d28838dbcc41c69898a7b0e69e8fc
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/null-object.html
@@ -0,0 +1,185 @@
+<!DOCTYPE html>
+<html class="no-js" id="top">
+<head>
+    <title>ProxyManager - Null object</title>
+
+    <meta name="description" content="A proxyManager write in php" />
+    <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php, null object" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
+    <link href="css/styles.css" rel="stylesheet" />
+    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/default.min.css">
+    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script>
+    <script>hljs.initHighlightingOnLoad();</script>
+    <link rel="shortcut icon" href="favicon.ico">
+</head>
+<body>
+
+<header class="site-header">
+<div class="container">
+<h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
+
+<nav class="main-nav" role="navigation">
+<ul>
+    <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
+    <div class="bcms-clearfix"></div>
+</li>
+</ul>
+</nav>
+</div>
+</header>
+<main role="main">
+<section class="component-content">
+
+<div class="component-demo" id="live-demo">
+    <div class="container">
+            <div class="main-wrapper" style="text-align: right">
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
+
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
+
+            </div>
+        <div class="bcms-clearfix bcms-clearfix"></div>
+    </div>
+</div>
+<div class="component-info">
+<div class="container">
+<aside class="sidebar">
+    <nav class="spy-nav">
+        <ul>
+            <li><a href="index.html">Intro</a></li>
+            <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
+            <li><a href="null-object.html">Null Objects</a></li>
+            <li><a href="ghost-object.html">Ghost Objects</a></li>
+            <li><a href="remote-object.html">Remote Object</a></li>
+            <li><a href="contributing.html">Contributing</a></li>
+            <li><a href="credits.html">Credits</a></li>
+            <li><a href="copyright.html">Copyright</a></li>
+        </ul>
+    </nav>
+<div class="bcms-clearfix bcms-clearfix"></div>
+<a class="btn btn-action btn-full download-component"
+    href="download.html">Download</a>
+    <div class="bcms-clearfix"></div>
+</aside>
+
+<div class="content">
+    <div class="bcms-clearfix"></div>
+    <h3 class="section-title">Null Object Proxy</h3>
+    <p>A Null Object proxy is a <a href="http://en.wikipedia.org/wiki/Null_Object_pattern" target="_blank">null object pattern</a> implementation. The proxy factory creates a new object with defined neutral behavior based on an other object, class name or interface.</p>
+<hr />
+
+    <h3 class="section-title">What is null object proxy ?</h3>
+
+    <p>In your application, when you can't return the object related to the request, the consumer of the model must check for the return value and handle the failing condition gracefully, thus generating an explosion of conditionals throughout your code. Fortunately, this seemingly-tangled situation can be sorted out simply by creating a polymorphic implementation of the domain object, which would implement the same interface as the one of the object in question, only that its methods wouldn’t do anything, therefore offloading client code from doing repetitive checks for ugly null values when the operation is executed.</p>
+
+<hr />
+
+    <h3 class="section-title">Usage examples</h3>
+
+    <pre>
+        <code class="php">
+class UserMapper
+{   
+    private $adapter;
+
+    public function __construct(DatabaseAdapterInterface $adapter) {
+        $this->adapter = $adapter;
+    }
+
+    public function fetchById($id) {
+        $this->adapter->select("users", array("id" => $id));
+        if (!$row = $this->adapter->fetch()) {
+            return null;
+        }
+        return $this->createUser($row);
+    }
+
+    private function createUser(array $row) {
+        $user = new Entity\User($row["name"], $row["email"]);
+        $user->setId($row["id"]);
+        return $user;
+    }
+}
+        </code>
+    </pre>
+
+    <p>If you want to remove conditionals from client code, you need to have a version of the entity conforming to the corresponding interface. With the Null Object Proxy, you can build this object :</p>
+
+    <pre>
+        <code class="php">
+$factory = new \ProxyManager\Factory\NullObjectFactory();
+
+$nullUser = $factory->createProxy('Entity\User');
+
+var_dump($nullUser->getName()); // empty return
+        </code>
+    </pre>
+
+    <p>You can now return a valid entity :</p>
+
+    <pre>
+        <code class="php">
+class UserMapper
+{   
+    private $adapter;
+
+    public function __construct(DatabaseAdapterInterface $adapter) {
+        $this->adapter = $adapter;
+    }
+
+    public function fetchById($id) {
+        $this->adapter->select("users", array("id" => $id));
+        return $this->createUser($this->adapter->fetch());
+    }
+
+    private function createUser($row) {
+        if (!$row) {
+            $factory = new \ProxyManager\Factory\NullObjectFactory();
+
+            return $factory->createProxy('Entity\User');
+        }
+        $user = new Entity\User($row["name"], $row["email"]);
+        $user->setId($row["id"]);
+        return $user; 
+    }
+}
+        </code>
+    </pre>
+    
+    
+<hr />
+
+    <h3 class="section-title">Proxying interfaces</h3>
+
+    <p>You can also generate proxies from an interface FQCN. By proxying an interface, you will only be able to access the methods defined by the interface itself, and like with the object, the methods are empty.</p>
+
+    <p>Tuning performance for production</p>
+
+    <p>See <a href="production.html">Tuning ProxyManager for Production.</a></p>
+
+</main>
+
+    <footer class="site-footer" role="contentinfo">
+        <div class="container">
+            <div class="footer-logos">
+                <ul>
+                    <li><a href="index.html">Intro</a> | </li>
+                    <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
+                    <li><a href="null-object.html">Null Objects</a> | </li>
+                    <li><a href="ghost-object.html">Ghost Objects</a> | </li>
+                    <li><a href="remote-object.html">Remote Object</a> | </li>
+                    <li><a href="contributing.html">Contributing</a> | </li>
+                    <li><a href="credits.html">Credits</a> | </li>
+                    <li><a href="copyright.html">Copyright</a></li>
+                </ul>
+            </div>
+        </div>
+
+        <div class="bcms-clearfix"></div>
+    </footer>
+    <div class="bcms-clearfix"></div>
+    </body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/html-docs/production.html b/vendor/ocramius/proxy-manager/html-docs/production.html
new file mode 100644
index 0000000000000000000000000000000000000000..c9b4f03fbd58eff4c8ca5fe1af3abc15ef8f96d6
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/production.html
@@ -0,0 +1,114 @@
+<!DOCTYPE html>
+<html class="no-js" id="top">
+<head>
+    <title>ProxyManager - Tuning the ProxyManager for production</title>
+
+    <meta name="description" content="A proxyManager write in php" />
+    <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php, production" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
+    <link href="css/styles.css" rel="stylesheet" />
+    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/default.min.css">
+    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script>
+    <script>hljs.initHighlightingOnLoad();</script>
+    <link rel="shortcut icon" href="favicon.ico">
+</head>
+<body>
+
+<header class="site-header">
+<div class="container">
+<h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
+
+<nav class="main-nav" role="navigation">
+<ul>
+    <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
+    <div class="bcms-clearfix"></div>
+</li>
+</ul>
+</nav>
+</div>
+</header>
+<main role="main">
+<section class="component-content">
+
+<div class="component-demo" id="live-demo">
+    <div class="container">
+            <div class="main-wrapper" style="text-align: right">
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
+
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
+
+            </div>
+        <div class="bcms-clearfix bcms-clearfix"></div>
+    </div>
+</div>
+<div class="component-info">
+<div class="container">
+<aside class="sidebar">
+    <nav class="spy-nav">
+        <ul>
+            <li><a href="index.html">Intro</a></li>
+            <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
+            <li><a href="null-object.html">Null Objects</a></li>
+            <li><a href="ghost-object.html">Ghost Objects</a></li>
+            <li><a href="remote-object.html">Remote Object</a></li>
+            <li><a href="contributing.html">Contributing</a></li>
+            <li><a href="credits.html">Credits</a></li>
+            <li><a href="copyright.html">Copyright</a></li>
+        </ul>
+    </nav>
+<div class="bcms-clearfix bcms-clearfix"></div>
+<a class="btn btn-action btn-full download-component"
+    href="download.html">Download</a>
+    <div class="bcms-clearfix"></div>
+</aside>
+
+<div class="content">
+    <div class="bcms-clearfix"></div>
+    <h3 class="section-title">Tuning the ProxyManager for production</h3>
+
+    <p>By default, all proxy factories generate the required proxy classes at runtime.</p>
+    
+    <p>Proxy generation causes I/O operations and uses a lot of reflection, so be sure to have generated all of your proxies <strong>before deploying your code on a live system</strong>, or you may experience poor performance.</p>
+    
+    <p>You can configure ProxyManager so that it will try autoloading the proxies first. Generating them "bulk" is not yet implemented:</p>
+
+    <pre>
+        <code class="php">
+$config = new \ProxyManager\Configuration();
+$config->setProxiesTargetDir(__DIR__ . '/my/generated/classes/cache/dir');
+
+// then register the autoloader
+spl_autoload_register($config->getProxyAutoloader());
+        </code>
+    </pre>
+
+    <p>Generating a classmap with all your proxy classes in it will also work perfectly.</p>
+
+    <p>Please note that all the currently implemented <code>ProxyManager\Factory\*</code> classes accept a <code>ProxyManager\Configuration</code> object as optional constructor parameter. This allows for fine-tuning of ProxyManager according to your needs.</p>
+
+</main>
+
+    <footer class="site-footer" role="contentinfo">
+        <div class="container">
+            <div class="footer-logos">
+                <ul>
+                    <li><a href="index.html">Intro</a> | </li>
+                    <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
+                    <li><a href="null-object.html">Null Objects</a> | </li>
+                    <li><a href="ghost-object.html">Ghost Objects</a> | </li>
+                    <li><a href="remote-object.html">Remote Object</a> | </li>
+                    <li><a href="contributing.html">Contributing</a> | </li>
+                    <li><a href="credits.html">Credits</a> | </li>
+                    <li><a href="copyright.html">Copyright</a></li>
+                </ul>
+            </div>
+        </div>
+
+        <div class="bcms-clearfix"></div>
+    </footer>
+    <div class="bcms-clearfix"></div>
+    </body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/html-docs/remote-object.html b/vendor/ocramius/proxy-manager/html-docs/remote-object.html
new file mode 100644
index 0000000000000000000000000000000000000000..b04d566346e2aa1f15a4f70acc6ac2529dbf291e
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/remote-object.html
@@ -0,0 +1,203 @@
+<!DOCTYPE html>
+<html class="no-js" id="top">
+<head>
+    <title>ProxyManager - Remote object</title>
+
+    <meta name="description" content="A proxyManager write in php" />
+    <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php, remote object" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
+    <link href="css/styles.css" rel="stylesheet" />
+    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/default.min.css">
+    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script>
+    <script>hljs.initHighlightingOnLoad();</script>
+    <link rel="shortcut icon" href="favicon.ico">
+</head>
+<body>
+
+<header class="site-header">
+<div class="container">
+<h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
+
+<nav class="main-nav" role="navigation">
+<ul>
+    <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
+    <div class="bcms-clearfix"></div>
+</li>
+</ul>
+</nav>
+</div>
+</header>
+<main role="main">
+<section class="component-content">
+
+<div class="component-demo" id="live-demo">
+    <div class="container">
+            <div class="main-wrapper" style="text-align: right">
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
+
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
+
+            </div>
+        <div class="bcms-clearfix bcms-clearfix"></div>
+    </div>
+</div>
+<div class="component-info">
+<div class="container">
+<aside class="sidebar">
+    <nav class="spy-nav">
+        <ul>
+            <li><a href="index.html">Intro</a></li>
+            <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
+            <li><a href="null-object.html">Null Objects</a></li>
+            <li><a href="ghost-object.html">Ghost Objects</a></li>
+            <li><a href="remote-object.html">Remote Object</a></li>
+            <li><a href="contributing.html">Contributing</a></li>
+            <li><a href="credits.html">Credits</a></li>
+            <li><a href="copyright.html">Copyright</a></li>
+        </ul>
+    </nav>
+<div class="bcms-clearfix bcms-clearfix"></div>
+<a class="btn btn-action btn-full download-component"
+    href="download.html">Download</a>
+    <div class="bcms-clearfix"></div>
+</aside>
+
+<div class="content">
+    <div class="bcms-clearfix"></div>
+    <h3 class="section-title">Remote Object Proxy</h3>
+
+    <p>The remote object implementation is a mechanism that enables an local object to control an other object on an other server. Each call method on the local object will do a network call to get information or execute operations on the remote object.</p>
+<hr />
+
+    <h3 class="section-title">What is remote object proxy ?</h3>
+
+    <p>A remote object is based on an interface. The remote interface defines the API that a consumer can call. This interface must be implemented both by the client and the RPC server.</p>
+<hr />
+
+    <h3 class="section-title">Adapters</h3>
+
+    <p>ZendFramework's RPC components (XmlRpc, JsonRpc &amp; Soap) can be used easily with the remote object. You will need to require the one you need via composer, though:</p>
+
+    <pre>
+        <code class="sh">
+$ php composer.phar require zendframework/zend-xmlrpc:2.*
+$ php composer.phar require zendframework/zend-json:2.*
+$ php composer.phar require zendframework/zend-soap:2.*
+        </code>
+    </pre>
+
+    <p>ProxyManager comes with 3 adapters:</p>
+
+    <ul>
+        <li><code>ProxyManager\Factory\RemoteObject\Adapter\XmlRpc</code></li>
+        <li><code>ProxyManager\Factory\RemoteObject\Adapter\JsonRpc</code></li>
+        <li><code>ProxyManager\Factory\RemoteObject\Adapter\Soap</code></li>
+    </ul>
+
+<hr />
+
+    <h3 class="section-title">Usage examples</h3>
+
+    <p>RPC server side code (<code>xmlrpc.php</code> in your local webroot):</p>
+
+    <pre>
+        <code class="php">
+interface FooServiceInterface
+{
+    public function foo();
+}
+
+class Foo implements FooServiceInterface
+{
+    /**
+     * Foo function
+     * @return string
+     */
+    public function foo()
+    {
+        return 'bar remote';
+    }
+}
+
+$server = new Zend\XmlRpc\Server();
+$server->setClass('Foo', 'FooServiceInterface');  // my FooServiceInterface implementation
+$server->handle();
+        </code>
+    </pre>
+
+    <p>Client side code (proxy) :</p>
+
+    <pre>
+        <code class="php">
+interface FooServiceInterface
+{
+    public function foo();
+}
+
+$factory = new \ProxyManager\Factory\RemoteObjectFactory(
+    new \ProxyManager\Factory\RemoteObject\Adapter\XmlRpc(
+        new \Zend\XmlRpc\Client('https://localhost/xmlrpc.php')
+    )
+);
+
+$proxy = $factory->createProxy('FooServiceInterface');
+
+var_dump($proxy->foo()); // "bar remote"
+        </code>
+    </pre>
+<hr />
+
+    <h3 class="section-title">Implementing custom adapters</h3>
+
+    <p>Your adapters must implement <code>ProxyManager\Factory\RemoteObject\AdapterInterface</code> :</p>
+
+    <pre>
+        <code class="php">
+interface AdapterInterface
+{
+    /**
+     * Call remote object
+     *
+     * @param string $wrappedClass
+     * @param string $method
+     * @param array $params
+     *
+     * @return mixed
+     */
+    public function call($wrappedClass, $method, array $params = array());
+}
+        </code>
+    </pre>
+
+    <p>It is very easy to create your own implementation (for RESTful web services, for example). Simply pass your own adapter instance to your factory at construction time</p>
+
+    <p>Tuning performance for production</p>
+
+    <p>See <a href="production.html">Tuning ProxyManager for Production.</a></p>
+
+</main>
+
+    <footer class="site-footer" role="contentinfo">
+        <div class="container">
+            <div class="footer-logos">
+                <ul>
+                    <li><a href="index.html">Intro</a> | </li>
+                    <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
+                    <li><a href="null-object.html">Null Objects</a> | </li>
+                    <li><a href="ghost-object.html">Ghost Objects</a> | </li>
+                    <li><a href="remote-object.html">Remote Object</a> | </li>
+                    <li><a href="contributing.html">Contributing</a> | </li>
+                    <li><a href="credits.html">Credits</a> | </li>
+                    <li><a href="copyright.html">Copyright</a></li>
+                </ul>
+            </div>
+        </div>
+
+        <div class="bcms-clearfix"></div>
+    </footer>
+    <div class="bcms-clearfix"></div>
+    </body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/html-docs/virtual-proxy.html b/vendor/ocramius/proxy-manager/html-docs/virtual-proxy.html
new file mode 100644
index 0000000000000000000000000000000000000000..71ab39dbd46588b9ccbd6945ecea3da8f8133dee
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/html-docs/virtual-proxy.html
@@ -0,0 +1,305 @@
+<!DOCTYPE html>
+<html class="no-js" id="top">
+<head>
+    <title>ProxyManager - Virtual Proxy</title>
+
+    <meta name="description" content="A proxyManager write in php" />
+    <meta name="keywords" content="ProxyManager, proxy, manager, ocramius, Marco Pivetta, php, virtual proxy" />
+    <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1" />
+    <link href='http://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,600' rel='stylesheet' type='text/css'>
+    <link href="css/styles.css" rel="stylesheet" />
+    <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/styles/default.min.css">
+    <script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/8.3/highlight.min.js"></script>
+    <script>hljs.initHighlightingOnLoad();</script>
+    <link rel="shortcut icon" href="favicon.ico">
+</head>
+<body>
+
+<header class="site-header">
+<div class="container">
+<h1><a href="index.html"><img alt="ProxyManager" src="img/block.png" /></a></h1>
+
+<nav class="main-nav" role="navigation">
+<ul>
+    <li><a href="https://github.com/Ocramius/ProxyManager" target="_blank">Github</a>
+    <div class="bcms-clearfix"></div>
+</li>
+</ul>
+</nav>
+</div>
+</header>
+<main role="main">
+<section class="component-content">
+
+<div class="component-demo" id="live-demo">
+    <div class="container">
+            <div class="main-wrapper" style="text-align: right">
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=fork&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="310" height="40"></iframe>
+
+                <iframe src="http://ghbtns.com/github-btn.html?user=ocramius&amp;repo=ProxyManager&amp;type=watch&amp;count=true&amp;size=large"
+  allowtransparency="true" frameborder="0" scrolling="0" width="200" height="40"></iframe>
+
+            </div>
+        <div class="bcms-clearfix bcms-clearfix"></div>
+    </div>
+</div>
+<div class="component-info">
+<div class="container">
+<aside class="sidebar">
+    <nav class="spy-nav">
+        <ul>
+            <li><a href="index.html">Intro</a></li>
+            <li><a href="virtual-proxy.html">Virtual Proxy</a></li>
+            <li><a href="null-object.html">Null Objects</a></li>
+            <li><a href="ghost-object.html">Ghost Objects</a></li>
+            <li><a href="remote-object.html">Remote Object</a></li>
+            <li><a href="contributing.html">Contributing</a></li>
+            <li><a href="credits.html">Credits</a></li>
+            <li><a href="copyright.html">Copyright</a></li>
+        </ul>
+    </nav>
+<div class="bcms-clearfix bcms-clearfix"></div>
+<a class="btn btn-action btn-full download-component"
+    href="download.html">Download</a>
+    <div class="bcms-clearfix"></div>
+</aside>
+
+<div class="content">
+    <div class="bcms-clearfix"></div>
+    <h3 class="section-title">Lazy Loading Value Holder Proxy</h3>
+    <p>A lazy loading value holder proxy is a virtual proxy that wraps and lazily initializes a "real" instance of the proxied class.</p>
+<hr />
+
+    <h3 class="section-title">What is lazy loading?</h3>
+
+    <p>In pseudo-code, in userland, <a href="http://www.martinfowler.com/eaaCatalog/lazyLoad.html" target="_blank">lazy loading</a> looks like following:</p>
+
+    <pre>
+        <code class="php">
+class MyObjectProxy
+{
+    private $wrapped;
+
+    public function doFoo()
+    {
+        $this->init();
+
+        return $this->wrapped->doFoo();
+    }
+
+    private function init()
+    {
+        if (null === $this->wrapped) {
+            $this->wrapped = new MyObject();
+        }
+    }
+}
+    </code>
+</pre>
+
+    <p>This code is problematic, and adds a lot of complexity that makes your unit tests' code even worse.</p>
+
+    <p>Also, this kind of usage often ends up in coupling your code with a particular <a href="http://martinfowler.com/articles/injection.html" target="_blank">Dependency Injection Container</a> or a framework that fetches dependencies for you. That way, further complexity is introduced, and some problems related with service location raise, as I've explained <a href="http://ocramius.github.io/blog/zf2-and-symfony-service-proxies-with-doctrine-proxies/" target="_blank">in this article</a>.</p>
+
+    <p>Lazy loading value holders abstract this logic for you, hiding your complex, slow, performance-impacting objects behind tiny wrappers that have their same API, and that get initialized at first usage.</p>
+    
+<hr />
+
+    <h3 class="section-title">When do I use a lazy value holder?</h3>
+
+    <p>You usually need a lazy value holder in cases where following applies</p>
+
+    <ul>
+        <li>your object takes a lot of time and memory to be initialized (with all dependencies)</li>
+        <li>your object is not always used, and the instantiation overhead can be avoided</li>
+    </ul>
+
+<hr />
+
+    <h3 class="section-title">Usage examples</h3>
+
+    <p>ProxyManager provides a factory that eases instantiation of lazy loading value holders. To use it, follow these steps:</p>
+
+    <p>First of all, define your object's logic without taking care of lazy loading:</p>
+
+<pre>
+    <code class="php">
+namespace MyApp;
+
+class HeavyComplexObject
+{
+    public function __construct()
+    {
+        // just write your business logic
+        // don't worry about how heavy initialization of this will be!
+    }
+
+    public function doFoo() {
+        echo "OK!"
+    }
+}
+    </code>
+</pre>
+
+<p>Then use the proxy manager to create a lazy version of the object (as a proxy):</p>
+
+<pre>
+    <code class="php">
+namespace MyApp;
+
+use ProxyManager\Factory\LazyLoadingValueHolderFactory;
+use ProxyManager\Proxy\LazyLoadingInterface;
+
+require_once __DIR__ . '/vendor/autoload.php';
+
+$factory     = new LazyLoadingValueHolderFactory();
+$initializer = function (& $wrappedObject, LazyLoadingInterface $proxy, $method, array $parameters, & $initializer) {
+    $initializer   = null; // disable initialization
+    $wrappedObject = new HeavyComplexObject(); // fill your object with values here
+
+    return true; // confirm that initialization occurred correctly
+};
+
+$instance = $factory->createProxy('MyApp\HeavyComplexObject', $initializer);
+    </code>
+</pre>
+
+<p>You can now simply use your object as before:</p>
+
+<pre>
+    <code class="php">
+// this will just work as before
+$proxy->doFoo(); // OK!
+    </code>
+</pre>
+<hr />
+
+
+    <h3 class="section-title">Lazy Initialization</h3>
+
+    <p>As you can see, we use a closure to handle lazy initialization of the proxy instance at runtime. The initializer closure signature should be as following:</p>
+
+<pre>
+    <code class="php">
+/**
+ * @var object  $wrappedObject the instance (passed by reference) of the wrapped object,
+ *                             set it to your real object
+ * @var object  $proxy         the instance proxy that is being initialized
+ * @var string  $method        the name of the method that triggered lazy initialization
+ * @var string  $parameters    an ordered list of parameters passed to the method that
+ *                             triggered initialization, indexed by parameter name
+ * @var Closure $initializer   a reference to the property that is the initializer for the
+ *                             proxy. Set it to null to disable further initialization
+ *
+ * @return bool true on success
+ */
+$initializer = function (& $wrappedObject, $proxy, $method, $parameters, & $initializer) {};
+    </code>
+</pre>
+
+<p>The initializer closure should usually be coded like following:</p>
+
+<pre>
+    <code class="php">
+$initializer = function (& $wrappedObject, $proxy, $method, $parameters, & $initializer) {
+    $newlyCreatedObject = new Foo(); // instantiation logic
+    $newlyCreatedObject->setBar('baz') // instantiation logic
+    $newlyCreatedObject->setBat('bam') // instantiation logic
+
+    $wrappedObject = $newlyCreatedObject; // set wrapped object in the proxy
+    $initializer   = null; // disable initializer
+
+    return true; // report success
+};
+    </code>
+</pre>
+
+<p>The <code>ProxyManager\Factory\LazyLoadingValueHolderFactory</code> produces proxies that implement both the <code>ProxyManager\Proxy\ValueHolderInterface</code> and the <code>ProxyManager\Proxy\LazyLoadingInterface</code>.</p>
+
+<p>At any point in time, you can set a new initializer for the proxy:</p>
+
+<pre><code class="php">$proxy->setProxyInitializer($initializer);</code></pre>
+
+<p>In your initializer, you currently <strong>MUST</strong> turn off any further initialization:</p>
+
+<pre><code class="php">$proxy->setProxyInitializer(null);</code></pre>
+
+<p>or</p>
+
+<pre><code class="php">$initializer = null; // if you use the initializer by reference</code></pre>
+<hr />
+
+    <h3 class="section-title">Triggering Initialization</h3>
+
+    <p>A lazy loading proxy is initialized whenever you access any property or method of it. Any of the following interactions would trigger lazy initialization:</p>
+
+<pre>
+    <code class="php">
+// calling a method
+$proxy->someMethod();
+
+// reading a property
+echo $proxy->someProperty;
+
+// writing a property
+$proxy->someProperty = 'foo';
+
+// checking for existence of a property
+isset($proxy->someProperty);
+
+// removing a property
+unset($proxy->someProperty);
+
+// cloning the entire proxy
+clone $proxy;
+
+// serializing the proxy
+$unserialized = serialize(unserialize($proxy));
+    </code>
+</pre>
+
+   <p>Remember to call <code>$proxy->setProxyInitializer(null);</code> to disable initialization of your proxy, or it will happen more than once.</p>
+
+
+
+
+
+
+
+
+<hr />
+
+    <h3 class="section-title">Proxying interfaces</h3>
+
+    <p>You can also generate proxies from an interface FQCN. By proxying an interface, you will only be able to access the methods defined by the interface itself, even if the wrappedObject implements more methods. This will anyway save some memory since the proxy won't contain useless inherited properties.</p>
+
+    <p>Tuning performance for production</p>
+
+    <p>See <a href="production.html">Tuning ProxyManager for Production.</a></p>
+
+  
+
+</main>
+
+    <footer class="site-footer" role="contentinfo">
+        <div class="container">
+            <div class="footer-logos">
+                <ul>
+                    <li><a href="index.html">Intro</a> | </li>
+                    <li><a href="virtual-proxy.html">Virtual Proxy</a> | </li>
+                    <li><a href="null-object.html">Null Objects</a> | </li>
+                    <li><a href="ghost-object.html">Ghost Objects</a> | </li>
+                    <li><a href="remote-object.html">Remote Object</a> | </li>
+                    <li><a href="contributing.html">Contributing</a> | </li>
+                    <li><a href="credits.html">Credits</a> | </li>
+                    <li><a href="copyright.html">Copyright</a></li>
+                </ul>
+            </div>
+        </div>
+
+        <div class="bcms-clearfix"></div>
+    </footer>
+    <div class="bcms-clearfix"></div>
+    </body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/index.html b/vendor/ocramius/proxy-manager/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..0ca8c04366439b54634994c0b2b2a097fdbae9aa
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/index.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="UTF-8">
+    <meta http-equiv="refresh" content="0;URL=html-docs/">
+    <title></title>
+</head>
+<body>
+    
+</body>
+</html>
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Configuration.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Configuration.php
index 77ff28c481053715e3381e6a07e987b586dcb20a..3bf1d9a7227e2a71cc910bdb6a2c1af45daef4e3 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/Configuration.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Configuration.php
@@ -18,13 +18,19 @@
 
 namespace ProxyManager;
 
-use ProxyManager\Autoloader\AutoloaderInterface;
 use ProxyManager\Autoloader\Autoloader;
+use ProxyManager\Autoloader\AutoloaderInterface;
 use ProxyManager\FileLocator\FileLocator;
 use ProxyManager\GeneratorStrategy\FileWriterGeneratorStrategy;
 use ProxyManager\GeneratorStrategy\GeneratorStrategyInterface;
-use ProxyManager\Inflector\ClassNameInflectorInterface;
 use ProxyManager\Inflector\ClassNameInflector;
+use ProxyManager\Inflector\ClassNameInflectorInterface;
+use ProxyManager\Signature\ClassSignatureGenerator;
+use ProxyManager\Signature\ClassSignatureGeneratorInterface;
+use ProxyManager\Signature\SignatureChecker;
+use ProxyManager\Signature\SignatureCheckerInterface;
+use ProxyManager\Signature\SignatureGenerator;
+use ProxyManager\Signature\SignatureGeneratorInterface;
 
 /**
  * Base configuration class for the proxy manager - serves as micro disposable DIC/facade
@@ -47,7 +53,7 @@ class Configuration
     protected $proxiesNamespace = self::DEFAULT_PROXY_NAMESPACE;
 
     /**
-     * @var \ProxyManager\GeneratorStrategy\GeneratorStrategyInterface|null
+     * @var GeneratorStrategyInterface|null
      */
     protected $generatorStrategy;
 
@@ -57,10 +63,25 @@ class Configuration
     protected $proxyAutoloader;
 
     /**
-     * @var \ProxyManager\Inflector\ClassNameInflectorInterface|null
+     * @var ClassNameInflectorInterface|null
      */
     protected $classNameInflector;
 
+    /**
+     * @var SignatureGeneratorInterface|null
+     */
+    protected $signatureGenerator;
+
+    /**
+     * @var SignatureCheckerInterface|null
+     */
+    protected $signatureChecker;
+
+    /**
+     * @var ClassSignatureGeneratorInterface|null
+     */
+    protected $classSignatureGenerator;
+
     /**
      * @deprecated deprecated since version 0.5
      * @codeCoverageIgnore
@@ -81,7 +102,7 @@ class Configuration
     }
 
     /**
-     * @param \ProxyManager\Autoloader\AutoloaderInterface $proxyAutoloader
+     * @param AutoloaderInterface $proxyAutoloader
      */
     public function setProxyAutoloader(AutoloaderInterface $proxyAutoloader)
     {
@@ -89,18 +110,15 @@ class Configuration
     }
 
     /**
-     * @return \ProxyManager\Autoloader\AutoloaderInterface
+     * @return AutoloaderInterface
      */
     public function getProxyAutoloader()
     {
-        if (null === $this->proxyAutoloader) {
-            $this->proxyAutoloader = new Autoloader(
+        return $this->proxyAutoloader
+            ?: $this->proxyAutoloader = new Autoloader(
                 new FileLocator($this->getProxiesTargetDir()),
                 $this->getClassNameInflector()
             );
-        }
-
-        return $this->proxyAutoloader;
     }
 
     /**
@@ -132,15 +150,11 @@ class Configuration
      */
     public function getProxiesTargetDir()
     {
-        if (null === $this->proxiesTargetDir) {
-            $this->proxiesTargetDir = sys_get_temp_dir();
-        }
-
-        return $this->proxiesTargetDir;
+        return $this->proxiesTargetDir ?: $this->proxiesTargetDir = sys_get_temp_dir();
     }
 
     /**
-     * @param \ProxyManager\GeneratorStrategy\GeneratorStrategyInterface $generatorStrategy
+     * @param GeneratorStrategyInterface $generatorStrategy
      */
     public function setGeneratorStrategy(GeneratorStrategyInterface $generatorStrategy)
     {
@@ -148,19 +162,18 @@ class Configuration
     }
 
     /**
-     * @return \ProxyManager\GeneratorStrategy\GeneratorStrategyInterface
+     * @return GeneratorStrategyInterface
      */
     public function getGeneratorStrategy()
     {
-        if (null === $this->generatorStrategy) {
-            $this->generatorStrategy = new FileWriterGeneratorStrategy(new FileLocator($this->getProxiesTargetDir()));
-        }
-
-        return $this->generatorStrategy;
+        return $this->generatorStrategy
+            ?: $this->generatorStrategy = new FileWriterGeneratorStrategy(
+                new FileLocator($this->getProxiesTargetDir())
+            );
     }
 
     /**
-     * @param \ProxyManager\Inflector\ClassNameInflectorInterface $classNameInflector
+     * @param ClassNameInflectorInterface $classNameInflector
      */
     public function setClassNameInflector(ClassNameInflectorInterface $classNameInflector)
     {
@@ -168,14 +181,61 @@ class Configuration
     }
 
     /**
-     * @return \ProxyManager\Inflector\ClassNameInflectorInterface
+     * @return ClassNameInflectorInterface
      */
     public function getClassNameInflector()
     {
-        if (null === $this->classNameInflector) {
-            $this->classNameInflector = new ClassNameInflector($this->getProxiesNamespace());
-        }
+        return $this->classNameInflector
+            ?: $this->classNameInflector = new ClassNameInflector($this->getProxiesNamespace());
+    }
+
+    /**
+     * @param SignatureGeneratorInterface $signatureGenerator
+     */
+    public function setSignatureGenerator(SignatureGeneratorInterface $signatureGenerator)
+    {
+        $this->signatureGenerator = $signatureGenerator;
+    }
+
+    /**
+     * @return SignatureGeneratorInterface
+     */
+    public function getSignatureGenerator()
+    {
+        return $this->signatureGenerator ?: $this->signatureGenerator = new SignatureGenerator();
+    }
+
+    /**
+     * @param SignatureCheckerInterface $signatureChecker
+     */
+    public function setSignatureChecker(SignatureCheckerInterface $signatureChecker)
+    {
+        $this->signatureChecker = $signatureChecker;
+    }
 
-        return $this->classNameInflector;
+    /**
+     * @return SignatureCheckerInterface
+     */
+    public function getSignatureChecker()
+    {
+        return $this->signatureChecker
+            ?: $this->signatureChecker = new SignatureChecker($this->getSignatureGenerator());
+    }
+
+    /**
+     * @param ClassSignatureGeneratorInterface $classSignatureGenerator
+     */
+    public function setClassSignatureGenerator(ClassSignatureGeneratorInterface $classSignatureGenerator)
+    {
+        $this->classSignatureGenerator = $classSignatureGenerator;
+    }
+
+    /**
+     * @return ClassSignatureGeneratorInterface
+     */
+    public function getClassSignatureGenerator()
+    {
+        return $this->classSignatureGenerator
+            ?: new ClassSignatureGenerator($this->getSignatureGenerator());
     }
 }
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Exception/InvalidProxiedClassException.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Exception/InvalidProxiedClassException.php
index fff18b75b7825958f5ae677b6e5aef5671ac8e71..5dc08d14db3b0051a66eac5e25c0c9f6b404d8cb 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/Exception/InvalidProxiedClassException.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Exception/InvalidProxiedClassException.php
@@ -20,6 +20,7 @@ namespace ProxyManager\Exception;
 
 use InvalidArgumentException;
 use ReflectionClass;
+use ReflectionMethod;
 
 /**
  * Exception for invalid proxied classes
@@ -38,4 +39,41 @@ class InvalidProxiedClassException extends InvalidArgumentException implements E
     {
         return new self(sprintf('Provided interface "%s" cannot be proxied', $reflection->getName()));
     }
+
+    /**
+     * @param ReflectionClass $reflection
+     *
+     * @return self
+     */
+    public static function finalClassNotSupported(ReflectionClass $reflection)
+    {
+        return new self(sprintf('Provided class "%s" is final and cannot be proxied', $reflection->getName()));
+    }
+
+    /**
+     * @param ReflectionClass $reflection
+     *
+     * @return self
+     */
+    public static function abstractProtectedMethodsNotSupported(ReflectionClass $reflection)
+    {
+        return new self(sprintf(
+            'Provided class "%s" has following protected abstract methods, and therefore cannot be proxied:' . "\n%s",
+            $reflection->getName(),
+            implode(
+                "\n",
+                array_map(
+                    function (ReflectionMethod $reflectionMethod) {
+                        return $reflectionMethod->getDeclaringClass()->getName() . '::' . $reflectionMethod->getName();
+                    },
+                    array_filter(
+                        $reflection->getMethods(),
+                        function (ReflectionMethod $method) {
+                            return $method->isAbstract() && $method->isProtected();
+                        }
+                    )
+                )
+            )
+        ));
+    }
 }
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/AbstractBaseFactory.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/AbstractBaseFactory.php
index b3de2aa47b167513cacecc15c6a1e30a0a551f18..cbc7b1a5293ca34edce1bcf3751f159617de3db1 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/AbstractBaseFactory.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/AbstractBaseFactory.php
@@ -20,6 +20,7 @@ namespace ProxyManager\Factory;
 
 use ProxyManager\Configuration;
 use ProxyManager\Generator\ClassGenerator;
+use ProxyManager\Version;
 use ReflectionClass;
 
 /**
@@ -36,21 +37,11 @@ abstract class AbstractBaseFactory
     protected $configuration;
 
     /**
-     * @var \ProxyManager\Inflector\ClassNameInflectorInterface
-     */
-    protected $inflector;
-
-    /**
-     * Cached generated class names
+     * Cached checked class names
      *
      * @var string[]
      */
-    protected $generatedClasses = array();
-
-    /**
-     * @var \ProxyManager\ProxyGenerator\LazyLoadingValueHolderGenerator
-     */
-    protected $generator;
+    private $checkedClasses = array();
 
     /**
      * @param \ProxyManager\Configuration $configuration
@@ -58,8 +49,6 @@ abstract class AbstractBaseFactory
     public function __construct(Configuration $configuration = null)
     {
         $this->configuration = $configuration ?: new Configuration();
-        // localizing some properties for performance
-        $this->inflector     = $this->configuration->getClassNameInflector();
     }
 
     /**
@@ -69,29 +58,55 @@ abstract class AbstractBaseFactory
      */
     protected function generateProxy($className)
     {
-        if (! isset($this->generatedClasses[$className])) {
-            $this->generatedClasses[$className] = $this->inflector->getProxyClassName(
-                $className,
-                array('factory' => get_class($this))
-            );
+        if (isset($this->checkedClasses[$className])) {
+            return $this->checkedClasses[$className];
         }
 
-        $proxyClassName = $this->generatedClasses[$className];
+        $proxyParameters = array(
+            'className'           => $className,
+            'factory'             => get_class($this),
+            'proxyManagerVersion' => Version::VERSION
+        );
+        $proxyClassName  = $this
+            ->configuration
+            ->getClassNameInflector()
+            ->getProxyClassName($className, $proxyParameters);
 
         if (! class_exists($proxyClassName)) {
-            $className = $this->inflector->getUserClassName($className);
-            $phpClass  = new ClassGenerator($proxyClassName);
-
-            $this->getGenerator()->generate(new ReflectionClass($className), $phpClass);
-            $this->configuration->getGeneratorStrategy()->generate($phpClass);
-            $this->configuration->getProxyAutoloader()->__invoke($proxyClassName);
+            $this->generateProxyClass($proxyClassName, $className, $proxyParameters);
         }
 
-        return $proxyClassName;
+        $this
+            ->configuration
+            ->getSignatureChecker()
+            ->checkSignature(new ReflectionClass($proxyClassName), $proxyParameters);
+
+        return $this->checkedClasses[$className] = $proxyClassName;
     }
 
     /**
      * @return \ProxyManager\ProxyGenerator\ProxyGeneratorInterface
      */
     abstract protected function getGenerator();
+
+    /**
+     * Generates the provided `$proxyClassName` from the given `$className` and `$proxyParameters`
+     * @param string $proxyClassName
+     * @param string $className
+     * @param array  $proxyParameters
+     *
+     * @return void
+     */
+    private function generateProxyClass($proxyClassName, $className, array $proxyParameters)
+    {
+        $className = $this->configuration->getClassNameInflector()->getUserClassName($className);
+        $phpClass  = new ClassGenerator($proxyClassName);
+
+        $this->getGenerator()->generate(new ReflectionClass($className), $phpClass);
+
+        $phpClass = $this->configuration->getClassSignatureGenerator()->addSignature($phpClass, $proxyParameters);
+
+        $this->configuration->getGeneratorStrategy()->generate($phpClass);
+        $this->configuration->getProxyAutoloader()->__invoke($proxyClassName);
+    }
 }
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/AccessInterceptorScopeLocalizerFactory.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/AccessInterceptorScopeLocalizerFactory.php
index 629b67691b49bf3ad12c30b0f2773d4e24f97c3b..57d78e7e275be7e6231b4ca41f3d38149646f908 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/AccessInterceptorScopeLocalizerFactory.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/AccessInterceptorScopeLocalizerFactory.php
@@ -28,6 +28,11 @@ use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizerGenerator;
  */
 class AccessInterceptorScopeLocalizerFactory extends AbstractBaseFactory
 {
+    /**
+     * @var \ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizerGenerator|null
+     */
+    private $generator;
+
     /**
      * @param object     $instance           the object to be localized within the access interceptor
      * @param \Closure[] $prefixInterceptors an array (indexed by method name) of interceptor closures to be called
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/AccessInterceptorValueHolderFactory.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/AccessInterceptorValueHolderFactory.php
index c18d95d9f4fd3bf63631804a00da314c47f8b3b7..d5ef5044a691f0df484ded146b1a3ec43ed70999 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/AccessInterceptorValueHolderFactory.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/AccessInterceptorValueHolderFactory.php
@@ -28,6 +28,11 @@ use ProxyManager\ProxyGenerator\AccessInterceptorValueHolderGenerator;
  */
 class AccessInterceptorValueHolderFactory extends AbstractBaseFactory
 {
+    /**
+     * @var \ProxyManager\ProxyGenerator\AccessInterceptorValueHolderGenerator|null
+     */
+    private $generator;
+
     /**
      * @param object     $instance           the object to be wrapped within the value holder
      * @param \Closure[] $prefixInterceptors an array (indexed by method name) of interceptor closures to be called
@@ -39,8 +44,7 @@ class AccessInterceptorValueHolderFactory extends AbstractBaseFactory
      */
     public function createProxy($instance, array $prefixInterceptors = array(), array $suffixInterceptors = array())
     {
-        $className      = get_class($instance);
-        $proxyClassName = $this->generateProxy($className);
+        $proxyClassName = $this->generateProxy(get_class($instance));
 
         return new $proxyClassName($instance, $prefixInterceptors, $suffixInterceptors);
     }
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/LazyLoadingGhostFactory.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/LazyLoadingGhostFactory.php
index 995f1688a209702536bfc6ef02b8bc27b63f1d40..73e030c781e12af2852a50a9068211cacb699a79 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/LazyLoadingGhostFactory.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/LazyLoadingGhostFactory.php
@@ -30,6 +30,11 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhostGenerator;
  */
 class LazyLoadingGhostFactory extends AbstractLazyFactory
 {
+    /**
+     * @var \ProxyManager\ProxyGenerator\LazyLoadingGhostGenerator|null
+     */
+    private $generator;
+
     /**
      * {@inheritDoc}
      */
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/LazyLoadingValueHolderFactory.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/LazyLoadingValueHolderFactory.php
index 02a273e9e8c84dd17d0424261547ba29127a91ed..c1449be73c110c602fc22e900e0ed299086bb7d2 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/LazyLoadingValueHolderFactory.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/LazyLoadingValueHolderFactory.php
@@ -30,6 +30,11 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolderGenerator;
  */
 class LazyLoadingValueHolderFactory extends AbstractLazyFactory
 {
+    /**
+     * @var \ProxyManager\ProxyGenerator\LazyLoadingValueHolderGenerator|null
+     */
+    private $generator;
+
     /**
      * {@inheritDoc}
      */
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/NullObjectFactory.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/NullObjectFactory.php
index 121f6ba7fbe56fee1d707a16e86b946b909c7263..9c605cbaf94ebc9b2aedd7624ce16c21477852ab 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/NullObjectFactory.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/NullObjectFactory.php
@@ -28,6 +28,11 @@ use ProxyManager\ProxyGenerator\NullObjectGenerator;
  */
 class NullObjectFactory extends AbstractBaseFactory
 {
+    /**
+     * @var \ProxyManager\ProxyGenerator\NullObjectGenerator|null
+     */
+    private $generator;
+
     /**
      * @param object $instanceOrClassName the object to be wrapped or interface to transform to null object
      *
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/RemoteObjectFactory.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/RemoteObjectFactory.php
index f65049b3b755dfb418a5030712aef8e3652742fc..52778d3ce83aa23ea8d86d60bdf8dd0325e52c38 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/RemoteObjectFactory.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Factory/RemoteObjectFactory.php
@@ -35,6 +35,11 @@ class RemoteObjectFactory extends AbstractBaseFactory
      */
     protected $adapter;
 
+    /**
+     * @var \ProxyManager\ProxyGenerator\RemoteObjectGenerator|null
+     */
+    private $generator;
+
     /**
      * {@inheritDoc}
      *
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Generator/Util/ClassGeneratorUtils.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Generator/Util/ClassGeneratorUtils.php
new file mode 100644
index 0000000000000000000000000000000000000000..62e130c13ef8909e4f3b66da924938b9f17ba388
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Generator/Util/ClassGeneratorUtils.php
@@ -0,0 +1,53 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager\Generator\Util;
+
+use ReflectionClass;
+use Zend\Code\Generator\ClassGenerator;
+use Zend\Code\Generator\MethodGenerator;
+
+/**
+ * Util class to help to generate code
+ *
+ * @author Jefersson Nathan <malukenho@phpse.net>
+ * @license MIT
+ */
+final class ClassGeneratorUtils
+{
+    /**
+     * @param ReflectionClass  $originalClass
+     * @param ClassGenerator   $classGenerator
+     * @param MethodGenerator  $generatedMethod
+     *
+     * @return void|false
+     */
+    public static function addMethodIfNotFinal(
+        ReflectionClass $originalClass,
+        ClassGenerator $classGenerator,
+        MethodGenerator $generatedMethod
+    ) {
+        $methodName = $generatedMethod->getName();
+
+        if ($originalClass->hasMethod($methodName) && $originalClass->getMethod($methodName)->isFinal()) {
+            return false;
+        }
+
+        $classGenerator->addMethodFromGenerator($generatedMethod);
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Inflector/ClassNameInflector.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Inflector/ClassNameInflector.php
index c911b25fe63b1c34f21524246c7c40c3fb2d22e6..934d82c826025e5b4cb0c5250d58729572ac9285 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/Inflector/ClassNameInflector.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Inflector/ClassNameInflector.php
@@ -18,7 +18,7 @@
 
 namespace ProxyManager\Inflector;
 
-use ProxyManager\Inflector\Util\ParameterEncoder;
+use ProxyManager\Inflector\Util\ParameterHasher;
 
 /**
  * {@inheritDoc}
@@ -26,7 +26,7 @@ use ProxyManager\Inflector\Util\ParameterEncoder;
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
  */
-class ClassNameInflector implements ClassNameInflectorInterface
+final class ClassNameInflector implements ClassNameInflectorInterface
 {
     /**
      * @var string
@@ -44,9 +44,9 @@ class ClassNameInflector implements ClassNameInflectorInterface
     private $proxyMarker;
 
     /**
-     * @var \ProxyManager\Inflector\Util\ParameterEncoder
+     * @var \ProxyManager\Inflector\Util\ParameterHasher
      */
-    private $parameterEncoder;
+    private $parameterHasher;
 
     /**
      * @param string $proxyNamespace
@@ -56,7 +56,7 @@ class ClassNameInflector implements ClassNameInflectorInterface
         $this->proxyNamespace    = (string) $proxyNamespace;
         $this->proxyMarker       = '\\' . static::PROXY_MARKER . '\\';
         $this->proxyMarkerLength = strlen($this->proxyMarker);
-        $this->parameterEncoder  = new ParameterEncoder();
+        $this->parameterHasher   = new ParameterHasher();
     }
 
     /**
@@ -85,7 +85,7 @@ class ClassNameInflector implements ClassNameInflectorInterface
         return $this->proxyNamespace
             . $this->proxyMarker
             . $this->getUserClassName($className)
-            . '\\' . $this->parameterEncoder->encodeParameters($options);
+            . '\\Generated' . $this->parameterHasher->hashParameters($options);
     }
 
     /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Inflector/Util/ParameterEncoder.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Inflector/Util/ParameterEncoder.php
index 82d6d8c209d5f10499c575d637c317e65f84f641..a1a4b172cfd4a75f12025547f844672931a542b4 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/Inflector/Util/ParameterEncoder.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Inflector/Util/ParameterEncoder.php
@@ -36,6 +36,6 @@ class ParameterEncoder
      */
     public function encodeParameters(array $parameters)
     {
-        return strtr(base64_encode(serialize($parameters)), '+/=', '†‡•');
+        return base64_encode(serialize($parameters));
     }
 }
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Inflector/Util/ParameterHasher.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Inflector/Util/ParameterHasher.php
new file mode 100644
index 0000000000000000000000000000000000000000..970b1583c53c7e70d4d454706bfa74d5f6415e51
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Inflector/Util/ParameterHasher.php
@@ -0,0 +1,40 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager\Inflector\Util;
+
+/**
+ * Converts given parameters into a likely unique hash
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+class ParameterHasher
+{
+    /**
+     * Converts the given parameters into a likely-unique hash
+     *
+     * @param array $parameters
+     *
+     * @return string
+     */
+    public function hashParameters(array $parameters)
+    {
+        return md5(serialize($parameters));
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodPrefixInterceptors.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodPrefixInterceptors.php
index 7462d6ef22e39f4530f3a4321aa89119a19c3cea..b9c44a20c68ff4bfb51f74e9f1e4e4237cae5d84 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodPrefixInterceptors.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodPrefixInterceptors.php
@@ -18,8 +18,8 @@
 
 namespace ProxyManager\ProxyGenerator\AccessInterceptor\PropertyGenerator;
 
-use Zend\Code\Generator\PropertyGenerator;
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
+use Zend\Code\Generator\PropertyGenerator;
 
 /**
  * Property that contains the interceptor for operations to be executed before method execution
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodSuffixInterceptors.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodSuffixInterceptors.php
index 2b809a608618eb5aa67f200a1cda1479e697a86c..a11d6c24c0aa4214719ecc50bf6ce57ee49f8444 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodSuffixInterceptors.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodSuffixInterceptors.php
@@ -18,8 +18,8 @@
 
 namespace ProxyManager\ProxyGenerator\AccessInterceptor\PropertyGenerator;
 
-use Zend\Code\Generator\PropertyGenerator;
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
+use Zend\Code\Generator\PropertyGenerator;
 
 /**
  * Property that contains the interceptor for operations to be executed after method execution
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/InterceptedMethod.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/InterceptedMethod.php
index b865ca0c4e01521fd1545e061463579a87500625..22068f7e715a1cd4005ced99ffb083027fe31843 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/InterceptedMethod.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/InterceptedMethod.php
@@ -18,8 +18,8 @@
 
 namespace ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator;
 
-use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\Util\InterceptorGenerator;
 use ProxyManager\Generator\MethodGenerator;
+use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\Util\InterceptorGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 use Zend\Code\Reflection\MethodReflection;
 
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicGet.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicGet.php
index b6c241fcd9f473434cce8f2b889ad6bf7b0379d4..930b9d7e4463e42b739f2c5b397c4b46dab6ddd5 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicGet.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicGet.php
@@ -19,10 +19,10 @@
 namespace ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\Util\InterceptorGenerator;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicIsset.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicIsset.php
index 0021e22a25fcf6bb270fcfccd4d0eb9aee322d6f..26eb275aeab12178ec7c2da563f5915c493f8105 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicIsset.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicIsset.php
@@ -19,10 +19,10 @@
 namespace ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\Util\InterceptorGenerator;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicSet.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicSet.php
index c24780806be0c6387b095acb40639d692a80e9f3..e7562075b9c5021fbe30fe0e8f0acb3e3880584f 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicSet.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicSet.php
@@ -19,10 +19,10 @@
 namespace ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\Util\InterceptorGenerator;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicUnset.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicUnset.php
index b2edaaf467de35fe2d420ef39045ea7f243cde1e..3d404202f3d66ae5167e1ed13be8971b528e839f 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicUnset.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicUnset.php
@@ -19,10 +19,10 @@
 namespace ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\Util\InterceptorGenerator;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizerGenerator.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizerGenerator.php
index 1247f36cb7a8eb12235e2ac185a3bac9145724a2..b6edee35a8d5cf7cac4f99e88a91a0dacc88c84e 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizerGenerator.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorScopeLocalizerGenerator.php
@@ -18,25 +18,24 @@
 
 namespace ProxyManager\ProxyGenerator;
 
-use ProxyManager\Exception\InvalidProxiedClassException;
-
+use ProxyManager\Generator\Util\ClassGeneratorUtils;
 use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\SetMethodPrefixInterceptor;
 use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\SetMethodSuffixInterceptor;
 use ProxyManager\ProxyGenerator\AccessInterceptor\PropertyGenerator\MethodPrefixInterceptors;
-
 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\Constructor;
 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\InterceptedMethod;
 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicClone;
 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicGet;
-use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicSet;
 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicIsset;
-
+use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicSet;
 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicSleep;
 use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\MagicUnset;
-
+use ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion;
 use ProxyManager\ProxyGenerator\Util\ProxiedMethodsFilter;
 use ReflectionClass;
+use ReflectionMethod;
 use Zend\Code\Generator\ClassGenerator;
+use Zend\Code\Generator\MethodGenerator;
 use Zend\Code\Reflection\MethodReflection;
 
 /**
@@ -55,52 +54,43 @@ class AccessInterceptorScopeLocalizerGenerator implements ProxyGeneratorInterfac
      */
     public function generate(ReflectionClass $originalClass, ClassGenerator $classGenerator)
     {
-        if ($originalClass->isInterface()) {
-            throw InvalidProxiedClassException::interfaceNotSupported($originalClass);
-        }
+        CanProxyAssertion::assertClassCanBeProxied($originalClass, false);
 
         $classGenerator->setExtendedClass($originalClass->getName());
         $classGenerator->setImplementedInterfaces(array('ProxyManager\\Proxy\\AccessInterceptorInterface'));
         $classGenerator->addPropertyFromGenerator($prefixInterceptors = new MethodPrefixInterceptors());
         $classGenerator->addPropertyFromGenerator($suffixInterceptors = new MethodPrefixInterceptors());
 
-        $methods = ProxiedMethodsFilter::getProxiedMethods(
-            $originalClass,
-            array('__get', '__set', '__isset', '__unset', '__clone', '__sleep')
-        );
-
-        foreach ($methods as $method) {
-            $classGenerator->addMethodFromGenerator(
-                InterceptedMethod::generateMethod(
-                    new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()),
-                    $prefixInterceptors,
-                    $suffixInterceptors
+        array_map(
+            function (MethodGenerator $generatedMethod) use ($originalClass, $classGenerator) {
+                ClassGeneratorUtils::addMethodIfNotFinal($originalClass, $classGenerator, $generatedMethod);
+            },
+            array_merge(
+                array_map(
+                    function (ReflectionMethod $method) use ($prefixInterceptors, $suffixInterceptors) {
+                        return InterceptedMethod::generateMethod(
+                            new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()),
+                            $prefixInterceptors,
+                            $suffixInterceptors
+                        );
+                    },
+                    ProxiedMethodsFilter::getProxiedMethods(
+                        $originalClass,
+                        array('__get', '__set', '__isset', '__unset', '__clone', '__sleep')
+                    )
+                ),
+                array(
+                    new Constructor($originalClass, $prefixInterceptors, $suffixInterceptors),
+                    new SetMethodPrefixInterceptor($prefixInterceptors),
+                    new SetMethodSuffixInterceptor($suffixInterceptors),
+                    new MagicGet($originalClass, $prefixInterceptors, $suffixInterceptors),
+                    new MagicSet($originalClass, $prefixInterceptors, $suffixInterceptors),
+                    new MagicIsset($originalClass, $prefixInterceptors, $suffixInterceptors),
+                    new MagicUnset($originalClass, $prefixInterceptors, $suffixInterceptors),
+                    new MagicSleep($originalClass, $prefixInterceptors, $suffixInterceptors),
+                    new MagicClone($originalClass, $prefixInterceptors, $suffixInterceptors),
                 )
-            );
-        }
-
-        $classGenerator->addMethodFromGenerator(
-            new Constructor($originalClass, $prefixInterceptors, $suffixInterceptors)
-        );
-        $classGenerator->addMethodFromGenerator(new SetMethodPrefixInterceptor($prefixInterceptors));
-        $classGenerator->addMethodFromGenerator(new SetMethodSuffixInterceptor($suffixInterceptors));
-        $classGenerator->addMethodFromGenerator(
-            new MagicGet($originalClass, $prefixInterceptors, $suffixInterceptors)
-        );
-        $classGenerator->addMethodFromGenerator(
-            new MagicSet($originalClass, $prefixInterceptors, $suffixInterceptors)
-        );
-        $classGenerator->addMethodFromGenerator(
-            new MagicIsset($originalClass, $prefixInterceptors, $suffixInterceptors)
-        );
-        $classGenerator->addMethodFromGenerator(
-            new MagicUnset($originalClass, $prefixInterceptors, $suffixInterceptors)
-        );
-        $classGenerator->addMethodFromGenerator(
-            new MagicSleep($originalClass, $prefixInterceptors, $suffixInterceptors)
-        );
-        $classGenerator->addMethodFromGenerator(
-            new MagicClone($originalClass, $prefixInterceptors, $suffixInterceptors)
+            )
         );
     }
 }
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/Constructor.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/Constructor.php
index a2e9c8acfe0318c572b240bfe434220cc5c891f9..925ee6b51ed31cc347f0815eb409f00402c63679 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/Constructor.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/Constructor.php
@@ -18,10 +18,10 @@
 
 namespace ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator;
 
-use ReflectionClass;
-use ReflectionProperty;
 use ProxyManager\Generator\MethodGenerator;
 use ProxyManager\Generator\ParameterGenerator;
+use ReflectionClass;
+use ReflectionProperty;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/InterceptedMethod.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/InterceptedMethod.php
index 46aab2d03d27783b01e3cf81ddec0d62e7bb22fd..e882e3291a68afe38346533f1f6fe30a039eb795 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/InterceptedMethod.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/InterceptedMethod.php
@@ -18,8 +18,8 @@
 
 namespace ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator;
 
-use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Util\InterceptorGenerator;
 use ProxyManager\Generator\MethodGenerator;
+use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Util\InterceptorGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 use Zend\Code\Reflection\MethodReflection;
 
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicGet.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicGet.php
index 77e6c0c94a25a77db25d07cece458a1f59c848d6..80962811ebd1136beb3358bdbeeb5a0265595cb1 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicGet.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicGet.php
@@ -19,11 +19,11 @@
 namespace ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Util\InterceptorGenerator;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicIsset.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicIsset.php
index daa6b742bff0e0a1905ac5bca1c5afbb67031d28..2647b35297b912a1c8a5394fc04d009940dd4a48 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicIsset.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicIsset.php
@@ -19,11 +19,11 @@
 namespace ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Util\InterceptorGenerator;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicSet.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicSet.php
index f79747dff3a18db047eec377726205d97d8eec2a..b443b770c9e3872ce906ab43a5b66b2f8eadee3a 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicSet.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicSet.php
@@ -19,11 +19,11 @@
 namespace ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Util\InterceptorGenerator;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicUnset.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicUnset.php
index 1484c14c097f8fd3a243645425705ce2b4acc891..bdf3a1aa091c208897e115949a065a63c5266c43 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicUnset.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicUnset.php
@@ -19,11 +19,11 @@
 namespace ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Util\InterceptorGenerator;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolderGenerator.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolderGenerator.php
index 6abac1fb57284d7636f895698a708c72a099434a..4b055495e0b0cdba779db4781014795260139000 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolderGenerator.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/AccessInterceptorValueHolderGenerator.php
@@ -18,12 +18,12 @@
 
 namespace ProxyManager\ProxyGenerator;
 
+use ProxyManager\Generator\Util\ClassGeneratorUtils;
 use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\MagicWakeup;
 use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\SetMethodPrefixInterceptor;
 use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\SetMethodSuffixInterceptor;
 use ProxyManager\ProxyGenerator\AccessInterceptor\PropertyGenerator\MethodPrefixInterceptors;
 use ProxyManager\ProxyGenerator\AccessInterceptor\PropertyGenerator\MethodSuffixInterceptors;
-
 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Constructor;
 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\InterceptedMethod;
 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\MagicClone;
@@ -31,16 +31,16 @@ use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Mag
 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\MagicIsset;
 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\MagicSet;
 use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\MagicUnset;
-
+use ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion;
+use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\PropertyGenerator\ValueHolderProperty;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\ProxiedMethodsFilter;
 use ProxyManager\ProxyGenerator\ValueHolder\MethodGenerator\GetWrappedValueHolderValue;
-
-use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\PropertyGenerator\ValueHolderProperty;
-
 use ProxyManager\ProxyGenerator\ValueHolder\MethodGenerator\MagicSleep;
 use ReflectionClass;
+use ReflectionMethod;
 use Zend\Code\Generator\ClassGenerator;
+use Zend\Code\Generator\MethodGenerator;
 use Zend\Code\Reflection\MethodReflection;
 
 /**
@@ -59,6 +59,8 @@ class AccessInterceptorValueHolderGenerator implements ProxyGeneratorInterface
      */
     public function generate(ReflectionClass $originalClass, ClassGenerator $classGenerator)
     {
+        CanProxyAssertion::assertClassCanBeProxied($originalClass);
+
         $publicProperties    = new PublicPropertiesMap($originalClass);
         $interfaces          = array(
             'ProxyManager\\Proxy\\AccessInterceptorInterface',
@@ -77,54 +79,60 @@ class AccessInterceptorValueHolderGenerator implements ProxyGeneratorInterface
         $classGenerator->addPropertyFromGenerator($suffixInterceptors = new MethodSuffixInterceptors());
         $classGenerator->addPropertyFromGenerator($publicProperties);
 
-        foreach (ProxiedMethodsFilter::getProxiedMethods($originalClass) as $method) {
-            $classGenerator->addMethodFromGenerator(
-                InterceptedMethod::generateMethod(
-                    new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()),
-                    $valueHolder,
-                    $prefixInterceptors,
-                    $suffixInterceptors
+        array_map(
+            function (MethodGenerator $generatedMethod) use ($originalClass, $classGenerator) {
+                ClassGeneratorUtils::addMethodIfNotFinal($originalClass, $classGenerator, $generatedMethod);
+            },
+            array_merge(
+                array_map(
+                    function (ReflectionMethod $method) use ($prefixInterceptors, $suffixInterceptors, $valueHolder) {
+                        return InterceptedMethod::generateMethod(
+                            new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()),
+                            $valueHolder,
+                            $prefixInterceptors,
+                            $suffixInterceptors
+                        );
+                    },
+                    ProxiedMethodsFilter::getProxiedMethods($originalClass)
+                ),
+                array(
+                    new Constructor($originalClass, $valueHolder, $prefixInterceptors, $suffixInterceptors),
+                    new GetWrappedValueHolderValue($valueHolder),
+                    new SetMethodPrefixInterceptor($prefixInterceptors),
+                    new SetMethodSuffixInterceptor($suffixInterceptors),
+                    new MagicGet(
+                        $originalClass,
+                        $valueHolder,
+                        $prefixInterceptors,
+                        $suffixInterceptors,
+                        $publicProperties
+                    ),
+                    new MagicSet(
+                        $originalClass,
+                        $valueHolder,
+                        $prefixInterceptors,
+                        $suffixInterceptors,
+                        $publicProperties
+                    ),
+                    new MagicIsset(
+                        $originalClass,
+                        $valueHolder,
+                        $prefixInterceptors,
+                        $suffixInterceptors,
+                        $publicProperties
+                    ),
+                    new MagicUnset(
+                        $originalClass,
+                        $valueHolder,
+                        $prefixInterceptors,
+                        $suffixInterceptors,
+                        $publicProperties
+                    ),
+                    new MagicClone($originalClass, $valueHolder, $prefixInterceptors, $suffixInterceptors),
+                    new MagicSleep($originalClass, $valueHolder),
+                    new MagicWakeup($originalClass, $valueHolder),
                 )
-            );
-        }
-
-        $classGenerator->addMethodFromGenerator(
-            new Constructor($originalClass, $valueHolder, $prefixInterceptors, $suffixInterceptors)
-        );
-        $classGenerator->addMethodFromGenerator(
-            new GetWrappedValueHolderValue($valueHolder)
-        );
-        $classGenerator->addMethodFromGenerator(
-            new SetMethodPrefixInterceptor($prefixInterceptors)
-        );
-        $classGenerator->addMethodFromGenerator(
-            new SetMethodSuffixInterceptor($suffixInterceptors)
-        );
-
-        $classGenerator->addMethodFromGenerator(
-            new MagicGet($originalClass, $valueHolder, $prefixInterceptors, $suffixInterceptors, $publicProperties)
-        );
-
-        $classGenerator->addMethodFromGenerator(
-            new MagicSet($originalClass, $valueHolder, $prefixInterceptors, $suffixInterceptors, $publicProperties)
-        );
-
-        $classGenerator->addMethodFromGenerator(
-            new MagicIsset($originalClass, $valueHolder, $prefixInterceptors, $suffixInterceptors, $publicProperties)
-        );
-
-        $classGenerator->addMethodFromGenerator(
-            new MagicUnset($originalClass, $valueHolder, $prefixInterceptors, $suffixInterceptors, $publicProperties)
-        );
-
-        $classGenerator->addMethodFromGenerator(
-            new MagicClone($originalClass, $valueHolder, $prefixInterceptors, $suffixInterceptors)
-        );
-        $classGenerator->addMethodFromGenerator(
-            new MagicSleep($originalClass, $valueHolder)
-        );
-        $classGenerator->addMethodFromGenerator(
-            new MagicWakeup($originalClass, $valueHolder)
+            )
         );
     }
 }
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/Assertion/CanProxyAssertion.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/Assertion/CanProxyAssertion.php
new file mode 100644
index 0000000000000000000000000000000000000000..213e15d9d6542bbc2f8551ac6e1b8bdc1dc58d52
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/Assertion/CanProxyAssertion.php
@@ -0,0 +1,102 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager\ProxyGenerator\Assertion;
+
+use BadMethodCallException;
+use ProxyManager\Exception\InvalidProxiedClassException;
+use ReflectionClass;
+use ReflectionMethod;
+
+/**
+ * Assertion that verifies that a class can be proxied
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+final class CanProxyAssertion
+{
+    /**
+     * Disabled constructor: not meant to be instantiated
+     *
+     * @throws BadMethodCallException
+     */
+    public function __construct()
+    {
+        throw new BadMethodCallException('Unsupported constructor.');
+    }
+
+    /**
+     * @param ReflectionClass $originalClass
+     * @param bool            $allowInterfaces
+     *
+     * @throws InvalidProxiedClassException
+     */
+    public static function assertClassCanBeProxied(ReflectionClass $originalClass, $allowInterfaces = true)
+    {
+        self::isNotFinal($originalClass);
+        self::hasNoAbstractProtectedMethods($originalClass);
+
+        if (! $allowInterfaces) {
+            self::isNotInterface($originalClass);
+        }
+    }
+
+    /**
+     * @param ReflectionClass $originalClass
+     *
+     * @throws InvalidProxiedClassException
+     */
+    private static function isNotFinal(ReflectionClass $originalClass)
+    {
+        if ($originalClass->isFinal()) {
+            throw InvalidProxiedClassException::finalClassNotSupported($originalClass);
+        }
+    }
+
+    /**
+     * @param ReflectionClass $originalClass
+     *
+     * @throws InvalidProxiedClassException
+     */
+    private static function hasNoAbstractProtectedMethods(ReflectionClass $originalClass)
+    {
+        $protectedAbstract = array_filter(
+            $originalClass->getMethods(),
+            function (ReflectionMethod $method) {
+                return $method->isAbstract() && $method->isProtected();
+            }
+        );
+
+        if ($protectedAbstract) {
+            throw InvalidProxiedClassException::abstractProtectedMethodsNotSupported($originalClass);
+        }
+    }
+
+    /**
+     * @param ReflectionClass $originalClass
+     *
+     * @throws InvalidProxiedClassException
+     */
+    private static function isNotInterface(ReflectionClass $originalClass)
+    {
+        if ($originalClass->isInterface()) {
+            throw InvalidProxiedClassException::interfaceNotSupported($originalClass);
+        }
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoading/MethodGenerator/Constructor.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoading/MethodGenerator/Constructor.php
index 6f80e2f255a699402f9f71f0cbb7580e8a8e7693..224370b3325f7c8524d576652e24fcb18f233928 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoading/MethodGenerator/Constructor.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoading/MethodGenerator/Constructor.php
@@ -18,10 +18,10 @@
 
 namespace ProxyManager\ProxyGenerator\LazyLoading\MethodGenerator;
 
-use ReflectionClass;
-use ReflectionProperty;
 use ProxyManager\Generator\MethodGenerator;
 use ProxyManager\Generator\ParameterGenerator;
+use ReflectionClass;
+use ReflectionProperty;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/InitializeProxy.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/InitializeProxy.php
index cf5d417d7bfeea0e8d5cdd8f0531030823798663..90723c31c17d804bca9ead6cc2fe1c37d661e331 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/InitializeProxy.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/InitializeProxy.php
@@ -19,8 +19,8 @@
 namespace ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator;
 
 use ProxyManager\Generator\MethodGenerator;
-use Zend\Code\Generator\PropertyGenerator;
 use Zend\Code\Generator\MethodGenerator as ZendMethodGenerator;
+use Zend\Code\Generator\PropertyGenerator;
 
 /**
  * Implementation for {@see \ProxyManager\Proxy\LazyLoadingInterface::initializeProxy}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/LazyLoadingMethodInterceptor.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/LazyLoadingMethodInterceptor.php
index c5ce434e35e8fecf6fcc03f716b0050a28c432a9..d511a48298d27e0384d7c79a779e9a10f4b1edd1 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/LazyLoadingMethodInterceptor.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/LazyLoadingMethodInterceptor.php
@@ -19,8 +19,8 @@
 namespace ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator;
 
 use ProxyManager\Generator\MethodGenerator;
-use Zend\Code\Generator\PropertyGenerator;
 use Zend\Code\Generator\MethodGenerator as ZendMethodGenerator;
+use Zend\Code\Generator\PropertyGenerator;
 use Zend\Code\Reflection\MethodReflection;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicGet.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicGet.php
index 6ede4695ebf9dc6aa40f13ed6adf09857b207f75..007b65974be34303f0039ff83f3006afceb9b8a8 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicGet.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicGet.php
@@ -19,10 +19,10 @@
 namespace ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\MethodGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicIsset.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicIsset.php
index 6c0f67688c4a76a53e83fcb5e88cf8a6ee304965..84c77fa9c4e476f0900ad82b68e2d9d2d4fb83ff 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicIsset.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicIsset.php
@@ -19,10 +19,10 @@
 namespace ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\MethodGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicSet.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicSet.php
index 76edc5097d41cb8583ebefe2748e34a2b4b8d5c0..902a16d84284a311d7ae90517d15e7e588a7a90d 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicSet.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicSet.php
@@ -19,10 +19,10 @@
 namespace ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\MethodGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicUnset.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicUnset.php
index 7ad1357d6070f8f27e190eca4b2757071c58d550..5a5bd23cbdac4533e20b187eda620c61c4e6c685 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicUnset.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicUnset.php
@@ -19,10 +19,10 @@
 namespace ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\MethodGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializationTracker.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializationTracker.php
index 41b10d9a444d47d438ccd2a85977e3592b9cbf33..c303f1c5fa3e9121606c8c413f7593876bde4de0 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializationTracker.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializationTracker.php
@@ -18,8 +18,8 @@
 
 namespace ProxyManager\ProxyGenerator\LazyLoadingGhost\PropertyGenerator;
 
-use Zend\Code\Generator\PropertyGenerator;
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
+use Zend\Code\Generator\PropertyGenerator;
 
 /**
  * Property that contains the initializer for a lazy object
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializerProperty.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializerProperty.php
index 3a3a65076b53f72ed9b333f9e17e9c0ead86af64..554889fd826e296ddd4a71fd8f95d1b89dee356d 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializerProperty.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializerProperty.php
@@ -18,8 +18,8 @@
 
 namespace ProxyManager\ProxyGenerator\LazyLoadingGhost\PropertyGenerator;
 
-use Zend\Code\Generator\PropertyGenerator;
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
+use Zend\Code\Generator\PropertyGenerator;
 
 /**
  * Property that contains the initializer for a lazy object
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhostGenerator.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhostGenerator.php
index b8e7ffa9a908957d4707beb50c5cf5bf448a3cdb..1f9d88e5acfd978c09d2cd3bf141bc281d328c99 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhostGenerator.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingGhostGenerator.php
@@ -18,8 +18,9 @@
 
 namespace ProxyManager\ProxyGenerator;
 
+use ProxyManager\Generator\Util\ClassGeneratorUtils;
+use ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion;
 use ProxyManager\ProxyGenerator\LazyLoading\MethodGenerator\Constructor;
-
 use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\CallInitializer;
 use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\GetProxyInitializer;
 use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\InitializeProxy;
@@ -32,15 +33,15 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\MagicSet;
 use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\MagicSleep;
 use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\MagicUnset;
 use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\SetProxyInitializer;
-
 use ProxyManager\ProxyGenerator\LazyLoadingGhost\PropertyGenerator\InitializationTracker;
 use ProxyManager\ProxyGenerator\LazyLoadingGhost\PropertyGenerator\InitializerProperty;
-
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesDefaults;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\ProxiedMethodsFilter;
 use ReflectionClass;
+use ReflectionMethod;
 use Zend\Code\Generator\ClassGenerator;
+use Zend\Code\Generator\MethodGenerator;
 use Zend\Code\Reflection\MethodReflection;
 
 /**
@@ -58,6 +59,8 @@ class LazyLoadingGhostGenerator implements ProxyGeneratorInterface
      */
     public function generate(ReflectionClass $originalClass, ClassGenerator $classGenerator)
     {
+        CanProxyAssertion::assertClassCanBeProxied($originalClass);
+
         $interfaces          = array('ProxyManager\\Proxy\\GhostObjectInterface');
         $publicProperties    = new PublicPropertiesMap($originalClass);
         $publicPropsDefaults = new PublicPropertiesDefaults($originalClass);
@@ -76,30 +79,36 @@ class LazyLoadingGhostGenerator implements ProxyGeneratorInterface
 
         $init = new CallInitializer($initializer, $publicPropsDefaults, $initializationTracker);
 
-        $classGenerator->addMethodFromGenerator($init);
-
-        foreach (ProxiedMethodsFilter::getProxiedMethods($originalClass) as $method) {
-            $classGenerator->addMethodFromGenerator(
-                LazyLoadingMethodInterceptor::generateMethod(
-                    new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()),
-                    $initializer,
-                    $init
+        array_map(
+            function (MethodGenerator $generatedMethod) use ($originalClass, $classGenerator) {
+                ClassGeneratorUtils::addMethodIfNotFinal($originalClass, $classGenerator, $generatedMethod);
+            },
+            array_merge(
+                array_map(
+                    function (ReflectionMethod $method) use ($initializer, $init) {
+                        return LazyLoadingMethodInterceptor::generateMethod(
+                            new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()),
+                            $initializer,
+                            $init
+                        );
+                    },
+                    ProxiedMethodsFilter::getProxiedMethods($originalClass)
+                ),
+                array(
+                    $init,
+                    new Constructor($originalClass, $initializer),
+                    new MagicGet($originalClass, $initializer, $init, $publicProperties),
+                    new MagicSet($originalClass, $initializer, $init, $publicProperties),
+                    new MagicIsset($originalClass, $initializer, $init, $publicProperties),
+                    new MagicUnset($originalClass, $initializer, $init, $publicProperties),
+                    new MagicClone($originalClass, $initializer, $init, $publicProperties),
+                    new MagicSleep($originalClass, $initializer, $init, $publicProperties),
+                    new SetProxyInitializer($initializer),
+                    new GetProxyInitializer($initializer),
+                    new InitializeProxy($initializer, $init),
+                    new IsProxyInitialized($initializer),
                 )
-            );
-        }
-
-        $classGenerator->addMethodFromGenerator(new Constructor($originalClass, $initializer));
-
-        $classGenerator->addMethodFromGenerator(new MagicGet($originalClass, $initializer, $init, $publicProperties));
-        $classGenerator->addMethodFromGenerator(new MagicSet($originalClass, $initializer, $init, $publicProperties));
-        $classGenerator->addMethodFromGenerator(new MagicIsset($originalClass, $initializer, $init, $publicProperties));
-        $classGenerator->addMethodFromGenerator(new MagicUnset($originalClass, $initializer, $init, $publicProperties));
-        $classGenerator->addMethodFromGenerator(new MagicClone($originalClass, $initializer, $init));
-        $classGenerator->addMethodFromGenerator(new MagicSleep($originalClass, $initializer, $init));
-
-        $classGenerator->addMethodFromGenerator(new SetProxyInitializer($initializer));
-        $classGenerator->addMethodFromGenerator(new GetProxyInitializer($initializer));
-        $classGenerator->addMethodFromGenerator(new InitializeProxy($initializer, $init));
-        $classGenerator->addMethodFromGenerator(new IsProxyInitialized($initializer));
+            )
+        );
     }
 }
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicGet.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicGet.php
index ea7fcbcf000b199b2ce93a9e7bc007416fb63014..43b3ec51aba94e69ef0af57d743a412793e07d63 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicGet.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicGet.php
@@ -19,10 +19,10 @@
 namespace ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicIsset.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicIsset.php
index 09e4a85d3cbe25c81f2c3d0996ae24edfabfa181..11607a4cecbf445c1fbfa94983c9eef7bfefc307 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicIsset.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicIsset.php
@@ -19,10 +19,10 @@
 namespace ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicSet.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicSet.php
index b797b57251985aa9ca68b848df5032fad4b2f53c..453031917446ef34243e0b1e8e491eda8d228cec 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicSet.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicSet.php
@@ -19,10 +19,10 @@
 namespace ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicUnset.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicUnset.php
index 7ee256ee215d25c4391356c3c54f9decaac2ec01..0c339541f32ec2facbfd41c07246615a428f4098 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicUnset.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicUnset.php
@@ -19,10 +19,10 @@
 namespace ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
+use ProxyManager\Generator\ParameterGenerator;
 use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
 use ProxyManager\ProxyGenerator\Util\PublicScopeSimulator;
 use ReflectionClass;
-use ProxyManager\Generator\ParameterGenerator;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/InitializerProperty.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/InitializerProperty.php
index 317306515f82f0bf5b95ce858773f3b5338691ed..e7b436bac49cfac0eb613fd091940152799de735 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/InitializerProperty.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/InitializerProperty.php
@@ -18,8 +18,8 @@
 
 namespace ProxyManager\ProxyGenerator\LazyLoadingValueHolder\PropertyGenerator;
 
-use Zend\Code\Generator\PropertyGenerator;
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
+use Zend\Code\Generator\PropertyGenerator;
 
 /**
  * Property that contains the initializer for a lazy object
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/ValueHolderProperty.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/ValueHolderProperty.php
index 7053e6d3d420842bcd2b19e0d40acd505a913b71..71895dca6d52618ab4e21f21ca357b22905201da 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/ValueHolderProperty.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/ValueHolderProperty.php
@@ -18,8 +18,8 @@
 
 namespace ProxyManager\ProxyGenerator\LazyLoadingValueHolder\PropertyGenerator;
 
-use Zend\Code\Generator\PropertyGenerator;
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
+use Zend\Code\Generator\PropertyGenerator;
 
 /**
  * Property that contains the wrapped value of a lazy loading proxy
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolderGenerator.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolderGenerator.php
index b4be5abd4f55dd0f508767b8c3fb83d72f268bb1..0a9ab363a775c35f47c94a9118ee6191ce842306 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolderGenerator.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/LazyLoadingValueHolderGenerator.php
@@ -18,14 +18,10 @@
 
 namespace ProxyManager\ProxyGenerator;
 
-use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
-use ProxyManager\ProxyGenerator\Util\ProxiedMethodsFilter;
-use ProxyManager\ProxyGenerator\ValueHolder\MethodGenerator\GetWrappedValueHolderValue;
-
+use ProxyManager\Generator\Util\ClassGeneratorUtils;
 use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\MagicWakeup;
-
+use ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion;
 use ProxyManager\ProxyGenerator\LazyLoading\MethodGenerator\Constructor;
-
 use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\GetProxyInitializer;
 use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\InitializeProxy;
 use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\IsProxyInitialized;
@@ -37,12 +33,15 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\MagicSet;
 use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\MagicSleep;
 use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\MagicUnset;
 use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\SetProxyInitializer;
-
 use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\PropertyGenerator\InitializerProperty;
 use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\PropertyGenerator\ValueHolderProperty;
-
+use ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap;
+use ProxyManager\ProxyGenerator\Util\ProxiedMethodsFilter;
+use ProxyManager\ProxyGenerator\ValueHolder\MethodGenerator\GetWrappedValueHolderValue;
 use ReflectionClass;
+use ReflectionMethod;
 use Zend\Code\Generator\ClassGenerator;
+use Zend\Code\Generator\MethodGenerator;
 use Zend\Code\Reflection\MethodReflection;
 
 /**
@@ -60,6 +59,8 @@ class LazyLoadingValueHolderGenerator implements ProxyGeneratorInterface
      */
     public function generate(ReflectionClass $originalClass, ClassGenerator $classGenerator)
     {
+        CanProxyAssertion::assertClassCanBeProxied($originalClass);
+
         $interfaces          = array('ProxyManager\\Proxy\\VirtualProxyInterface');
         $publicProperties    = new PublicPropertiesMap($originalClass);
 
@@ -74,39 +75,37 @@ class LazyLoadingValueHolderGenerator implements ProxyGeneratorInterface
         $classGenerator->addPropertyFromGenerator($initializer = new InitializerProperty());
         $classGenerator->addPropertyFromGenerator($publicProperties);
 
-        foreach (ProxiedMethodsFilter::getProxiedMethods($originalClass) as $method) {
-            $classGenerator->addMethodFromGenerator(
-                LazyLoadingMethodInterceptor::generateMethod(
-                    new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()),
-                    $initializer,
-                    $valueHolder
+        array_map(
+            function (MethodGenerator $generatedMethod) use ($originalClass, $classGenerator) {
+                ClassGeneratorUtils::addMethodIfNotFinal($originalClass, $classGenerator, $generatedMethod);
+            },
+            array_merge(
+                array_map(
+                    function (ReflectionMethod $method) use ($initializer, $valueHolder) {
+                        return LazyLoadingMethodInterceptor::generateMethod(
+                            new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()),
+                            $initializer,
+                            $valueHolder
+                        );
+                    },
+                    ProxiedMethodsFilter::getProxiedMethods($originalClass)
+                ),
+                array(
+                    new Constructor($originalClass, $initializer),
+                    new MagicGet($originalClass, $initializer, $valueHolder, $publicProperties),
+                    new MagicSet($originalClass, $initializer, $valueHolder, $publicProperties),
+                    new MagicIsset($originalClass, $initializer, $valueHolder, $publicProperties),
+                    new MagicUnset($originalClass, $initializer, $valueHolder, $publicProperties),
+                    new MagicClone($originalClass, $initializer, $valueHolder),
+                    new MagicSleep($originalClass, $initializer, $valueHolder),
+                    new MagicWakeup($originalClass),
+                    new SetProxyInitializer($initializer),
+                    new GetProxyInitializer($initializer),
+                    new InitializeProxy($initializer, $valueHolder),
+                    new IsProxyInitialized($valueHolder),
+                    new GetWrappedValueHolderValue($valueHolder),
                 )
-            );
-        }
-
-        $classGenerator->addMethodFromGenerator(new Constructor($originalClass, $initializer));
-
-        $classGenerator->addMethodFromGenerator(
-            new MagicGet($originalClass, $initializer, $valueHolder, $publicProperties)
+            )
         );
-        $classGenerator->addMethodFromGenerator(
-            new MagicSet($originalClass, $initializer, $valueHolder, $publicProperties)
-        );
-        $classGenerator->addMethodFromGenerator(
-            new MagicIsset($originalClass, $initializer, $valueHolder, $publicProperties)
-        );
-        $classGenerator->addMethodFromGenerator(
-            new MagicUnset($originalClass, $initializer, $valueHolder, $publicProperties)
-        );
-        $classGenerator->addMethodFromGenerator(new MagicClone($originalClass, $initializer, $valueHolder));
-        $classGenerator->addMethodFromGenerator(new MagicSleep($originalClass, $initializer, $valueHolder));
-        $classGenerator->addMethodFromGenerator(new MagicWakeup($originalClass));
-
-        $classGenerator->addMethodFromGenerator(new SetProxyInitializer($initializer));
-        $classGenerator->addMethodFromGenerator(new GetProxyInitializer($initializer));
-        $classGenerator->addMethodFromGenerator(new InitializeProxy($initializer, $valueHolder));
-        $classGenerator->addMethodFromGenerator(new IsProxyInitialized($valueHolder));
-
-        $classGenerator->addMethodFromGenerator(new GetWrappedValueHolderValue($valueHolder));
     }
 }
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/NullObject/MethodGenerator/Constructor.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/NullObject/MethodGenerator/Constructor.php
index 79dc165564d1d40ab7b6a002fb7c7c106ffe87f4..7f4c4cec1b603966f62a156254bd194df7bb0af5 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/NullObject/MethodGenerator/Constructor.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/NullObject/MethodGenerator/Constructor.php
@@ -18,9 +18,9 @@
 
 namespace ProxyManager\ProxyGenerator\NullObject\MethodGenerator;
 
+use ProxyManager\Generator\MethodGenerator;
 use ReflectionClass;
 use ReflectionProperty;
-use ProxyManager\Generator\MethodGenerator;
 
 /**
  * The `__construct` implementation for null object proxies
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/NullObjectGenerator.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/NullObjectGenerator.php
index 61983a2593a7ed68430b12029a70e954260acbeb..db177ac4fe4a44c4157e505c427297ca22025eeb 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/NullObjectGenerator.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/NullObjectGenerator.php
@@ -18,12 +18,12 @@
 
 namespace ProxyManager\ProxyGenerator;
 
-use ProxyManager\ProxyGenerator\NullObject\MethodGenerator\NullObjectMethodInterceptor;
+use ProxyManager\Generator\Util\ClassGeneratorUtils;
+use ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion;
 use ProxyManager\ProxyGenerator\NullObject\MethodGenerator\Constructor;
-
+use ProxyManager\ProxyGenerator\NullObject\MethodGenerator\NullObjectMethodInterceptor;
 use ProxyManager\ProxyGenerator\Util\ProxiedMethodsFilter;
 use ReflectionClass;
-
 use Zend\Code\Generator\ClassGenerator;
 use Zend\Code\Reflection\MethodReflection;
 
@@ -42,14 +42,12 @@ class NullObjectGenerator implements ProxyGeneratorInterface
      */
     public function generate(ReflectionClass $originalClass, ClassGenerator $classGenerator)
     {
+        CanProxyAssertion::assertClassCanBeProxied($originalClass);
+
         $interfaces = array('ProxyManager\\Proxy\\NullObjectInterface');
 
         if ($originalClass->isInterface()) {
             $interfaces[] = $originalClass->getName();
-        } else {
-            foreach ($originalClass->getInterfaceNames() as $name) {
-                $interfaces[] = $name;
-            }
         }
 
         $classGenerator->setImplementedInterfaces($interfaces);
@@ -62,6 +60,6 @@ class NullObjectGenerator implements ProxyGeneratorInterface
             );
         }
 
-        $classGenerator->addMethodFromGenerator(new Constructor($originalClass));
+        ClassGeneratorUtils::addMethodIfNotFinal($originalClass, $classGenerator, new Constructor($originalClass));
     }
 }
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/PropertyGenerator/PublicPropertiesDefaults.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/PropertyGenerator/PublicPropertiesDefaults.php
index d13d7c7703772af3095d2d88226b9ef81e3dab95..55822f3693faed0fb76a0d8fae3d6fb1c03fa167 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/PropertyGenerator/PublicPropertiesDefaults.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/PropertyGenerator/PublicPropertiesDefaults.php
@@ -19,9 +19,9 @@
 namespace ProxyManager\ProxyGenerator\PropertyGenerator;
 
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
-use Zend\Code\Generator\PropertyGenerator;
 use ReflectionClass;
 use ReflectionProperty;
+use Zend\Code\Generator\PropertyGenerator;
 
 /**
  * Map of public properties that exist in the class being proxied
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/PropertyGenerator/PublicPropertiesMap.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/PropertyGenerator/PublicPropertiesMap.php
index 8b26a7e75c0c8532605a4d4dd997437471c4583b..5682a4a6ded2773b04af77eb11a402fd39d031c2 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/PropertyGenerator/PublicPropertiesMap.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/PropertyGenerator/PublicPropertiesMap.php
@@ -19,9 +19,9 @@
 namespace ProxyManager\ProxyGenerator\PropertyGenerator;
 
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
-use Zend\Code\Generator\PropertyGenerator;
 use ReflectionClass;
 use ReflectionProperty;
+use Zend\Code\Generator\PropertyGenerator;
 
 /**
  * Map of public properties that exist in the class being proxied
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/Constructor.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/Constructor.php
index 1a3ae69c14f0ba0da2d9240ce77efd69562be9b5..d1fcb8926ce4c2a2cd9fcb9d9781156fd8de73c8 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/Constructor.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/Constructor.php
@@ -18,9 +18,9 @@
 
 namespace ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator;
 
-use ReflectionClass;
 use ProxyManager\Generator\MethodGenerator;
 use ProxyManager\Generator\ParameterGenerator;
+use ReflectionClass;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicGet.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicGet.php
index e321263bbda6fc8c211f994f31a784aa10fe45cb..c1841dc263611b3d10a8390b49461f51c9562d7d 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicGet.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicGet.php
@@ -19,8 +19,8 @@
 namespace ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
-use ReflectionClass;
 use ProxyManager\Generator\ParameterGenerator;
+use ReflectionClass;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicIsset.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicIsset.php
index cf24797acf671ffd1c7a582d5460682c31e75dfb..254977c331492a6095ba51014797d557b2e5bfc8 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicIsset.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicIsset.php
@@ -19,8 +19,8 @@
 namespace ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
-use ReflectionClass;
 use ProxyManager\Generator\ParameterGenerator;
+use ReflectionClass;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicSet.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicSet.php
index 6efaaf232e9e428af49a032b56d9c847ea0cf1ef..2b3c917a541d03c3a6ba9d25435709b0b22400ae 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicSet.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicSet.php
@@ -19,8 +19,8 @@
 namespace ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
-use ReflectionClass;
 use ProxyManager\Generator\ParameterGenerator;
+use ReflectionClass;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicUnset.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicUnset.php
index ffe34fbef38b605c3fe1226c40b24e6f723b51db..fa7aba8697637745e3bef4c065eb66d931ec5946 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicUnset.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/MagicUnset.php
@@ -19,8 +19,8 @@
 namespace ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator;
 
 use ProxyManager\Generator\MagicMethodGenerator;
-use ReflectionClass;
 use ProxyManager\Generator\ParameterGenerator;
+use ReflectionClass;
 use Zend\Code\Generator\PropertyGenerator;
 
 /**
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/RemoteObjectMethod.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/RemoteObjectMethod.php
index 3d0d1de5e29bb1862201e3f80b8898a6652741ca..e8476a69bd05611fb0acb25e0320d6eba5613b95 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/RemoteObjectMethod.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/MethodGenerator/RemoteObjectMethod.php
@@ -19,9 +19,9 @@
 namespace ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator;
 
 use ProxyManager\Generator\MethodGenerator;
+use ReflectionClass;
 use Zend\Code\Generator\PropertyGenerator;
 use Zend\Code\Reflection\MethodReflection;
-use ReflectionClass;
 
 /**
  * Method decorator for remote objects
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/PropertyGenerator/AdapterProperty.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/PropertyGenerator/AdapterProperty.php
index 10b3dc64ed33061b2f8b51e53c1ffb5564ecde29..5ab1dd13382a996806365bf062768e859f9fdf67 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/PropertyGenerator/AdapterProperty.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObject/PropertyGenerator/AdapterProperty.php
@@ -18,8 +18,8 @@
 
 namespace ProxyManager\ProxyGenerator\RemoteObject\PropertyGenerator;
 
-use Zend\Code\Generator\PropertyGenerator;
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
+use Zend\Code\Generator\PropertyGenerator;
 
 /**
  * Property that contains the remote object adapter
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObjectGenerator.php b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObjectGenerator.php
index d84f02f82a27b5b9f3265f6d9dfe5101f7f4fa3c..8a4a4e97bbba5b23b3b99db138d5ba2bb01636f9 100644
--- a/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObjectGenerator.php
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/ProxyGenerator/RemoteObjectGenerator.php
@@ -18,17 +18,20 @@
 
 namespace ProxyManager\ProxyGenerator;
 
-use ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\RemoteObjectMethod;
-use ProxyManager\ProxyGenerator\RemoteObject\PropertyGenerator\AdapterProperty;
+use ProxyManager\Generator\Util\ClassGeneratorUtils;
+use ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion;
 use ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\Constructor;
 use ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\MagicGet;
-use ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\MagicSet;
 use ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\MagicIsset;
+use ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\MagicSet;
 use ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\MagicUnset;
-
+use ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\RemoteObjectMethod;
+use ProxyManager\ProxyGenerator\RemoteObject\PropertyGenerator\AdapterProperty;
 use ProxyManager\ProxyGenerator\Util\ProxiedMethodsFilter;
 use ReflectionClass;
+use ReflectionMethod;
 use Zend\Code\Generator\ClassGenerator;
+use Zend\Code\Generator\MethodGenerator;
 use Zend\Code\Reflection\MethodReflection;
 
 /**
@@ -46,6 +49,8 @@ class RemoteObjectGenerator implements ProxyGeneratorInterface
      */
     public function generate(ReflectionClass $originalClass, ClassGenerator $classGenerator)
     {
+        CanProxyAssertion::assertClassCanBeProxied($originalClass);
+
         $interfaces = array('ProxyManager\\Proxy\\RemoteObjectInterface');
 
         if ($originalClass->isInterface()) {
@@ -57,28 +62,32 @@ class RemoteObjectGenerator implements ProxyGeneratorInterface
         $classGenerator->setImplementedInterfaces($interfaces);
         $classGenerator->addPropertyFromGenerator($adapter = new AdapterProperty());
 
-        $methods = ProxiedMethodsFilter::getProxiedMethods(
-            $originalClass,
-            array('__get', '__set', '__isset', '__unset')
-        );
-
-        foreach ($methods as $method) {
-            $classGenerator->addMethodFromGenerator(
-                RemoteObjectMethod::generateMethod(
-                    new MethodReflection(
-                        $method->getDeclaringClass()->getName(),
-                        $method->getName()
-                    ),
-                    $adapter,
-                    $originalClass
+        array_map(
+            function (MethodGenerator $generatedMethod) use ($originalClass, $classGenerator) {
+                ClassGeneratorUtils::addMethodIfNotFinal($originalClass, $classGenerator, $generatedMethod);
+            },
+            array_merge(
+                array_map(
+                    function (ReflectionMethod $method) use ($adapter, $originalClass) {
+                        return RemoteObjectMethod::generateMethod(
+                            new MethodReflection($method->getDeclaringClass()->getName(), $method->getName()),
+                            $adapter,
+                            $originalClass
+                        );
+                    },
+                    ProxiedMethodsFilter::getProxiedMethods(
+                        $originalClass,
+                        array('__get', '__set', '__isset', '__unset')
+                    )
+                ),
+                array(
+                    new Constructor($originalClass, $adapter),
+                    new MagicGet($originalClass, $adapter),
+                    new MagicSet($originalClass, $adapter),
+                    new MagicIsset($originalClass, $adapter),
+                    new MagicUnset($originalClass, $adapter),
                 )
-            );
-        }
-
-        $classGenerator->addMethodFromGenerator(new Constructor($originalClass, $adapter));
-        $classGenerator->addMethodFromGenerator(new MagicGet($originalClass, $adapter));
-        $classGenerator->addMethodFromGenerator(new MagicSet($originalClass, $adapter));
-        $classGenerator->addMethodFromGenerator(new MagicIsset($originalClass, $adapter));
-        $classGenerator->addMethodFromGenerator(new MagicUnset($originalClass, $adapter));
+            )
+        );
     }
 }
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/ClassSignatureGenerator.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/ClassSignatureGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..70e90acd9e12ad880d54d14c1f00dde3a21a3839
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/ClassSignatureGenerator.php
@@ -0,0 +1,58 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager\Signature;
+
+use Zend\Code\Generator\ClassGenerator;
+use Zend\Code\Generator\PropertyGenerator;
+
+/**
+ * Applies a signature to a given class generator
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+final class ClassSignatureGenerator implements ClassSignatureGeneratorInterface
+{
+    /**
+     * @var SignatureGeneratorInterface
+     */
+    private $signatureGenerator;
+
+    /**
+     * @param SignatureGeneratorInterface $signatureGenerator
+     */
+    public function __construct(SignatureGeneratorInterface $signatureGenerator)
+    {
+        $this->signatureGenerator = $signatureGenerator;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function addSignature(ClassGenerator $classGenerator, array $parameters)
+    {
+        $classGenerator->addPropertyFromGenerator(new PropertyGenerator(
+            'signature' . $this->signatureGenerator->generateSignatureKey($parameters),
+            $this->signatureGenerator->generateSignature($parameters),
+            PropertyGenerator::FLAG_STATIC | PropertyGenerator::FLAG_PRIVATE
+        ));
+
+        return $classGenerator;
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/ClassSignatureGeneratorInterface.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/ClassSignatureGeneratorInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..a5553ed23759992f863df46b4578c8a064bf162d
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/ClassSignatureGeneratorInterface.php
@@ -0,0 +1,40 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager\Signature;
+
+use Zend\Code\Generator\ClassGenerator;
+
+/**
+ * Applies a signature to a given class generator
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+interface ClassSignatureGeneratorInterface
+{
+    /**
+     * Applies a signature to a given class generator
+     *
+     * @param ClassGenerator $classGenerator
+     * @param array          $parameters
+     *
+     * @return ClassGenerator
+     */
+    public function addSignature(ClassGenerator $classGenerator, array $parameters);
+}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/Exception/ExceptionInterface.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/Exception/ExceptionInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..c103153f7808e0cf15cc980d0bda5e9b0a24bc9f
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/Exception/ExceptionInterface.php
@@ -0,0 +1,29 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager\Signature\Exception;
+
+/**
+ * Exception marker for exceptions from the signature sub-component
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+interface ExceptionInterface
+{
+}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/Exception/InvalidSignatureException.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/Exception/InvalidSignatureException.php
new file mode 100644
index 0000000000000000000000000000000000000000..7e974fcb995e9bd67070105c5ebb8b202be3fa6f
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/Exception/InvalidSignatureException.php
@@ -0,0 +1,50 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager\Signature\Exception;
+
+use ReflectionClass;
+use UnexpectedValueException;
+
+/**
+ * Exception for invalid provided signatures
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+class InvalidSignatureException extends UnexpectedValueException implements ExceptionInterface
+{
+    /**
+     * @param ReflectionClass $class
+     * @param array           $parameters
+     * @param string          $signature
+     * @param string          $expected
+     *
+     * @return self
+     */
+    public static function fromInvalidSignature(ReflectionClass $class, array $parameters, $signature, $expected)
+    {
+        return new self(sprintf(
+            'Found signature "%s" for class "%s" does not correspond to expected signature "%s" for %d parameters',
+            $signature,
+            $class->getName(),
+            $expected,
+            count($parameters)
+        ));
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/Exception/MissingSignatureException.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/Exception/MissingSignatureException.php
new file mode 100644
index 0000000000000000000000000000000000000000..e53f5277f321d1331e56a3156e9ae96ee5425ffc
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/Exception/MissingSignatureException.php
@@ -0,0 +1,48 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager\Signature\Exception;
+
+use ReflectionClass;
+use UnexpectedValueException;
+
+/**
+ * Exception for no found signatures
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+class MissingSignatureException extends UnexpectedValueException implements ExceptionInterface
+{
+    /**
+     * @param ReflectionClass $class
+     * @param array           $parameters
+     * @param string          $expected
+     *
+     * @return self
+     */
+    public static function fromMissingSignature(ReflectionClass $class, array $parameters, $expected)
+    {
+        return new self(sprintf(
+            'No signature found for class "%s", expected signature "%s" for %d parameters',
+            $class->getName(),
+            $expected,
+            count($parameters)
+        ));
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/SignatureChecker.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/SignatureChecker.php
new file mode 100644
index 0000000000000000000000000000000000000000..0a674eca6100e575513807eb05d7a57b0f80dfbe
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/SignatureChecker.php
@@ -0,0 +1,68 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager\Signature;
+
+use ProxyManager\Signature\Exception\InvalidSignatureException;
+use ProxyManager\Signature\Exception\MissingSignatureException;
+use ReflectionClass;
+
+/**
+ * Generator for signatures to be used to check the validity of generated code
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+final class SignatureChecker implements SignatureCheckerInterface
+{
+    /**
+     * @var SignatureGeneratorInterface
+     */
+    private $signatureGenerator;
+
+    /**
+     * @param SignatureGeneratorInterface $signatureGenerator
+     */
+    public function __construct(SignatureGeneratorInterface $signatureGenerator)
+    {
+        $this->signatureGenerator = $signatureGenerator;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function checkSignature(ReflectionClass $class, array $parameters)
+    {
+        $propertyName      = 'signature' . $this->signatureGenerator->generateSignatureKey($parameters);
+        $signature         = $this->signatureGenerator->generateSignature($parameters);
+        $defaultProperties = $class->getDefaultProperties();
+
+        if (! isset($defaultProperties[$propertyName])) {
+            throw MissingSignatureException::fromMissingSignature($class, $parameters, $signature);
+        }
+
+        if ($defaultProperties[$propertyName] !== $signature) {
+            throw InvalidSignatureException::fromInvalidSignature(
+                $class,
+                $parameters,
+                $defaultProperties[$propertyName],
+                $signature
+            );
+        }
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/SignatureCheckerInterface.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/SignatureCheckerInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..ded656140c3ab4c5dbc84b5e41ca254a5a55b892
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/SignatureCheckerInterface.php
@@ -0,0 +1,43 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager\Signature;
+
+use ReflectionClass;
+
+/**
+ * Generator for signatures to be used to check the validity of generated code
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+interface SignatureCheckerInterface
+{
+    /**
+     * Checks whether the given signature is valid or not
+     *
+     * @param ReflectionClass $class
+     * @param array           $parameters
+     *
+     * @return void
+     *
+     * @throws \ProxyManager\Signature\Exception\InvalidSignatureException
+     * @throws \ProxyManager\Signature\Exception\MissingSignatureException
+     */
+    public function checkSignature(ReflectionClass $class, array $parameters);
+}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/SignatureGenerator.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/SignatureGenerator.php
new file mode 100644
index 0000000000000000000000000000000000000000..473d3eab740760868d40df1d3e3d6dd0ce21e710
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/SignatureGenerator.php
@@ -0,0 +1,66 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager\Signature;
+
+use ProxyManager\Inflector\Util\ParameterEncoder;
+use ProxyManager\Inflector\Util\ParameterHasher;
+
+/**
+ * {@inheritDoc}
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+final class SignatureGenerator implements SignatureGeneratorInterface
+{
+    /**
+     * @var ParameterEncoder
+     */
+    private $parameterEncoder;
+
+    /**
+     * @var ParameterHasher
+     */
+    private $parameterHasher;
+
+    /**
+     * Constructor.
+     */
+    public function __construct()
+    {
+        $this->parameterEncoder = new ParameterEncoder();
+        $this->parameterHasher  = new ParameterHasher();
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function generateSignature(array $parameters)
+    {
+        return $this->parameterEncoder->encodeParameters($parameters);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function generateSignatureKey(array $parameters)
+    {
+        return $this->parameterHasher->hashParameters($parameters);
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/SignatureGeneratorInterface.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/SignatureGeneratorInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..68ad30bd029da05bd995be78554bc4a2030783c2
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Signature/SignatureGeneratorInterface.php
@@ -0,0 +1,46 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager\Signature;
+
+/**
+ * Generator for signatures to be used to check the validity of generated code
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+interface SignatureGeneratorInterface
+{
+    /**
+     * Generates a signature to be used to verify generated code validity
+     *
+     * @param array $parameters
+     *
+     * @return string
+     */
+    public function generateSignature(array $parameters);
+
+    /**
+     * Generates a signature key to be looked up when verifying generated code validity
+     *
+     * @param array $parameters
+     *
+     * @return string
+     */
+    public function generateSignatureKey(array $parameters);
+}
diff --git a/vendor/ocramius/proxy-manager/src/ProxyManager/Version.php b/vendor/ocramius/proxy-manager/src/ProxyManager/Version.php
new file mode 100644
index 0000000000000000000000000000000000000000..a0367114c62892425d5662fd5c18c25e01d0ccb0
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/src/ProxyManager/Version.php
@@ -0,0 +1,39 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManager;
+
+/**
+ * Version class - to be adjusted when a new release is created.
+ *
+ * Note that we cannot check the version at runtime via `git` because that would cause a lot of I/O operations.
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+final class Version
+{
+    const VERSION = '1.0.0';
+
+    /**
+     * Private constructor - this class is not meant to be instantiated
+     */
+    private function __construct()
+    {
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Autoloader/AutoloaderTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Autoloader/AutoloaderTest.php
index 0a662c2042ba040c09cb67c340ed82667e2650dd..aba8cf0fc3f050f386c5b9c7adef2fb17a2112b0 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Autoloader/AutoloaderTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Autoloader/AutoloaderTest.php
@@ -27,6 +27,9 @@ use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @covers \ProxyManager\Autoloader\Autoloader
+ * @group Coverage
  */
 class AutoloaderTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ConfigurationTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ConfigurationTest.php
index 34354636acb1d4de3b978b1161852b408b977997..17ea451003571cf2a45cffa368c163da665702b4 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ConfigurationTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ConfigurationTest.php
@@ -26,6 +26,8 @@ use ProxyManager\Configuration;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class ConfigurationTest extends PHPUnit_Framework_TestCase
 {
@@ -69,6 +71,7 @@ class ConfigurationTest extends PHPUnit_Framework_TestCase
             $this->configuration->getClassNameInflector()
         );
 
+        /* @var $inflector \ProxyManager\Inflector\ClassNameInflectorInterface */
         $inflector = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
 
         $this->configuration->setClassNameInflector($inflector);
@@ -87,6 +90,7 @@ class ConfigurationTest extends PHPUnit_Framework_TestCase
             $this->configuration->getGeneratorStrategy()
         );
 
+        /* @var $strategy \ProxyManager\GeneratorStrategy\GeneratorStrategyInterface */
         $strategy = $this->getMock('ProxyManager\\GeneratorStrategy\\GeneratorStrategyInterface');
 
         $this->configuration->setGeneratorStrategy($strategy);
@@ -116,9 +120,64 @@ class ConfigurationTest extends PHPUnit_Framework_TestCase
             $this->configuration->getProxyAutoloader()
         );
 
+        /* @var $autoloader \ProxyManager\Autoloader\AutoloaderInterface */
         $autoloader = $this->getMock('ProxyManager\\Autoloader\\AutoloaderInterface');
 
         $this->configuration->setProxyAutoloader($autoloader);
         $this->assertSame($autoloader, $this->configuration->getProxyAutoloader());
     }
+
+    /**
+     * @covers \ProxyManager\Configuration::getSignatureGenerator
+     * @covers \ProxyManager\Configuration::setSignatureGenerator
+     */
+    public function testSetGetSignatureGenerator()
+    {
+        $this->assertInstanceOf(
+            'ProxyManager\\Signature\\SignatureGeneratorInterface',
+            $this->configuration->getSignatureGenerator()
+        );
+
+        /* @var $signatureGenerator \ProxyManager\Signature\SignatureGeneratorInterface */
+        $signatureGenerator = $this->getMock('ProxyManager\\Signature\\SignatureGeneratorInterface');
+
+        $this->configuration->setSignatureGenerator($signatureGenerator);
+        $this->assertSame($signatureGenerator, $this->configuration->getSignatureGenerator());
+    }
+
+    /**
+     * @covers \ProxyManager\Configuration::getSignatureChecker
+     * @covers \ProxyManager\Configuration::setSignatureChecker
+     */
+    public function testSetGetSignatureChecker()
+    {
+        $this->assertInstanceOf(
+            'ProxyManager\\Signature\\SignatureCheckerInterface',
+            $this->configuration->getSignatureChecker()
+        );
+
+        /* @var $signatureChecker \ProxyManager\Signature\SignatureCheckerInterface */
+        $signatureChecker = $this->getMock('ProxyManager\\Signature\\SignatureCheckerInterface');
+
+        $this->configuration->setSignatureChecker($signatureChecker);
+        $this->assertSame($signatureChecker, $this->configuration->getSignatureChecker());
+    }
+
+    /**
+     * @covers \ProxyManager\Configuration::getClassSignatureGenerator
+     * @covers \ProxyManager\Configuration::setClassSignatureGenerator
+     */
+    public function testSetGetClassSignatureGenerator()
+    {
+        $this->assertInstanceOf(
+            'ProxyManager\\Signature\\ClassSignatureGeneratorInterface',
+            $this->configuration->getClassSignatureGenerator()
+        );
+
+        /* @var $classSignatureGenerator \ProxyManager\Signature\ClassSignatureGeneratorInterface */
+        $classSignatureGenerator = $this->getMock('ProxyManager\\Signature\\ClassSignatureGeneratorInterface');
+
+        $this->configuration->setClassSignatureGenerator($classSignatureGenerator);
+        $this->assertSame($classSignatureGenerator, $this->configuration->getClassSignatureGenerator());
+    }
 }
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/DisabledMethodExceptionTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/DisabledMethodExceptionTest.php
index 57cae41b8815ea89c520c39868c74fbc49e8f833..5dc574e917c19b098dbf97cef4c21db26aeeffa4 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/DisabledMethodExceptionTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/DisabledMethodExceptionTest.php
@@ -26,6 +26,9 @@ use ProxyManager\Exception\DisabledMethodException;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @covers \ProxyManager\Exception\DisabledMethodException
+ * @group Coverage
  */
 class DisabledMethodExceptionTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/InvalidProxiedClassExceptionTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/InvalidProxiedClassExceptionTest.php
index b7b63c9369ad25c160e6801012e41145beeb0e64..0656dad745457816f34f87185c5392f16a3ab9cf 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/InvalidProxiedClassExceptionTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/InvalidProxiedClassExceptionTest.php
@@ -27,12 +27,12 @@ use ReflectionClass;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @covers \ProxyManager\Exception\InvalidProxiedClassException
+ * @group Coverage
  */
 class InvalidProxiedClassExceptionTest extends PHPUnit_Framework_TestCase
 {
-    /**
-     * @covers \ProxyManager\Exception\InvalidProxiedClassException::interfaceNotSupported
-     */
     public function testInterfaceNotSupported()
     {
         $this->assertSame(
@@ -42,4 +42,26 @@ class InvalidProxiedClassExceptionTest extends PHPUnit_Framework_TestCase
             )->getMessage()
         );
     }
+
+    public function testFinalClassNotSupported()
+    {
+        $this->assertSame(
+            'Provided class "ProxyManagerTestAsset\FinalClass" is final and cannot be proxied',
+            InvalidProxiedClassException::finalClassNotSupported(
+                new ReflectionClass('ProxyManagerTestAsset\FinalClass')
+            )->getMessage()
+        );
+    }
+
+    public function testAbstractProtectedMethodsNotSupported()
+    {
+        $this->assertSame(
+            'Provided class "ProxyManagerTestAsset\ClassWithAbstractProtectedMethod" has following protected abstract'
+            . ' methods, and therefore cannot be proxied:' . "\n"
+            . 'ProxyManagerTestAsset\ClassWithAbstractProtectedMethod::protectedAbstractMethod',
+            InvalidProxiedClassException::abstractProtectedMethodsNotSupported(
+                new ReflectionClass('ProxyManagerTestAsset\ClassWithAbstractProtectedMethod')
+            )->getMessage()
+        );
+    }
 }
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/InvalidProxyDirectoryExceptionTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/InvalidProxyDirectoryExceptionTest.php
index c80ff7e444f165c3746465f746d0fce315dc3a53..71edab11b5ca0fee92231b2a5c999c76fbb72c2b 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/InvalidProxyDirectoryExceptionTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/InvalidProxyDirectoryExceptionTest.php
@@ -26,6 +26,9 @@ use ProxyManager\Exception\InvalidProxyDirectoryException;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @covers \ProxyManager\Exception\InvalidProxyDirectoryException
+ * @group Coverage
  */
 class InvalidProxyDirectoryExceptionTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/UnsupportedProxiedClassExceptionTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/UnsupportedProxiedClassExceptionTest.php
index 7370c7f1c6246b8b7490b49fd789e4cf8e220409..68977c8a155109f938f261ef6e3b5ee5b76db204 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/UnsupportedProxiedClassExceptionTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Exception/UnsupportedProxiedClassExceptionTest.php
@@ -27,6 +27,9 @@ use ReflectionProperty;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @covers \ProxyManager\Exception\UnsupportedProxiedClassException
+ * @group Coverage
  */
 class UnsupportedProxiedClassExceptionTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/AbstractBaseFactoryTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/AbstractBaseFactoryTest.php
index e33f41bcd704a1f6abc712b40ca1ac0bbb0ab07c..2c1b759a58f0dd082a65e0252e692f50cac13fdb 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/AbstractBaseFactoryTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/AbstractBaseFactoryTest.php
@@ -29,6 +29,7 @@ use ReflectionMethod;
  * @license MIT
  *
  * @covers \ProxyManager\Factory\AbstractBaseFactory
+ * @group Coverage
  */
 class AbstractBaseFactoryTest extends PHPUnit_Framework_TestCase
 {
@@ -57,16 +58,28 @@ class AbstractBaseFactoryTest extends PHPUnit_Framework_TestCase
      */
     private $proxyAutoloader;
 
+    /**
+     * @var \ProxyManager\Signature\SignatureCheckerInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $signatureChecker;
+
+    /**
+     * @var \ProxyManager\Signature\ClassSignatureGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $classSignatureGenerator;
+
     /**
      * {@inheritDoc}
      */
     public function setUp()
     {
-        $configuration            = $this->getMock('ProxyManager\\Configuration');
-        $this->generator          = $this->getMock('ProxyManager\\ProxyGenerator\\ProxyGeneratorInterface');
-        $this->classNameInflector = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
-        $this->generatorStrategy  = $this->getMock('ProxyManager\\GeneratorStrategy\\GeneratorStrategyInterface');
-        $this->proxyAutoloader    = $this->getMock('ProxyManager\\Autoloader\\AutoloaderInterface');
+        $configuration                 = $this->getMock('ProxyManager\\Configuration');
+        $this->generator               = $this->getMock('ProxyManager\\ProxyGenerator\\ProxyGeneratorInterface');
+        $this->classNameInflector      = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->generatorStrategy       = $this->getMock('ProxyManager\\GeneratorStrategy\\GeneratorStrategyInterface');
+        $this->proxyAutoloader         = $this->getMock('ProxyManager\\Autoloader\\AutoloaderInterface');
+        $this->signatureChecker        = $this->getMock('ProxyManager\\Signature\\SignatureCheckerInterface');
+        $this->classSignatureGenerator = $this->getMock('ProxyManager\\Signature\\ClassSignatureGeneratorInterface');
 
         $configuration
             ->expects($this->any())
@@ -83,6 +96,16 @@ class AbstractBaseFactoryTest extends PHPUnit_Framework_TestCase
             ->method('getProxyAutoloader')
             ->will($this->returnValue($this->proxyAutoloader));
 
+        $configuration
+            ->expects($this->any())
+            ->method('getSignatureChecker')
+            ->will($this->returnValue($this->signatureChecker));
+
+        $configuration
+            ->expects($this->any())
+            ->method('getClassSignatureGenerator')
+            ->will($this->returnValue($this->classSignatureGenerator));
+
         $this
             ->classNameInflector
             ->expects($this->any())
@@ -125,6 +148,9 @@ class AbstractBaseFactoryTest extends PHPUnit_Framework_TestCase
                 eval('class ' . $className . ' {}');
             }));
 
+        $this->signatureChecker->expects($this->atLeastOnce())->method('checkSignature');
+        $this->classSignatureGenerator->expects($this->once())->method('addSignature')->will($this->returnArgument(0));
+
         $this->assertSame($generatedClass, $generateProxy->invoke($this->factory, 'stdClass'));
         $this->assertTrue(class_exists($generatedClass, false));
         $this->assertSame($generatedClass, $generateProxy->invoke($this->factory, 'stdClass'));
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/AccessInterceptorScopeLocalizerFactoryTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/AccessInterceptorScopeLocalizerFactoryTest.php
index 61f83a4692ff77316ec69786e002d8baeb105911..ce10d0cb266d223cdcd2a90059af7d15997fea69 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/AccessInterceptorScopeLocalizerFactoryTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/AccessInterceptorScopeLocalizerFactoryTest.php
@@ -30,6 +30,8 @@ use stdClass;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class AccessInterceptorScopeLocalizerFactoryTest extends PHPUnit_Framework_TestCase
 {
@@ -38,6 +40,16 @@ class AccessInterceptorScopeLocalizerFactoryTest extends PHPUnit_Framework_TestC
      */
     protected $inflector;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $signatureChecker;
+
+    /**
+     * @var \ProxyManager\Signature\ClassSignatureGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $classSignatureGenerator;
+
     /**
      * @var \ProxyManager\Configuration|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -48,13 +60,28 @@ class AccessInterceptorScopeLocalizerFactoryTest extends PHPUnit_Framework_TestC
      */
     public function setUp()
     {
-        $this->config    = $this->getMock('ProxyManager\\Configuration');
-        $this->inflector = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->config                  = $this->getMock('ProxyManager\\Configuration');
+        $this->inflector               = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->signatureChecker        = $this->getMock('ProxyManager\\Signature\\SignatureCheckerInterface');
+        $this->classSignatureGenerator = $this->getMock('ProxyManager\\Signature\\ClassSignatureGeneratorInterface');
+
         $this
             ->config
             ->expects($this->any())
             ->method('getClassNameInflector')
             ->will($this->returnValue($this->inflector));
+
+        $this
+            ->config
+            ->expects($this->any())
+            ->method('getSignatureChecker')
+            ->will($this->returnValue($this->signatureChecker));
+
+        $this
+            ->config
+            ->expects($this->any())
+            ->method('getClassSignatureGenerator')
+            ->will($this->returnValue($this->classSignatureGenerator));
     }
 
     /**
@@ -157,6 +184,9 @@ class AccessInterceptorScopeLocalizerFactoryTest extends PHPUnit_Framework_TestC
             ->with('stdClass')
             ->will($this->returnValue('ProxyManagerTestAsset\\LazyLoadingMock'));
 
+        $this->signatureChecker->expects($this->atLeastOnce())->method('checkSignature');
+        $this->classSignatureGenerator->expects($this->once())->method('addSignature')->will($this->returnArgument(0));
+
         $factory     = new AccessInterceptorScopeLocalizerFactory($this->config);
         /* @var $proxy \ProxyManagerTestAsset\AccessInterceptorValueHolderMock */
         $proxy       = $factory->createProxy($instance, array('foo'), array('bar'));
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/AccessInterceptorValueHolderFactoryTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/AccessInterceptorValueHolderFactoryTest.php
index e3995a0549695c2e2914ad585f30b2d621c1deb1..a9a881cdafecf382c78be8e449c2ed3f7913735f 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/AccessInterceptorValueHolderFactoryTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/AccessInterceptorValueHolderFactoryTest.php
@@ -29,6 +29,8 @@ use stdClass;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class AccessInterceptorValueHolderFactoryTest extends PHPUnit_Framework_TestCase
 {
@@ -37,6 +39,16 @@ class AccessInterceptorValueHolderFactoryTest extends PHPUnit_Framework_TestCase
      */
     protected $inflector;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $signatureChecker;
+
+    /**
+     * @var \ProxyManager\Signature\ClassSignatureGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $classSignatureGenerator;
+
     /**
      * @var \ProxyManager\Configuration|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -47,13 +59,28 @@ class AccessInterceptorValueHolderFactoryTest extends PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
-        $this->config    = $this->getMock('ProxyManager\\Configuration');
-        $this->inflector = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->config                  = $this->getMock('ProxyManager\\Configuration');
+        $this->inflector               = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->signatureChecker        = $this->getMock('ProxyManager\\Signature\\SignatureCheckerInterface');
+        $this->classSignatureGenerator = $this->getMock('ProxyManager\\Signature\\ClassSignatureGeneratorInterface');
+
         $this
             ->config
             ->expects($this->any())
             ->method('getClassNameInflector')
             ->will($this->returnValue($this->inflector));
+
+        $this
+            ->config
+            ->expects($this->any())
+            ->method('getSignatureChecker')
+            ->will($this->returnValue($this->signatureChecker));
+
+        $this
+            ->config
+            ->expects($this->any())
+            ->method('getClassSignatureGenerator')
+            ->will($this->returnValue($this->classSignatureGenerator));
     }
 
     /**
@@ -156,6 +183,9 @@ class AccessInterceptorValueHolderFactoryTest extends PHPUnit_Framework_TestCase
             ->with('stdClass')
             ->will($this->returnValue('ProxyManagerTestAsset\\LazyLoadingMock'));
 
+        $this->signatureChecker->expects($this->atLeastOnce())->method('checkSignature');
+        $this->classSignatureGenerator->expects($this->once())->method('addSignature')->will($this->returnArgument(0));
+
         $factory     = new AccessInterceptorValueHolderFactory($this->config);
         /* @var $proxy \ProxyManagerTestAsset\AccessInterceptorValueHolderMock */
         $proxy       = $factory->createProxy($instance, array('foo'), array('bar'));
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/LazyLoadingGhostFactoryTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/LazyLoadingGhostFactoryTest.php
index 9a7d376bead0b64cd72415aa6c38f7989363c0c3..2089f58883a9b0be98da9b5df0bc9a1e3292f481 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/LazyLoadingGhostFactoryTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/LazyLoadingGhostFactoryTest.php
@@ -28,6 +28,8 @@ use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class LazyLoadingGhostFactoryTest extends PHPUnit_Framework_TestCase
 {
@@ -36,6 +38,16 @@ class LazyLoadingGhostFactoryTest extends PHPUnit_Framework_TestCase
      */
     protected $inflector;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $signatureChecker;
+
+    /**
+     * @var \ProxyManager\Signature\ClassSignatureGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $classSignatureGenerator;
+
     /**
      * @var \ProxyManager\Configuration|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -46,13 +58,28 @@ class LazyLoadingGhostFactoryTest extends PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
-        $this->config    = $this->getMock('ProxyManager\\Configuration');
-        $this->inflector = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->config                  = $this->getMock('ProxyManager\\Configuration');
+        $this->inflector               = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->signatureChecker        = $this->getMock('ProxyManager\\Signature\\SignatureCheckerInterface');
+        $this->classSignatureGenerator = $this->getMock('ProxyManager\\Signature\\ClassSignatureGeneratorInterface');
+
         $this
             ->config
             ->expects($this->any())
             ->method('getClassNameInflector')
             ->will($this->returnValue($this->inflector));
+
+        $this
+            ->config
+            ->expects($this->any())
+            ->method('getSignatureChecker')
+            ->will($this->returnValue($this->signatureChecker));
+
+        $this
+            ->config
+            ->expects($this->any())
+            ->method('getClassSignatureGenerator')
+            ->will($this->returnValue($this->classSignatureGenerator));
     }
 
     /**
@@ -151,6 +178,9 @@ class LazyLoadingGhostFactoryTest extends PHPUnit_Framework_TestCase
             ->with($className)
             ->will($this->returnValue('ProxyManagerTestAsset\\LazyLoadingMock'));
 
+        $this->signatureChecker->expects($this->atLeastOnce())->method('checkSignature');
+        $this->classSignatureGenerator->expects($this->once())->method('addSignature')->will($this->returnArgument(0));
+
         $factory     = new LazyLoadingGhostFactory($this->config);
         $initializer = function () {
         };
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/LazyLoadingValueHolderFactoryTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/LazyLoadingValueHolderFactoryTest.php
index c9da4512f7db5a567a001eeb8d092853324bb031..31c0f3b05e75f38faeaf7dc82f7958ff1c5487d7 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/LazyLoadingValueHolderFactoryTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/LazyLoadingValueHolderFactoryTest.php
@@ -28,6 +28,8 @@ use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class LazyLoadingValueHolderFactoryTest extends PHPUnit_Framework_TestCase
 {
@@ -36,6 +38,16 @@ class LazyLoadingValueHolderFactoryTest extends PHPUnit_Framework_TestCase
      */
     protected $inflector;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $signatureChecker;
+
+    /**
+     * @var \ProxyManager\Signature\ClassSignatureGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $classSignatureGenerator;
+
     /**
      * @var \ProxyManager\Configuration|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -46,13 +58,28 @@ class LazyLoadingValueHolderFactoryTest extends PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
-        $this->config    = $this->getMock('ProxyManager\\Configuration');
-        $this->inflector = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->config                  = $this->getMock('ProxyManager\\Configuration');
+        $this->inflector               = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->signatureChecker        = $this->getMock('ProxyManager\\Signature\\SignatureCheckerInterface');
+        $this->classSignatureGenerator = $this->getMock('ProxyManager\\Signature\\ClassSignatureGeneratorInterface');
+
         $this
             ->config
             ->expects($this->any())
             ->method('getClassNameInflector')
             ->will($this->returnValue($this->inflector));
+
+        $this
+            ->config
+            ->expects($this->any())
+            ->method('getSignatureChecker')
+            ->will($this->returnValue($this->signatureChecker));
+
+        $this
+            ->config
+            ->expects($this->any())
+            ->method('getClassSignatureGenerator')
+            ->will($this->returnValue($this->classSignatureGenerator));
     }
 
     /**
@@ -151,6 +178,9 @@ class LazyLoadingValueHolderFactoryTest extends PHPUnit_Framework_TestCase
             ->with($className)
             ->will($this->returnValue('ProxyManagerTestAsset\\LazyLoadingMock'));
 
+        $this->signatureChecker->expects($this->atLeastOnce())->method('checkSignature');
+        $this->classSignatureGenerator->expects($this->once())->method('addSignature')->will($this->returnArgument(0));
+
         $factory     = new LazyLoadingValueHolderFactory($this->config);
         $initializer = function () {
         };
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/NullObjectFactoryTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/NullObjectFactoryTest.php
index 7fa6b2b9ff68fa4fe0c6fc3bd30aae8120fff917..ef3f2a778d73b3f939649b2d04f0a6abf25b9eb4 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/NullObjectFactoryTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/NullObjectFactoryTest.php
@@ -29,6 +29,8 @@ use stdClass;
  *
  * @author Vincent Blanchon <blanchon.vincent@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class NullObjectFactoryTest extends PHPUnit_Framework_TestCase
 {
@@ -37,6 +39,16 @@ class NullObjectFactoryTest extends PHPUnit_Framework_TestCase
      */
     protected $inflector;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $signatureChecker;
+
+    /**
+     * @var \ProxyManager\Signature\ClassSignatureGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $classSignatureGenerator;
+
     /**
      * @var \ProxyManager\Configuration|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -47,13 +59,28 @@ class NullObjectFactoryTest extends PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
-        $this->config    = $this->getMock('ProxyManager\\Configuration');
-        $this->inflector = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->config                  = $this->getMock('ProxyManager\\Configuration');
+        $this->inflector               = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->signatureChecker        = $this->getMock('ProxyManager\\Signature\\SignatureCheckerInterface');
+        $this->classSignatureGenerator = $this->getMock('ProxyManager\\Signature\\ClassSignatureGeneratorInterface');
+
         $this
             ->config
             ->expects($this->any())
             ->method('getClassNameInflector')
             ->will($this->returnValue($this->inflector));
+
+        $this
+            ->config
+            ->expects($this->any())
+            ->method('getSignatureChecker')
+            ->will($this->returnValue($this->signatureChecker));
+
+        $this
+            ->config
+            ->expects($this->any())
+            ->method('getClassSignatureGenerator')
+            ->will($this->returnValue($this->classSignatureGenerator));
     }
 
     /**
@@ -141,6 +168,9 @@ class NullObjectFactoryTest extends PHPUnit_Framework_TestCase
             ->with('stdClass')
             ->will($this->returnValue('ProxyManagerTestAsset\\NullObjectMock'));
 
+        $this->signatureChecker->expects($this->atLeastOnce())->method('checkSignature');
+        $this->classSignatureGenerator->expects($this->once())->method('addSignature')->will($this->returnArgument(0));
+
         $factory    = new NullObjectFactory($this->config);
         /* @var $proxy \ProxyManagerTestAsset\NullObjectMock */
         $proxy      = $factory->createProxy($instance);
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/BaseAdapterTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/BaseAdapterTest.php
index cb7f1e7944d3aff031e65e771894780b315c7491..df70ce8fd2f27f4701c32ce29f6870994ea8febe 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/BaseAdapterTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/BaseAdapterTest.php
@@ -26,6 +26,8 @@ use ProxyManager\Factory\RemoteObject\Adapter\Soap;
  *
  * @author Vincent Blanchon <blanchon.vincent@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class BaseAdapterTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/JsonRpcTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/JsonRpcTest.php
index d2dd02859999683fe9b8103aa8ae8a3a2291e993..66e80d7966ccce1ec8008551e9ba0ad2f689e586 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/JsonRpcTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/JsonRpcTest.php
@@ -26,6 +26,8 @@ use ProxyManager\Factory\RemoteObject\Adapter\JsonRpc;
  *
  * @author Vincent Blanchon <blanchon.vincent@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class JsonRpcTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/SoapTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/SoapTest.php
index 6dae8b783d0b81824fb28e88b6abcd6890198604..fe93e00094522ec8671371a2f16b190b01a56a9e 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/SoapTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/SoapTest.php
@@ -26,6 +26,8 @@ use ProxyManager\Factory\RemoteObject\Adapter\Soap;
  *
  * @author Vincent Blanchon <blanchon.vincent@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class SoapTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/XmlRpcTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/XmlRpcTest.php
index fb6661c3bbb79aacb3dbb40b9921e708a913dd36..d795e40db916c0562f9b08d367f36c02d9d07fa5 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/XmlRpcTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObject/Adapter/XmlRpcTest.php
@@ -26,6 +26,8 @@ use ProxyManager\Factory\RemoteObject\Adapter\XmlRpc;
  *
  * @author Vincent Blanchon <blanchon.vincent@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class XmlRpcTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObjectFactoryTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObjectFactoryTest.php
index ad073e6b59fa95e8f7e5931eb79dfa21ce4d3121..a7385e0fa2182c7228b0a60ca1d1059ede144a5c 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObjectFactoryTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Factory/RemoteObjectFactoryTest.php
@@ -28,6 +28,8 @@ use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
  *
  * @author Vincent Blanchon <blanchon.vincent@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class RemoteObjectFactoryTest extends PHPUnit_Framework_TestCase
 {
@@ -36,6 +38,16 @@ class RemoteObjectFactoryTest extends PHPUnit_Framework_TestCase
      */
     protected $inflector;
 
+    /**
+     * @var \PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $signatureChecker;
+
+    /**
+     * @var \ProxyManager\Signature\ClassSignatureGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $classSignatureGenerator;
+
     /**
      * @var \ProxyManager\Configuration|\PHPUnit_Framework_MockObject_MockObject
      */
@@ -46,13 +58,28 @@ class RemoteObjectFactoryTest extends PHPUnit_Framework_TestCase
      */
     public function setUp()
     {
-        $this->config    = $this->getMock('ProxyManager\\Configuration');
-        $this->inflector = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->config                  = $this->getMock('ProxyManager\\Configuration');
+        $this->inflector               = $this->getMock('ProxyManager\\Inflector\\ClassNameInflectorInterface');
+        $this->signatureChecker        = $this->getMock('ProxyManager\\Signature\\SignatureCheckerInterface');
+        $this->classSignatureGenerator = $this->getMock('ProxyManager\\Signature\\ClassSignatureGeneratorInterface');
+
         $this
             ->config
             ->expects($this->any())
             ->method('getClassNameInflector')
             ->will($this->returnValue($this->inflector));
+
+        $this
+            ->config
+            ->expects($this->any())
+            ->method('getSignatureChecker')
+            ->will($this->returnValue($this->signatureChecker));
+
+        $this
+            ->config
+            ->expects($this->any())
+            ->method('getClassSignatureGenerator')
+            ->will($this->returnValue($this->classSignatureGenerator));
     }
 
     /**
@@ -138,6 +165,9 @@ class RemoteObjectFactoryTest extends PHPUnit_Framework_TestCase
             ->with('ProxyManagerTestAsset\\BaseInterface')
             ->will($this->returnValue('stdClass'));
 
+        $this->signatureChecker->expects($this->atLeastOnce())->method('checkSignature');
+        $this->classSignatureGenerator->expects($this->once())->method('addSignature')->will($this->returnArgument(0));
+
         $adapter = $this->getMock('ProxyManager\Factory\RemoteObject\AdapterInterface');
         $factory = new RemoteObjectFactory($adapter, $this->config);
         /* @var $proxy \stdClass */
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/FileLocator/FileLocatorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/FileLocator/FileLocatorTest.php
index 1ea2fca26a59870ce2e1743e39eb0e25e2805864..92991a01010c926cd39b745997c7382c6c4bcd29 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/FileLocator/FileLocatorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/FileLocator/FileLocatorTest.php
@@ -26,6 +26,8 @@ use ProxyManager\FileLocator\FileLocator;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class FileLocatorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/AccessInterceptorScopeLocalizerFunctionalTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/AccessInterceptorScopeLocalizerFunctionalTest.php
index 5db91f4ab57fe4e0800c616c41a0d64e24abc0a6..2e8984de8b8550d271433b6b1e8874c510133c68 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/AccessInterceptorScopeLocalizerFunctionalTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/AccessInterceptorScopeLocalizerFunctionalTest.php
@@ -27,6 +27,7 @@ use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizerGenerator;
 use ProxyManagerTestAsset\BaseClass;
 use ProxyManagerTestAsset\ClassWithPublicArrayProperty;
 use ProxyManagerTestAsset\ClassWithPublicProperties;
+use ProxyManagerTestAsset\ClassWithSelfHint;
 use ReflectionClass;
 use ProxyManager\Generator\ClassGenerator;
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
@@ -306,7 +307,9 @@ class AccessInterceptorScopeLocalizerFunctionalTest extends PHPUnit_Framework_Te
      */
     public function getProxyMethods()
     {
-        return array(
+        $selfHintParam = new ClassWithSelfHint();
+
+        $data = array(
             array(
                 'ProxyManagerTestAsset\\BaseClass',
                 new BaseClass(),
@@ -329,6 +332,19 @@ class AccessInterceptorScopeLocalizerFunctionalTest extends PHPUnit_Framework_Te
                 'publicByReferenceMethodDefault'
             ),
         );
+
+        if (PHP_VERSION_ID >= 50401) {
+            // PHP < 5.4.1 misbehaves, throwing strict standards, see https://bugs.php.net/bug.php?id=60573
+            $data[] = array(
+                'ProxyManagerTestAsset\\ClassWithSelfHint',
+                new ClassWithSelfHint(),
+                'selfHintMethod',
+                array('parameter' => $selfHintParam),
+                $selfHintParam
+            );
+        }
+
+        return $data;
     }
 
     /**
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/AccessInterceptorValueHolderFunctionalTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/AccessInterceptorValueHolderFunctionalTest.php
index c71edb60a91e4cca234b24bf44576234b25d69e6..7740e2e58b6ed4ac909576fd1c0dde0a4534a4fa 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/AccessInterceptorValueHolderFunctionalTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/AccessInterceptorValueHolderFunctionalTest.php
@@ -24,6 +24,7 @@ use ProxyManager\ProxyGenerator\AccessInterceptorValueHolderGenerator;
 use ProxyManagerTestAsset\BaseClass;
 use ProxyManagerTestAsset\ClassWithPublicArrayProperty;
 use ProxyManagerTestAsset\ClassWithPublicProperties;
+use ProxyManagerTestAsset\ClassWithSelfHint;
 use ReflectionClass;
 use ProxyManager\Generator\ClassGenerator;
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
@@ -282,7 +283,9 @@ class AccessInterceptorValueHolderFunctionalTest extends PHPUnit_Framework_TestC
      */
     public function getProxyMethods()
     {
-        return array(
+        $selfHintParam = new ClassWithSelfHint();
+
+        $data = array(
             array(
                 'ProxyManagerTestAsset\\BaseClass',
                 new BaseClass(),
@@ -312,6 +315,19 @@ class AccessInterceptorValueHolderFunctionalTest extends PHPUnit_Framework_TestC
                 'publicMethodDefault'
             ),
         );
+
+        if (PHP_VERSION_ID >= 50401) {
+            // PHP < 5.4.1 misbehaves, throwing strict standards, see https://bugs.php.net/bug.php?id=60573
+            $data[] = array(
+                'ProxyManagerTestAsset\\ClassWithSelfHint',
+                new ClassWithSelfHint(),
+                'selfHintMethod',
+                array('parameter' => $selfHintParam),
+                $selfHintParam
+            );
+        }
+
+        return $data;
     }
 
     /**
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/FatalPreventionFunctionalTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/FatalPreventionFunctionalTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..290d52bba5f82d2e8955c70b791c7d3350b38090
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/FatalPreventionFunctionalTest.php
@@ -0,0 +1,171 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTest\Functional;
+
+use PHPUnit_Framework_TestCase;
+use PHPUnit_Util_PHP;
+use ReflectionClass;
+
+/**
+ * Verifies that proxy-manager will not attempt to `eval()` code that will cause fatal errors
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ *
+ * @group Functional
+ * @coversNothing
+ */
+class FatalPreventionFunctionalTest extends PHPUnit_Framework_TestCase
+{
+    private $template = <<<'PHP'
+<?php
+
+require_once %s;
+
+$className               = %s;
+$generatedClass          = new ProxyManager\Generator\ClassGenerator(uniqid('generated'));
+$generatorStrategy       = new ProxyManager\GeneratorStrategy\EvaluatingGeneratorStrategy();
+$classGenerator          = new %s;
+$classSignatureGenerator = new ProxyManager\Signature\ClassSignatureGenerator(
+    new ProxyManager\Signature\SignatureGenerator()
+);
+
+try {
+    $classGenerator->generate(new ReflectionClass($className), $generatedClass);
+    $classSignatureGenerator->addSignature($generatedClass, array('eval tests'));
+    $generatorStrategy->generate($generatedClass);
+} catch (ProxyManager\Exception\ExceptionInterface $e) {
+} catch (ReflectionException $e) {
+}
+
+echo 'SUCCESS: ' . %s;
+PHP;
+
+    /**
+     * Verifies that code generation and evaluation will not cause fatals with any given class
+     *
+     * @param string $generatorClass an instantiable class (no arguments) implementing
+     *                               the {@see \ProxyManager\ProxyGenerator\ProxyGeneratorInterface}
+     * @param string $className      a valid (existing/autoloadable) class name
+     *
+     * @dataProvider getTestedClasses
+     */
+    public function testCodeGeneration($generatorClass, $className)
+    {
+        if (defined('HHVM_VERSION')) {
+            $this->markTestSkipped('HHVM is just too slow for this kind of test right now.');
+        }
+
+        if (PHP_VERSION_ID < 50401) {
+            $this->markTestSkipped('Can\'t run this test suite on php < 5.4.1');
+        }
+
+        $runner = PHPUnit_Util_PHP::factory();
+
+        $code = sprintf(
+            $this->template,
+            var_export(realpath(__DIR__ . '/../../../vendor/autoload.php'), true),
+            var_export($className, true),
+            $generatorClass,
+            var_export($className, true)
+        );
+
+        $result = $runner->runJob($code, array('-n'));
+
+        if (('SUCCESS: ' . $className) !== $result['stdout']) {
+            $this->fail(sprintf(
+                "Crashed with class '%s' and generator '%s'.\n\nStdout:\n%s\nStderr:\n%s\nGenerated code:\n%s'",
+                $generatorClass,
+                $className,
+                $result['stdout'],
+                $result['stderr'],
+                $code
+            ));
+        }
+
+        $this->assertSame('SUCCESS: ' . $className, $result['stdout']);
+    }
+
+    /**
+     * @return string[][]
+     */
+    public function getTestedClasses()
+    {
+        $that = $this;
+
+        return call_user_func_array(
+            'array_merge',
+            array_map(
+                function ($generator) use ($that) {
+                    return array_map(
+                        function ($class) use ($generator) {
+                            return array($generator, $class);
+                        },
+                        $that->getProxyTestedClasses()
+                    );
+                },
+                array(
+                    'ProxyManager\\ProxyGenerator\\AccessInterceptorScopeLocalizerGenerator',
+                    'ProxyManager\\ProxyGenerator\\AccessInterceptorValueHolderGenerator',
+                    'ProxyManager\\ProxyGenerator\\LazyLoadingGhostGenerator',
+                    'ProxyManager\\ProxyGenerator\\LazyLoadingValueHolderGenerator',
+                    'ProxyManager\\ProxyGenerator\\NullObjectGenerator',
+                    'ProxyManager\\ProxyGenerator\\RemoteObjectGenerator',
+                )
+            )
+        );
+    }
+
+    /**
+     * @private (public only for PHP 5.3 compatibility)
+     *
+     * @return string[]
+     */
+    public function getProxyTestedClasses()
+    {
+        $skippedPaths = array(
+            realpath(__DIR__ . '/../../src'),
+            realpath(__DIR__ . '/../../vendor'),
+            realpath(__DIR__ . '/../../tests/ProxyManagerTest'),
+        );
+
+        return array_filter(
+            get_declared_classes(),
+            function ($className) use ($skippedPaths) {
+                $reflectionClass = new ReflectionClass($className);
+                $fileName        = $reflectionClass->getFileName();
+
+                if (! $fileName) {
+                    return false;
+                }
+
+                $realPath = realpath($fileName);
+
+                foreach ($skippedPaths as $skippedPath) {
+                    if (0 === strpos($realPath, $skippedPath)) {
+                        // skip classes defined within ProxyManager, vendor or the test suite
+                        return false;
+                    }
+                }
+
+                return true;
+            }
+        );
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/LazyLoadingGhostFunctionalTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/LazyLoadingGhostFunctionalTest.php
index 30b8ceb68f660b4a9e71620f6604aecfbcca34cd..a6690f1001bb747a26b1edcc6c5689c671ea155c 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/LazyLoadingGhostFunctionalTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/LazyLoadingGhostFunctionalTest.php
@@ -30,6 +30,7 @@ use ProxyManagerTestAsset\ClassWithPublicArrayProperty;
 use ProxyManagerTestAsset\ClassWithPublicProperties;
 use ProxyManagerTestAsset\ClassWithProtectedProperties;
 use ProxyManagerTestAsset\ClassWithPrivateProperties;
+use ProxyManagerTestAsset\ClassWithSelfHint;
 use ReflectionClass;
 use ReflectionProperty;
 
@@ -368,7 +369,9 @@ class LazyLoadingGhostFunctionalTest extends PHPUnit_Framework_TestCase
      */
     public function getProxyMethods()
     {
-        return array(
+        $selfHintParam = new ClassWithSelfHint();
+
+        $data = array(
             array(
                 'ProxyManagerTestAsset\\BaseClass',
                 new BaseClass(),
@@ -391,6 +394,19 @@ class LazyLoadingGhostFunctionalTest extends PHPUnit_Framework_TestCase
                 'publicByReferenceMethodDefault'
             ),
         );
+
+        if (PHP_VERSION_ID >= 50401) {
+            // PHP < 5.4.1 misbehaves, throwing strict standards, see https://bugs.php.net/bug.php?id=60573
+            $data[] = array(
+                'ProxyManagerTestAsset\\ClassWithSelfHint',
+                new ClassWithSelfHint(),
+                'selfHintMethod',
+                array('parameter' => $selfHintParam),
+                $selfHintParam
+            );
+        }
+
+        return $data;
     }
 
     /**
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/LazyLoadingValueHolderFunctionalTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/LazyLoadingValueHolderFunctionalTest.php
index 166dd0257fb2c83d31198dc184181aa5ccecff86..a638760b1ec38de79947670693654e1de6ca6944 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/LazyLoadingValueHolderFunctionalTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/LazyLoadingValueHolderFunctionalTest.php
@@ -28,6 +28,7 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolderGenerator;
 use ProxyManagerTestAsset\BaseClass;
 use ProxyManagerTestAsset\ClassWithPublicArrayProperty;
 use ProxyManagerTestAsset\ClassWithPublicProperties;
+use ProxyManagerTestAsset\ClassWithSelfHint;
 use ReflectionClass;
 
 /**
@@ -306,7 +307,9 @@ class LazyLoadingValueHolderFunctionalTest extends PHPUnit_Framework_TestCase
      */
     public function getProxyMethods()
     {
-        return array(
+        $selfHintParam = new ClassWithSelfHint();
+
+        $data = array(
             array(
                 'ProxyManagerTestAsset\\BaseClass',
                 new BaseClass(),
@@ -336,6 +339,19 @@ class LazyLoadingValueHolderFunctionalTest extends PHPUnit_Framework_TestCase
                 'publicMethodDefault'
             ),
         );
+
+        if (PHP_VERSION_ID >= 50401) {
+            // PHP < 5.4.1 misbehaves, throwing strict standards, see https://bugs.php.net/bug.php?id=60573
+            $data[] = array(
+                'ProxyManagerTestAsset\\ClassWithSelfHint',
+                new ClassWithSelfHint(),
+                'selfHintMethod',
+                array('parameter' => $selfHintParam),
+                $selfHintParam
+            );
+        }
+
+        return $data;
     }
 
     /**
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/MultipleProxyGenerationTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/MultipleProxyGenerationTest.php
index de3bfee1c06d7a1d06b38c861db8c2a91fa4d211..00be47dd477ae97ac5332a76b8caae8e43089306 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/MultipleProxyGenerationTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/MultipleProxyGenerationTest.php
@@ -99,9 +99,11 @@ class MultipleProxyGenerationTest extends PHPUnit_Framework_TestCase
      */
     public function getTestedClasses()
     {
-        return array(
+        $data = array(
             array('ProxyManagerTestAsset\\BaseClass'),
             array('ProxyManagerTestAsset\\ClassWithMagicMethods'),
+            array('ProxyManagerTestAsset\\ClassWithFinalMethods'),
+            array('ProxyManagerTestAsset\\ClassWithFinalMagicMethods'),
             array('ProxyManagerTestAsset\\ClassWithByRefMagicMethods'),
             array('ProxyManagerTestAsset\\ClassWithMixedProperties'),
             array('ProxyManagerTestAsset\\ClassWithPrivateProperties'),
@@ -110,5 +112,12 @@ class MultipleProxyGenerationTest extends PHPUnit_Framework_TestCase
             array('ProxyManagerTestAsset\\EmptyClass'),
             array('ProxyManagerTestAsset\\HydratedObject'),
         );
+
+        if (PHP_VERSION_ID >= 50401) {
+            // PHP < 5.4.1 misbehaves, throwing strict standards, see https://bugs.php.net/bug.php?id=60573
+            $data[] = array('ProxyManagerTestAsset\\ClassWithSelfHint');
+        }
+
+        return $data;
     }
 }
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/NullObjectFunctionalTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/NullObjectFunctionalTest.php
index a84842404fa2a3065547015917a74ac77f300d7a..adfeae551600730175733e793ac775cb7d6edfef 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/NullObjectFunctionalTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/NullObjectFunctionalTest.php
@@ -22,6 +22,7 @@ use PHPUnit_Framework_TestCase;
 use ProxyManager\GeneratorStrategy\EvaluatingGeneratorStrategy;
 use ProxyManager\ProxyGenerator\NullObjectGenerator;
 use ProxyManagerTestAsset\BaseClass;
+use ProxyManagerTestAsset\ClassWithSelfHint;
 use ReflectionClass;
 use ProxyManager\Generator\ClassGenerator;
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
@@ -145,7 +146,9 @@ class NullObjectFunctionalTest extends PHPUnit_Framework_TestCase
      */
     public function getProxyMethods()
     {
-        return array(
+        $selfHintParam = new ClassWithSelfHint();
+
+        $data = array(
             array(
                 'ProxyManagerTestAsset\\BaseClass',
                 new BaseClass(),
@@ -175,6 +178,19 @@ class NullObjectFunctionalTest extends PHPUnit_Framework_TestCase
                 'publicMethodDefault'
             ),
         );
+
+        if (PHP_VERSION_ID >= 50401) {
+            // PHP < 5.4.1 misbehaves, throwing strict standards, see https://bugs.php.net/bug.php?id=60573
+            $data[] = array(
+                'ProxyManagerTestAsset\\ClassWithSelfHint',
+                new ClassWithSelfHint(),
+                'selfHintMethod',
+                array('parameter' => $selfHintParam),
+                $selfHintParam
+            );
+        }
+
+        return $data;
     }
 
     /**
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/RemoteObjectFunctionalTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/RemoteObjectFunctionalTest.php
index 9356e876c7e5f9ade6d36f36e9776b3a991b1e9f..b5d9c956b591c89f3c9404633698338b77b187ee 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/RemoteObjectFunctionalTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Functional/RemoteObjectFunctionalTest.php
@@ -25,6 +25,7 @@ use ProxyManager\Generator\ClassGenerator;
 use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
 use ProxyManager\GeneratorStrategy\EvaluatingGeneratorStrategy;
 use ProxyManager\ProxyGenerator\RemoteObjectGenerator;
+use ProxyManagerTestAsset\ClassWithSelfHint;
 use ProxyManagerTestAsset\RemoteProxy\Foo;
 use ReflectionClass;
 
@@ -170,7 +171,9 @@ class RemoteObjectFunctionalTest extends PHPUnit_Framework_TestCase
      */
     public function getProxyMethods()
     {
-        return array(
+        $selfHintParam = new ClassWithSelfHint();
+
+        $data = array(
             array(
                 'ProxyManagerTestAsset\RemoteProxy\FooServiceInterface',
                 'foo',
@@ -196,6 +199,18 @@ class RemoteObjectFunctionalTest extends PHPUnit_Framework_TestCase
                 'baz remote'
             ),
         );
+
+        if (PHP_VERSION_ID >= 50401) {
+            // PHP < 5.4.1 misbehaves, throwing strict standards, see https://bugs.php.net/bug.php?id=60573
+            $data[] = array(
+                new ClassWithSelfHint(),
+                'selfHintMethod',
+                array($selfHintParam),
+                $selfHintParam
+            );
+        }
+
+        return $data;
     }
 
     /**
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/ClassGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/ClassGeneratorTest.php
index 8bab3accf2a80eb7f69ef91469b43c5715a82177..c00f849d1e17376bd45519d801a63dc83ef2b1b7 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/ClassGeneratorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/ClassGeneratorTest.php
@@ -26,6 +26,8 @@ use ProxyManager\Generator\ClassGenerator;
  *
  * @author Gordon Stratton <gordon.stratton@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class ClassGeneratorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/MagicMethodGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/MagicMethodGeneratorTest.php
index f9cd0334957b42aaab0a5a827b15b8373a94ab40..c5ae31a05cbfb9572fcbe65a66a00d00c977201a 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/MagicMethodGeneratorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/MagicMethodGeneratorTest.php
@@ -27,6 +27,8 @@ use ProxyManager\Generator\MagicMethodGenerator;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicMethodGeneratorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/MethodGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/MethodGeneratorTest.php
index cd0a5248a243d53bc29252a50671e81630d6537d..4c2306ae067571e681667bebe83c1667ee21e29a 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/MethodGeneratorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/MethodGeneratorTest.php
@@ -30,6 +30,7 @@ use Zend\Code\Reflection\MethodReflection;
  * @license MIT
  *
  * @covers \ProxyManager\Generator\MethodGenerator
+ * @group Coverage
  */
 class MethodGeneratorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/ParameterGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/ParameterGeneratorTest.php
index 98ac8b5c912f008d6c1aa11cf2f4d9234446182a..a67f2256d77bd372918dde6c40bc42f120e859d7 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/ParameterGeneratorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/ParameterGeneratorTest.php
@@ -29,6 +29,7 @@ use Zend\Code\Reflection\ParameterReflection;
  * @license MIT
  *
  * @covers \ProxyManager\Generator\ParameterGenerator
+ * @group Coverage
  */
 class ParameterGeneratorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/Util/ClassGeneratorUtilsTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/Util/ClassGeneratorUtilsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..cf525465511f7d34b7d11fe5d7bda101b29169ea
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/Util/ClassGeneratorUtilsTest.php
@@ -0,0 +1,72 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTest\Generator\Util;
+
+use ReflectionClass;
+use PHPUnit_Framework_TestCase;
+use ProxyManager\Generator\Util\ClassGeneratorUtils;
+
+/**
+ * Test to {@see ProxyManager\Generator\Util\ClassGeneratorUtils}
+ *
+ * @author Jefersson Nathan <malukenho@phpse.net>
+ * @license MIT
+ *
+ * @covers ProxyManager\Generator\Util\ClassGeneratorUtils
+ */
+class ClassGeneratorUtilsTest extends PHPUnit_Framework_TestCase
+{
+    public function testCantAddAFinalMethod()
+    {
+        $classGenerator  = $this->getMock('Zend\\Code\\Generator\\ClassGenerator');
+        $methodGenerator = $this->getMock('Zend\\Code\\Generator\\MethodGenerator');
+
+        $methodGenerator
+            ->expects($this->once())
+            ->method('getName')
+            ->willReturn('foo');
+
+        $classGenerator
+            ->expects($this->never())
+            ->method('addMethodFromGenerator');
+
+        $reflection = new ReflectionClass('ProxyManagerTestAsset\\ClassWithFinalMethods');
+
+        ClassGeneratorUtils::addMethodIfNotFinal($reflection, $classGenerator, $methodGenerator);
+    }
+
+    public function testCanAddANotFinalMethod()
+    {
+        $classGenerator  = $this->getMock('Zend\\Code\\Generator\\ClassGenerator');
+        $methodGenerator = $this->getMock('Zend\\Code\\Generator\\MethodGenerator');
+
+        $methodGenerator
+            ->expects($this->once())
+            ->method('getName')
+            ->willReturn('publicMethod');
+
+        $classGenerator
+            ->expects($this->once())
+            ->method('addMethodFromGenerator');
+
+        $reflection = new ReflectionClass('ProxyManagerTestAsset\\BaseClass');
+
+        ClassGeneratorUtils::addMethodIfNotFinal($reflection, $classGenerator, $methodGenerator);
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/Util/UniqueIdentifierGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/Util/UniqueIdentifierGeneratorTest.php
index b513978e626fda8586095c041669246e39c7a091..5f4e8ec2286b5c4ef83b14fde0b4023e93160d77 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/Util/UniqueIdentifierGeneratorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Generator/Util/UniqueIdentifierGeneratorTest.php
@@ -26,6 +26,8 @@ use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class UniqueIdentifierGeneratorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/GeneratorStrategy/BaseGeneratorStrategyTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/GeneratorStrategy/BaseGeneratorStrategyTest.php
index 3d5f2fc4401b80f5be089230546242a7a15db00d..d2366a227d5bc9a7572dd473fdc36977ad5ec91d 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/GeneratorStrategy/BaseGeneratorStrategyTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/GeneratorStrategy/BaseGeneratorStrategyTest.php
@@ -28,6 +28,8 @@ use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class BaseGeneratorStrategyTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/GeneratorStrategy/EvaluatingGeneratorStrategyTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/GeneratorStrategy/EvaluatingGeneratorStrategyTest.php
index 79c9307388fcdef1c0e96346669c2b57e1dac4dc..90d22cec9866378927b46ed2abf93f21002677f3 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/GeneratorStrategy/EvaluatingGeneratorStrategyTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/GeneratorStrategy/EvaluatingGeneratorStrategyTest.php
@@ -28,6 +28,8 @@ use ProxyManager\GeneratorStrategy\EvaluatingGeneratorStrategy;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class EvaluatingGeneratorStrategyTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/GeneratorStrategy/FileWriterGeneratorStrategyTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/GeneratorStrategy/FileWriterGeneratorStrategyTest.php
index eeb5abe173003ddfa42c7fc9e1d967191dff05ad..0e467c8e155dca2f8074a79085b44ce4718b624b 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/GeneratorStrategy/FileWriterGeneratorStrategyTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/GeneratorStrategy/FileWriterGeneratorStrategyTest.php
@@ -28,6 +28,8 @@ use ProxyManager\Generator\Util\UniqueIdentifierGenerator;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class FileWriterGeneratorStrategyTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Inflector/ClassNameInflectorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Inflector/ClassNameInflectorTest.php
index 2c172bd8f97190d852d883bb5b9bba0b327a90e0..b95d7f203a9799121be78c8f86e1ca4408e2047a 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Inflector/ClassNameInflectorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Inflector/ClassNameInflectorTest.php
@@ -27,6 +27,8 @@ use ProxyManager\Inflector\ClassNameInflectorInterface;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class ClassNameInflectorTest extends PHPUnit_Framework_TestCase
 {
@@ -107,7 +109,28 @@ class ClassNameInflectorTest extends PHPUnit_Framework_TestCase
     }
 
     /**
-     * @return array
+     * @covers \ProxyManager\Inflector\ClassNameInflector::getProxyClassName
+     *
+     * @dataProvider getClassAndParametersCombinations
+     *
+     * @param string $className
+     * @param array  $parameters
+     */
+    public function testClassNameIsValidClassIdentifier($className, array $parameters)
+    {
+        $inflector = new ClassNameInflector('ProxyNS');
+
+        $this->assertRegExp(
+            '/([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+)(\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]+)*/',
+            $inflector->getProxyClassName($className, $parameters),
+            'Class name string is a valid class identifier'
+        );
+    }
+
+    /**
+     * Data provider.
+     *
+     * @return array[]
      */
     public function getClassNames()
     {
@@ -116,4 +139,23 @@ class ClassNameInflectorTest extends PHPUnit_Framework_TestCase
             array('Foo\\Bar', 'ProxyNS\\' . ClassNameInflectorInterface::PROXY_MARKER . '\\Foo\\Bar\\%s'),
         );
     }
+
+    /**
+     * Data provider.
+     *
+     * @return array[]
+     */
+    public function getClassAndParametersCombinations()
+    {
+        return array(
+            array('Foo', array()),
+            array('Foo\\Bar', array()),
+            array('Foo', array(null)),
+            array('Foo\\Bar', array(null)),
+            array('Foo', array('foo' => 'bar')),
+            array('Foo\\Bar', array('foo' => 'bar')),
+            array('Foo', array("\0" => "very \0 bad")),
+            array('Foo\\Bar', array("\0" => "very \0 bad")),
+        );
+    }
 }
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Inflector/Util/ParameterEncoderTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Inflector/Util/ParameterEncoderTest.php
index 5098a5e5ae8015abfac4deb644603c95a972f016..1acd28e390422f444e676858297214174d7c365e 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Inflector/Util/ParameterEncoderTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Inflector/Util/ParameterEncoderTest.php
@@ -26,6 +26,8 @@ use ProxyManager\Inflector\Util\ParameterEncoder;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class ParameterEncoderTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Inflector/Util/ParameterHasherTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Inflector/Util/ParameterHasherTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..22bf68d1115222e6f4fa17ee85f89dbee217a92a
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Inflector/Util/ParameterHasherTest.php
@@ -0,0 +1,62 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTest\Inflector\Util;
+
+use PHPUnit_Framework_TestCase;
+use ProxyManager\Inflector\Util\ParameterHasher;
+
+/**
+ * Tests for {@see \ProxyManager\Inflector\Util\ParameterHasher}
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ *
+ * @group Coverage
+ */
+class ParameterHasherTest extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @dataProvider getParameters
+     *
+     * @covers \ProxyManager\Inflector\Util\ParameterHasher::hashParameters
+     */
+    public function testGeneratesValidClassName(array $parameters, $expectedHash)
+    {
+        $encoder = new ParameterHasher();
+
+        $this->assertSame($expectedHash, $encoder->hashParameters($parameters));
+    }
+
+    /**
+     * @return array
+     */
+    public function getParameters()
+    {
+        return array(
+            array(array(), '40cd750bba9870f18aada2478b24840a'),
+            array(array('foo' => 'bar'), '49a3696adf0fbfacc12383a2d7400d51'),
+            array(array('bar' => 'baz'), '6ed41c8a63c1571554ecaeb998198757'),
+            array(array(null), '38017a839aaeb8ff1a658fce9af6edd3'),
+            array(array(null, null), '12051f9a58288e5328ad748881cc4e00'),
+            array(array('bar' => null), '0dbb112e1c4e6e4126232de2daa2d660'),
+            array(array('bar' => 12345), 'eb6291ea4973741bf9b6571f49b4ffd2'),
+            array(array('foo' => 'bar', 'bar' => 'baz'), '4447ff857f244d24c31bd84d7a855eda'),
+        );
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AbstractProxyGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AbstractProxyGeneratorTest.php
index ff6e4671016253260689a5fc629f722ff1b15a87..307aafc1741762c2c0930ba7393aad6b3118bc69 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AbstractProxyGeneratorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AbstractProxyGeneratorTest.php
@@ -29,6 +29,8 @@ use ReflectionClass;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 abstract class AbstractProxyGeneratorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/MethodGenerator/MagicWakeupTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/MethodGenerator/MagicWakeupTest.php
index c7cb0e12126eee23bd961a11f2cd9778868e98f9..a5c5bec62e370af833234e3e346bedbec7fd066e 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/MethodGenerator/MagicWakeupTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/MethodGenerator/MagicWakeupTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptor\MethodGenerator\MagicWakeup;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicWakeupTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/MethodGenerator/SetMethodPrefixInterceptorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/MethodGenerator/SetMethodPrefixInterceptorTest.php
index 277e4765007951713e5b625f282c9fc0335a980a..e35c993079fc993cdadfe543241168ca78681dd1 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/MethodGenerator/SetMethodPrefixInterceptorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/MethodGenerator/SetMethodPrefixInterceptorTest.php
@@ -26,6 +26,8 @@ use PHPUnit_Framework_TestCase;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class SetMethodPrefixInterceptorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/MethodGenerator/SetMethodSuffixInterceptorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/MethodGenerator/SetMethodSuffixInterceptorTest.php
index c718325841756d0287b077155428fa389f29924b..db65647ba5f9562a5d2b6b85494093f00be41715 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/MethodGenerator/SetMethodSuffixInterceptorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/MethodGenerator/SetMethodSuffixInterceptorTest.php
@@ -26,6 +26,8 @@ use PHPUnit_Framework_TestCase;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class SetMethodSuffixInterceptorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodPrefixInterceptorsTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodPrefixInterceptorsTest.php
index 002761fae7903ca6023b52696ed6bbdeedad7ba9..9b6de3d3744b60eec4b51addc25c6b15096dc1de 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodPrefixInterceptorsTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodPrefixInterceptorsTest.php
@@ -28,6 +28,7 @@ use ProxyManagerTest\ProxyGenerator\PropertyGenerator\AbstractUniquePropertyName
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\AccessInterceptor\PropertyGenerator\MethodPrefixInterceptors
+ * @group Coverage
  */
 class MethodPrefixInterceptorsTest extends AbstractUniquePropertyNameTest
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodSuffixInterceptorsTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodSuffixInterceptorsTest.php
index 8e5b4b3039147fb0212d1a03abb7fd837eb5e72d..7515badde951a8d477573e82488e465aac77bb94 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodSuffixInterceptorsTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptor/PropertyGenerator/MethodSuffixInterceptorsTest.php
@@ -28,6 +28,7 @@ use ProxyManagerTest\ProxyGenerator\PropertyGenerator\AbstractUniquePropertyName
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\AccessInterceptor\PropertyGenerator\MethodSuffixInterceptors
+ * @group Coverage
  */
 class MethodSuffixInterceptorsTest extends AbstractUniquePropertyNameTest
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/ConstructorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/ConstructorTest.php
index f9a3758e506b93172f37d32ec6c493a06898e512..a1b5c12a93cea6c0763c8d5db5bd674330a56652 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/ConstructorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/ConstructorTest.php
@@ -27,6 +27,8 @@ use ReflectionClass;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class ConstructorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/InterceptedMethodTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/InterceptedMethodTest.php
index 9fb8a2613cac62bd337b88c91ef5779c044a51db..207359f00012eb4115234888510764b859b4975f 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/InterceptedMethodTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/InterceptedMethodTest.php
@@ -29,6 +29,7 @@ use Zend\Code\Reflection\MethodReflection;
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\InterceptedMethod
+ * @group Coverage
  */
 class InterceptedMethodTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicCloneTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicCloneTest.php
index 3327f0d030ce75c87c0d7b4d498f80b9d56b81a1..df4f49ebeea8b6356028932e090e0f588b79eed5 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicCloneTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicCloneTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicCloneTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicGetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicGetTest.php
index 3d188bb5c74859d4ca0d4eda66a0c023f62c95f7..ed67bb0605432efd0f2318234fc498cd3c284740 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicGetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicGetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicGetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicIssetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicIssetTest.php
index 13dfd00950cb944fd360a4f0fc6df3b8ca475526..0dabe4c220af2cb25b8ac82660f8905222c82b1d 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicIssetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicIssetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicIssetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicSetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicSetTest.php
index 14f6ccf43fcdaf0afb82f014528840fd7cef4599..25d307090f6fed2f92d920a19f9ff32efaef8751 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicSetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicSetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicSetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicSleepTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicSleepTest.php
index 3f3d9265703de5e6c7d40bf29580d2837ac12f7c..98e401b999ef4c7e7473e5fedb2956f005de2dc0 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicSleepTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicSleepTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicSleepTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicUnsetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicUnsetTest.php
index f22bc9899f0099430bded62cfb527a72c9337a86..822fda55177026ecec0ac2a8bc644dc0bcff4b9f 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicUnsetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/MagicUnsetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicUnsetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/Util/InterceptorGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/Util/InterceptorGeneratorTest.php
index d32889854d2037532cad37125efe7c21044fe988..7e54c70f635a42443f181a507f2b39646e9b3259 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/Util/InterceptorGeneratorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizer/MethodGenerator/Util/InterceptorGeneratorTest.php
@@ -26,6 +26,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizer\MethodGenerator\
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class InterceptorGeneratorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizerTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizerTest.php
index 4aa1d6035acd396a508f5807a8c2e87510c6fe7a..bd6af22e6f9400e8fb4f7269897a36b88218e786 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizerTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorScopeLocalizerTest.php
@@ -29,6 +29,7 @@ use ReflectionProperty;
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\AccessInterceptorScopeLocalizerGenerator
+ * @group Coverage
  */
 class AccessInterceptorScopeLocalizerTest extends AbstractProxyGeneratorTest
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/LazyLoading/MethodGenerator/ConstructorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/LazyLoading/MethodGenerator/ConstructorTest.php
index 8f61250aeacd84a912ff22c4321cff8ec2179aa0..e4209c17966d72780b532d5969fa4e3a25cde41b 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/LazyLoading/MethodGenerator/ConstructorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/LazyLoading/MethodGenerator/ConstructorTest.php
@@ -27,6 +27,8 @@ use ReflectionClass;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class ConstructorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/ConstructorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/ConstructorTest.php
index 931a5bf003613554e79a29146f5ca31cf6d2ca12..97f717574d6294d7fdc7db3fb2e9cccea5bc8381 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/ConstructorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/ConstructorTest.php
@@ -27,6 +27,8 @@ use ReflectionClass;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class ConstructorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/InterceptedMethodTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/InterceptedMethodTest.php
index 069eedcb5bb19249d1ebe3583ca8cce99a274e2d..41b5bfb3163e962cdc96fe27618eb1ddf0402f39 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/InterceptedMethodTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/InterceptedMethodTest.php
@@ -29,12 +29,10 @@ use Zend\Code\Reflection\MethodReflection;
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\InterceptedMethod::generateMethod
+ * @group Coverage
  */
 class InterceptedMethodTest extends PHPUnit_Framework_TestCase
 {
-    /**
-     *
-     */
     public function testBodyStructure()
     {
         $valueHolder        = $this->getMock('Zend\\Code\\Generator\\PropertyGenerator');
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicCloneTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicCloneTest.php
index 1e88b746cdad08bc624affc7e0dbb3931a2751a9..72a776356a226343fc2581297000c89e36c0a615 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicCloneTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicCloneTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Mag
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicCloneTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicGetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicGetTest.php
index d450b09e7c3b6651e3a9ffb4ab9be120bc80cc00..0ca38deb82d3413822b7463533ef10f15f8b1c7e 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicGetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicGetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Mag
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicGetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicIssetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicIssetTest.php
index f5a13ff4982b06c8da79c016748faa2450e7b5b6..5f34baf3377e4f60ca31d5c0fc8014221bac7673 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicIssetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicIssetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Mag
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicIssetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicSetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicSetTest.php
index d5e5357e06c71c5a5f711557a69b2f0c70da82e0..93da0b97c139a21418d6cbab47b2ca7f4a71df42 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicSetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicSetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Mag
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicSetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicUnsetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicUnsetTest.php
index e785287ed8241eb6229a9f1663946ed2bee399f9..0433ff6f62561598068a5f51f12aa7bb3f40c94b 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicUnsetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/MagicUnsetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Mag
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicUnsetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/Util/InterceptorGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/Util/InterceptorGeneratorTest.php
index f4950b310e0a41e220821a78a912e602a8804b8f..bb5c4612ff9931730f888d8b9df1558c809fb5a3 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/Util/InterceptorGeneratorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolder/MethodGenerator/Util/InterceptorGeneratorTest.php
@@ -26,6 +26,8 @@ use ProxyManager\ProxyGenerator\AccessInterceptorValueHolder\MethodGenerator\Uti
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class InterceptorGeneratorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolderTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolderTest.php
index 58410b4fd7952b182bf493a665c06b1f96337eac..1b7d8065c089f48ed915eef1447e1ad71eb80307 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolderTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/AccessInterceptorValueHolderTest.php
@@ -27,6 +27,7 @@ use ProxyManager\ProxyGenerator\AccessInterceptorValueHolderGenerator;
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\AccessInterceptorValueHolderGenerator
+ * @group Coverage
  */
 class AccessInterceptorValueHolderTest extends AbstractProxyGeneratorTest
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/Assertion/CanProxyAssertionTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/Assertion/CanProxyAssertionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..1c9003f7d72f011352ea0384bbe4073175766679
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/Assertion/CanProxyAssertionTest.php
@@ -0,0 +1,113 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTest\ProxyGenerator\Assertion;
+
+use PHPUnit_Framework_TestCase;
+use ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion;
+use ReflectionClass;
+
+/**
+ * Tests for {@see \ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion}
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ *
+ * @covers \ProxyManager\ProxyGenerator\Assertion\CanProxyAssertion
+ * @group Coverage
+ */
+class CanProxyAssertionTest extends PHPUnit_Framework_TestCase
+{
+    public function testDeniesFinalClasses()
+    {
+        $this->setExpectedException('ProxyManager\Exception\InvalidProxiedClassException');
+
+        CanProxyAssertion::assertClassCanBeProxied(new ReflectionClass('ProxyManagerTestAsset\\FinalClass'));
+    }
+
+    public function testDeniesClassesWithAbstractProtectedMethods()
+    {
+        $this->setExpectedException('ProxyManager\Exception\InvalidProxiedClassException');
+
+        CanProxyAssertion::assertClassCanBeProxied(new ReflectionClass(
+            'ProxyManagerTestAsset\\ClassWithAbstractProtectedMethod'
+        ));
+    }
+
+    public function testAllowsInterfaceByDefault()
+    {
+        CanProxyAssertion::assertClassCanBeProxied(new ReflectionClass(
+            'ProxyManagerTestAsset\\BaseInterface'
+        ));
+
+        $this->assertTrue(true); // not nice, but assertions are just fail-checks, no real code executed
+    }
+
+    public function testDeniesInterfaceIfSpecified()
+    {
+        $this->setExpectedException('ProxyManager\Exception\InvalidProxiedClassException');
+
+        CanProxyAssertion::assertClassCanBeProxied(new ReflectionClass('ProxyManagerTestAsset\\BaseInterface'), false);
+    }
+
+    /**
+     * @param string $className
+     *
+     * @dataProvider validClasses
+     */
+    public function testAllowedClass($className)
+    {
+        CanProxyAssertion::assertClassCanBeProxied(new ReflectionClass($className));
+
+        $this->assertTrue(true); // not nice, but assertions are just fail-checks, no real code executed
+    }
+
+    public function testDisallowsConstructor()
+    {
+        $this->setExpectedException('BadMethodCallException');
+
+        new CanProxyAssertion();
+    }
+
+    /**
+     * @return string[][]
+     */
+    public function validClasses()
+    {
+        return array(
+            array('ProxyManagerTestAsset\AccessInterceptorValueHolderMock'),
+            array('ProxyManagerTestAsset\BaseClass'),
+            array('ProxyManagerTestAsset\BaseInterface'),
+            array('ProxyManagerTestAsset\CallableTypeHintClass'),
+            array('ProxyManagerTestAsset\ClassWithByRefMagicMethods'),
+            array('ProxyManagerTestAsset\ClassWithFinalMagicMethods'),
+            array('ProxyManagerTestAsset\ClassWithFinalMethods'),
+            array('ProxyManagerTestAsset\ClassWithMethodWithDefaultParameters'),
+            array('ProxyManagerTestAsset\ClassWithMixedProperties'),
+            array('ProxyManagerTestAsset\ClassWithPrivateProperties'),
+            array('ProxyManagerTestAsset\ClassWithProtectedProperties'),
+            array('ProxyManagerTestAsset\ClassWithPublicProperties'),
+            array('ProxyManagerTestAsset\ClassWithPublicArrayProperty'),
+            array('ProxyManagerTestAsset\ClassWithSelfHint'),
+            array('ProxyManagerTestAsset\EmptyClass'),
+            array('ProxyManagerTestAsset\HydratedObject'),
+            array('ProxyManagerTestAsset\LazyLoadingMock'),
+            array('ProxyManagerTestAsset\NullObjectMock'),
+        );
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/CallInitializerTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/CallInitializerTest.php
index 32c0a975373d05732659acaaa4b659d16d0f4f84..3fbd81d4e324dc2e2ca1b58554cafb69d718d164 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/CallInitializerTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/CallInitializerTest.php
@@ -26,6 +26,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\CallInitializer
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class CallInitializerTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/GetProxyInitializerTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/GetProxyInitializerTest.php
index 5b7be9ab18dd2b8c87f222c26817f2339b45934b..32936b9feed52d117995d25bcd61e755d1c5d872 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/GetProxyInitializerTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/GetProxyInitializerTest.php
@@ -26,6 +26,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\GetProxyInitial
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class GetProxyInitializerTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/InitializeProxyTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/InitializeProxyTest.php
index 842b34800be81853044ce23f3359932ff8d7a4b9..27e1e2dd93c38460d316ff325e8f8e2acc24a40b 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/InitializeProxyTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/InitializeProxyTest.php
@@ -26,6 +26,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\InitializeProxy
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class InitializeProxyTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/IsProxyInitializedTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/IsProxyInitializedTest.php
index 26d5a346fecf25748f5f1aab54f6277720f21671..f82dae9f2875185242d29032215a134b305b6047 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/IsProxyInitializedTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/IsProxyInitializedTest.php
@@ -26,6 +26,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\IsProxyInitiali
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class IsProxyInitializedTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/LazyLoadingMethodInterceptorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/LazyLoadingMethodInterceptorTest.php
index e202458246af868ffa56142c0729e9d3d637e9e7..db5e3af21be4fbe4c80879469bcfbec174099d98 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/LazyLoadingMethodInterceptorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/LazyLoadingMethodInterceptorTest.php
@@ -27,6 +27,8 @@ use Zend\Code\Reflection\MethodReflection;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class LazyLoadingMethodInterceptorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicCloneTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicCloneTest.php
index d3524020ff3a8a9557c73c8fe88e9f6356fa1238..4cb22714e623e897e51e30e01af86c611ac4f259 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicCloneTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicCloneTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\MagicClone;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicCloneTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicGetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicGetTest.php
index 33a73e886534a39a8f2852deb7567313c486a01f..6f2a7c0a3220ecd7eb2defc99bc95c2cdb23b6bd 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicGetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicGetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\MagicGet;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicGetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicIssetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicIssetTest.php
index ea6f61d1b0bd5b84a1770883186dd73cd97a35b7..fa9bb4b2ca6dbb83832723479fc205035a9945dd 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicIssetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicIssetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\MagicIsset;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicIssetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicSetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicSetTest.php
index 60f6a103cb01d85298acb65159e8309a93a302ca..00b7ad99a766358c14d8c7f8874d28966ba60e9f 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicSetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicSetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\MagicSet;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicSetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicSleepTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicSleepTest.php
index 43be100a9e8650d46a5dcbe5831348fd5317289e..7329e613b19726441fc9df8f93d55d838fb171f4 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicSleepTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicSleepTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\MagicSleep;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicSleepTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicUnsetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicUnsetTest.php
index 3c202f644a59fdc0abd081e00b53ba526cd8f0b9..5e3ba4e76aa18481d0bb69e095671c338c444aed 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicUnsetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/MagicUnsetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\MagicUnset;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicUnsetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/SetProxyInitializerTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/SetProxyInitializerTest.php
index c5bdb1908767b69c5e5bf238a4b2f25b8c26a3bf..71fcdbff09e8445f0f20b0c69d39d2101884914d 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/SetProxyInitializerTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/MethodGenerator/SetProxyInitializerTest.php
@@ -26,6 +26,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhost\MethodGenerator\SetProxyInitial
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class SetProxyInitializerTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializationTrackerTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializationTrackerTest.php
index 83eacbc03d0322a5ef36cdd1525f3eefc6408638..62caf4984de23763b9fd74b96494418da9af3f9d 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializationTrackerTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializationTrackerTest.php
@@ -28,6 +28,7 @@ use ProxyManagerTest\ProxyGenerator\PropertyGenerator\AbstractUniquePropertyName
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\LazyLoadingGhost\PropertyGenerator\InitializationTracker
+ * @group Coverage
  */
 class InitializationTrackerTest extends AbstractUniquePropertyNameTest
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializerPropertyTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializerPropertyTest.php
index c7ef25891bff20726ca3133521127f535227d7c1..c5f1ea1bff9c58950e566f1539938c0960eda179 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializerPropertyTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhost/PropertyGenerator/InitializerPropertyTest.php
@@ -28,6 +28,7 @@ use ProxyManagerTest\ProxyGenerator\PropertyGenerator\AbstractUniquePropertyName
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\LazyLoadingGhost\PropertyGenerator\InitializerProperty
+ * @group Coverage
  */
 class InitializerPropertyTest extends AbstractUniquePropertyNameTest
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhostGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhostGeneratorTest.php
index ca1b34938bc51b351d002baf74aa7d73c2035bc5..8eb5443ddeb3fb2fc1a18b688c0e2f4194ca3789 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhostGeneratorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingGhostGeneratorTest.php
@@ -27,6 +27,7 @@ use ProxyManager\ProxyGenerator\LazyLoadingGhostGenerator;
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\LazyLoadingGhostGenerator
+ * @group Coverage
  */
 class LazyLoadingGhostGeneratorTest extends AbstractProxyGeneratorTest
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/GetProxyInitializerTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/GetProxyInitializerTest.php
index 40596402a9187b5297a766a1ee2eaaae458ebb5b..31fd0294113065397ffbf63aa1f68c8f5c28de21 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/GetProxyInitializerTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/GetProxyInitializerTest.php
@@ -26,6 +26,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\GetProxyI
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class GetProxyInitializerTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/InitializeProxyTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/InitializeProxyTest.php
index cd39fdb9edf66afb11c472e2760eed1ee7c5f54b..dfbcb4cfda7e0422d4367c98c4e840be3276cf1b 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/InitializeProxyTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/InitializeProxyTest.php
@@ -26,6 +26,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\Initializ
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class InitializeProxyTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/IsProxyInitializedTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/IsProxyInitializedTest.php
index e6823b685ae9a0ed51dea17a9da07a688ec4b465..2b65f2883a05d2fc7deecffe44fd34abbdbc08c3 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/IsProxyInitializedTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/IsProxyInitializedTest.php
@@ -26,6 +26,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\IsProxyIn
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class IsProxyInitializedTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/LazyLoadingMethodInterceptorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/LazyLoadingMethodInterceptorTest.php
index be2ff40f6559a23586d489885e7699cd98a634c0..f6f5d0c452cfc9a505dcb3cda438677c6f2fe847 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/LazyLoadingMethodInterceptorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/LazyLoadingMethodInterceptorTest.php
@@ -27,6 +27,8 @@ use Zend\Code\Reflection\MethodReflection;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class LazyLoadingMethodInterceptorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicCloneTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicCloneTest.php
index 44b9cb9e754d852ad548f63dd3aa767d5b57f302..dea429c19e3e2da1c35520bea09d85ba9e45ae56 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicCloneTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicCloneTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\MagicClon
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicCloneTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicGetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicGetTest.php
index 442c95e6e1af382455f3bd4889fdadd8edffce10..bc3a61cd6d1c39ec17a7321863984a0371d3cfbc 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicGetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicGetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\MagicGet;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicGetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicIssetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicIssetTest.php
index a3ed157ac502053d83b03e45891e25a78c74dd5c..751840dea03190e0a5d24656cf4e7fd45a16f152 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicIssetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicIssetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\MagicIsse
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicIssetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicSetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicSetTest.php
index f8edc38e9d6f61c85f1f8ade4b0592d81e329a06..dba5b49e00eeede5fa6a40e5361aa27225a7745c 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicSetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicSetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\MagicSet;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicSetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicSleepTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicSleepTest.php
index d156041855d6cc9fa6c9dcd7122e8ba2769e7cec..978eeb762ec25d0ccf50247ad97569233cda3a91 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicSleepTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicSleepTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\MagicSlee
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicSleepTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicUnsetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicUnsetTest.php
index 5d8e8433e95cfde91c935812c96b54803ba299cd..e94ee3ba9da67e8aa1de6e9596385ed759189913 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicUnsetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/MagicUnsetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\MagicUnse
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicUnsetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/SetProxyInitializerTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/SetProxyInitializerTest.php
index 0bd1735c3b5cd7dd35ec3198a1336dcf4f30edf8..d70bf2ce3e27142ce2e8578f47f50c88a4f30559 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/SetProxyInitializerTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/MethodGenerator/SetProxyInitializerTest.php
@@ -26,6 +26,8 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolder\MethodGenerator\SetProxyI
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class SetProxyInitializerTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/InitializerPropertyTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/InitializerPropertyTest.php
index 48785042e6bfca25fb366dc2b72b485408798172..c292e203eb812c122df67ea9dd63d5a65be8a5a9 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/InitializerPropertyTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/InitializerPropertyTest.php
@@ -28,6 +28,7 @@ use ProxyManagerTest\ProxyGenerator\PropertyGenerator\AbstractUniquePropertyName
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\LazyLoadingValueHolder\PropertyGenerator\InitializerProperty
+ * @group Coverage
  */
 class InitializerPropertyTest extends AbstractUniquePropertyNameTest
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/ValueHolderPropertyTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/ValueHolderPropertyTest.php
index 9033d0e9faac234bf5891c9ef21a0c6048ff0577..63a16a761e0665e7ca6ebfc04fc4976cc2a36856 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/ValueHolderPropertyTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolder/PropertyGenerator/ValueHolderPropertyTest.php
@@ -28,6 +28,7 @@ use ProxyManagerTest\ProxyGenerator\PropertyGenerator\AbstractUniquePropertyName
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\LazyLoadingValueHolder\PropertyGenerator\ValueHolderProperty
+ * @group Coverage
  */
 class ValueHolderPropertyTest extends AbstractUniquePropertyNameTest
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolderGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolderGeneratorTest.php
index a9a3e6cfd4c1aadc6109c92508aef3d861a7d1a5..683e2c9f95287cd3d66aade2d01efb3e7f3ded4b 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolderGeneratorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/LazyLoadingValueHolderGeneratorTest.php
@@ -27,6 +27,7 @@ use ProxyManager\ProxyGenerator\LazyLoadingValueHolderGenerator;
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\LazyLoadingValueHolderGenerator
+ * @group Coverage
  */
 class LazyLoadingValueHolderGeneratorTest extends AbstractProxyGeneratorTest
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/NullObject/MethodGenerator/ConstructorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/NullObject/MethodGenerator/ConstructorTest.php
index 8044a0bd818b10d22a08b99af3630093ddfd4c62..7fad56d47dd2b7d175a3852f1cad9921b8998d61 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/NullObject/MethodGenerator/ConstructorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/NullObject/MethodGenerator/ConstructorTest.php
@@ -27,6 +27,8 @@ use ReflectionClass;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class ConstructorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/NullObject/MethodGenerator/NullObjectMethodInterceptorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/NullObject/MethodGenerator/NullObjectMethodInterceptorTest.php
index b84b0e87753774e95d1a2894278633feaf79d786..31202a1502ea52b0be563503e811f38ea6801224 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/NullObject/MethodGenerator/NullObjectMethodInterceptorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/NullObject/MethodGenerator/NullObjectMethodInterceptorTest.php
@@ -27,6 +27,8 @@ use Zend\Code\Reflection\MethodReflection;
  *
  * @author Vincent Blanchon <blanchon.vincent@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class NullObjectMethodInterceptorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/NullObjectGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/NullObjectGeneratorTest.php
index 6eb0d2696bc0e9d4b3fccb59c65398cb3d2cf651..11a6cbdd55deec3fd19dd4f4667b84f1ce34f91f 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/NullObjectGeneratorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/NullObjectGeneratorTest.php
@@ -33,6 +33,7 @@ use ReflectionProperty;
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\NullObjectGenerator
+ * @group Coverage
  */
 class NullObjectGeneratorTest extends PHPUnit_Framework_TestCase
 {
@@ -56,10 +57,6 @@ class NullObjectGeneratorTest extends PHPUnit_Framework_TestCase
 
         if ($originalClass->isInterface()) {
             $this->assertTrue($generatedReflection->implementsInterface($className));
-        } else {
-            $this->assertEmpty(
-                array_diff($originalClass->getInterfaceNames(), $generatedReflection->getInterfaceNames())
-            );
         }
 
         $this->assertSame($generatedClassName, $generatedReflection->getName());
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/PropertyGenerator/AbstractUniquePropertyNameTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/PropertyGenerator/AbstractUniquePropertyNameTest.php
index 4f63271eeb23012eeb98d7e6e819287afd8d7b7b..f3cd8ad8fb0473e5f122346a0455b0fd50cf38ab 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/PropertyGenerator/AbstractUniquePropertyNameTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/PropertyGenerator/AbstractUniquePropertyNameTest.php
@@ -25,6 +25,8 @@ use PHPUnit_Framework_TestCase;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 abstract class AbstractUniquePropertyNameTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/PropertyGenerator/PublicPropertiesDefaultsTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/PropertyGenerator/PublicPropertiesDefaultsTest.php
index 0dfd9307ea1b86da5645553948aeeaef70fce393..c7146753511fd76044482dd757e91a2b0d96501f 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/PropertyGenerator/PublicPropertiesDefaultsTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/PropertyGenerator/PublicPropertiesDefaultsTest.php
@@ -29,6 +29,7 @@ use ReflectionClass;
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesDefaults
+ * @group Coverage
  */
 class PublicPropertiesDefaultsTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/PropertyGenerator/PublicPropertiesMapTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/PropertyGenerator/PublicPropertiesMapTest.php
index 38b3ac037fa5b9886c3678b23dabb6a5812ffba2..a916762f69a51eb392f3e79f75fb21ec4b1d610d 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/PropertyGenerator/PublicPropertiesMapTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/PropertyGenerator/PublicPropertiesMapTest.php
@@ -29,6 +29,7 @@ use ReflectionClass;
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\PropertyGenerator\PublicPropertiesMap
+ * @group Coverage
  */
 class PublicPropertiesMapTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/ConstructorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/ConstructorTest.php
index ede0aa7ff1a1d047348b96cd91055ce2b44e0ae1..f1c9da0723397adb0186e2d244a8ee277fd6c622 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/ConstructorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/ConstructorTest.php
@@ -27,6 +27,8 @@ use ReflectionClass;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class ConstructorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicGetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicGetTest.php
index e7dcac83b44281d044abac29b090abd57b67fa1b..096a8910022422733a7ea05bf139fcfb31e1cd5e 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicGetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicGetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\MagicGet;
  *
  * @author Vincent Blanchon <blanchon.vincent@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicGetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicIssetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicIssetTest.php
index 0253b8c03fc098aa32e74aa97320177be74c9cce..23ba3376b0358d585c16b15cf4f3b691ea0be63e 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicIssetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicIssetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\MagicIsset;
  *
  * @author Vincent Blanchon <blanchon.vincent@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicIssetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicSetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicSetTest.php
index 14b53c812d5e27bebb0858155782ab8ca4c1d0e9..6034b995d04670fca4651796af12f3e4d6086ea3 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicSetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicSetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\MagicSet;
  *
  * @author Vincent Blanchon <blanchon.vincent@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicSetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicUnsetTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicUnsetTest.php
index c4ffb21a734ff217497770beb47aae146c5ff9fc..a3f186f3f28405b4a46dd817ff32011a22cd4eab 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicUnsetTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/MagicUnsetTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\RemoteObject\MethodGenerator\MagicUnset;
  *
  * @author Vincent Blanchon <blanchon.vincent@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicUnsetTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/RemoteObjectMethodTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/RemoteObjectMethodTest.php
index 6e72166c176d02fd9d0402cc93bf5efdf063059b..1c41a4f649c787b1650eb738f641329da90eb33e 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/RemoteObjectMethodTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/MethodGenerator/RemoteObjectMethodTest.php
@@ -28,6 +28,8 @@ use ReflectionClass;
  *
  * @author Vincent Blanchon <blanchon.vincent@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class RemoteObjectMethodTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/PropertyGenerator/AdapterPropertyTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/PropertyGenerator/AdapterPropertyTest.php
index b19a8ae9273933f5cc494c5003419263085331ff..d7e9cc980997e28fa2e1c43c5fb079b0ccac47fa 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/PropertyGenerator/AdapterPropertyTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObject/PropertyGenerator/AdapterPropertyTest.php
@@ -28,6 +28,7 @@ use ProxyManagerTest\ProxyGenerator\PropertyGenerator\AbstractUniquePropertyName
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\RemoteObject\PropertyGenerator\AdapterProperty
+ * @group Coverage
  */
 class AdapterPropertyTest extends AbstractUniquePropertyNameTest
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObjectGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObjectGeneratorTest.php
index 958a9dabe1ef34bcecb4a48be48e17d4309c59bf..961c226feff1af386536a506176f4c0662ffe839 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObjectGeneratorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/RemoteObjectGeneratorTest.php
@@ -32,6 +32,7 @@ use ReflectionClass;
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\RemoteObjectGenerator
+ * @group Coverage
  */
 class RemoteObjectGeneratorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/Util/ProxiedMethodsFilterTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/Util/ProxiedMethodsFilterTest.php
index 3f2d91bdd46ad6208190fa5e457b4dc10d797739..89bbb6adb1b10bf904117d316918eae716d10149 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/Util/ProxiedMethodsFilterTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/Util/ProxiedMethodsFilterTest.php
@@ -30,6 +30,7 @@ use ReflectionMethod;
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\Util\ProxiedMethodsFilter
+ * @group Coverage
  */
 class ProxiedMethodsFilterTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/Util/PublicScopeSimulatorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/Util/PublicScopeSimulatorTest.php
index 2a754056ee417dd2ea5e8ffd2a3ccae15f4b8283..e5271ffb48de5d527c82e44f4cd90d1a418f5168 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/Util/PublicScopeSimulatorTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/Util/PublicScopeSimulatorTest.php
@@ -29,6 +29,7 @@ use Zend\Code\Generator\PropertyGenerator;
  * @license MIT
  *
  * @covers \ProxyManager\ProxyGenerator\Util\PublicScopeSimulator
+ * @group Coverage
  */
 class PublicScopeSimulatorTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/ValueHolder/MethodGenerator/GetWrappedValueHolderValueTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/ValueHolder/MethodGenerator/GetWrappedValueHolderValueTest.php
index e4a1108cff78a69682e83f7d6fff9e2654d671fa..b7acb3110d6c350b2186f8a01695baf44afa068b 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/ValueHolder/MethodGenerator/GetWrappedValueHolderValueTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/ValueHolder/MethodGenerator/GetWrappedValueHolderValueTest.php
@@ -26,6 +26,8 @@ use ProxyManager\ProxyGenerator\ValueHolder\MethodGenerator\GetWrappedValueHolde
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class GetWrappedValueHolderValueTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/ValueHolder/MethodGenerator/MagicSleepTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/ValueHolder/MethodGenerator/MagicSleepTest.php
index d5038c618bd2baef53d3773f39a4e03cff744f0c..f2b15967607c38e44212beb2def97668e56d2e6a 100644
--- a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/ValueHolder/MethodGenerator/MagicSleepTest.php
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/ProxyGenerator/ValueHolder/MethodGenerator/MagicSleepTest.php
@@ -27,6 +27,8 @@ use ProxyManager\ProxyGenerator\ValueHolder\MethodGenerator\MagicSleep;
  *
  * @author Marco Pivetta <ocramius@gmail.com>
  * @license MIT
+ *
+ * @group Coverage
  */
 class MagicSleepTest extends PHPUnit_Framework_TestCase
 {
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/ClassSignatureGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/ClassSignatureGeneratorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..95ffbdd84436633dc27713c2c1868f8077abefcf
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/ClassSignatureGeneratorTest.php
@@ -0,0 +1,87 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTest\Signature;
+
+use PHPUnit_Framework_TestCase;
+use ProxyManager\Signature\ClassSignatureGenerator;
+use Zend\Code\Generator\PropertyGenerator;
+
+/**
+ * Tests for {@see \ProxyManager\Signature\ClassSignatureGenerator}
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ *
+ * @covers \ProxyManager\Signature\ClassSignatureGenerator
+ * @group Coverage
+ */
+class ClassSignatureGeneratorTest extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @var \ProxyManager\Signature\SignatureGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $signatureGenerator;
+
+    /**
+     * @var ClassSignatureGenerator
+     */
+    private $classSignatureGenerator;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function setUp()
+    {
+        $this->signatureGenerator      = $this->getMock('ProxyManager\\Signature\\SignatureGeneratorInterface');
+        $this->classSignatureGenerator = new ClassSignatureGenerator($this->signatureGenerator);
+    }
+
+    public function testAddSignature()
+    {
+        /* @var $classGenerator \PHPUnit_Framework_MockObject_MockObject|\Zend\Code\Generator\ClassGenerator */
+        $classGenerator = $this->getMock('Zend\\Code\\Generator\\ClassGenerator');
+
+        $classGenerator
+            ->expects($this->once())
+            ->method('addPropertyFromGenerator')
+            ->with($this->callback(function (PropertyGenerator $property) {
+                return $property->getName() === 'signaturePropertyName'
+                    && $property->isStatic()
+                    && $property->getVisibility() === 'private'
+                    && $property->getDefaultValue()->getValue() === 'valid-signature';
+            }));
+
+        $this
+            ->signatureGenerator
+            ->expects($this->any())
+            ->method('generateSignature')
+            ->with(array('foo' => 'bar'))
+            ->will($this->returnValue('valid-signature'));
+
+        $this
+            ->signatureGenerator
+            ->expects($this->any())
+            ->method('generateSignatureKey')
+            ->with(array('foo' => 'bar'))
+            ->will($this->returnValue('PropertyName'));
+
+
+        $this->classSignatureGenerator->addSignature($classGenerator, array('foo' => 'bar'));
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/Exception/InvalidSignatureExceptionTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/Exception/InvalidSignatureExceptionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d587fc071f880c004b3300f64e974a9373f82a36
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/Exception/InvalidSignatureExceptionTest.php
@@ -0,0 +1,57 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTest\Signature\Exception;
+
+use PHPUnit_Framework_TestCase;
+use ProxyManager\Signature\Exception\InvalidSignatureException;
+use ReflectionClass;
+
+/**
+ * Tests for {@see \ProxyManager\Signature\Exception\InvalidSignatureException}
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ *
+ * @covers \ProxyManager\Signature\Exception\InvalidSignatureException
+ * @group Coverage
+ */
+class InvalidSignatureExceptionTest extends PHPUnit_Framework_TestCase
+{
+    public function testFromInvalidSignature()
+    {
+        $exception = InvalidSignatureException::fromInvalidSignature(
+            new ReflectionClass(__CLASS__),
+            array('foo' => 'bar', 'baz' => 'tab'),
+            'blah',
+            'expected-signature'
+        );
+
+        $this->assertInstanceOf(
+            'ProxyManager\Signature\Exception\InvalidSignatureException',
+            $exception
+        );
+
+        $this->assertSame(
+            'Found signature "blah" for class "'
+            . __CLASS__
+            . '" does not correspond to expected signature "expected-signature" for 2 parameters',
+            $exception->getMessage()
+        );
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/Exception/MissingSignatureExceptionTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/Exception/MissingSignatureExceptionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..2d8a0d8bb60f0590856bc284c93c6f41bafe2fc8
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/Exception/MissingSignatureExceptionTest.php
@@ -0,0 +1,56 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTest\Signature\Exception;
+
+use PHPUnit_Framework_TestCase;
+use ProxyManager\Signature\Exception\MissingSignatureException;
+use ReflectionClass;
+
+/**
+ * Tests for {@see \ProxyManager\Signature\Exception\MissingSignatureException}
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ *
+ * @covers \ProxyManager\Signature\Exception\MissingSignatureException
+ * @group Coverage
+ */
+class MissingSignatureExceptionTest extends PHPUnit_Framework_TestCase
+{
+    public function testFromMissingSignature()
+    {
+        $exception = MissingSignatureException::fromMissingSignature(
+            new ReflectionClass(__CLASS__),
+            array('foo' => 'bar', 'baz' => 'tab'),
+            'expected-signature'
+        );
+
+        $this->assertInstanceOf(
+            'ProxyManager\Signature\Exception\MissingSignatureException',
+            $exception
+        );
+
+        $this->assertSame(
+            'No signature found for class "'
+            . __CLASS__
+            . '", expected signature "expected-signature" for 2 parameters',
+            $exception->getMessage()
+        );
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/SignatureCheckerTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/SignatureCheckerTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0fa13f9c6bdf8c23bc69d16c209d6f185b9a4f48
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/SignatureCheckerTest.php
@@ -0,0 +1,117 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTest\Signature;
+
+use PHPUnit_Framework_TestCase;
+use ProxyManager\Signature\SignatureChecker;
+use ReflectionClass;
+
+/**
+ * Tests for {@see \ProxyManager\Signature\SignatureChecker}
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ *
+ * @covers \ProxyManager\Signature\SignatureChecker
+ * @group Coverage
+ */
+class SignatureCheckerTest extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @var string
+     */
+    protected $signatureExample = 'valid-signature';
+
+    /**
+     * @var SignatureChecker
+     */
+    private $signatureChecker;
+
+    /**
+     * @var \ProxyManager\Signature\SignatureGeneratorInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $signatureGenerator;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function setUp()
+    {
+        $this->signatureGenerator = $this->getMock('ProxyManager\Signature\SignatureGeneratorInterface');
+        $this->signatureChecker   = new SignatureChecker($this->signatureGenerator);
+    }
+
+    public function testCheckSignatureWithValidKey()
+    {
+        $this
+            ->signatureGenerator
+            ->expects($this->atLeastOnce())
+            ->method('generateSignatureKey')
+            ->with(array('foo' => 'bar'))
+            ->will($this->returnValue('Example'));
+        $this
+            ->signatureGenerator
+            ->expects($this->atLeastOnce())
+            ->method('generateSignature')
+            ->with(array('foo' => 'bar'))
+            ->will($this->returnValue('valid-signature'));
+
+        $this->signatureChecker->checkSignature(new ReflectionClass($this), array('foo' => 'bar'));
+    }
+
+    public function testCheckSignatureWithInvalidKey()
+    {
+        $this
+            ->signatureGenerator
+            ->expects($this->any())
+            ->method('generateSignatureKey')
+            ->with(array('foo' => 'bar'))
+            ->will($this->returnValue('InvalidKey'));
+        $this
+            ->signatureGenerator
+            ->expects($this->any())
+            ->method('generateSignature')
+            ->with(array('foo' => 'bar'))
+            ->will($this->returnValue('valid-signature'));
+
+        $this->setExpectedException('ProxyManager\Signature\Exception\MissingSignatureException');
+
+        $this->signatureChecker->checkSignature(new ReflectionClass($this), array('foo' => 'bar'));
+    }
+
+    public function testCheckSignatureWithInvalidValue()
+    {
+        $this
+            ->signatureGenerator
+            ->expects($this->any())
+            ->method('generateSignatureKey')
+            ->with(array('foo' => 'bar'))
+            ->will($this->returnValue('Example'));
+        $this
+            ->signatureGenerator
+            ->expects($this->any())
+            ->method('generateSignature')
+            ->with(array('foo' => 'bar'))
+            ->will($this->returnValue('invalid-signature'));
+
+        $this->setExpectedException('ProxyManager\Signature\Exception\InvalidSignatureException');
+
+        $this->signatureChecker->checkSignature(new ReflectionClass($this), array('foo' => 'bar'));
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/SignatureGeneratorTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/SignatureGeneratorTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..5ad93d68b82f79fecb1e6147d1bce2c55b519fba
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/Signature/SignatureGeneratorTest.php
@@ -0,0 +1,116 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTest\Signature;
+
+use PHPUnit_Framework_TestCase;
+use ProxyManager\Signature\SignatureGenerator;
+
+/**
+ * Tests for {@see \ProxyManager\Signature\SignatureGenerator}
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ *
+ * @covers \ProxyManager\Signature\SignatureGenerator
+ * @group Coverage
+ */
+class SignatureGeneratorTest extends PHPUnit_Framework_TestCase
+{
+    /**
+     * @var SignatureGenerator
+     */
+    private $signatureGenerator;
+
+    /**
+     * {@inheritDoc}
+     */
+    protected function setUp()
+    {
+        $this->signatureGenerator = new SignatureGenerator;
+    }
+
+    /**
+     * @param array  $parameters
+     * @param string $expected
+     *
+     * @dataProvider signatures
+     */
+    public function testGenerateSignature(array $parameters, $expected)
+    {
+        $this->assertSame($expected, $this->signatureGenerator->generateSignature($parameters));
+    }
+
+    /**
+     * @param array  $parameters
+     * @param string $expected
+     *
+     * @dataProvider signatureKeys
+     */
+    public function testGenerateSignatureKey(array $parameters, $expected)
+    {
+        $this->assertSame($expected, $this->signatureGenerator->generateSignatureKey($parameters));
+    }
+
+    /**
+     * Data provider.
+     *
+     * @return array[]
+     */
+    public function signatures()
+    {
+        return array(
+            array(
+                array(),
+                'YTowOnt9'
+            ),
+            array(
+                array('foo' => 'bar'),
+                'YToxOntzOjM6ImZvbyI7czozOiJiYXIiO30='
+            ),
+            array(
+                array('foo' => 'bar', 'baz' => 'tab'),
+                'YToyOntzOjM6ImZvbyI7czozOiJiYXIiO3M6MzoiYmF6IjtzOjM6InRhYiI7fQ=='
+            ),
+            array(
+                array('bar'),
+                'YToxOntpOjA7czozOiJiYXIiO30='
+            ),
+            array(
+                array('bar', 'baz'),
+                'YToyOntpOjA7czozOiJiYXIiO2k6MTtzOjM6ImJheiI7fQ=='
+            ),
+        );
+    }
+
+    /**
+     * Data provider.
+     *
+     * @return array[]
+     */
+    public function signatureKeys()
+    {
+        return array(
+            array(array(), '40cd750bba9870f18aada2478b24840a'),
+            array(array('foo' => 'bar'), '49a3696adf0fbfacc12383a2d7400d51'),
+            array(array('foo' => 'bar', 'baz' => 'tab'), '3f3cabbf33bae82b0711205c913a8fa0'),
+            array(array('bar'), '6fc5f617053f53f56b4734453ec86daa'),
+            array(array('bar', 'baz'), 'b9f31192ffbb4aa958cd1c5f88540c1e'),
+        );
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/VersionTest.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/VersionTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..84f12614b4e5de93e8e5783ab2e23cf1b3e570ab
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTest/VersionTest.php
@@ -0,0 +1,42 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTest;
+
+use PHPUnit_Framework_TestCase;
+use ProxyManager\Version;
+
+/**
+ * Tests for {@see \ProxyManager\Version}
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ *
+ * @covers \ProxyManager\Version
+ * @group Coverage
+ */
+class VersionTest extends PHPUnit_Framework_TestCase
+{
+    public function testVersionNumberIsSemverCompliant()
+    {
+        $this->assertRegExp(
+            '/\d+\.\d+\.\d+(-(ALPHA|BETA|RC(\d+)?|DEV))?/i',
+            Version::VERSION
+        );
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/ClassWithAbstractProtectedMethod.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/ClassWithAbstractProtectedMethod.php
new file mode 100644
index 0000000000000000000000000000000000000000..1ba3a5cb9452c03f5fe74a844f1f1c5a9d92d18e
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/ClassWithAbstractProtectedMethod.php
@@ -0,0 +1,33 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTestAsset;
+
+/**
+ * Class with one abstract protected method
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+abstract class ClassWithAbstractProtectedMethod
+{
+    /**
+     * @return void
+     */
+    abstract protected function protectedAbstractMethod();
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/ClassWithFinalMagicMethods.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/ClassWithFinalMagicMethods.php
new file mode 100644
index 0000000000000000000000000000000000000000..d42204b775136d551bb768b9180b03d59ba3f5f7
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/ClassWithFinalMagicMethods.php
@@ -0,0 +1,88 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTestAsset;
+
+/**
+ * Base test class to play around with final pre-existing magic methods
+ *
+ * @author Jefersson Nathan <malukenho@phpse.net>
+ * @license MIT
+ */
+class ClassWithFinalMagicMethods
+{
+    /**
+     * {@inheritDoc}
+     */
+    final public function __construct()
+    {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    final public function __set($name, $value)
+    {
+        return array($name => $value);
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    final public function __get($name)
+    {
+        return $name;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    final public function __isset($name)
+    {
+        return (bool) $name;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    final public function __unset($name)
+    {
+        return (bool) $name;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    final public function __sleep()
+    {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    final public function __wakeup()
+    {
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    final public function __clone()
+    {
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/ClassWithFinalMethods.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/ClassWithFinalMethods.php
new file mode 100644
index 0000000000000000000000000000000000000000..a7c0154ba247c77763147f7e9aa952d9002aab18
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/ClassWithFinalMethods.php
@@ -0,0 +1,42 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTestAsset;
+
+use PHPUnit_Framework_TestCase;
+
+/**
+ * Base test class to play around with final pre-existing methods
+ *
+ * @author Jefersson Nathan <malukenho@phpse.net>
+ * @license MIT
+ */
+class ClassWithFinalMethods extends PHPUnit_Framework_TestCase
+{
+    final public function foo()
+    {
+    }
+
+    final private function bar()
+    {
+    }
+
+    final protected function baz()
+    {
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/ClassWithSelfHint.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/ClassWithSelfHint.php
new file mode 100644
index 0000000000000000000000000000000000000000..37d342c1f7140fb03b12e95749051c93105238aa
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/ClassWithSelfHint.php
@@ -0,0 +1,38 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTestAsset;
+
+/**
+ * Class with a `self` type hint in a method - used to test overriding method with the `self` type hint in generators
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+class ClassWithSelfHint
+{
+    /**
+     * @param self $parameter
+     *
+     * @return self
+     */
+    public function selfHintMethod(self $parameter)
+    {
+        return $parameter;
+    }
+}
diff --git a/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/FinalClass.php b/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/FinalClass.php
new file mode 100644
index 0000000000000000000000000000000000000000..4b818d673fdaee6e9d8f6485e3804a279114ae0f
--- /dev/null
+++ b/vendor/ocramius/proxy-manager/tests/ProxyManagerTestAsset/FinalClass.php
@@ -0,0 +1,29 @@
+<?php
+/*
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This software consists of voluntary contributions made by many individuals
+ * and is licensed under the MIT license.
+ */
+
+namespace ProxyManagerTestAsset;
+
+/**
+ * Class that is final
+ *
+ * @author Marco Pivetta <ocramius@gmail.com>
+ * @license MIT
+ */
+final class FinalClass
+{
+}
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/CssSelector.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/CssSelector.php
index 7a12a8b7e1d899c59485ae1f7ee1f0d28e7bb1c5..58d84662452431889b1061bf30b54f5fef30e1bb 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/CssSelector.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/CssSelector.php
@@ -40,8 +40,8 @@ class CssSelector
      * Optionally, a prefix can be added to the resulting XPath
      * expression with the $prefix parameter.
      *
-     * @param mixed   $cssExpr The CSS expression.
-     * @param string  $prefix  An optional prefix for the XPath expression.
+     * @param mixed  $cssExpr The CSS expression.
+     * @param string $prefix  An optional prefix for the XPath expression.
      *
      * @return string
      *
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/Specificity.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/Specificity.php
index 96bbd11f515ce2f40783c11135d2f5e36f170b36..d0c215e0f2edd5292f4496c1bf2f8c2e33dfee26 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/Specificity.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Node/Specificity.php
@@ -75,4 +75,28 @@ class Specificity
     {
         return $this->a * self::A_FACTOR + $this->b * self::B_FACTOR + $this->c * self::C_FACTOR;
     }
+
+    /**
+     * Returns -1 if the object specificity is lower than the argument,
+     * 0 if they are equal, and 1 if the argument is lower
+     *
+     * @param Specificity $specificity
+     * @return int
+     */
+    public function compareTo(Specificity $specificity)
+    {
+        if ($this->a !== $specificity->a) {
+            return $this->a > $specificity->a ? 1 : -1;
+        }
+
+        if ($this->b !== $specificity->b) {
+            return $this->b > $specificity->b ? 1 : -1;
+        }
+
+        if ($this->c !== $specificity->c) {
+            return $this->c > $specificity->c ? 1 : -1;
+        }
+
+        return 0;
+    }
 }
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Token.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Token.php
index 4adfca889d866303688a4438bb3ab420cc38a068..ba5d657f7bff3da5b5b76db47ef78ce4b0bdf0d8 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Token.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Parser/Token.php
@@ -21,13 +21,13 @@ namespace Symfony\Component\CssSelector\Parser;
  */
 class Token
 {
-    const TYPE_FILE_END   = 'eof';
-    const TYPE_DELIMITER  = 'delimiter';
+    const TYPE_FILE_END = 'eof';
+    const TYPE_DELIMITER = 'delimiter';
     const TYPE_WHITESPACE = 'whitespace';
     const TYPE_IDENTIFIER = 'identifier';
-    const TYPE_HASH       = 'hash';
-    const TYPE_NUMBER     = 'number';
-    const TYPE_STRING     = 'string';
+    const TYPE_HASH = 'hash';
+    const TYPE_NUMBER = 'number';
+    const TYPE_STRING = 'string';
 
     /**
      * @var int
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/SpecificityTest.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/SpecificityTest.php
index 1f200cffe4f0447e13b5db8bdaee1458f7b8be72..c34fe5fc7348bbf56e9432e4a76354d15dbea3b7 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/SpecificityTest.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/Tests/Node/SpecificityTest.php
@@ -37,4 +37,26 @@ class SpecificityTest extends \PHPUnit_Framework_TestCase
             array(new Specificity(4, 3, 2), 432),
         );
     }
+
+    /** @dataProvider getCompareTestData */
+    public function testCompareTo(Specificity $a, Specificity $b, $result)
+    {
+        $this->assertEquals($result, $a->compareTo($b));
+    }
+
+    public function getCompareTestData()
+    {
+        return array(
+            array(new Specificity(0, 0, 0), new Specificity(0, 0, 0), 0),
+            array(new Specificity(0, 0, 1), new Specificity(0, 0, 1), 0),
+            array(new Specificity(0, 0, 2), new Specificity(0, 0, 1), 1),
+            array(new Specificity(0, 0, 2), new Specificity(0, 0, 3), -1),
+            array(new Specificity(0, 4, 0), new Specificity(0, 4, 0), 0),
+            array(new Specificity(0, 6, 0), new Specificity(0, 5, 11), 1),
+            array(new Specificity(0, 7, 0), new Specificity(0, 8, 0), -1),
+            array(new Specificity(9, 0, 0), new Specificity(9, 0, 0), 0),
+            array(new Specificity(11, 0, 0), new Specificity(10, 11, 0), 1),
+            array(new Specificity(12, 11, 0), new Specificity(13, 0, 0), -1),
+        );
+    }
 }
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/AttributeMatchingExtension.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/AttributeMatchingExtension.php
index 1b1f00f2863e84b7cfafe08d380cf7d824d7f08b..31d24b28eff3d8ca97db76902680f12466c75a74 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/AttributeMatchingExtension.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/AttributeMatchingExtension.php
@@ -31,13 +31,13 @@ class AttributeMatchingExtension extends AbstractExtension
     {
         return array(
             'exists' => array($this, 'translateExists'),
-            '='      => array($this, 'translateEquals'),
-            '~='     => array($this, 'translateIncludes'),
-            '|='     => array($this, 'translateDashMatch'),
-            '^='     => array($this, 'translatePrefixMatch'),
-            '$='     => array($this, 'translateSuffixMatch'),
-            '*='     => array($this, 'translateSubstringMatch'),
-            '!='     => array($this, 'translateDifferent'),
+            '=' => array($this, 'translateEquals'),
+            '~=' => array($this, 'translateIncludes'),
+            '|=' => array($this, 'translateDashMatch'),
+            '^=' => array($this, 'translatePrefixMatch'),
+            '$=' => array($this, 'translateSuffixMatch'),
+            '*=' => array($this, 'translateSubstringMatch'),
+            '!=' => array($this, 'translateDifferent'),
         );
     }
 
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/FunctionExtension.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/FunctionExtension.php
index ff8f333ada06903c2a60a8dd3750a654dd395410..e849474383134140df99abbefbc7158bfc4faaef 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/FunctionExtension.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/FunctionExtension.php
@@ -34,12 +34,12 @@ class FunctionExtension extends AbstractExtension
     public function getFunctionTranslators()
     {
         return array(
-            'nth-child'        => array($this, 'translateNthChild'),
-            'nth-last-child'   => array($this, 'translateNthLastChild'),
-            'nth-of-type'      => array($this, 'translateNthOfType'),
+            'nth-child' => array($this, 'translateNthChild'),
+            'nth-last-child' => array($this, 'translateNthLastChild'),
+            'nth-of-type' => array($this, 'translateNthOfType'),
             'nth-last-of-type' => array($this, 'translateNthLastOfType'),
-            'contains'         => array($this, 'translateContains'),
-            'lang'             => array($this, 'translateLang'),
+            'contains' => array($this, 'translateContains'),
+            'lang' => array($this, 'translateLang'),
         );
     }
 
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php
index aef80523dd0910b192239caeeb681e88d6ff3f5e..71ed4b4a795bcf8085275ca1ee1db3189535e30b 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/HtmlExtension.php
@@ -45,14 +45,14 @@ class HtmlExtension extends AbstractExtension
     public function getPseudoClassTranslators()
     {
         return array(
-            'checked'  => array($this, 'translateChecked'),
-            'link'     => array($this, 'translateLink'),
+            'checked' => array($this, 'translateChecked'),
+            'link' => array($this, 'translateLink'),
             'disabled' => array($this, 'translateDisabled'),
-            'enabled'  => array($this, 'translateEnabled'),
+            'enabled' => array($this, 'translateEnabled'),
             'selected' => array($this, 'translateSelected'),
-            'invalid'  => array($this, 'translateInvalid'),
-            'hover'    => array($this, 'translateHover'),
-            'visited'  => array($this, 'translateVisited'),
+            'invalid' => array($this, 'translateInvalid'),
+            'hover' => array($this, 'translateHover'),
+            'visited' => array($this, 'translateVisited'),
         );
     }
 
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/NodeExtension.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/NodeExtension.php
index d71baaa96bcd3c0cf58960c97ba0cabd4674bb30..212955c1f2d6118b978f5935b3aa543f86c2de45 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/NodeExtension.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/NodeExtension.php
@@ -25,8 +25,8 @@ use Symfony\Component\CssSelector\XPath\XPathExpr;
  */
 class NodeExtension extends AbstractExtension
 {
-    const ELEMENT_NAME_IN_LOWER_CASE    = 1;
-    const ATTRIBUTE_NAME_IN_LOWER_CASE  = 2;
+    const ELEMENT_NAME_IN_LOWER_CASE = 1;
+    const ATTRIBUTE_NAME_IN_LOWER_CASE = 2;
     const ATTRIBUTE_VALUE_IN_LOWER_CASE = 4;
 
     /**
@@ -45,8 +45,8 @@ class NodeExtension extends AbstractExtension
     }
 
     /**
-     * @param int     $flag
-     * @param bool    $on
+     * @param int  $flag
+     * @param bool $on
      *
      * @return NodeExtension
      */
@@ -79,15 +79,15 @@ class NodeExtension extends AbstractExtension
     public function getNodeTranslators()
     {
         return array(
-            'Selector'         => array($this, 'translateSelector'),
+            'Selector' => array($this, 'translateSelector'),
             'CombinedSelector' => array($this, 'translateCombinedSelector'),
-            'Negation'         => array($this, 'translateNegation'),
-            'Function'         => array($this, 'translateFunction'),
-            'Pseudo'           => array($this, 'translatePseudo'),
-            'Attribute'        => array($this, 'translateAttribute'),
-            'Class'            => array($this, 'translateClass'),
-            'Hash'             => array($this, 'translateHash'),
-            'Element'          => array($this, 'translateElement'),
+            'Negation' => array($this, 'translateNegation'),
+            'Function' => array($this, 'translateFunction'),
+            'Pseudo' => array($this, 'translatePseudo'),
+            'Attribute' => array($this, 'translateAttribute'),
+            'Class' => array($this, 'translateClass'),
+            'Hash' => array($this, 'translateHash'),
+            'Element' => array($this, 'translateElement'),
         );
     }
 
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/PseudoClassExtension.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/PseudoClassExtension.php
index d230dd7c483f97fd4475c74e9ccde9fe20745caf..d59857225cff11be1aa77b8f33879b27c90da883 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/PseudoClassExtension.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Extension/PseudoClassExtension.php
@@ -30,14 +30,14 @@ class PseudoClassExtension extends AbstractExtension
     public function getPseudoClassTranslators()
     {
         return array(
-            'root'          => array($this, 'translateRoot'),
-            'first-child'   => array($this, 'translateFirstChild'),
-            'last-child'    => array($this, 'translateLastChild'),
+            'root' => array($this, 'translateRoot'),
+            'first-child' => array($this, 'translateFirstChild'),
+            'last-child' => array($this, 'translateLastChild'),
             'first-of-type' => array($this, 'translateFirstOfType'),
-            'last-of-type'  => array($this, 'translateLastOfType'),
-            'only-child'    => array($this, 'translateOnlyChild'),
-            'only-of-type'  => array($this, 'translateOnlyOfType'),
-            'empty'         => array($this, 'translateEmpty'),
+            'last-of-type' => array($this, 'translateLastOfType'),
+            'only-child' => array($this, 'translateOnlyChild'),
+            'only-of-type' => array($this, 'translateOnlyOfType'),
+            'empty' => array($this, 'translateEmpty'),
         );
     }
 
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Translator.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Translator.php
index 5675aa610646d4a9277ddaf6886daad658e20240..011882cca37bcf443eb270ec82298347fd539cbc 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Translator.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/Translator.php
@@ -227,7 +227,7 @@ class Translator implements TranslatorInterface
     }
 
     /**
-     * @param XPathExpr $xpath
+     * @param XPathExpr    $xpath
      * @param FunctionNode $function
      *
      * @return XPathExpr
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/XPathExpr.php b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/XPathExpr.php
index f0f2f987678ed719c86342a46b31a1682cc976f0..4ec9fda672cc33fe54979c0ef47ee7374e5f3595 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/XPathExpr.php
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/XPath/XPathExpr.php
@@ -37,10 +37,10 @@ class XPathExpr
     private $condition;
 
     /**
-     * @param string  $path
-     * @param string  $element
-     * @param string  $condition
-     * @param bool    $starPrefix
+     * @param string $path
+     * @param string $element
+     * @param string $condition
+     * @param bool   $starPrefix
      */
     public function __construct($path = '', $element = '*', $condition = '', $starPrefix = false)
     {
diff --git a/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json b/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json
index 5b4231d7947574057015b85e85f7170a5c44c30d..d47c77fe6444aca9ce20659b8730c3341e8dc54c 100644
--- a/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json
+++ b/vendor/symfony/css-selector/Symfony/Component/CssSelector/composer.json
@@ -29,7 +29,7 @@
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.5-dev"
+            "dev-master": "2.6-dev"
         }
     }
 }
diff --git a/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php b/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php
index 93948e1db01b1ab7d602ddc6a9f58c9c28992413..bc25154a8ed2decab6ace8d3bcf02f8eafaa7cc9 100644
--- a/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php
+++ b/vendor/symfony/process/Symfony/Component/Process/PhpProcess.php
@@ -31,11 +31,11 @@ class PhpProcess extends Process
     /**
      * Constructor.
      *
-     * @param string  $script  The PHP script to run (as a string)
-     * @param string  $cwd     The working directory
-     * @param array   $env     The environment variables
-     * @param int     $timeout The timeout in seconds
-     * @param array   $options An array of options for proc_open
+     * @param string $script  The PHP script to run (as a string)
+     * @param string $cwd     The working directory
+     * @param array  $env     The environment variables
+     * @param int    $timeout The timeout in seconds
+     * @param array  $options An array of options for proc_open
      *
      * @api
      */
diff --git a/vendor/symfony/process/Symfony/Component/Process/Pipes/AbstractPipes.php b/vendor/symfony/process/Symfony/Component/Process/Pipes/AbstractPipes.php
new file mode 100644
index 0000000000000000000000000000000000000000..d8b57d07a778ad71fa35c0e2bbbc9b3e39cf9691
--- /dev/null
+++ b/vendor/symfony/process/Symfony/Component/Process/Pipes/AbstractPipes.php
@@ -0,0 +1,74 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Pipes;
+
+/**
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @internal
+ */
+abstract class AbstractPipes implements PipesInterface
+{
+    /** @var array */
+    public $pipes = array();
+
+    /** @var string */
+    protected $inputBuffer = '';
+    /** @var resource|null */
+    protected $input;
+
+    /** @var bool */
+    private $blocked = true;
+
+    /**
+     * {@inheritdoc}
+     */
+    public function close()
+    {
+        foreach ($this->pipes as $pipe) {
+            fclose($pipe);
+        }
+        $this->pipes = array();
+    }
+
+    /**
+     * Returns true if a system call has been interrupted.
+     *
+     * @return bool
+     */
+    protected function hasSystemCallBeenInterrupted()
+    {
+        $lastError = error_get_last();
+
+        // stream_select returns false when the `select` system call is interrupted by an incoming signal
+        return isset($lastError['message']) && false !== stripos($lastError['message'], 'interrupted system call');
+    }
+
+    /**
+     * Unblocks streams
+     */
+    protected function unblock()
+    {
+        if (!$this->blocked) {
+            return;
+        }
+
+        foreach ($this->pipes as $pipe) {
+            stream_set_blocking($pipe, 0);
+        }
+        if (null !== $this->input) {
+            stream_set_blocking($this->input, 0);
+        }
+
+        $this->blocked = false;
+    }
+}
diff --git a/vendor/symfony/process/Symfony/Component/Process/Pipes/PipesInterface.php b/vendor/symfony/process/Symfony/Component/Process/Pipes/PipesInterface.php
new file mode 100644
index 0000000000000000000000000000000000000000..09d3f61d6ec940b37262cac97f2888d8117639b1
--- /dev/null
+++ b/vendor/symfony/process/Symfony/Component/Process/Pipes/PipesInterface.php
@@ -0,0 +1,60 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Pipes;
+
+/**
+ * PipesInterface manages descriptors and pipes for the use of proc_open.
+ *
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @internal
+ */
+interface PipesInterface
+{
+    const CHUNK_SIZE = 16384;
+
+    /**
+     * Returns an array of descriptors for the use of proc_open.
+     *
+     * @return array
+     */
+    public function getDescriptors();
+
+    /**
+     * Returns an array of filenames indexed by their related stream in case these pipes use temporary files.
+     *
+     * @return string[]
+     */
+    public function getFiles();
+
+    /**
+     * Reads data in file handles and pipes.
+     *
+     * @param bool $blocking Whether to use blocking calls or not.
+     * @param bool $close    Whether to close pipes if they've reached EOF.
+     *
+     * @return string[] An array of read data indexed by their fd.
+     */
+    public function readAndWrite($blocking, $close = false);
+
+    /**
+     * Returns if the current state has open file handles or pipes.
+     *
+     * @return bool
+     */
+    public function areOpen();
+
+    /**
+     * Closes file handles and pipes.
+     */
+    public function close();
+}
diff --git a/vendor/symfony/process/Symfony/Component/Process/Pipes/UnixPipes.php b/vendor/symfony/process/Symfony/Component/Process/Pipes/UnixPipes.php
new file mode 100644
index 0000000000000000000000000000000000000000..69f31467a03cc3b09ff06a02c630e7c1ef84f90d
--- /dev/null
+++ b/vendor/symfony/process/Symfony/Component/Process/Pipes/UnixPipes.php
@@ -0,0 +1,214 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Pipes;
+
+use Symfony\Component\Process\Process;
+
+/**
+ * UnixPipes implementation uses unix pipes as handles.
+ *
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @internal
+ */
+class UnixPipes extends AbstractPipes
+{
+    /** @var bool */
+    private $ttyMode;
+    /** @var bool */
+    private $ptyMode;
+    /** @var bool */
+    private $disableOutput;
+
+    public function __construct($ttyMode, $ptyMode, $input, $disableOutput)
+    {
+        $this->ttyMode = (bool) $ttyMode;
+        $this->ptyMode = (bool) $ptyMode;
+        $this->disableOutput = (bool) $disableOutput;
+
+        if (is_resource($input)) {
+            $this->input = $input;
+        } else {
+            $this->inputBuffer = (string) $input;
+        }
+    }
+
+    public function __destruct()
+    {
+        $this->close();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getDescriptors()
+    {
+        if ($this->disableOutput) {
+            $nullstream = fopen('/dev/null', 'c');
+
+            return array(
+                array('pipe', 'r'),
+                $nullstream,
+                $nullstream,
+            );
+        }
+
+        if ($this->ttyMode) {
+            return array(
+                array('file', '/dev/tty', 'r'),
+                array('file', '/dev/tty', 'w'),
+                array('file', '/dev/tty', 'w'),
+            );
+        }
+
+        if ($this->ptyMode && Process::isPtySupported()) {
+            return array(
+                array('pty'),
+                array('pty'),
+                array('pty'),
+            );
+        }
+
+        return array(
+            array('pipe', 'r'),
+            array('pipe', 'w'), // stdout
+            array('pipe', 'w'), // stderr
+        );
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getFiles()
+    {
+        return array();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function readAndWrite($blocking, $close = false)
+    {
+        // only stdin is left open, job has been done !
+        // we can now close it
+        if (1 === count($this->pipes) && array(0) === array_keys($this->pipes)) {
+            fclose($this->pipes[0]);
+            unset($this->pipes[0]);
+        }
+
+        if (empty($this->pipes)) {
+            return array();
+        }
+
+        $this->unblock();
+
+        $read = array();
+
+        if (null !== $this->input) {
+            // if input is a resource, let's add it to stream_select argument to
+            // fill a buffer
+            $r = array_merge($this->pipes, array('input' => $this->input));
+        } else {
+            $r = $this->pipes;
+        }
+        // discard read on stdin
+        unset ($r[0]);
+
+        $w = isset($this->pipes[0]) ? array($this->pipes[0]) : null;
+        $e = null;
+
+        // let's have a look if something changed in streams
+        if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) {
+            // if a system call has been interrupted, forget about it, let's try again
+            // otherwise, an error occurred, let's reset pipes
+            if (!$this->hasSystemCallBeenInterrupted()) {
+                $this->pipes = array();
+            }
+
+            return $read;
+        }
+
+        // nothing has changed
+        if (0 === $n) {
+            return $read;
+        }
+
+        foreach ($r as $pipe) {
+            // prior PHP 5.4 the array passed to stream_select is modified and
+            // lose key association, we have to find back the key
+            $type = (false !== $found = array_search($pipe, $this->pipes)) ? $found : 'input';
+            $data = '';
+            while ('' !== $dataread = (string) fread($pipe, self::CHUNK_SIZE)) {
+                $data .= $dataread;
+            }
+
+            if ('' !== $data) {
+                if ($type === 'input') {
+                    $this->inputBuffer .= $data;
+                } else {
+                    $read[$type] = $data;
+                }
+            }
+
+            if (false === $data || (true === $close && feof($pipe) && '' === $data)) {
+                if ($type === 'input') {
+                    // no more data to read on input resource
+                    // use an empty buffer in the next reads
+                    $this->input = null;
+                } else {
+                    fclose($this->pipes[$type]);
+                    unset($this->pipes[$type]);
+                }
+            }
+        }
+
+        if (null !== $w && 0 < count($w)) {
+            while ($len = strlen($this->inputBuffer)) {
+                $written = fwrite($w[0], $this->inputBuffer, 2 << 18); // write 512k
+                if ($written > 0) {
+                    $this->inputBuffer = (string) substr($this->inputBuffer, $written);
+                } else {
+                    break;
+                }
+            }
+        }
+
+        // no input to read on resource, buffer is empty and stdin still open
+        if ('' === $this->inputBuffer && null === $this->input && isset($this->pipes[0])) {
+            fclose($this->pipes[0]);
+            unset($this->pipes[0]);
+        }
+
+        return $read;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function areOpen()
+    {
+        return (bool) $this->pipes;
+    }
+
+    /**
+     * Creates a new UnixPipes instance
+     *
+     * @param Process         $process
+     * @param string|resource $input
+     *
+     * @return UnixPipes
+     */
+    public static function create(Process $process, $input)
+    {
+        return new static($process->isTty(), $process->isPty(), $input, $process->isOutputDisabled());
+    }
+}
diff --git a/vendor/symfony/process/Symfony/Component/Process/Pipes/WindowsPipes.php b/vendor/symfony/process/Symfony/Component/Process/Pipes/WindowsPipes.php
new file mode 100644
index 0000000000000000000000000000000000000000..ecdf50eee2a721f2a9a5fcd33af3441444577d7f
--- /dev/null
+++ b/vendor/symfony/process/Symfony/Component/Process/Pipes/WindowsPipes.php
@@ -0,0 +1,254 @@
+<?php
+
+/*
+ * This file is part of the Symfony package.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Component\Process\Pipes;
+
+use Symfony\Component\Process\Process;
+use Symfony\Component\Process\Exception\RuntimeException;
+
+/**
+ * WindowsPipes implementation uses temporary files as handles.
+ *
+ * @see https://bugs.php.net/bug.php?id=51800
+ * @see https://bugs.php.net/bug.php?id=65650
+ *
+ * @author Romain Neutron <imprec@gmail.com>
+ *
+ * @internal
+ */
+class WindowsPipes extends AbstractPipes
+{
+    /** @var array */
+    private $files = array();
+    /** @var array */
+    private $fileHandles = array();
+    /** @var array */
+    private $readBytes = array(
+        Process::STDOUT => 0,
+        Process::STDERR => 0,
+    );
+    /** @var bool */
+    private $disableOutput;
+
+    public function __construct($disableOutput, $input)
+    {
+        $this->disableOutput = (bool) $disableOutput;
+
+        if (!$this->disableOutput) {
+            // Fix for PHP bug #51800: reading from STDOUT pipe hangs forever on Windows if the output is too big.
+            // Workaround for this problem is to use temporary files instead of pipes on Windows platform.
+            //
+            // @see https://bugs.php.net/bug.php?id=51800
+            $this->files = array(
+                Process::STDOUT => tempnam(sys_get_temp_dir(), 'sf_proc_stdout'),
+                Process::STDERR => tempnam(sys_get_temp_dir(), 'sf_proc_stderr'),
+            );
+            foreach ($this->files as $offset => $file) {
+                $this->fileHandles[$offset] = fopen($this->files[$offset], 'rb');
+                if (false === $this->fileHandles[$offset]) {
+                    throw new RuntimeException('A temporary file could not be opened to write the process output to, verify that your TEMP environment variable is writable');
+                }
+            }
+        }
+
+        if (is_resource($input)) {
+            $this->input = $input;
+        } else {
+            $this->inputBuffer = $input;
+        }
+    }
+
+    public function __destruct()
+    {
+        $this->close();
+        $this->removeFiles();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getDescriptors()
+    {
+        if ($this->disableOutput) {
+            $nullstream = fopen('NUL', 'c');
+
+            return array(
+                array('pipe', 'r'),
+                $nullstream,
+                $nullstream,
+            );
+        }
+
+        // We're not using pipe on Windows platform as it hangs (https://bugs.php.net/bug.php?id=51800)
+        // We're not using file handles as it can produce corrupted output https://bugs.php.net/bug.php?id=65650
+        // So we redirect output within the commandline and pass the nul device to the process
+        return array(
+            array('pipe', 'r'),
+            array('file', 'NUL', 'w'),
+            array('file', 'NUL', 'w'),
+        );
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function getFiles()
+    {
+        return $this->files;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function readAndWrite($blocking, $close = false)
+    {
+        $this->write($blocking, $close);
+
+        $read = array();
+        $fh = $this->fileHandles;
+        foreach ($fh as $type => $fileHandle) {
+            if (0 !== fseek($fileHandle, $this->readBytes[$type])) {
+                continue;
+            }
+            $data = '';
+            $dataread = null;
+            while (!feof($fileHandle)) {
+                if (false !== $dataread = fread($fileHandle, self::CHUNK_SIZE)) {
+                    $data .= $dataread;
+                }
+            }
+            if (0 < $length = strlen($data)) {
+                $this->readBytes[$type] += $length;
+                $read[$type] = $data;
+            }
+
+            if (false === $dataread || (true === $close && feof($fileHandle) && '' === $data)) {
+                fclose($this->fileHandles[$type]);
+                unset($this->fileHandles[$type]);
+            }
+        }
+
+        return $read;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function areOpen()
+    {
+        return (bool) $this->pipes && (bool) $this->fileHandles;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function close()
+    {
+        parent::close();
+        foreach ($this->fileHandles as $handle) {
+            fclose($handle);
+        }
+        $this->fileHandles = array();
+    }
+
+    /**
+     * Creates a new WindowsPipes instance.
+     *
+     * @param Process $process The process
+     * @param $input
+     *
+     * @return WindowsPipes
+     */
+    public static function create(Process $process, $input)
+    {
+        return new static($process->isOutputDisabled(), $input);
+    }
+
+    /**
+     * Removes temporary files
+     */
+    private function removeFiles()
+    {
+        foreach ($this->files as $filename) {
+            if (file_exists($filename)) {
+                @unlink($filename);
+            }
+        }
+        $this->files = array();
+    }
+
+    /**
+     * Writes input to stdin
+     *
+     * @param bool $blocking
+     * @param bool $close
+     */
+    private function write($blocking, $close)
+    {
+        if (empty($this->pipes)) {
+            return;
+        }
+
+        $this->unblock();
+
+        $r = null !== $this->input ? array('input' => $this->input) : null;
+        $w = isset($this->pipes[0]) ? array($this->pipes[0]) : null;
+        $e = null;
+
+        // let's have a look if something changed in streams
+        if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? Process::TIMEOUT_PRECISION * 1E6 : 0)) {
+            // if a system call has been interrupted, forget about it, let's try again
+            // otherwise, an error occurred, let's reset pipes
+            if (!$this->hasSystemCallBeenInterrupted()) {
+                $this->pipes = array();
+            }
+
+            return;
+        }
+
+        // nothing has changed
+        if (0 === $n) {
+            return;
+        }
+
+        if (null !== $w && 0 < count($r)) {
+            $data = '';
+            while ($dataread = fread($r['input'], self::CHUNK_SIZE)) {
+                $data .= $dataread;
+            }
+
+            $this->inputBuffer .= $data;
+
+            if (false === $data || (true === $close && feof($r['input']) && '' === $data)) {
+                // no more data to read on input resource
+                // use an empty buffer in the next reads
+                unset($this->input);
+            }
+        }
+
+        if (null !== $w && 0 < count($w)) {
+            while ($len = strlen($this->inputBuffer)) {
+                $written = fwrite($w[0], $this->inputBuffer, 2 << 18);
+                if ($written > 0) {
+                    $this->inputBuffer = (string) substr($this->inputBuffer, $written);
+                } else {
+                    break;
+                }
+            }
+        }
+
+        // no input to read on resource, buffer is empty and stdin still open
+        if ('' === $this->inputBuffer && null === $this->input && isset($this->pipes[0])) {
+            fclose($this->pipes[0]);
+            unset($this->pipes[0]);
+        }
+    }
+}
diff --git a/vendor/symfony/process/Symfony/Component/Process/Process.php b/vendor/symfony/process/Symfony/Component/Process/Process.php
index 7503dadefc2cdf8f4ec770303345f90768780cca..b91bc5dea78479da407da52d15bf0c0d36a01782 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Process.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Process.php
@@ -16,12 +16,16 @@ use Symfony\Component\Process\Exception\LogicException;
 use Symfony\Component\Process\Exception\ProcessFailedException;
 use Symfony\Component\Process\Exception\ProcessTimedOutException;
 use Symfony\Component\Process\Exception\RuntimeException;
+use Symfony\Component\Process\Pipes\PipesInterface;
+use Symfony\Component\Process\Pipes\UnixPipes;
+use Symfony\Component\Process\Pipes\WindowsPipes;
 
 /**
  * Process is a thin wrapper around proc_* functions to easily
  * start independent PHP processes.
  *
  * @author Fabien Potencier <fabien@symfony.com>
+ * @author Romain Neutron <imprec@gmail.com>
  *
  * @api
  */
@@ -67,7 +71,7 @@ class Process
     private $pty;
 
     private $useFileHandles = false;
-    /** @var ProcessPipes */
+    /** @var PipesInterface */
     private $processPipes;
 
     private $latestSignal;
@@ -127,12 +131,12 @@ class Process
     /**
      * Constructor.
      *
-     * @param string             $commandline The command line to run
-     * @param string|null        $cwd         The working directory or null to use the working dir of the current PHP process
-     * @param array|null         $env         The environment variables or null to inherit
-     * @param string|null        $input       The input
-     * @param int|float|null     $timeout     The timeout in seconds or null to disable
-     * @param array              $options     An array of options for proc_open
+     * @param string         $commandline The command line to run
+     * @param string|null    $cwd         The working directory or null to use the working dir of the current PHP process
+     * @param array|null     $env         The environment variables or null to inherit
+     * @param string|null    $input       The input
+     * @param int|float|null $timeout     The timeout in seconds or null to disable
+     * @param array          $options     An array of options for proc_open
      *
      * @throws RuntimeException When proc_open is not installed
      *
@@ -191,7 +195,7 @@ class Process
      * @param callable|null $callback A PHP callback to run whenever there is some
      *                                output available on STDOUT or STDERR
      *
-     * @return int     The exit status code
+     * @return int The exit status code
      *
      * @throws RuntimeException When process can't be launched
      * @throws RuntimeException When process stopped after receiving signal
@@ -291,13 +295,10 @@ class Process
         }
         $this->status = self::STATUS_STARTED;
 
-        $this->processPipes->unblock();
-
         if ($this->tty) {
             return;
         }
 
-        $this->processPipes->write(false, $this->input);
         $this->updateStatus(false);
         $this->checkTimeout();
     }
@@ -338,7 +339,7 @@ class Process
      *
      * @param callable|null $callback A valid PHP callback
      *
-     * @return int     The exitcode of the process
+     * @return int The exitcode of the process
      *
      * @throws RuntimeException When process timed out
      * @throws RuntimeException When process stopped after receiving signal
@@ -355,7 +356,7 @@ class Process
 
         do {
             $this->checkTimeout();
-            $running = defined('PHP_WINDOWS_VERSION_BUILD') ? $this->isRunning() : $this->processPipes->hasOpenHandles();
+            $running = defined('PHP_WINDOWS_VERSION_BUILD') ? $this->isRunning() : $this->processPipes->areOpen();
             $close = !defined('PHP_WINDOWS_VERSION_BUILD') || !$running;
             $this->readPipes(true, $close);
         } while ($running);
@@ -374,7 +375,7 @@ class Process
     /**
      * Returns the Pid (process identifier), if applicable.
      *
-     * @return int|null     The process id if running, null otherwise
+     * @return int|null The process id if running, null otherwise
      *
      * @throws RuntimeException In case --enable-sigchild is activated
      */
@@ -392,7 +393,7 @@ class Process
     /**
      * Sends a POSIX signal to the process.
      *
-     * @param  int     $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
+     * @param int $signal A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
      *
      * @return Process
      *
@@ -579,7 +580,7 @@ class Process
     /**
      * Returns the exit code returned by the process.
      *
-     * @return null|int     The exit status code, null if the Process is not terminated
+     * @return null|int The exit status code, null if the Process is not terminated
      *
      * @throws RuntimeException In case --enable-sigchild is activated and the sigchild compatibility mode is disabled
      *
@@ -621,7 +622,7 @@ class Process
     /**
      * Checks if the process ended successfully.
      *
-     * @return bool    true if the process ended successfully, false otherwise
+     * @return bool true if the process ended successfully, false otherwise
      *
      * @api
      */
@@ -723,7 +724,7 @@ class Process
     /**
      * Checks if the process is currently running.
      *
-     * @return bool    true if the process is currently running, false otherwise
+     * @return bool true if the process is currently running, false otherwise
      */
     public function isRunning()
     {
@@ -739,7 +740,7 @@ class Process
     /**
      * Checks if the process has been started with no regard to the current state.
      *
-     * @return bool    true if status is ready, false otherwise
+     * @return bool true if status is ready, false otherwise
      */
     public function isStarted()
     {
@@ -749,7 +750,7 @@ class Process
     /**
      * Checks if the process is terminated.
      *
-     * @return bool    true if process is terminated, false otherwise
+     * @return bool true if process is terminated, false otherwise
      */
     public function isTerminated()
     {
@@ -775,10 +776,10 @@ class Process
     /**
      * Stops the process.
      *
-     * @param int|float     $timeout The timeout in seconds
-     * @param int           $signal  A POSIX signal to send in case the process has not stop at timeout, default is SIGKILL
+     * @param int|float $timeout The timeout in seconds
+     * @param int       $signal  A POSIX signal to send in case the process has not stop at timeout, default is SIGKILL
      *
-     * @return int     The exit-code of the process
+     * @return int The exit-code of the process
      *
      * @throws RuntimeException if the process got signaled
      */
@@ -888,7 +889,7 @@ class Process
      *
      * To disable the timeout, set this value to null.
      *
-     * @param int|float|null     $timeout The timeout in seconds
+     * @param int|float|null $timeout The timeout in seconds
      *
      * @return self The current Process instance
      *
@@ -927,7 +928,7 @@ class Process
     /**
      * Enables or disables the TTY mode.
      *
-     * @param bool    $tty True to enabled and false to disable
+     * @param bool $tty True to enabled and false to disable
      *
      * @return self The current Process instance
      *
@@ -947,7 +948,7 @@ class Process
     /**
      * Checks if the TTY mode is enabled.
      *
-     * @return bool    true if the TTY mode is enabled, false otherwise
+     * @return bool true if the TTY mode is enabled, false otherwise
      */
     public function isTty()
     {
@@ -1072,8 +1073,6 @@ class Process
     /**
      * Sets the contents of STDIN.
      *
-     * Deprecation: As of Symfony 2.5, this method only accepts scalar values.
-     *
      * @param string|null $stdin The new contents
      *
      * @return self The current Process instance
@@ -1150,7 +1149,7 @@ class Process
     /**
      * Sets whether or not Windows compatibility is enabled.
      *
-     * @param bool    $enhance
+     * @param bool $enhance
      *
      * @return self The current Process instance
      */
@@ -1178,7 +1177,7 @@ class Process
      * determine the success of a process when PHP has been compiled with
      * the --enable-sigchild option
      *
-     * @param bool    $enhance
+     * @param bool $enhance
      *
      * @return self The current Process instance
      */
@@ -1250,8 +1249,12 @@ class Process
      */
     private function getDescriptors()
     {
-        $this->processPipes = new ProcessPipes($this->useFileHandles, $this->tty, $this->pty, $this->outputDisabled);
-        $descriptors = $this->processPipes->getDescriptors();
+        if (defined('PHP_WINDOWS_VERSION_BUILD')) {
+            $this->processPipes = WindowsPipes::create($this, $this->input);
+        } else {
+            $this->processPipes = UnixPipes::create($this, $this->input);
+        }
+        $descriptors = $this->processPipes->getDescriptors($this->outputDisabled);
 
         if (!$this->useFileHandles && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) {
             // last exit code is output on the fourth pipe and caught to work around --enable-sigchild
@@ -1296,7 +1299,7 @@ class Process
     /**
      * Updates the status of the process, reads pipes.
      *
-     * @param bool    $blocking Whether to use a blocking read call.
+     * @param bool $blocking Whether to use a blocking read call.
      */
     protected function updateStatus($blocking)
     {
@@ -1360,16 +1363,12 @@ class Process
     /**
      * Reads pipes, executes callback.
      *
-     * @param bool    $blocking Whether to use blocking calls or not.
-     * @param bool    $close    Whether to close file handles or not.
+     * @param bool $blocking Whether to use blocking calls or not.
+     * @param bool $close    Whether to close file handles or not.
      */
     private function readPipes($blocking, $close)
     {
-        if ($close) {
-            $result = $this->processPipes->readAndCloseHandles($blocking);
-        } else {
-            $result = $this->processPipes->read($blocking);
-        }
+        $result = $this->processPipes->readAndWrite($blocking, $close);
 
         foreach ($result as $type => $data) {
             if (3 == $type) {
@@ -1393,7 +1392,7 @@ class Process
     /**
      * Closes process resource, closes file handles, sets the exitcode.
      *
-     * @return int     The exitcode
+     * @return int The exitcode
      */
     private function close()
     {
@@ -1439,10 +1438,10 @@ class Process
     /**
      * Sends a POSIX signal to the process.
      *
-     * @param  int     $signal         A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
-     * @param  bool    $throwException Whether to throw exception in case signal failed
+     * @param int  $signal         A valid POSIX signal (see http://www.php.net/manual/en/pcntl.constants.php)
+     * @param bool $throwException Whether to throw exception in case signal failed
      *
-     * @return bool    True if the signal was sent successfully, false otherwise
+     * @return bool True if the signal was sent successfully, false otherwise
      *
      * @throws LogicException   In case the process is not running
      * @throws RuntimeException In case --enable-sigchild is activated
diff --git a/vendor/symfony/process/Symfony/Component/Process/ProcessPipes.php b/vendor/symfony/process/Symfony/Component/Process/ProcessPipes.php
deleted file mode 100644
index 9ed1def9f29e34c2bb7dcaa39db59651b0163a33..0000000000000000000000000000000000000000
--- a/vendor/symfony/process/Symfony/Component/Process/ProcessPipes.php
+++ /dev/null
@@ -1,382 +0,0 @@
-<?php
-
-/*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
-
-namespace Symfony\Component\Process;
-
-use Symfony\Component\Process\Exception\RuntimeException;
-
-/**
- * ProcessPipes manages descriptors and pipes for the use of proc_open.
- */
-class ProcessPipes
-{
-    /** @var array */
-    public $pipes = array();
-    /** @var array */
-    private $files = array();
-    /** @var array */
-    private $fileHandles = array();
-    /** @var array */
-    private $readBytes = array();
-    /** @var bool    */
-    private $useFiles;
-    /** @var bool    */
-    private $ttyMode;
-    /** @var bool    */
-    private $ptyMode;
-    /** @var bool    */
-    private $disableOutput;
-
-    const CHUNK_SIZE = 16384;
-
-    public function __construct($useFiles, $ttyMode, $ptyMode = false, $disableOutput = false)
-    {
-        $this->useFiles = (bool) $useFiles;
-        $this->ttyMode = (bool) $ttyMode;
-        $this->ptyMode = (bool) $ptyMode;
-        $this->disableOutput = (bool) $disableOutput;
-
-        // Fix for PHP bug #51800: reading from STDOUT pipe hangs forever on Windows if the output is too big.
-        // Workaround for this problem is to use temporary files instead of pipes on Windows platform.
-        //
-        // @see https://bugs.php.net/bug.php?id=51800
-        if ($this->useFiles && !$this->disableOutput) {
-            $this->files = array(
-                Process::STDOUT => tempnam(sys_get_temp_dir(), 'sf_proc_stdout'),
-                Process::STDERR => tempnam(sys_get_temp_dir(), 'sf_proc_stderr'),
-            );
-            foreach ($this->files as $offset => $file) {
-                $this->fileHandles[$offset] = fopen($this->files[$offset], 'rb');
-                if (false === $this->fileHandles[$offset]) {
-                    throw new RuntimeException('A temporary file could not be opened to write the process output to, verify that your TEMP environment variable is writable');
-                }
-            }
-            $this->readBytes = array(
-                Process::STDOUT => 0,
-                Process::STDERR => 0,
-            );
-        }
-    }
-
-    public function __destruct()
-    {
-        $this->close();
-        $this->removeFiles();
-    }
-
-    /**
-     * Sets non-blocking mode on pipes.
-     */
-    public function unblock()
-    {
-        foreach ($this->pipes as $pipe) {
-            stream_set_blocking($pipe, 0);
-        }
-    }
-
-    /**
-     * Closes file handles and pipes.
-     */
-    public function close()
-    {
-        $this->closeUnixPipes();
-        foreach ($this->fileHandles as $handle) {
-            fclose($handle);
-        }
-        $this->fileHandles = array();
-    }
-
-    /**
-     * Closes Unix pipes.
-     *
-     * Nothing happens in case file handles are used.
-     */
-    public function closeUnixPipes()
-    {
-        foreach ($this->pipes as $pipe) {
-            fclose($pipe);
-        }
-        $this->pipes = array();
-    }
-
-    /**
-     * Returns an array of descriptors for the use of proc_open.
-     *
-     * @return array
-     */
-    public function getDescriptors()
-    {
-        if ($this->disableOutput) {
-            $nullstream = fopen(defined('PHP_WINDOWS_VERSION_BUILD') ? 'NUL' : '/dev/null', 'c');
-
-            return array(
-                array('pipe', 'r'),
-                $nullstream,
-                $nullstream,
-            );
-        }
-
-        if ($this->useFiles) {
-            // We're not using pipe on Windows platform as it hangs (https://bugs.php.net/bug.php?id=51800)
-            // We're not using file handles as it can produce corrupted output https://bugs.php.net/bug.php?id=65650
-            // So we redirect output within the commandline and pass the nul device to the process
-            return array(
-                array('pipe', 'r'),
-                array('file', 'NUL', 'w'),
-                array('file', 'NUL', 'w'),
-            );
-        }
-
-        if ($this->ttyMode) {
-            return array(
-                array('file', '/dev/tty', 'r'),
-                array('file', '/dev/tty', 'w'),
-                array('file', '/dev/tty', 'w'),
-            );
-        } elseif ($this->ptyMode && Process::isPtySupported()) {
-            return array(
-                array('pty'),
-                array('pty'),
-                array('pty'),
-            );
-        }
-
-        return array(
-            array('pipe', 'r'), // stdin
-            array('pipe', 'w'), // stdout
-            array('pipe', 'w'), // stderr
-        );
-    }
-
-    /**
-     * Returns an array of filenames indexed by their related stream in case these pipes use temporary files.
-     *
-     * @return array
-     */
-    public function getFiles()
-    {
-        if ($this->useFiles) {
-            return $this->files;
-        }
-
-        return array();
-    }
-
-    /**
-     * Reads data in file handles and pipes.
-     *
-     * @param bool    $blocking Whether to use blocking calls or not.
-     *
-     * @return array An array of read data indexed by their fd.
-     */
-    public function read($blocking)
-    {
-        return array_replace($this->readStreams($blocking), $this->readFileHandles());
-    }
-
-    /**
-     * Reads data in file handles and pipes, closes them if EOF is reached.
-     *
-     * @param bool    $blocking Whether to use blocking calls or not.
-     *
-     * @return array An array of read data indexed by their fd.
-     */
-    public function readAndCloseHandles($blocking)
-    {
-        return array_replace($this->readStreams($blocking, true), $this->readFileHandles(true));
-    }
-
-    /**
-     * Returns if the current state has open file handles or pipes.
-     *
-     * @return bool
-     */
-    public function hasOpenHandles()
-    {
-        if (!$this->useFiles) {
-            return (bool) $this->pipes;
-        }
-
-        return (bool) $this->pipes && (bool) $this->fileHandles;
-    }
-
-    /**
-     * Writes stdin data.
-     *
-     * @param bool        $blocking Whether to use blocking calls or not.
-     * @param string|null $stdin    The data to write.
-     */
-    public function write($blocking, $stdin)
-    {
-        if (null === $stdin) {
-            fclose($this->pipes[0]);
-            unset($this->pipes[0]);
-
-            return;
-        }
-
-        $writePipes = array($this->pipes[0]);
-        unset($this->pipes[0]);
-        $stdinLen = strlen($stdin);
-        $stdinOffset = 0;
-
-        while ($writePipes) {
-            $r = null;
-            $w = $writePipes;
-            $e = null;
-
-            if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? ceil(Process::TIMEOUT_PRECISION * 1E6) : 0)) {
-                // if a system call has been interrupted, forget about it, let's try again
-                if ($this->hasSystemCallBeenInterrupted()) {
-                    continue;
-                }
-                break;
-            }
-
-            // nothing has changed, let's wait until the process is ready
-            if (0 === $n) {
-                continue;
-            }
-
-            if ($w) {
-                $written = fwrite($writePipes[0], (binary) substr($stdin, $stdinOffset), 8192);
-                if (false !== $written) {
-                    $stdinOffset += $written;
-                }
-                if ($stdinOffset >= $stdinLen) {
-                    fclose($writePipes[0]);
-                    $writePipes = null;
-                }
-            }
-        }
-    }
-
-    /**
-     * Reads data in file handles.
-     *
-     * @param bool    $close Whether to close file handles or not.
-     *
-     * @return array An array of read data indexed by their fd.
-     */
-    private function readFileHandles($close = false)
-    {
-        $read = array();
-        $fh = $this->fileHandles;
-        foreach ($fh as $type => $fileHandle) {
-            if (0 !== fseek($fileHandle, $this->readBytes[$type])) {
-                continue;
-            }
-            $data = '';
-            $dataread = null;
-            while (!feof($fileHandle)) {
-                if (false !== $dataread = fread($fileHandle, self::CHUNK_SIZE)) {
-                    $data .= $dataread;
-                }
-            }
-            if (0 < $length = strlen($data)) {
-                $this->readBytes[$type] += $length;
-                $read[$type] = $data;
-            }
-
-            if (false === $dataread || (true === $close && feof($fileHandle) && '' === $data)) {
-                fclose($this->fileHandles[$type]);
-                unset($this->fileHandles[$type]);
-            }
-        }
-
-        return $read;
-    }
-
-    /**
-     * Reads data in file pipes streams.
-     *
-     * @param bool    $blocking Whether to use blocking calls or not.
-     * @param bool    $close    Whether to close file handles or not.
-     *
-     * @return array An array of read data indexed by their fd.
-     */
-    private function readStreams($blocking, $close = false)
-    {
-        if (empty($this->pipes)) {
-            usleep(Process::TIMEOUT_PRECISION * 1E4);
-
-            return array();
-        }
-
-        $read = array();
-
-        $r = $this->pipes;
-        $w = null;
-        $e = null;
-
-        // let's have a look if something changed in streams
-        if (false === $n = @stream_select($r, $w, $e, 0, $blocking ? ceil(Process::TIMEOUT_PRECISION * 1E6) : 0)) {
-            // if a system call has been interrupted, forget about it, let's try again
-            // otherwise, an error occurred, let's reset pipes
-            if (!$this->hasSystemCallBeenInterrupted()) {
-                $this->pipes = array();
-            }
-
-            return $read;
-        }
-
-        // nothing has changed
-        if (0 === $n) {
-            return $read;
-        }
-
-        foreach ($r as $pipe) {
-            $type = array_search($pipe, $this->pipes);
-
-            $data = '';
-            while ('' !== $dataread = (string) fread($pipe, self::CHUNK_SIZE)) {
-                $data .= $dataread;
-            }
-
-            if ('' !== $data) {
-                $read[$type] = $data;
-            }
-
-            if (false === $data || (true === $close && feof($pipe) && '' === $data)) {
-                fclose($this->pipes[$type]);
-                unset($this->pipes[$type]);
-            }
-        }
-
-        return $read;
-    }
-
-    /**
-     * Returns true if a system call has been interrupted.
-     *
-     * @return bool
-     */
-    private function hasSystemCallBeenInterrupted()
-    {
-        $lastError = error_get_last();
-
-        // stream_select returns false when the `select` system call is interrupted by an incoming signal
-        return isset($lastError['message']) && false !== stripos($lastError['message'], 'interrupted system call');
-    }
-
-    /**
-     * Removes temporary files
-     */
-    private function removeFiles()
-    {
-        foreach ($this->files as $filename) {
-            if (file_exists($filename)) {
-                @unlink($filename);
-            }
-        }
-        $this->files = array();
-    }
-}
diff --git a/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php b/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php
index 35ae17c5088220b08ddef9e8d45b91ef77cc06e2..2ec321cc12c6b30b7b9fbcda5e899abb9cf4771f 100644
--- a/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php
+++ b/vendor/symfony/process/Symfony/Component/Process/ProcessUtils.php
@@ -87,6 +87,9 @@ class ProcessUtils
     public static function validateInput($caller, $input)
     {
         if (null !== $input) {
+            if (is_resource($input)) {
+                return $input;
+            }
             if (is_scalar($input)) {
                 return (string) $input;
             }
@@ -95,7 +98,7 @@ class ProcessUtils
                 return (string) $input;
             }
 
-            throw new InvalidArgumentException(sprintf('%s only accepts strings.', $caller));
+            throw new InvalidArgumentException(sprintf('%s only accepts strings or stream resources.', $caller));
         }
 
         return $input;
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php
index c5737e1a9e38c49dfed32d8145663a50d40c36cc..d48698a7cf3a6d770a8699a5633d19971de2e251 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/AbstractProcessTest.php
@@ -13,9 +13,9 @@ namespace Symfony\Component\Process\Tests;
 
 use Symfony\Component\Process\Exception\ProcessTimedOutException;
 use Symfony\Component\Process\Exception\LogicException;
+use Symfony\Component\Process\Pipes\PipesInterface;
 use Symfony\Component\Process\Process;
 use Symfony\Component\Process\Exception\RuntimeException;
-use Symfony\Component\Process\ProcessPipes;
 
 /**
  * @author Robert Schönthal <seroscho@googlemail.com>
@@ -80,7 +80,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         }
         $duration = microtime(true) - $start;
 
-        $this->assertLessThan(1.8, $duration);
+        $this->assertLessThan(4, $duration);
     }
 
     public function testAllOutputIsActuallyReadOnTermination()
@@ -90,9 +90,9 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         // has terminated so the internal pipes array is already empty. normally
         // the call to start() will not read any data as the process will not have
         // generated output, but this is non-deterministic so we must count it as
-        // a possibility.  therefore we need 2 * ProcessPipes::CHUNK_SIZE plus
+        // a possibility.  therefore we need 2 * PipesInterface::CHUNK_SIZE plus
         // another byte which will never be read.
-        $expectedOutputSize = ProcessPipes::CHUNK_SIZE * 2 + 2;
+        $expectedOutputSize = PipesInterface::CHUNK_SIZE * 2 + 2;
 
         $code = sprintf('echo str_repeat(\'*\', %d);', $expectedOutputSize);
         $p = $this->getProcess(sprintf('php -r %s', escapeshellarg($code)));
@@ -158,6 +158,28 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         $this->assertEquals($expectedLength, strlen($p->getErrorOutput()));
     }
 
+    /**
+     * @dataProvider pipesCodeProvider
+     */
+    public function testSetStreamAsInput($code, $size)
+    {
+        $expected = str_repeat(str_repeat('*', 1024), $size).'!';
+        $expectedLength = (1024 * $size) + 1;
+
+        $stream = fopen('php://temporary', 'w+');
+        fwrite($stream, $expected);
+        rewind($stream);
+
+        $p = $this->getProcess(sprintf('php -r %s', escapeshellarg($code)));
+        $p->setInput($stream);
+        $p->run();
+
+        fclose($stream);
+
+        $this->assertEquals($expectedLength, strlen($p->getOutput()));
+        $this->assertEquals($expectedLength, strlen($p->getErrorOutput()));
+    }
+
     public function testSetInputWhileRunningThrowsAnException()
     {
         $process = $this->getProcess('php -r "usleep(500000);"');
@@ -175,7 +197,7 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
     /**
      * @dataProvider provideInvalidInputValues
      * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Symfony\Component\Process\Process::setInput only accepts strings.
+     * @expectedExceptionMessage Symfony\Component\Process\Process::setInput only accepts strings or stream resources.
      */
     public function testInvalidInput($value)
     {
@@ -188,7 +210,6 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
         return array(
             array(array()),
             array(new NonStringifiable()),
-            array(fopen('php://temporary', 'w')),
         );
     }
 
@@ -1079,12 +1100,12 @@ abstract class AbstractProcessTest extends \PHPUnit_Framework_TestCase
     }
 
     /**
-     * @param string         $commandline
-     * @param null|string    $cwd
-     * @param null|array     $env
-     * @param null|string    $input
-     * @param int            $timeout
-     * @param array          $options
+     * @param string      $commandline
+     * @param null|string $cwd
+     * @param null|array  $env
+     * @param null|string $input
+     * @param int         $timeout
+     * @param array       $options
      *
      * @return Process
      */
diff --git a/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php b/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php
index 56e40520754bc83dd043928ff77fbcac2ed9265a..e864f6623456b5f85a1ce79c3bfa42b31a33efa3 100644
--- a/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php
+++ b/vendor/symfony/process/Symfony/Component/Process/Tests/ProcessBuilderTest.php
@@ -215,7 +215,7 @@ class ProcessBuilderTest extends \PHPUnit_Framework_TestCase
 
     /**
      * @expectedException \Symfony\Component\Process\Exception\InvalidArgumentException
-     * @expectedExceptionMessage Symfony\Component\Process\ProcessBuilder::setInput only accepts strings.
+     * @expectedExceptionMessage Symfony\Component\Process\ProcessBuilder::setInput only accepts strings or stream resources.
      */
     public function testInvalidInput()
     {
diff --git a/vendor/symfony/process/Symfony/Component/Process/composer.json b/vendor/symfony/process/Symfony/Component/Process/composer.json
index b5dbfe1390a2bf674a3aba8ed2898e3241e2def1..39fa97cb59b052c2f2fb49656f4df8ddf68f034f 100644
--- a/vendor/symfony/process/Symfony/Component/Process/composer.json
+++ b/vendor/symfony/process/Symfony/Component/Process/composer.json
@@ -25,7 +25,7 @@
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.5-dev"
+            "dev-master": "2.6-dev"
         }
     }
 }
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Dumper.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Dumper.php
index 26103c88ece9f2d2f878b9964cc4f24833e8c078..39cdcfc536a1b325775f4dccaa2c5bd194713793 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Dumper.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Dumper.php
@@ -28,7 +28,7 @@ class Dumper
     /**
      * Sets the indentation.
      *
-     * @param int     $num The amount of spaces to use for indentation of nested nodes.
+     * @param int $num The amount of spaces to use for indentation of nested nodes.
      */
     public function setIndentation($num)
     {
@@ -38,13 +38,13 @@ class Dumper
     /**
      * Dumps a PHP value to YAML.
      *
-     * @param mixed   $input                  The PHP value
-     * @param int     $inline                 The level where you switch to inline YAML
-     * @param int     $indent                 The level of indentation (used internally)
-     * @param bool    $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
-     * @param bool    $objectSupport          true if object support is enabled, false otherwise
+     * @param mixed $input                  The PHP value
+     * @param int   $inline                 The level where you switch to inline YAML
+     * @param int   $indent                 The level of indentation (used internally)
+     * @param bool  $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
+     * @param bool  $objectSupport          true if object support is enabled, false otherwise
      *
-     * @return string  The YAML representation of the PHP value
+     * @return string The YAML representation of the PHP value
      */
     public function dump($input, $inline = 0, $indent = 0, $exceptionOnInvalidType = false, $objectSupport = false)
     {
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Escaper.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Escaper.php
index 7f6ec2bef297d300bf533b79eaba5f1b6ed3cebe..6f9785886f14b1fcb6eb7b12c7f13f696dd944b8 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Escaper.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Escaper.php
@@ -32,7 +32,7 @@ class Escaper
                                      "\x10",  "\x11",  "\x12",  "\x13",  "\x14",  "\x15",  "\x16",  "\x17",
                                      "\x18",  "\x19",  "\x1a",  "\x1b",  "\x1c",  "\x1d",  "\x1e",  "\x1f",
                                      "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9",);
-    private static $escaped  = array('\\\\', '\\"', '\\\\', '\\"',
+    private static $escaped = array('\\\\', '\\"', '\\\\', '\\"',
                                      "\\0",   "\\x01", "\\x02", "\\x03", "\\x04", "\\x05", "\\x06", "\\a",
                                      "\\b",   "\\t",   "\\n",   "\\v",   "\\f",   "\\r",   "\\x0e", "\\x0f",
                                      "\\x10", "\\x11", "\\x12", "\\x13", "\\x14", "\\x15", "\\x16", "\\x17",
@@ -44,7 +44,7 @@ class Escaper
      *
      * @param string $value A PHP value
      *
-     * @return bool    True if the value would require double quotes.
+     * @return bool True if the value would require double quotes.
      */
     public static function requiresDoubleQuoting($value)
     {
@@ -68,7 +68,7 @@ class Escaper
      *
      * @param string $value A PHP value
      *
-     * @return bool    True if the value would require single quotes.
+     * @return bool True if the value would require single quotes.
      */
     public static function requiresSingleQuoting($value)
     {
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/ParseException.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/ParseException.php
index ff01d6b9a69cc9ebeecc6e52dec586936551c8f3..0447dff13734573410d12550af0715b479bee127 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/ParseException.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Exception/ParseException.php
@@ -11,11 +11,6 @@
 
 namespace Symfony\Component\Yaml\Exception;
 
-if (!defined('JSON_UNESCAPED_UNICODE')) {
-    define('JSON_UNESCAPED_SLASHES', 64);
-    define('JSON_UNESCAPED_UNICODE', 256);
-}
-
 /**
  * Exception class thrown when an error occurs during parsing.
  *
@@ -33,10 +28,10 @@ class ParseException extends RuntimeException
     /**
      * Constructor.
      *
-     * @param string    $message    The error message
-     * @param int       $parsedLine The line where the error occurred
-     * @param int       $snippet    The snippet of code near the problem
-     * @param string    $parsedFile The file name where the error occurred
+     * @param string     $message    The error message
+     * @param int        $parsedLine The line where the error occurred
+     * @param int        $snippet    The snippet of code near the problem
+     * @param string     $parsedFile The file name where the error occurred
      * @param \Exception $previous   The previous exception
      */
     public function __construct($message, $parsedLine = -1, $snippet = null, $parsedFile = null, \Exception $previous = null)
@@ -100,7 +95,7 @@ class ParseException extends RuntimeException
     /**
      * Gets the line where the error occurred.
      *
-     * @return int     The file line
+     * @return int The file line
      */
     public function getParsedLine()
     {
@@ -110,7 +105,7 @@ class ParseException extends RuntimeException
     /**
      * Sets the line where the error occurred.
      *
-     * @param int     $parsedLine The file line
+     * @param int $parsedLine The file line
      */
     public function setParsedLine($parsedLine)
     {
@@ -130,7 +125,12 @@ class ParseException extends RuntimeException
         }
 
         if (null !== $this->parsedFile) {
-            $this->message .= sprintf(' in %s', json_encode($this->parsedFile, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
+            if (PHP_VERSION_ID >= 50400) {
+                $jsonOptions = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE;
+            } else {
+                $jsonOptions = 0;
+            }
+            $this->message .= sprintf(' in %s', json_encode($this->parsedFile, $jsonOptions));
         }
 
         if ($this->parsedLine >= 0) {
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Inline.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Inline.php
index 8fec216dde139c7bc3caca24ad349339d97d79c8..e3fafe12bc64b0296e5f8a92315efadffe7ae2cb 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Inline.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Inline.php
@@ -25,23 +25,26 @@ class Inline
 
     private static $exceptionOnInvalidType = false;
     private static $objectSupport = false;
+    private static $objectForMap = false;
 
     /**
      * Converts a YAML string to a PHP array.
      *
-     * @param string  $value                  A YAML string
-     * @param bool    $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
-     * @param bool    $objectSupport          true if object support is enabled, false otherwise
-     * @param array   $references             Mapping of variable names to values
+     * @param string $value                  A YAML string
+     * @param bool   $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
+     * @param bool   $objectSupport          true if object support is enabled, false otherwise
+     * @param bool   $objectForMap           true if maps should return a stdClass instead of array()
+     * @param array  $references             Mapping of variable names to values
      *
      * @return array A PHP array representing the YAML string
      *
      * @throws ParseException
      */
-    public static function parse($value, $exceptionOnInvalidType = false, $objectSupport = false, $references = array())
+    public static function parse($value, $exceptionOnInvalidType = false, $objectSupport = false, $objectForMap = false, $references = array())
     {
         self::$exceptionOnInvalidType = $exceptionOnInvalidType;
         self::$objectSupport = $objectSupport;
+        self::$objectForMap = $objectForMap;
 
         $value = trim($value);
 
@@ -83,9 +86,9 @@ class Inline
     /**
      * Dumps a given PHP variable to a YAML string.
      *
-     * @param mixed   $value                  The PHP variable to convert
-     * @param bool    $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
-     * @param bool    $objectSupport          true if object support is enabled, false otherwise
+     * @param mixed $value                  The PHP variable to convert
+     * @param bool  $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
+     * @param bool  $objectSupport          true if object support is enabled, false otherwise
      *
      * @return string The YAML string representing the PHP array
      *
@@ -125,8 +128,17 @@ class Inline
                 if (false !== $locale) {
                     setlocale(LC_NUMERIC, 'C');
                 }
-                $repr = is_string($value) ? "'$value'" : (is_infinite($value) ? str_ireplace('INF', '.Inf', strval($value)) : strval($value));
-
+                if (is_float($value)) {
+                    $repr = strval($value);
+                    if (is_infinite($value)) {
+                        $repr = str_ireplace('INF', '.Inf', $repr);
+                    } elseif (floor($value) == $value && $repr == $value) {
+                        // Preserve float data type since storing a whole number will result in integer value.
+                        $repr = '!!float '.$repr;
+                    }
+                } else {
+                    $repr = is_string($value) ? "'$value'" : strval($value);
+                }
                 if (false !== $locale) {
                     setlocale(LC_NUMERIC, $locale);
                 }
@@ -149,9 +161,9 @@ class Inline
     /**
      * Dumps a PHP array to a YAML string.
      *
-     * @param array   $value                  The PHP array to dump
-     * @param bool    $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
-     * @param bool    $objectSupport          true if object support is enabled, false otherwise
+     * @param array $value                  The PHP array to dump
+     * @param bool  $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
+     * @param bool  $objectSupport          true if object support is enabled, false otherwise
      *
      * @return string The YAML string representing the PHP array
      */
@@ -234,7 +246,7 @@ class Inline
      * Parses a quoted scalar to YAML.
      *
      * @param string $scalar
-     * @param int     &$i
+     * @param int    &$i
      *
      * @return string A YAML string
      *
@@ -344,6 +356,10 @@ class Inline
                     ++$i;
                     continue 2;
                 case '}':
+                    if (self::$objectForMap) {
+                        return (object) $output;
+                    }
+
                     return $output;
             }
 
@@ -352,6 +368,7 @@ class Inline
 
             // value
             $done = false;
+
             while ($i < $len) {
                 switch ($mapping[$i]) {
                     case '[':
@@ -462,6 +479,8 @@ class Inline
                         }
 
                         return;
+                    case 0 === strpos($scalar, '!!float '):
+                        return (float) substr($scalar, 8);
                     case ctype_digit($scalar):
                         $raw = $scalar;
                         $cast = intval($scalar);
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php
index fd9afafe36b4dbdb3edd96423b68dccf8f627fd5..00c613dfdc45faa4c96d255c91f2e35e8b061187 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Parser.php
@@ -22,16 +22,16 @@ class Parser
 {
     const FOLDED_SCALAR_PATTERN = '(?P<separator>\||>)(?P<modifiers>\+|\-|\d+|\+\d+|\-\d+|\d+\+|\d+\-)?(?P<comments> +#.*)?';
 
-    private $offset         = 0;
-    private $lines          = array();
-    private $currentLineNb  = -1;
-    private $currentLine    = '';
-    private $refs           = array();
+    private $offset = 0;
+    private $lines = array();
+    private $currentLineNb = -1;
+    private $currentLine = '';
+    private $refs = array();
 
     /**
      * Constructor
      *
-     * @param int     $offset The offset of YAML document (used for line numbers in error messages)
+     * @param int $offset The offset of YAML document (used for line numbers in error messages)
      */
     public function __construct($offset = 0)
     {
@@ -44,12 +44,13 @@ class Parser
      * @param string  $value                  A YAML string
      * @param bool    $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
      * @param bool    $objectSupport          true if object support is enabled, false otherwise
+     * @param bool    $objectForMap           true if maps should return a stdClass instead of array()
      *
-     * @return mixed  A PHP value
+     * @return mixed A PHP value
      *
      * @throws ParseException If the YAML is not valid
      */
-    public function parse($value, $exceptionOnInvalidType = false, $objectSupport = false)
+    public function parse($value, $exceptionOnInvalidType = false, $objectSupport = false, $objectForMap = false)
     {
         $this->currentLineNb = -1;
         $this->currentLine = '';
@@ -94,7 +95,7 @@ class Parser
                     $c = $this->getRealCurrentLineNb() + 1;
                     $parser = new Parser($c);
                     $parser->refs = & $this->refs;
-                    $data[] = $parser->parse($this->getNextEmbedBlock(null, true), $exceptionOnInvalidType, $objectSupport);
+                    $data[] = $parser->parse($this->getNextEmbedBlock(null, true), $exceptionOnInvalidType, $objectSupport, $objectForMap);
                 } else {
                     if (isset($values['leadspaces'])
                         && ' ' == $values['leadspaces']
@@ -110,19 +111,19 @@ class Parser
                             $block .= "\n".$this->getNextEmbedBlock($this->getCurrentLineIndentation() + 2);
                         }
 
-                        $data[] = $parser->parse($block, $exceptionOnInvalidType, $objectSupport);
+                        $data[] = $parser->parse($block, $exceptionOnInvalidType, $objectSupport, $objectForMap);
                     } else {
-                        $data[] = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport);
+                        $data[] = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport, $objectForMap);
                     }
                 }
-            } elseif (preg_match('#^(?P<key>'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\[\{].*?) *\:(\s+(?P<value>.+?))?\s*$#u', $this->currentLine, $values) && (false === strpos($values['key'],' #') || in_array($values['key'][0], array('"', "'")))) {
+            } elseif (preg_match('#^(?P<key>'.Inline::REGEX_QUOTED_STRING.'|[^ \'"\[\{].*?) *\:(\s+(?P<value>.+?))?\s*$#u', $this->currentLine, $values) && (false === strpos($values['key'], ' #') || in_array($values['key'][0], array('"', "'")))) {
                 if ($context && 'sequence' == $context) {
                     throw new ParseException('You cannot define a mapping item when in a sequence');
                 }
                 $context = 'mapping';
 
                 // force correct settings
-                Inline::parse(null, $exceptionOnInvalidType, $objectSupport, $this->refs);
+                Inline::parse(null, $exceptionOnInvalidType, $objectSupport, $objectForMap, $this->refs);
                 try {
                     $key = Inline::parseScalar($values['key']);
                 } catch (ParseException $e) {
@@ -161,7 +162,7 @@ class Parser
                         $c = $this->getRealCurrentLineNb() + 1;
                         $parser = new Parser($c);
                         $parser->refs = & $this->refs;
-                        $parsed = $parser->parse($value, $exceptionOnInvalidType, $objectSupport);
+                        $parsed = $parser->parse($value, $exceptionOnInvalidType, $objectSupport, $objectForMap);
 
                         if (!is_array($parsed)) {
                             throw new ParseException('YAML merge keys used with a scalar value instead of an array.', $this->getRealCurrentLineNb() + 1, $this->currentLine);
@@ -212,7 +213,7 @@ class Parser
                         $c = $this->getRealCurrentLineNb() + 1;
                         $parser = new Parser($c);
                         $parser->refs = & $this->refs;
-                        $value = $parser->parse($this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport);
+                        $value = $parser->parse($this->getNextEmbedBlock(), $exceptionOnInvalidType, $objectSupport, $objectForMap);
                         // Spec: Keys MUST be unique; first one wins.
                         // But overwriting is allowed when a merge node is used in current block.
                         if ($allowOverwrite || !isset($data[$key])) {
@@ -220,7 +221,7 @@ class Parser
                         }
                     }
                 } else {
-                    $value = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport);
+                    $value = $this->parseValue($values['value'], $exceptionOnInvalidType, $objectSupport, $objectForMap);
                     // Spec: Keys MUST be unique; first one wins.
                     // But overwriting is allowed when a merge node is used in current block.
                     if ($allowOverwrite || !isset($data[$key])) {
@@ -228,11 +229,16 @@ class Parser
                     }
                 }
             } else {
+                // multiple documents are not supported
+                if ('---' === $this->currentLine) {
+                    throw new ParseException('Multiple documents are not supported.');
+                }
+
                 // 1-liner optionally followed by newline
                 $lineCount = count($this->lines);
                 if (1 === $lineCount || (2 === $lineCount && empty($this->lines[1]))) {
                     try {
-                        $value = Inline::parse($this->lines[0], $exceptionOnInvalidType, $objectSupport, $this->refs);
+                        $value = Inline::parse($this->lines[0], $exceptionOnInvalidType, $objectSupport, $objectForMap, $this->refs);
                     } catch (ParseException $e) {
                         $e->setParsedLine($this->getRealCurrentLineNb() + 1);
                         $e->setSnippet($this->currentLine);
@@ -296,7 +302,7 @@ class Parser
     /**
      * Returns the current line number (takes the offset into account).
      *
-     * @return int     The current line number
+     * @return int The current line number
      */
     private function getRealCurrentLineNb()
     {
@@ -306,7 +312,7 @@ class Parser
     /**
      * Returns the current line indentation.
      *
-     * @return int     The current line indentation
+     * @return int The current line indentation
      */
     private function getCurrentLineIndentation()
     {
@@ -421,15 +427,16 @@ class Parser
     /**
      * Parses a YAML value.
      *
-     * @param string  $value                  A YAML value
-     * @param bool    $exceptionOnInvalidType True if an exception must be thrown on invalid types false otherwise
-     * @param bool    $objectSupport          True if object support is enabled, false otherwise
+     * @param string $value                  A YAML value
+     * @param bool   $exceptionOnInvalidType True if an exception must be thrown on invalid types false otherwise
+     * @param bool   $objectSupport          True if object support is enabled, false otherwise
+     * @param bool   $objectForMap           true if maps should return a stdClass instead of array()
      *
-     * @return mixed  A PHP value
+     * @return mixed A PHP value
      *
      * @throws ParseException When reference does not exist
      */
-    private function parseValue($value, $exceptionOnInvalidType, $objectSupport)
+    private function parseValue($value, $exceptionOnInvalidType, $objectSupport, $objectForMap)
     {
         if (0 === strpos($value, '*')) {
             if (false !== $pos = strpos($value, '#')) {
@@ -452,7 +459,7 @@ class Parser
         }
 
         try {
-            return Inline::parse($value, $exceptionOnInvalidType, $objectSupport, $this->refs);
+            return Inline::parse($value, $exceptionOnInvalidType, $objectSupport, $objectForMap, $this->refs);
         } catch (ParseException $e) {
             $e->setParsedLine($this->getRealCurrentLineNb() + 1);
             $e->setSnippet($this->currentLine);
@@ -464,11 +471,11 @@ class Parser
     /**
      * Parses a folded scalar.
      *
-     * @param string  $separator   The separator that was used to begin this folded scalar (| or >)
-     * @param string  $indicator   The indicator that was used to begin this folded scalar (+ or -)
-     * @param int     $indentation The indentation that was used to begin this folded scalar
+     * @param string $separator   The separator that was used to begin this folded scalar (| or >)
+     * @param string $indicator   The indicator that was used to begin this folded scalar (+ or -)
+     * @param int    $indentation The indentation that was used to begin this folded scalar
      *
-     * @return string  The text value
+     * @return string The text value
      */
     private function parseFoldedScalar($separator, $indicator = '', $indentation = 0)
     {
@@ -545,7 +552,7 @@ class Parser
     /**
      * Returns true if the next line is indented.
      *
-     * @return bool    Returns true if the next line is indented, false otherwise
+     * @return bool Returns true if the next line is indented, false otherwise
      */
     private function isNextLineIndented()
     {
@@ -573,7 +580,7 @@ class Parser
     /**
      * Returns true if the current line is blank or if it is a comment line.
      *
-     * @return bool    Returns true if the current line is empty or if it is a comment line, false otherwise
+     * @return bool Returns true if the current line is empty or if it is a comment line, false otherwise
      */
     private function isCurrentLineEmpty()
     {
@@ -583,7 +590,7 @@ class Parser
     /**
      * Returns true if the current line is blank.
      *
-     * @return bool    Returns true if the current line is blank, false otherwise
+     * @return bool Returns true if the current line is blank, false otherwise
      */
     private function isCurrentLineBlank()
     {
@@ -593,7 +600,7 @@ class Parser
     /**
      * Returns true if the current line is a comment line.
      *
-     * @return bool    Returns true if the current line is a comment line, false otherwise
+     * @return bool Returns true if the current line is a comment line, false otherwise
      */
     private function isCurrentLineComment()
     {
@@ -644,7 +651,7 @@ class Parser
     /**
      * Returns true if the next line starts unindented collection
      *
-     * @return bool    Returns true if the next line starts unindented collection, false otherwise
+     * @return bool Returns true if the next line starts unindented collection, false otherwise
      */
     private function isNextLineUnIndentedCollection()
     {
@@ -676,7 +683,7 @@ class Parser
     /**
      * Returns true if the string is un-indented collection item
      *
-     * @return bool    Returns true if the string is un-indented collection item, false otherwise
+     * @return bool Returns true if the string is un-indented collection item, false otherwise
      */
     private function isStringUnIndentedCollectionItem()
     {
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/DumperTest.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/DumperTest.php
index 51e12d41f545843de87ec9bf0a7292480b009001..aa27c4abeb92e38d54d4d8409d9200b620d14850 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/DumperTest.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/DumperTest.php
@@ -96,8 +96,7 @@ EOF;
                     // TODO
                 } else {
                     eval('$expected = '.trim($test['php']).';');
-
-                    $this->assertEquals($expected, $this->parser->parse($this->dumper->dump($expected, 10)), $test['test']);
+                    $this->assertSame($expected, $this->parser->parse($this->dumper->dump($expected, 10)), $test['test']);
                 }
             }
         }
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsSpecificationExamples.yml b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsSpecificationExamples.yml
index 1e59f3bf9888429752819aff27ebd52735cb714d..0a8b5defd038b4db30019e6e7bfea16651813b78 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsSpecificationExamples.yml
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/Fixtures/YtsSpecificationExamples.yml
@@ -463,9 +463,9 @@ yaml: |
      0.278 Batting Average
 php: |
   array(
-    'name'           => 'Mark McGwire',
+    'name' => 'Mark McGwire',
     'accomplishment' => "Mark set a major league home run record in 1998.\n",
-    'stats'          => "65 Home Runs\n0.278 Batting Average\n"
+    'stats' => "65 Home Runs\n0.278 Batting Average\n"
   )
 ---
 test: Quoted scalars
@@ -529,6 +529,7 @@ yaml: |
   fixed: 1,230.15
   negative infinity: -.inf
   not a number: .NaN
+  float as whole number: !!float 1
 php: |
   array(
     'canonical' => 1230.15,
@@ -536,6 +537,7 @@ php: |
     'fixed' => 1230.15,
     'negative infinity' => log(0),
     'not a number' => -log(0),
+    'float as whole number' => (float) 1
   )
 ---
 test: Miscellaneous
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/InlineTest.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/InlineTest.php
index 96afb6bb2256f1ff57b7c19b7fc74452540b6b1c..7f1876d7a951f42e4ca81bd9036d61df1e2ff70e 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/InlineTest.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/InlineTest.php
@@ -15,28 +15,32 @@ use Symfony\Component\Yaml\Inline;
 
 class InlineTest extends \PHPUnit_Framework_TestCase
 {
-    public function testParse()
+    /**
+     * @dataProvider getTestsForParse
+     */
+    public function testParse($yaml, $value)
     {
-        foreach ($this->getTestsForParse() as $yaml => $value) {
-            $this->assertSame($value, Inline::parse($yaml), sprintf('::parse() converts an inline YAML to a PHP structure (%s)', $yaml));
-        }
+        $this->assertSame($value, Inline::parse($yaml), sprintf('::parse() converts an inline YAML to a PHP structure (%s)', $yaml));
     }
 
-    public function testDump()
+    /**
+     * @dataProvider getTestsForParseWithMapObjects
+     */
+    public function testParseWithMapObjects($yaml, $value)
     {
-        $testsForDump = $this->getTestsForDump();
+        $actual = Inline::parse($yaml, false, false, true);
 
-        foreach ($testsForDump as $yaml => $value) {
-            $this->assertEquals($yaml, Inline::dump($value), sprintf('::dump() converts a PHP structure to an inline YAML (%s)', $yaml));
-        }
+        $this->assertSame(serialize($value), serialize($actual));
+    }
 
-        foreach ($this->getTestsForParse() as $value) {
-            $this->assertEquals($value, Inline::parse(Inline::dump($value)), 'check consistency');
-        }
+    /**
+     * @dataProvider getTestsForDump
+     */
+    public function testDump($yaml, $value)
+    {
+        $this->assertEquals($yaml, Inline::dump($value), sprintf('::dump() converts a PHP structure to an inline YAML (%s)', $yaml));
 
-        foreach ($testsForDump as $value) {
-            $this->assertEquals($value, Inline::parse(Inline::dump($value)), 'check consistency');
-        }
+        $this->assertSame($value, Inline::parse(Inline::dump($value)), 'check consistency');
     }
 
     public function testDumpNumericValueWithLocale()
@@ -120,7 +124,7 @@ class InlineTest extends \PHPUnit_Framework_TestCase
      */
     public function testParseReferences($yaml, $expected)
     {
-        $this->assertSame($expected, Inline::parse($yaml, false, false, array('var' => 'var-value')));
+        $this->assertSame($expected, Inline::parse($yaml, false, false, false, array('var' => 'var-value')));
     }
 
     public function getDataForParseReferences()
@@ -144,7 +148,7 @@ class InlineTest extends \PHPUnit_Framework_TestCase
             'b' => 'Clark',
             'c' => 'Brian',
         );
-        $this->assertSame(array($foo), Inline::parse('[*foo]', false, false, array('foo' => $foo)));
+        $this->assertSame(array($foo), Inline::parse('[*foo]', false, false, false, array('foo' => $foo)));
     }
 
     /**
@@ -165,117 +169,196 @@ class InlineTest extends \PHPUnit_Framework_TestCase
         Inline::parse('{ foo: * #foo }');
     }
 
-    protected function getTestsForParse()
+    public function getTestsForParse()
     {
         return array(
-            '' => '',
-            'null' => null,
-            'false' => false,
-            'true' => true,
-            '12' => 12,
-            '-12' => -12,
-            '"quoted string"' => 'quoted string',
-            "'quoted string'" => 'quoted string',
-            '12.30e+02' => 12.30e+02,
-            '0x4D2' => 0x4D2,
-            '02333' => 02333,
-            '.Inf' => -log(0),
-            '-.Inf' => log(0),
-            "'686e444'" => '686e444',
-            '686e444' => 646e444,
-            '123456789123456789123456789123456789' => '123456789123456789123456789123456789',
-            '"foo\r\nbar"' => "foo\r\nbar",
-            "'foo#bar'" => 'foo#bar',
-            "'foo # bar'" => 'foo # bar',
-            "'#cfcfcf'" => '#cfcfcf',
-            '::form_base.html.twig' => '::form_base.html.twig',
-
-            '2007-10-30' => mktime(0, 0, 0, 10, 30, 2007),
-            '2007-10-30T02:59:43Z' => gmmktime(2, 59, 43, 10, 30, 2007),
-            '2007-10-30 02:59:43 Z' => gmmktime(2, 59, 43, 10, 30, 2007),
-            '1960-10-30 02:59:43 Z' => gmmktime(2, 59, 43, 10, 30, 1960),
-            '1730-10-30T02:59:43Z' => gmmktime(2, 59, 43, 10, 30, 1730),
-
-            '"a \\"string\\" with \'quoted strings inside\'"' => 'a "string" with \'quoted strings inside\'',
-            "'a \"string\" with ''quoted strings inside'''" => 'a "string" with \'quoted strings inside\'',
+            array('', ''),
+            array('null', null),
+            array('false', false),
+            array('true', true),
+            array('12', 12),
+            array('-12', -12),
+            array('"quoted string"', 'quoted string'),
+            array("'quoted string'", 'quoted string'),
+            array('12.30e+02', 12.30e+02),
+            array('0x4D2', 0x4D2),
+            array('02333', 02333),
+            array('.Inf', -log(0)),
+            array('-.Inf', log(0)),
+            array("'686e444'", '686e444'),
+            array('686e444', 646e444),
+            array('123456789123456789123456789123456789', '123456789123456789123456789123456789'),
+            array('"foo\r\nbar"', "foo\r\nbar"),
+            array("'foo#bar'", 'foo#bar'),
+            array("'foo # bar'", 'foo # bar'),
+            array("'#cfcfcf'", '#cfcfcf'),
+            array('::form_base.html.twig', '::form_base.html.twig'),
+
+            array('2007-10-30', mktime(0, 0, 0, 10, 30, 2007)),
+            array('2007-10-30T02:59:43Z', gmmktime(2, 59, 43, 10, 30, 2007)),
+            array('2007-10-30 02:59:43 Z', gmmktime(2, 59, 43, 10, 30, 2007)),
+            array('1960-10-30 02:59:43 Z', gmmktime(2, 59, 43, 10, 30, 1960)),
+            array('1730-10-30T02:59:43Z', gmmktime(2, 59, 43, 10, 30, 1730)),
+
+            array('"a \\"string\\" with \'quoted strings inside\'"', 'a "string" with \'quoted strings inside\''),
+            array("'a \"string\" with ''quoted strings inside'''", 'a "string" with \'quoted strings inside\''),
 
             // sequences
             // urls are no key value mapping. see #3609. Valid yaml "key: value" mappings require a space after the colon
-            '[foo, http://urls.are/no/mappings, false, null, 12]' => array('foo', 'http://urls.are/no/mappings', false, null, 12),
-            '[  foo  ,   bar , false  ,  null     ,  12  ]' => array('foo', 'bar', false, null, 12),
-            '[\'foo,bar\', \'foo bar\']' => array('foo,bar', 'foo bar'),
+            array('[foo, http://urls.are/no/mappings, false, null, 12]', array('foo', 'http://urls.are/no/mappings', false, null, 12)),
+            array('[  foo  ,   bar , false  ,  null     ,  12  ]', array('foo', 'bar', false, null, 12)),
+            array('[\'foo,bar\', \'foo bar\']', array('foo,bar', 'foo bar')),
 
             // mappings
-            '{foo:bar,bar:foo,false:false,null:null,integer:12}' => array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12),
-            '{ foo  : bar, bar : foo,  false  :   false,  null  :   null,  integer :  12  }' => array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12),
-            '{foo: \'bar\', bar: \'foo: bar\'}' => array('foo' => 'bar', 'bar' => 'foo: bar'),
-            '{\'foo\': \'bar\', "bar": \'foo: bar\'}' => array('foo' => 'bar', 'bar' => 'foo: bar'),
-            '{\'foo\'\'\': \'bar\', "bar\"": \'foo: bar\'}' => array('foo\'' => 'bar', "bar\"" => 'foo: bar'),
-            '{\'foo: \': \'bar\', "bar: ": \'foo: bar\'}' => array('foo: ' => 'bar', "bar: " => 'foo: bar'),
+            array('{foo:bar,bar:foo,false:false,null:null,integer:12}', array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12)),
+            array('{ foo  : bar, bar : foo,  false  :   false,  null  :   null,  integer :  12  }', array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12)),
+            array('{foo: \'bar\', bar: \'foo: bar\'}', array('foo' => 'bar', 'bar' => 'foo: bar')),
+            array('{\'foo\': \'bar\', "bar": \'foo: bar\'}', array('foo' => 'bar', 'bar' => 'foo: bar')),
+            array('{\'foo\'\'\': \'bar\', "bar\"": \'foo: bar\'}', array('foo\'' => 'bar', "bar\"" => 'foo: bar')),
+            array('{\'foo: \': \'bar\', "bar: ": \'foo: bar\'}', array('foo: ' => 'bar', "bar: " => 'foo: bar')),
 
             // nested sequences and mappings
-            '[foo, [bar, foo]]' => array('foo', array('bar', 'foo')),
-            '[foo, {bar: foo}]' => array('foo', array('bar' => 'foo')),
-            '{ foo: {bar: foo} }' => array('foo' => array('bar' => 'foo')),
-            '{ foo: [bar, foo] }' => array('foo' => array('bar', 'foo')),
+            array('[foo, [bar, foo]]', array('foo', array('bar', 'foo'))),
+            array('[foo, {bar: foo}]', array('foo', array('bar' => 'foo'))),
+            array('{ foo: {bar: foo} }', array('foo' => array('bar' => 'foo'))),
+            array('{ foo: [bar, foo] }', array('foo' => array('bar', 'foo'))),
+
+            array('[  foo, [  bar, foo  ]  ]', array('foo', array('bar', 'foo'))),
+
+            array('[{ foo: {bar: foo} }]', array(array('foo' => array('bar' => 'foo')))),
+
+            array('[foo, [bar, [foo, [bar, foo]], foo]]', array('foo', array('bar', array('foo', array('bar', 'foo')), 'foo'))),
+
+            array('[foo, {bar: foo, foo: [foo, {bar: foo}]}, [foo, {bar: foo}]]', array('foo', array('bar' => 'foo', 'foo' => array('foo', array('bar' => 'foo'))), array('foo', array('bar' => 'foo')))),
+
+            array('[foo, bar: { foo: bar }]', array('foo', '1' => array('bar' => array('foo' => 'bar')))),
+            array('[foo, \'@foo.baz\', { \'%foo%\': \'foo is %foo%\', bar: \'%foo%\' }, true, \'@service_container\']', array('foo', '@foo.baz', array('%foo%' => 'foo is %foo%', 'bar' => '%foo%'), true, '@service_container')),
+        );
+    }
+
+    public function getTestsForParseWithMapObjects()
+    {
+        return array(
+            array('', ''),
+            array('null', null),
+            array('false', false),
+            array('true', true),
+            array('12', 12),
+            array('-12', -12),
+            array('"quoted string"', 'quoted string'),
+            array("'quoted string'", 'quoted string'),
+            array('12.30e+02', 12.30e+02),
+            array('0x4D2', 0x4D2),
+            array('02333', 02333),
+            array('.Inf', -log(0)),
+            array('-.Inf', log(0)),
+            array("'686e444'", '686e444'),
+            array('686e444', 646e444),
+            array('123456789123456789123456789123456789', '123456789123456789123456789123456789'),
+            array('"foo\r\nbar"', "foo\r\nbar"),
+            array("'foo#bar'", 'foo#bar'),
+            array("'foo # bar'", 'foo # bar'),
+            array("'#cfcfcf'", '#cfcfcf'),
+            array('::form_base.html.twig', '::form_base.html.twig'),
+
+            array('2007-10-30', mktime(0, 0, 0, 10, 30, 2007)),
+            array('2007-10-30T02:59:43Z', gmmktime(2, 59, 43, 10, 30, 2007)),
+            array('2007-10-30 02:59:43 Z', gmmktime(2, 59, 43, 10, 30, 2007)),
+            array('1960-10-30 02:59:43 Z', gmmktime(2, 59, 43, 10, 30, 1960)),
+            array('1730-10-30T02:59:43Z', gmmktime(2, 59, 43, 10, 30, 1730)),
+
+            array('"a \\"string\\" with \'quoted strings inside\'"', 'a "string" with \'quoted strings inside\''),
+            array("'a \"string\" with ''quoted strings inside'''", 'a "string" with \'quoted strings inside\''),
+
+            // sequences
+            // urls are no key value mapping. see #3609. Valid yaml "key: value" mappings require a space after the colon
+            array('[foo, http://urls.are/no/mappings, false, null, 12]', array('foo', 'http://urls.are/no/mappings', false, null, 12)),
+            array('[  foo  ,   bar , false  ,  null     ,  12  ]', array('foo', 'bar', false, null, 12)),
+            array('[\'foo,bar\', \'foo bar\']', array('foo,bar', 'foo bar')),
+
+            // mappings
+            array('{foo:bar,bar:foo,false:false,null:null,integer:12}', (object) array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12)),
+            array('{ foo  : bar, bar : foo,  false  :   false,  null  :   null,  integer :  12  }', (object) array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12)),
+            array('{foo: \'bar\', bar: \'foo: bar\'}', (object) array('foo' => 'bar', 'bar' => 'foo: bar')),
+            array('{\'foo\': \'bar\', "bar": \'foo: bar\'}', (object) array('foo' => 'bar', 'bar' => 'foo: bar')),
+            array('{\'foo\'\'\': \'bar\', "bar\"": \'foo: bar\'}', (object) array('foo\'' => 'bar', "bar\"" => 'foo: bar')),
+            array('{\'foo: \': \'bar\', "bar: ": \'foo: bar\'}', (object) array('foo: ' => 'bar', "bar: " => 'foo: bar')),
+
+            // nested sequences and mappings
+            array('[foo, [bar, foo]]', array('foo', array('bar', 'foo'))),
+            array('[foo, {bar: foo}]', array('foo', (object) array('bar' => 'foo'))),
+            array('{ foo: {bar: foo} }', (object) array('foo' => (object) array('bar' => 'foo'))),
+            array('{ foo: [bar, foo] }', (object) array('foo' => array('bar', 'foo'))),
+
+            array('[  foo, [  bar, foo  ]  ]', array('foo', array('bar', 'foo'))),
+
+            array('[{ foo: {bar: foo} }]', array((object) array('foo' => (object) array('bar' => 'foo')))),
 
-            '[  foo, [  bar, foo  ]  ]' => array('foo', array('bar', 'foo')),
+            array('[foo, [bar, [foo, [bar, foo]], foo]]', array('foo', array('bar', array('foo', array('bar', 'foo')), 'foo'))),
 
-            '[{ foo: {bar: foo} }]' => array(array('foo' => array('bar' => 'foo'))),
+            array('[foo, {bar: foo, foo: [foo, {bar: foo}]}, [foo, {bar: foo}]]', array('foo', (object) array('bar' => 'foo', 'foo' => array('foo', (object) array('bar' => 'foo'))), array('foo', (object) array('bar' => 'foo')))),
 
-            '[foo, [bar, [foo, [bar, foo]], foo]]' => array('foo', array('bar', array('foo', array('bar', 'foo')), 'foo')),
+            array('[foo, bar: { foo: bar }]', array('foo', '1' => (object) array('bar' => (object) array('foo' => 'bar')))),
+            array('[foo, \'@foo.baz\', { \'%foo%\': \'foo is %foo%\', bar: \'%foo%\' }, true, \'@service_container\']', array('foo', '@foo.baz', (object) array('%foo%' => 'foo is %foo%', 'bar' => '%foo%'), true, '@service_container')),
 
-            '[foo, {bar: foo, foo: [foo, {bar: foo}]}, [foo, {bar: foo}]]' => array('foo', array('bar' => 'foo', 'foo' => array('foo', array('bar' => 'foo'))), array('foo', array('bar' => 'foo'))),
+            array('{}', new \stdClass()),
+            array('{ foo  : bar, bar : {}  }', (object) array('foo' => 'bar', 'bar' => new \stdClass())),
+            array('{ foo  : [], bar : {}  }', (object) array('foo' => array(), 'bar' => new \stdClass())),
+            array('{foo: \'bar\', bar: {} }', (object) array('foo' => 'bar', 'bar' => new \stdClass())),
+            array('{\'foo\': \'bar\', "bar": {}}', (object) array('foo' => 'bar', 'bar' => new \stdClass())),
+            array('{\'foo\': \'bar\', "bar": \'{}\'}', (object) array('foo' => 'bar', 'bar' => '{}')),
 
-            '[foo, bar: { foo: bar }]' => array('foo', '1' => array('bar' => array('foo' => 'bar'))),
-            '[foo, \'@foo.baz\', { \'%foo%\': \'foo is %foo%\', bar: \'%foo%\' }, true, \'@service_container\']' => array('foo', '@foo.baz', array('%foo%' => 'foo is %foo%', 'bar' => '%foo%'), true, '@service_container'),
+            array('[foo, [{}, {}]]', array('foo', array(new \stdClass(), new \stdClass()))),
+            array('[foo, [[], {}]]', array('foo', array(array(), new \stdClass()))),
+            array('[foo, [[{}, {}], {}]]', array('foo', array(array(new \stdClass(), new \stdClass()), new \stdClass()))),
+            array('[foo, {bar: {}}]', array('foo', '1' => (object) array('bar' => new \stdClass()))),
         );
     }
 
-    protected function getTestsForDump()
+    public function getTestsForDump()
     {
         return array(
-            'null' => null,
-            'false' => false,
-            'true' => true,
-            '12' => 12,
-            "'quoted string'" => 'quoted string',
-            '12.30e+02' => 12.30e+02,
-            '1234' => 0x4D2,
-            '1243' => 02333,
-            '.Inf' => -log(0),
-            '-.Inf' => log(0),
-            "'686e444'" => '686e444',
-            '"foo\r\nbar"' => "foo\r\nbar",
-            "'foo#bar'" => 'foo#bar',
-            "'foo # bar'" => 'foo # bar',
-            "'#cfcfcf'" => '#cfcfcf',
-
-            "'a \"string\" with ''quoted strings inside'''" => 'a "string" with \'quoted strings inside\'',
-
-            "'-dash'" => '-dash',
-            "'-'" => '-',
+            array('null', null),
+            array('false', false),
+            array('true', true),
+            array('12', 12),
+            array("'quoted string'", 'quoted string'),
+            array('!!float 1230', 12.30e+02),
+            array('1234', 0x4D2),
+            array('1243', 02333),
+            array('.Inf', -log(0)),
+            array('-.Inf', log(0)),
+            array("'686e444'", '686e444'),
+            array('"foo\r\nbar"', "foo\r\nbar"),
+            array("'foo#bar'", 'foo#bar'),
+            array("'foo # bar'", 'foo # bar'),
+            array("'#cfcfcf'", '#cfcfcf'),
+
+            array("'a \"string\" with ''quoted strings inside'''", 'a "string" with \'quoted strings inside\''),
+
+            array("'-dash'", '-dash'),
+            array("'-'", '-'),
 
             // sequences
-            '[foo, bar, false, null, 12]' => array('foo', 'bar', false, null, 12),
-            '[\'foo,bar\', \'foo bar\']' => array('foo,bar', 'foo bar'),
+            array('[foo, bar, false, null, 12]', array('foo', 'bar', false, null, 12)),
+            array('[\'foo,bar\', \'foo bar\']', array('foo,bar', 'foo bar')),
 
             // mappings
-            '{ foo: bar, bar: foo, \'false\': false, \'null\': null, integer: 12 }' => array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12),
-            '{ foo: bar, bar: \'foo: bar\' }' => array('foo' => 'bar', 'bar' => 'foo: bar'),
+            array('{ foo: bar, bar: foo, \'false\': false, \'null\': null, integer: 12 }', array('foo' => 'bar', 'bar' => 'foo', 'false' => false, 'null' => null, 'integer' => 12)),
+            array('{ foo: bar, bar: \'foo: bar\' }', array('foo' => 'bar', 'bar' => 'foo: bar')),
 
             // nested sequences and mappings
-            '[foo, [bar, foo]]' => array('foo', array('bar', 'foo')),
+            array('[foo, [bar, foo]]', array('foo', array('bar', 'foo'))),
 
-            '[foo, [bar, [foo, [bar, foo]], foo]]' => array('foo', array('bar', array('foo', array('bar', 'foo')), 'foo')),
+            array('[foo, [bar, [foo, [bar, foo]], foo]]', array('foo', array('bar', array('foo', array('bar', 'foo')), 'foo'))),
 
-            '{ foo: { bar: foo } }' => array('foo' => array('bar' => 'foo')),
+            array('{ foo: { bar: foo } }', array('foo' => array('bar' => 'foo'))),
 
-            '[foo, { bar: foo }]' => array('foo', array('bar' => 'foo')),
+            array('[foo, { bar: foo }]', array('foo', array('bar' => 'foo'))),
 
-            '[foo, { bar: foo, foo: [foo, { bar: foo }] }, [foo, { bar: foo }]]' => array('foo', array('bar' => 'foo', 'foo' => array('foo', array('bar' => 'foo'))), array('foo', array('bar' => 'foo'))),
+            array('[foo, { bar: foo, foo: [foo, { bar: foo }] }, [foo, { bar: foo }]]', array('foo', array('bar' => 'foo', 'foo' => array('foo', array('bar' => 'foo'))), array('foo', array('bar' => 'foo')))),
 
-            '[foo, \'@foo.baz\', { \'%foo%\': \'foo is %foo%\', bar: \'%foo%\' }, true, \'@service_container\']' => array('foo', '@foo.baz', array('%foo%' => 'foo is %foo%', 'bar' => '%foo%'), true, '@service_container'),
+            array('[foo, \'@foo.baz\', { \'%foo%\': \'foo is %foo%\', bar: \'%foo%\' }, true, \'@service_container\']', array('foo', '@foo.baz', array('%foo%' => 'foo is %foo%', 'bar' => '%foo%'), true, '@service_container')),
         );
     }
 }
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParseExceptionTest.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParseExceptionTest.php
index 289965e8d967ef038562e96a458a64ea9d4e1cd7..8c2b1a49a93f3b374796161b7fd259c285729897 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParseExceptionTest.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParseExceptionTest.php
@@ -19,7 +19,7 @@ class ParseExceptionTest extends \PHPUnit_Framework_TestCase
     public function testGetMessage()
     {
         $exception = new ParseException('Error message', 42, 'foo: bar', '/var/www/app/config.yml');
-        if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
+        if (PHP_VERSION_ID >= 50400) {
             $message = 'Error message in "/var/www/app/config.yml" at line 42 (near "foo: bar")';
         } else {
             $message = 'Error message in "\\/var\\/www\\/app\\/config.yml" at line 42 (near "foo: bar")';
@@ -27,4 +27,16 @@ class ParseExceptionTest extends \PHPUnit_Framework_TestCase
 
         $this->assertEquals($message, $exception->getMessage());
     }
+
+    public function testGetMessageWithUnicodeInFilename()
+    {
+        $exception = new ParseException('Error message', 42, 'foo: bar', 'äöü.yml');
+        if (PHP_VERSION_ID >= 50400) {
+            $message = 'Error message in "äöü.yml" at line 42 (near "foo: bar")';
+        } else {
+            $message = 'Error message in "\u00e4\u00f6\u00fc.yml" at line 42 (near "foo: bar")';
+        }
+
+        $this->assertEquals($message, $exception->getMessage());
+    }
 }
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php
index da248d7dec0dfd33252c8e858983df520f1dcc32..7f16d925e44022d98da57e3021619cc714aa52b4 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Tests/ParserTest.php
@@ -482,6 +482,27 @@ EOF;
         $this->parser->parse($yaml);
     }
 
+    /**
+     * @expectedException \Symfony\Component\Yaml\Exception\ParseException
+     * @expectedExceptionMessage Multiple documents are not supported.
+     */
+    public function testMultipleDocumentsNotSupportedException()
+    {
+        Yaml::parse(<<<EOL
+# Ranking of 1998 home runs
+---
+- Mark McGwire
+- Sammy Sosa
+- Ken Griffey
+
+# Team ranking
+---
+- Chicago Cubs
+- St Louis Cardinals
+EOL
+        );
+    }
+
     /**
      * @expectedException \Symfony\Component\Yaml\Exception\ParseException
      */
@@ -624,7 +645,7 @@ EOF
     public function testNestedFoldedStringBlockWithComments()
     {
         $this->assertEquals(array(array(
-            'title'   => 'some title',
+            'title' => 'some title',
             'content' => <<<EOT
 # comment 1
 header
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/Yaml.php b/vendor/symfony/yaml/Symfony/Component/Yaml/Yaml.php
index 61793fb3ae473dd843cdabfe72377bfae6536e5c..419226a2dd8a27d9f2049523f62a9c4912d558dc 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/Yaml.php
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/Yaml.php
@@ -38,9 +38,9 @@ class Yaml
      * you must validate the input before calling this method. Passing a file
      * as an input is a deprecated feature and will be removed in 3.0.
      *
-     * @param string  $input                  Path to a YAML file or a string containing YAML
-     * @param bool    $exceptionOnInvalidType True if an exception must be thrown on invalid types false otherwise
-     * @param bool    $objectSupport          True if object support is enabled, false otherwise
+     * @param string $input                  Path to a YAML file or a string containing YAML
+     * @param bool   $exceptionOnInvalidType True if an exception must be thrown on invalid types false otherwise
+     * @param bool   $objectSupport          True if object support is enabled, false otherwise
      *
      * @return array The YAML converted to a PHP array
      *
@@ -80,11 +80,11 @@ class Yaml
      * The dump method, when supplied with an array, will do its best
      * to convert the array into friendly YAML.
      *
-     * @param array   $array                  PHP array
-     * @param int     $inline                 The level where you switch to inline YAML
-     * @param int     $indent                 The amount of spaces to use for indentation of nested nodes.
-     * @param bool    $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
-     * @param bool    $objectSupport          true if object support is enabled, false otherwise
+     * @param array $array                  PHP array
+     * @param int   $inline                 The level where you switch to inline YAML
+     * @param int   $indent                 The amount of spaces to use for indentation of nested nodes.
+     * @param bool  $exceptionOnInvalidType true if an exception must be thrown on invalid types (a PHP resource or object), false otherwise
+     * @param bool  $objectSupport          true if object support is enabled, false otherwise
      *
      * @return string A YAML string representing the original PHP array
      *
diff --git a/vendor/symfony/yaml/Symfony/Component/Yaml/composer.json b/vendor/symfony/yaml/Symfony/Component/Yaml/composer.json
index ceabb0c132ec8e49c270f8da65a8a2a6030e5c02..2b2d961b7b357f0af709fa468070091ed3386bc7 100644
--- a/vendor/symfony/yaml/Symfony/Component/Yaml/composer.json
+++ b/vendor/symfony/yaml/Symfony/Component/Yaml/composer.json
@@ -25,7 +25,7 @@
     "minimum-stability": "dev",
     "extra": {
         "branch-alias": {
-            "dev-master": "2.5-dev"
+            "dev-master": "2.6-dev"
         }
     }
 }